mirror of
https://github.com/MengMengCode/CLICD.git
synced 2026-08-05 05:36:07 +08:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bb8a646de7 |
@@ -37,53 +37,18 @@ CLICD 是一个面向 LXC 的轻量容器管理面板,提供 Web 控制台、C
|
||||
|
||||
## 安装
|
||||
|
||||
推荐使用最新 Release 一键安装。在目标服务器上执行:
|
||||
一键安装:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MengMengCode/CLICD/main/install.sh | sudo sh
|
||||
```
|
||||
|
||||
也可以下载 GitHub Actions 构建出的 Release 产物 `clicd-linux-amd64.tar.gz` 后手动安装:
|
||||
|
||||
```bash
|
||||
tar -xzf clicd-linux-amd64.tar.gz
|
||||
cd clicd-linux-amd64
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
安装完成后访问:
|
||||
|
||||
```text
|
||||
http://YOUR_SERVER_IP:8999
|
||||
```
|
||||
|
||||
首次启动时会自动初始化管理员账号:
|
||||
|
||||
```text
|
||||
Username: admin
|
||||
Password: 随机 16 位密码
|
||||
```
|
||||
|
||||
安装脚本会尝试从 systemd 日志中输出初始账号密码。如果机器上已经存在 `/root/.clicd/config.json`,则不会重新生成密码。
|
||||
|
||||
查看初始密码日志:
|
||||
|
||||
```bash
|
||||
journalctl -u clicd --no-pager -n 80 | grep -E "Username:|Password:"
|
||||
```
|
||||
|
||||
卸载 CLICD:
|
||||
一键卸载:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MengMengCode/CLICD/main/install.sh | sudo sh -s -- uninstall
|
||||
```
|
||||
|
||||
默认只删除 CLICD 服务和 `/usr/local/bin/clicd`,保留 `/root/.clicd` 配置数据和 `/var/lib/lxc` 容器。需要同时删除配置数据时:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/MengMengCode/CLICD/main/install.sh | sudo sh -s -- uninstall --purge-data
|
||||
```
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
+17
-26
@@ -354,7 +354,7 @@ func cliImportExistingContainers() {
|
||||
func cliUninstall(reader *bufio.Reader) {
|
||||
fmt.Println("\n--- Uninstall CLICD ---")
|
||||
fmt.Println("This removes the CLICD service and /usr/local/bin/clicd.")
|
||||
fmt.Println("LXC containers and /root/.clicd are kept unless you explicitly choose to delete them.")
|
||||
fmt.Println("This also deletes /root/.clicd, all LXC containers under /var/lib/lxc, and LXC image cache under /var/cache/lxc.")
|
||||
|
||||
if os.Geteuid() != 0 {
|
||||
fmt.Println("Uninstall must be run as root.")
|
||||
@@ -368,47 +368,38 @@ func cliUninstall(reader *bufio.Reader) {
|
||||
return
|
||||
}
|
||||
|
||||
removeData := strings.ToLower(promptString(reader, "Delete /root/.clicd config/data? Type delete-data", "no")) == "delete-data"
|
||||
removeContainers := strings.ToLower(promptString(reader, "Destroy CLICD-managed LXC containers? Type delete-containers", "no")) == "delete-containers"
|
||||
|
||||
if removeContainers {
|
||||
destroyManagedContainers()
|
||||
}
|
||||
|
||||
destroyAllLXCContainers()
|
||||
stopAndRemoveService()
|
||||
removePath("/usr/local/bin/clicd")
|
||||
removePath("/etc/sysctl.d/99-clicd.conf")
|
||||
removePath("/var/log/clicd.log")
|
||||
removePath("/var/log/clicd.err")
|
||||
|
||||
if removeData {
|
||||
removePath("/root/.clicd")
|
||||
}
|
||||
removePath("/root/.clicd")
|
||||
removePath("/var/lib/lxc")
|
||||
removePath("/var/cache/lxc")
|
||||
|
||||
reloadSysctl()
|
||||
|
||||
fmt.Println()
|
||||
fmt.Println("CLICD has been uninstalled.")
|
||||
if !removeData {
|
||||
fmt.Println("Kept data: /root/.clicd")
|
||||
}
|
||||
if !removeContainers {
|
||||
fmt.Println("Kept LXC containers under /var/lib/lxc")
|
||||
}
|
||||
fmt.Println("Removed service, binary, config, containers, and LXC image cache.")
|
||||
}
|
||||
|
||||
func destroyManagedContainers() {
|
||||
containers := append([]config.Container(nil), config.AppConfig.Containers...)
|
||||
if len(containers) == 0 {
|
||||
fmt.Println("No CLICD-managed containers found in config.")
|
||||
func destroyAllLXCContainers() {
|
||||
entries, err := os.ReadDir("/var/lib/lxc")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, c := range containers {
|
||||
fmt.Printf("Destroying container %s...\n", c.Name)
|
||||
if err := manager.DestroyContainer(c.ID); err != nil {
|
||||
fmt.Printf("Failed to destroy %s: %v\n", c.Name, err)
|
||||
for _, entry := range entries {
|
||||
if !entry.IsDir() {
|
||||
continue
|
||||
}
|
||||
name := entry.Name()
|
||||
fmt.Printf("Destroying LXC container %s...\n", name)
|
||||
runQuiet("lxc-stop", "-n", name, "-k")
|
||||
runQuiet("lxc-destroy", "-n", name, "-f")
|
||||
removePath("/var/lib/lxc/" + name)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+16
-45
@@ -50,7 +50,7 @@ usage() {
|
||||
cat << EOF
|
||||
Usage:
|
||||
./install.sh
|
||||
./install.sh uninstall [--purge-data] [--delete-containers]
|
||||
./install.sh uninstall
|
||||
|
||||
Environment:
|
||||
CLICD_REPO=owner/repo
|
||||
@@ -72,29 +72,6 @@ remove_path() {
|
||||
}
|
||||
|
||||
uninstall_clicd() {
|
||||
purge_data=0
|
||||
delete_containers=0
|
||||
|
||||
shift || true
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
--purge-data)
|
||||
purge_data=1
|
||||
;;
|
||||
--delete-containers)
|
||||
delete_containers=1
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
die "Unknown uninstall option: $1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
log "Uninstalling CLICD..."
|
||||
|
||||
if has_cmd systemctl; then
|
||||
@@ -109,16 +86,18 @@ uninstall_clicd() {
|
||||
rc-update del clicd default >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
if [ "$delete_containers" -eq 1 ]; then
|
||||
log "Destroying CLICD-style LXC containers named ct-*..."
|
||||
for container_dir in /var/lib/lxc/ct-*; do
|
||||
[ -d "$container_dir" ] || continue
|
||||
container_name="$(basename "$container_dir")"
|
||||
log "Destroying LXC containers under /var/lib/lxc..."
|
||||
for container_dir in /var/lib/lxc/*; do
|
||||
[ -d "$container_dir" ] || continue
|
||||
container_name="$(basename "$container_dir")"
|
||||
if has_cmd lxc-stop; then
|
||||
lxc-stop -n "$container_name" -k >/dev/null 2>&1 || true
|
||||
fi
|
||||
if has_cmd lxc-destroy; then
|
||||
lxc-destroy -n "$container_name" -f >/dev/null 2>&1 || true
|
||||
remove_path "$container_dir"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
remove_path "$container_dir"
|
||||
done
|
||||
|
||||
remove_path /etc/systemd/system/clicd.service
|
||||
remove_path /etc/init.d/clicd
|
||||
@@ -126,10 +105,9 @@ uninstall_clicd() {
|
||||
remove_path /etc/sysctl.d/99-clicd.conf
|
||||
remove_path /var/log/clicd.log
|
||||
remove_path /var/log/clicd.err
|
||||
|
||||
if [ "$purge_data" -eq 1 ]; then
|
||||
remove_path /root/.clicd
|
||||
fi
|
||||
remove_path /root/.clicd
|
||||
remove_path /var/lib/lxc
|
||||
remove_path /var/cache/lxc
|
||||
|
||||
if has_cmd systemctl; then
|
||||
systemctl daemon-reload >/dev/null 2>&1 || true
|
||||
@@ -143,14 +121,7 @@ uninstall_clicd() {
|
||||
echo "====================================="
|
||||
echo " CLICD Uninstalled"
|
||||
echo "====================================="
|
||||
if [ "$purge_data" -eq 0 ]; then
|
||||
echo " Kept data: /root/.clicd"
|
||||
fi
|
||||
if [ "$delete_containers" -eq 0 ]; then
|
||||
echo " Kept LXC containers: /var/lib/lxc"
|
||||
echo " To delete CLICD-style ct-* containers too:"
|
||||
echo " ./install.sh uninstall --delete-containers"
|
||||
fi
|
||||
echo " Removed service, binary, config, containers, and LXC image cache."
|
||||
echo "====================================="
|
||||
}
|
||||
|
||||
@@ -158,7 +129,7 @@ case "$ACTION" in
|
||||
install|"")
|
||||
;;
|
||||
uninstall|remove)
|
||||
uninstall_clicd "$@"
|
||||
uninstall_clicd
|
||||
exit 0
|
||||
;;
|
||||
-h|--help|help)
|
||||
|
||||
Reference in New Issue
Block a user