XuqmGroup-PrivateDeploy/scripts/clean.sh
徐勤民 aa5bccae11 feat(deploy): 完成私有化部署全流程验收
- 更新部署进度文档,标记P5-02/P5-03为已完成状态
- 修复中文乱码问题,MySQL数据层使用UNHEX函数配合nginx字符集设置
- 配置im-service和update-service的内部服务URL,从127.0.0.1改为Docker服务名
- 实现全功能验收,nginx为所有服务添加路由映射并返回正确的状态码
- 创建私有化部署默认信息文档,记录完整的部署配置和访问地址
- 添加部署清理脚本clean.sh,支持一键清理容器、配置和数据目录
- 更新敏感配置模板,添加详细的密码和密钥配置说明
- 优化前端实时消息轮询机制,通过WebSocket心跳检测决定是否启用HTTP轮询回退
2026-05-19 19:23:28 +08:00

126 行
4.7 KiB
Bash
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

#!/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'