126 行
4.7 KiB
Bash
126 行
4.7 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# clean.sh — 清理本次私有化部署,恢复到全新状态,供重新 deploy.sh 使用
|
|||
|
|
#
|
|||
|
|
# 操作:
|
|||
|
|
# 1. 停止并删除所有 Compose 容器及网络
|
|||
|
|
# 2. 删除 deploy.sh 生成的所有配置文件
|
|||
|
|
# 3. 清空 data/ 数据目录(MySQL / Redis / uploads / update),保留 .gitkeep
|
|||
|
|
# 4. 清除部署状态文件和日志
|
|||
|
|
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|||
|
|
cd "$ROOT_DIR"
|
|||
|
|
|
|||
|
|
ok() { printf ' \033[32m✓\033[0m %s\n' "$*"; }
|
|||
|
|
info() { printf ' \033[1;36m→\033[0m %s\n' "$*"; }
|
|||
|
|
warn() { printf ' \033[33m⚠\033[0m %s\n' "$*"; }
|
|||
|
|
|
|||
|
|
printf '\n\033[1;31m══════════════════════════════════════════════════\033[0m\n'
|
|||
|
|
printf '\033[1;31m XuqmGroup 私有化部署清理脚本\033[0m\n'
|
|||
|
|
printf '\033[1;31m══════════════════════════════════════════════════\033[0m\n'
|
|||
|
|
printf ' 目录: %s\n\n' "$ROOT_DIR"
|
|||
|
|
|
|||
|
|
printf ' \033[33m警告:此操作将删除所有容器、配置和数据,不可恢复!\033[0m\n'
|
|||
|
|
read -rp " 确认清理?输入 yes 继续: " _confirm
|
|||
|
|
[ "$_confirm" = "yes" ] || { printf ' 已取消\n'; exit 0; }
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 1. 停止并删除 Compose 容器、网络
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
printf '\n [1/4] 停止容器并删除网络...\n'
|
|||
|
|
|
|||
|
|
_compose_down() {
|
|||
|
|
local f="$1"; shift
|
|||
|
|
if [ -f "$f" ]; then
|
|||
|
|
docker compose -f "$f" "$@" down --remove-orphans --timeout 15 2>/dev/null && true
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 先尝试带 override,再降级到单文件
|
|||
|
|
if [ -f docker-compose.override.yml ]; then
|
|||
|
|
docker compose \
|
|||
|
|
-f docker-compose.infra.yml \
|
|||
|
|
-f docker-compose.yml \
|
|||
|
|
-f docker-compose.override.yml \
|
|||
|
|
down --remove-orphans --timeout 15 2>/dev/null && true
|
|||
|
|
else
|
|||
|
|
docker compose \
|
|||
|
|
-f docker-compose.infra.yml \
|
|||
|
|
-f docker-compose.yml \
|
|||
|
|
down --remove-orphans --timeout 15 2>/dev/null && true
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
ok "容器已停止"
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 2. 删除 deploy.sh 生成的配置文件
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
printf '\n [2/4] 删除生成的配置文件...\n'
|
|||
|
|
|
|||
|
|
# 顶层生成文件
|
|||
|
|
rm -f .env
|
|||
|
|
rm -f docker-compose.override.yml
|
|||
|
|
ok ".env、docker-compose.override.yml"
|
|||
|
|
|
|||
|
|
# config/ 下的生成文件
|
|||
|
|
rm -f config/secrets.env
|
|||
|
|
rm -f config/xuqm.env
|
|||
|
|
rm -f config/tenant/bootstrap.env
|
|||
|
|
rm -f config/nginx/conf.d/xuqm.conf
|
|||
|
|
rm -f config/sdk/xuqm-private-sdk.json
|
|||
|
|
rm -f config/docs/docs-runtime.json
|
|||
|
|
ok "config/secrets.env、xuqm.env、bootstrap.env、nginx conf、sdk json"
|
|||
|
|
|
|||
|
|
# vendors / mail 中由 deploy.sh 写入的文件(保留 .example 模板)
|
|||
|
|
# deploy.sh 用 cat > 覆盖写入,清理后让脚本重新生成
|
|||
|
|
rm -f config/vendors/push.env
|
|||
|
|
rm -f config/vendors/store-submit.env
|
|||
|
|
rm -f config/mail/smtp.env
|
|||
|
|
ok "config/vendors/*.env、config/mail/smtp.env"
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 3. 清空数据目录(保留 .gitkeep)
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
printf '\n [3/4] 清空 data/ 数据目录...\n'
|
|||
|
|
|
|||
|
|
_clean_dir() {
|
|||
|
|
local dir="$1"
|
|||
|
|
if [ -d "$dir" ]; then
|
|||
|
|
find "$dir" -mindepth 1 ! -name '.gitkeep' -exec rm -rf {} + 2>/dev/null && true
|
|||
|
|
ok "$dir"
|
|||
|
|
else
|
|||
|
|
warn "$dir 不存在,跳过"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_clean_dir data/mysql
|
|||
|
|
_clean_dir data/redis
|
|||
|
|
_clean_dir data/uploads
|
|||
|
|
_clean_dir data/update
|
|||
|
|
_clean_dir data/backups
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 4. 清除状态文件和日志
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
printf '\n [4/4] 清除部署状态和日志...\n'
|
|||
|
|
|
|||
|
|
if [ -d .deploy-state ]; then
|
|||
|
|
rm -rf .deploy-state
|
|||
|
|
ok ".deploy-state/"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
if [ -f logs/audit.log ]; then
|
|||
|
|
rm -f logs/audit.log
|
|||
|
|
ok "logs/audit.log"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# 完成
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
printf '\n\033[1;32m══════════════════════════════════════════════════\033[0m\n'
|
|||
|
|
printf '\033[1;32m 清理完成!\033[0m\n'
|
|||
|
|
printf '\033[1;32m══════════════════════════════════════════════════\033[0m\n'
|
|||
|
|
printf ' 现在可以重新运行一键部署:\n'
|
|||
|
|
printf '\n bash scripts/deploy.sh\n\n'
|