Files

64 lines
2.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Clover 覆盖部署入口:保留配置与 Docker 数据卷,重新构建并启动服务。
set -euo pipefail
cd "$(dirname "$0")/.."
[ "$(id -u)" -eq 0 ] || { echo "请以 root 运行。" >&2; exit 1; }
[ -f .env ] || { echo "找不到 .env;请使用全新安装流程。" >&2; exit 1; }
[ -f compose.yaml ] || { echo "找不到 compose.yaml;无法覆盖部署。" >&2; exit 1; }
log() { printf '\033[1;32m[clover-reinstall]\033[0m %s\n' "$*"; }
warn() { printf '\033[1;33m[clover-reinstall]\033[0m %s\n' "$*"; }
# 保留并备份原配置。覆盖部署不会 down -v,也不会移除 named volumes。
ENV_BACKUP=".env.before-overwrite.$(date +%Y%m%d-%H%M%S)"
cp -p .env "$ENV_BACKUP"
chmod 600 "$ENV_BACKUP"
log "原配置已备份为 ${ENV_BACKUP};.env 与 Docker 数据卷将保留。"
bash scripts/ensure-roundcube-env.sh
set -a
# shellcheck disable=SC1091
. ./.env
set +a
COMPOSE_FILES=(-f compose.yaml)
log "拉取已发布镜像…"
docker compose "${COMPOSE_FILES[@]}" pull panel mail caddy roundcube \
|| { echo "镜像拉取失败;没有覆盖部署。请检查 GHCR 网络后重试。" >&2; exit 1; }
log "构建证书助手并覆盖部署服务…"
docker compose -f compose.yaml build certificate-helper
docker compose "${COMPOSE_FILES[@]}" up -d --no-build --force-recreate
cert_ok=1
if [ "${CLOVER_SHARED_NGINX:-0}" = "1" ] || [ "${CLOVER_CADDY_SCHEME:-https}" = "http" ]; then
log "检查面板证书并配置 TLS…"
docker exec clover-certificate-helper python3 /app/certificates.py issue \
|| { cert_ok=0; warn "服务已覆盖部署,但证书操作失败;查看 docker logs clover-certificate-helper。原数据卷仍保留。"; }
fi
log "等待面板健康检查…"
ok=0
for _ in $(seq 1 30); do
if docker exec clover-panel node -e "fetch('http://127.0.0.1:3000/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" >/dev/null 2>&1; then
ok=1
break
fi
sleep 2
done
docker compose "${COMPOSE_FILES[@]}" ps
if [ "$ok" -eq 1 ]; then
bash scripts/admin-bootstrap.sh
bash scripts/configure-roundcube.sh
log "覆盖部署完成;原配置和数据卷已保留。"
else
warn "服务已覆盖部署,但面板健康检查未通过;查看 docker logs --tail 100 clover-panel。数据卷仍保留。"
exit 1
fi
if [ "$cert_ok" -ne 1 ]; then
exit 1
fi