添加安装部署脚本

This commit is contained in:
admin
2026-05-11 10:41:36 +08:00
parent eae665d66f
commit ddb8746954
25 changed files with 1043 additions and 1 deletions
+130
View File
@@ -0,0 +1,130 @@
#!/usr/bin/env bash
# datahub 卸载脚本
#
# 默认行为:停服务 + 移除 Quadlet + 删 secrets,保留数据目录和镜像
#
# 用法:bash uninstall.sh [选项]
# --purge-images 同时删除 3 个本地镜像
# --purge-data 同时删除 /var/container/data/datahub/ 数据目录(危险)
# -y, --yes 不询问确认(用于自动化)
set -euo pipefail
B='\033[34m'; G='\033[32m'; Y='\033[33m'; R='\033[31m'; N='\033[0m'
ok() { echo -e "${G}[OK]${N} $*"; }
warn() { echo -e "${Y}[!]${N} $*"; }
PURGE_IMAGES=false
PURGE_DATA=false
ASSUME_YES=false
for arg in "$@"; do
case "$arg" in
--purge-images) PURGE_IMAGES=true ;;
--purge-data) PURGE_DATA=true ;;
-y|--yes) ASSUME_YES=true ;;
-h|--help)
sed -n '2,11p' "$0"
exit 0
;;
*) echo "未知参数: $arg" >&2; exit 1 ;;
esac
done
QUADLET_DIR="$HOME/.config/containers/systemd"
DATA_DIR=/var/container/data/datahub
SERVICES=(datahub-frontend datahub-backend datahub-rabbitmq datahub-postgres)
QUADLET_FILES=(
datahub-frontend.container
datahub-backend.container
datahub-rabbitmq.container
datahub-postgres.container
datahub.network
)
SECRETS=(datahub-pg-password datahub-rabbitmq-password datahub-jwt-secret datahub-tools-token)
IMAGES=(localhost/datahub-postgres:latest localhost/datahub-backend:latest localhost/datahub-frontend:latest)
echo -e "${B}=== datahub 卸载脚本 ===${N}"
echo
echo "将执行以下操作:"
echo " - 停止 4 个 systemd 服务"
echo " - 移除 ${#QUADLET_FILES[@]} 个 Quadlet 单元"
echo " - 删除 ${#SECRETS[@]} 个 podman secrets"
echo -n " - 镜像: "
[ "$PURGE_IMAGES" = true ] && echo -e "${R}删除${N}" || echo "保留"
echo -n " - 数据目录 $DATA_DIR: "
[ "$PURGE_DATA" = true ] && echo -e "${R}删除(数据将丢失)${N}" || echo "保留"
echo
if [ "$ASSUME_YES" = false ]; then
read -rp "确认继续?(y/N): " ans
[[ "${ans,,}" == "y" ]] || { echo "已取消"; exit 0; }
fi
# 1. 停服务
echo -e "\n${B}-> 停止服务${N}"
for svc in "${SERVICES[@]}"; do
if systemctl --user is-active --quiet "$svc.service" 2>/dev/null; then
systemctl --user stop "$svc.service" || true
echo " 停止 $svc"
fi
done
# 2. 移除 Quadlet 文件
echo -e "\n${B}-> 移除 Quadlet 单元${N}"
for f in "${QUADLET_FILES[@]}"; do
if [ -f "$QUADLET_DIR/$f" ]; then
rm -f "$QUADLET_DIR/$f"
echo " 删除 $f"
fi
done
systemctl --user daemon-reload
# 3. 清理残留容器(保险起见)
for c in datahub-postgres datahub-rabbitmq datahub-backend datahub-frontend; do
if podman container exists "$c" 2>/dev/null; then
podman rm -f "$c" >/dev/null
echo " 删除残留容器 $c"
fi
done
# 4. 删 secrets
echo -e "\n${B}-> 删除 secrets${N}"
for s in "${SECRETS[@]}"; do
if podman secret exists "$s" 2>/dev/null; then
podman secret rm "$s" >/dev/null
echo " 删除 $s"
fi
done
# 5. 删镜像(可选)
if [ "$PURGE_IMAGES" = true ]; then
echo -e "\n${B}-> 删除镜像${N}"
for img in "${IMAGES[@]}"; do
if podman image exists "$img" 2>/dev/null; then
podman rmi "$img" >/dev/null && echo " 删除 $img"
fi
done
fi
# 6. 删数据目录(危险,双重确认)
if [ "$PURGE_DATA" = true ]; then
echo -e "\n${R}-> 删除数据目录${N}"
if [ "$ASSUME_YES" = false ]; then
echo -e "${R}警告:将永久删除 $DATA_DIR 及全部数据${N}"
read -rp "请输入完整的 'yes' 以确认: " ans
if [ "$ans" != "yes" ]; then
echo "数据目录保留"
ASSUME_YES=skip_data
fi
fi
if [ "$ASSUME_YES" != "skip_data" ]; then
sudo rm -rf "$DATA_DIR"
echo " 数据目录已删除"
fi
fi
echo
ok "卸载完成"
[ "$PURGE_DATA" = false ] && warn "数据保留在 $DATA_DIR(重新部署可直接恢复)"
[ "$PURGE_IMAGES" = false ] && warn "镜像保留(podman images | grep datahub 可见)"