refactor/refactor-static #9
Executable
+123
@@ -0,0 +1,123 @@
|
||||
#!/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"
|
||||
|
||||
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/$PROJECT_NAME/$DIST_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 "📋 步骤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
|
||||
DEPLOY_PATH='$DEPLOY_ROOT/$PROJECT_NAME/$DIST_DIR'
|
||||
BACKUP_PATH='$DEPLOY_ROOT/$PROJECT_NAME/${DIST_DIR}_backup_$(date +%Y%m%d_%H%M%S)'
|
||||
|
||||
if [ -d \"\$DEPLOY_PATH\" ]; then
|
||||
echo \"📦 备份到 \$BACKUP_PATH\"
|
||||
mv \"\$DEPLOY_PATH\" \"\$BACKUP_PATH\"
|
||||
echo \"✅ 备份完成\"
|
||||
else
|
||||
echo \"ℹ️ 无需备份,目录不存在\"
|
||||
fi
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "📋 步骤4: 上传 dist 目录..."
|
||||
ssh "$SERVER_USER@$SERVER_IP" "mkdir -p '$DEPLOY_ROOT/$PROJECT_NAME'"
|
||||
rsync -avz --delete "$DIST_DIR/" "$SERVER_USER@$SERVER_IP:$DEPLOY_ROOT/$PROJECT_NAME/$DIST_DIR/"
|
||||
echo "✅ dist 目录已上传"
|
||||
|
||||
echo ""
|
||||
echo "📋 步骤5: 设置文件权限..."
|
||||
ssh "$SERVER_USER@$SERVER_IP" "
|
||||
set -e
|
||||
DEPLOY_PATH='$DEPLOY_ROOT/$PROJECT_NAME/$DIST_DIR'
|
||||
chown -R www-data:www-data \"\$DEPLOY_PATH\" 2>/dev/null || true
|
||||
chmod -R 755 \"\$DEPLOY_PATH\"
|
||||
echo \"✅ 权限设置完成\"
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "📋 步骤6: 验证部署..."
|
||||
if ! ssh "$SERVER_USER@$SERVER_IP" "[ -d '$DEPLOY_ROOT/$PROJECT_NAME/$DIST_DIR' ]"; then
|
||||
echo "❌ 部署目录不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE_COUNT=$(ssh "$SERVER_USER@$SERVER_IP" "find '$DEPLOY_ROOT/$PROJECT_NAME/$DIST_DIR' -type f | wc -l")
|
||||
echo "✅ 部署完成,共 $FILE_COUNT 个文件"
|
||||
|
||||
echo ""
|
||||
echo "📋 步骤7: 清理旧备份(保留最近3个)..."
|
||||
ssh "$SERVER_USER@$SERVER_IP" "
|
||||
set -e
|
||||
BACKUP_DIR='$DEPLOY_ROOT/$PROJECT_NAME'
|
||||
cd \"\$BACKUP_DIR\"
|
||||
ls -dt ${DIST_DIR}_backup_* 2>/dev/null | tail -n +4 | xargs rm -rf 2>/dev/null || true
|
||||
echo \"✅ 清理完成\"
|
||||
"
|
||||
|
||||
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. 测试网站主要功能"
|
||||
Reference in New Issue
Block a user