Dev #22

Merged
zhangxiang merged 29 commits from dev into main 2026-08-20 12:16:07 +08:00
Showing only changes of commit c06309b2f2 - Show all commits
+28
View File
@@ -29,6 +29,7 @@
#
# 环境变量覆盖:
# SERVER_IP SERVER_USER DEPLOY_ROOT PROJECT_NAME NGINX_CONTAINER
# NEXTJS_CONTAINER COMPOSE_FILE COMPOSE_CMD
# DOMAIN BACKUP_RETENTION_COUNT DIST_DIR
# ============================================================
@@ -40,6 +41,9 @@ SERVER_USER="${SERVER_USER:-root}"
DEPLOY_ROOT="${DEPLOY_ROOT:-/home/novalon/docker-app}"
PROJECT_NAME="${PROJECT_NAME:-novalon-website}"
NGINX_CONTAINER="${NGINX_CONTAINER:-novalon-nginx-secure}"
NEXTJS_CONTAINER="${NEXTJS_CONTAINER:-novalon-website}"
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.server.yml}"
COMPOSE_CMD="${COMPOSE_CMD:-docker-compose}"
DOMAIN="${DOMAIN:-https://novalon.cn}"
BACKUP_RETENTION="${BACKUP_RETENTION_COUNT:-${BACKUP_RETENTION:-3}}"
DIST_DIR="${DIST_DIR:-dist}"
@@ -252,6 +256,30 @@ cmd_deploy() {
fi
"
# 步骤 6.5: 同步 public 并重建 Next.js 容器
# 混合渲染下,Nginx 提供新客户端资源,Next.js 容器也必须运行同一份构建,
# 否则会出现 /_next/static 404 或 Server Reference ID 不匹配。
log ""
log "📋 步骤 6.5: 重建 Next.js 容器 ($NEXTJS_CONTAINER)"
if [[ -d "$PROJECT_ROOT/public" ]]; then
if [[ "$DRY_RUN" == "1" ]]; then
log "🔍 [dry-run] rsync -az --delete \"$PROJECT_ROOT/public/\" $SERVER_USER@$SERVER_IP:$REMOTE_PROJECT_DIR/public/"
else
rsync -az --delete "$PROJECT_ROOT/public/" "$SERVER_USER@$SERVER_IP:$REMOTE_PROJECT_DIR/public/"
fi
fi
run_remote "
set -e
cd '$REMOTE_PROJECT_DIR'
if [ -f '$COMPOSE_FILE' ]; then
$COMPOSE_CMD -f '$COMPOSE_FILE' build
$COMPOSE_CMD -f '$COMPOSE_FILE' up -d
echo \"✅ Next.js 容器已重建\"
else
echo \"⚠️ 未找到 $COMPOSE_FILE,跳过 Next.js 容器重建\"
fi
"
# 步骤 7: 验证生产环境
if ! verify_remote; then
if [[ "$AUTO_ROLLBACK" == "1" ]]; then