Files
novalon-website/deploy-dist.sh
T
张翔 fb888a673f fix(analytics): 系统性修复 Google Analytics 数据采集问题
- 修复城市 (not set): 移除 allow_google_signals: false,启用 Google 信号补充地理数据
- 修复 Consent Mode v2: 补充 ad_user_data / ad_personalization 参数
- 修复 wait_for_update 与横幅延迟不匹配: 500ms → 3000ms
- 修复 static export 兼容性: GA 初始化脚本从 client component 移至 layout.tsx head 原生 script 标签
- 修复 pageview 追踪: GA3 风格 gtag('config') → GA4 风格 gtag('event', 'page_view')
- 修复 CookieConsent: 横幅延迟 2000ms → 500ms,同意后补发 pageview
- 修复 PerformanceTracker: FID → INP (Core Web Vitals 2024 更新)
- 修复环境变量命名: NEXT_PUBLIC_GA_ID → NEXT_PUBLIC_GA_MEASUREMENT_ID
- 清理 deploy-dist.sh 冗余 server/app 分支逻辑
- 新增部署产物 GA 脚本嵌入验证
2026-04-29 13:44:44 +08:00

159 lines
4.5 KiB
Bash
Executable File
Raw 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.
#!/bin/bash
set -e
SERVER_IP="139.155.109.62"
SERVER_USER="root"
DEPLOY_ROOT="/home/novalon/docker-app"
PROJECT_NAME="novalon-website"
DIST_DIR="dist"
STATIC_DIR="novalon-static"
NGINX_CONTAINER="novalon-nginx-secure"
while getopts "i:u:p:h" opt; do
case $opt in
i) SERVER_IP="$OPTARG" ;;
u) SERVER_USER="$OPTARG" ;;
p) PROJECT_NAME="$OPTARG" ;;
h)
echo "用法: $0 [选项]"
echo "选项:"
echo " -i IP地址 服务器IP地址 (默认: 139.155.109.62)"
echo " -u 用户名 SSH用户名 (默认: root)"
echo " -p 项目名 项目名称 (默认: novalon-website)"
echo " -h 显示帮助信息"
exit 0
;;
\?)
echo "无效选项: -$OPTARG" >&2
exit 1
;;
esac
done
LOG_DIR="./logs"
LOG_FILE="$LOG_DIR/deploy_dist_$(date +%Y%m%d_%H%M%S).log"
mkdir -p "$LOG_DIR"
exec > >(tee -a "$LOG_FILE") 2>&1
echo "🚀 开始部署 dist 到服务器 $SERVER_IP"
echo "📁 部署目录: $DEPLOY_ROOT/$STATIC_DIR"
echo "📋 部署日志: $LOG_FILE"
echo ""
echo "📋 步骤1: 检查 dist 目录..."
if [ ! -d "$DIST_DIR" ]; then
echo "❌ dist 目录不存在,请先运行 pnpm build"
exit 1
fi
DIST_SIZE=$(du -sh "$DIST_DIR" | cut -f1)
echo "✅ dist 目录大小: $DIST_SIZE"
echo ""
echo "📋 步骤1.1: 验证构建产物..."
if [ -f "$DIST_DIR/index.html" ]; then
if grep -q "googletagmanager.com" "$DIST_DIR/index.html"; then
GA_ID=$(grep -oP 'id=G-[A-Z0-9]+' "$DIST_DIR/index.html" | head -1 | sed 's/id=//')
echo "✅ GA 脚本已嵌入: $GA_ID"
else
echo "⚠️ 未检测到 GA 脚本,请检查 .env.production 中的 NEXT_PUBLIC_GA_MEASUREMENT_ID"
fi
else
echo "❌ index.html 不存在,构建可能失败"
exit 1
fi
echo ""
echo "📋 步骤2: 验证SSH连接..."
if ! ssh -o ConnectTimeout=5 "$SERVER_USER@$SERVER_IP" exit; then
echo "❌ 无法连接到服务器 $SERVER_IP"
exit 1
fi
echo "✅ SSH连接验证成功"
echo ""
echo "📋 步骤3: 备份旧版本..."
ssh "$SERVER_USER@$SERVER_IP" "
set -e
STATIC_PATH='$DEPLOY_ROOT/$STATIC_DIR'
BACKUP_PATH='$DEPLOY_ROOT/${STATIC_DIR}_backup_$(date +%Y%m%d_%H%M%S)'
if [ -d \"\$STATIC_PATH\" ]; then
echo \"📦 备份到 \$BACKUP_PATH\"
cp -r \"\$STATIC_PATH\" \"\$BACKUP_PATH\"
echo \"✅ 备份完成\"
else
echo \"️ 无需备份,目录不存在\"
fi
"
echo ""
echo "📋 步骤4: 上传 dist 目录..."
ssh "$SERVER_USER@$SERVER_IP" "mkdir -p '$DEPLOY_ROOT/$STATIC_DIR'"
rsync -avz --delete "$DIST_DIR/" "$SERVER_USER@$SERVER_IP:$DEPLOY_ROOT/$STATIC_DIR/"
echo "✅ dist 目录已上传"
echo ""
echo "📋 步骤5: 设置文件权限..."
ssh "$SERVER_USER@$SERVER_IP" "
set -e
STATIC_PATH='$DEPLOY_ROOT/$STATIC_DIR'
chown -R www-data:www-data \"\$STATIC_PATH\" 2>/dev/null || true
chmod -R 755 \"\$STATIC_PATH\"
echo \"✅ 权限设置完成\"
"
echo ""
echo "📋 步骤6: 清除 Nginx 缓存..."
ssh "$SERVER_USER@$SERVER_IP" "
set -e
docker exec $NGINX_CONTAINER nginx -s reload 2>/dev/null || echo \"⚠️ Nginx 重载失败,尝试重启容器\"
echo \"✅ Nginx 缓存已清除\"
"
echo ""
echo "📋 步骤7: 验证部署..."
if ! ssh "$SERVER_USER@$SERVER_IP" "[ -d '$DEPLOY_ROOT/$STATIC_DIR' ]"; then
echo "❌ 部署目录不存在"
exit 1
fi
FILE_COUNT=$(ssh "$SERVER_USER@$SERVER_IP" "find '$DEPLOY_ROOT/$STATIC_DIR' -type f | wc -l")
echo "✅ 部署完成,共 $FILE_COUNT 个文件"
echo ""
echo "📋 步骤8: 清理旧备份(保留最近3个)..."
ssh "$SERVER_USER@$SERVER_IP" "
set -e
BACKUP_DIR='$DEPLOY_ROOT'
cd \"\$BACKUP_DIR\"
ls -dt ${STATIC_DIR}_backup_* 2>/dev/null | tail -n +4 | xargs rm -rf 2>/dev/null || true
echo \"✅ 清理完成\"
"
echo ""
echo "📋 步骤9: 验证生产环境..."
LOGO_FONT=$(curl -s "https://novalon.cn/logo.svg" | grep -o "font-family: [^;]*" | head -1)
if echo "$LOGO_FONT" | grep -q "aoyagiReisho"; then
echo "✅ 生产环境已更新: $LOGO_FONT"
else
echo "⚠️ 生产环境可能未更新,请手动验证"
fi
echo ""
echo "🎉 部署成功!"
echo ""
echo "📋 访问地址:"
echo " HTTP: http://$SERVER_IP"
echo " HTTPS: https://$SERVER_IP"
echo " 域名: https://novalon.cn"
echo ""
echo "📋 后续步骤:"
echo " 1. 验证网站可访问性"
echo " 2. 检查静态资源加载"
echo " 3. 测试网站主要功能"