#!/bin/bash # Novalon 静态站点部署脚本 # 用法: bash scripts/deploy-static.sh [环境] # 环境参数: production (默认) set -euo pipefail ENV="${1:-production}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" BUILD_DIR="$PROJECT_DIR/dist" DEPLOY_DIR="/var/www/novalon" BACKUP_DIR="/var/www/novalon-backup" TIMESTAMP=$(date +%Y%m%d_%H%M%S) echo "=========================================" echo " Novalon 静态站点部署" echo " 环境: $ENV" echo " 时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "=========================================" # 步骤 1: 构建 echo "" echo "[1/5] 构建静态站点..." cd "$PROJECT_DIR" npm run build if [ ! -d "$BUILD_DIR" ]; then echo "❌ 构建失败:dist 目录不存在" exit 1 fi echo "✅ 构建完成,产物大小:$(du -sh "$BUILD_DIR" | cut -f1)" # 步骤 2: 备份当前版本 echo "" echo "[2/5] 备份当前版本..." if [ -d "$DEPLOY_DIR" ]; then mkdir -p "$BACKUP_DIR" cp -r "$DEPLOY_DIR" "$BACKUP_DIR/novalon-backup-$TIMESTAMP" # 只保留最近 3 个备份 ls -t "$BACKUP_DIR"/ | tail -n +4 | xargs -I {} rm -rf "$BACKUP_DIR/{}" echo "✅ 备份完成: $BACKUP_DIR/novalon-backup-$TIMESTAMP" else echo "⚠️ 首次部署,无需备份" mkdir -p "$DEPLOY_DIR" fi # 步骤 3: 部署新版本 echo "" echo "[3/5] 部署新版本..." # 清空目标目录(保留 .well-known) if [ -d "$DEPLOY_DIR/.well-known" ]; then mv "$DEPLOY_DIR/.well-known" /tmp/well-known-backup fi rm -rf "$DEPLOY_DIR"/* cp -r "$BUILD_DIR"/* "$DEPLOY_DIR/" if [ -d /tmp/well-known-backup ]; then mv /tmp/well-known-backup "$DEPLOY_DIR/.well-known" fi echo "✅ 文件部署完成" # 步骤 4: 设置权限 echo "" echo "[4/5] 设置文件权限..." chmod -R 755 "$DEPLOY_DIR" echo "✅ 权限设置完成" # 步骤 5: 重载 Nginx echo "" echo "[5/5] 重载 Nginx..." if nginx -t 2>/dev/null; then nginx -s reload echo "✅ Nginx 重载成功" else echo "⚠️ Nginx 配置检查失败,跳过重载(请手动检查)" fi echo "" echo "=========================================" echo " ✅ 部署完成!" echo " 站点地址: https://www.novalon.cn" echo " 部署目录: $DEPLOY_DIR" echo "========================================="