#!/bin/bash # ============================================================ # 生产环境部署脚本 # 服务器: 118.145.177.79 # 域名: zsglpt.workyai.cn # 项目路径: /root/zsglpt # ============================================================ set -e # 遇到错误立即退出 REMOTE_HOST="118.145.177.79" REMOTE_USER="root" REMOTE_PATH="/root/zsglpt" BACKUP_DIR="backups/backup_$(date +%Y%m%d_%H%M%S)" echo "============================================================" echo "知识管理平台 - 生产环境部署脚本" echo "目标服务器: $REMOTE_HOST" echo "部署路径: $REMOTE_PATH" echo "============================================================" # 步骤1: 测试SSH连接 echo "" echo "[1/8] 测试SSH连接..." ssh -o ConnectTimeout=10 $REMOTE_USER@$REMOTE_HOST "echo '✓ SSH连接成功'" || { echo "✗ SSH连接失败,请检查:" echo " 1. 服务器IP是否正确" echo " 2. SSH密码是否正确" echo " 3. 网络连接是否正常" exit 1 } # 步骤2: 备份生产服务器数据库 echo "" echo "[2/8] 备份生产服务器数据库..." ssh $REMOTE_USER@$REMOTE_HOST " cd $REMOTE_PATH mkdir -p $BACKUP_DIR if [ -f data/app_data.db ]; then cp -r data $BACKUP_DIR/ echo '✓ 数据库备份完成: $BACKUP_DIR/data/' else echo '⚠ 未找到数据库文件,跳过备份' fi # 同时备份当前运行的配置 if [ -f docker-compose.yml ]; then cp docker-compose.yml $BACKUP_DIR/ echo '✓ docker-compose.yml 已备份' fi " # 步骤3: 压缩本地项目文件(排除不需要的文件) echo "" echo "[3/8] 压缩项目文件..." tar -czf /tmp/zsglpt_deploy.tar.gz \ --exclude='*.pyc' \ --exclude='__pycache__' \ --exclude='.git' \ --exclude='data' \ --exclude='logs' \ --exclude='截图' \ --exclude='playwright' \ --exclude='backups' \ --exclude='*.tar.gz' \ -C /home/yuyx/aaaaaa/zsglpt \ . echo "✓ 项目文件已压缩: /tmp/zsglpt_deploy.tar.gz" ls -lh /tmp/zsglpt_deploy.tar.gz # 步骤4: 上传项目文件到服务器 echo "" echo "[4/8] 上传项目文件到服务器..." scp /tmp/zsglpt_deploy.tar.gz $REMOTE_USER@$REMOTE_HOST:/tmp/ echo "✓ 文件上传完成" # 步骤5: 在服务器上解压并替换文件 echo "" echo "[5/8] 解压并更新项目文件..." ssh $REMOTE_USER@$REMOTE_HOST " cd $REMOTE_PATH # 备份旧的代码文件(以防需要回滚) mkdir -p $BACKUP_DIR/code cp -r *.py templates static Dockerfile docker-compose.yml requirements.txt $BACKUP_DIR/code/ 2>/dev/null || true # 解压新文件(保留data、logs等目录) tar -xzf /tmp/zsglpt_deploy.tar.gz -C $REMOTE_PATH # 清理临时文件 rm /tmp/zsglpt_deploy.tar.gz echo '✓ 项目文件更新完成' " # 步骤6: 停止旧容器 echo "" echo "[6/8] 停止旧容器..." ssh $REMOTE_USER@$REMOTE_HOST " cd $REMOTE_PATH docker-compose down echo '✓ 旧容器已停止' " # 步骤7: 清理旧镜像并重新构建 echo "" echo "[7/8] 重新构建Docker镜像..." ssh $REMOTE_USER@$REMOTE_HOST " cd $REMOTE_PATH # 删除旧镜像 docker rmi zsglpt-knowledge-automation 2>/dev/null || true # 重新构建(无缓存) docker-compose build --no-cache echo '✓ Docker镜像构建完成' " # 步骤8: 启动新容器 echo "" echo "[8/8] 启动新容器..." ssh $REMOTE_USER@$REMOTE_HOST " cd $REMOTE_PATH docker-compose up -d echo '✓ 新容器已启动' echo '' echo '等待10秒,检查容器状态...' sleep 10 docker ps | grep knowledge-automation echo '' echo '查看启动日志(最后30行):' docker logs --tail 30 knowledge-automation-multiuser " # 清理本地临时文件 rm /tmp/zsglpt_deploy.tar.gz echo "" echo "============================================================" echo "✓ 部署完成!" echo "============================================================" echo "访问地址: https://zsglpt.workyai.cn" echo "后台管理: https://zsglpt.workyai.cn/yuyx" echo "" echo "备份位置: $REMOTE_PATH/$BACKUP_DIR" echo "" echo "如需查看日志,请执行:" echo " ssh $REMOTE_USER@$REMOTE_HOST 'docker logs -f knowledge-automation-multiuser'" echo "" echo "如需回滚,请执行:" echo " ssh $REMOTE_USER@$REMOTE_HOST 'cd $REMOTE_PATH && cd $BACKUP_DIR/code && cp -r * $REMOTE_PATH/ && cd $REMOTE_PATH && docker-compose up -d --build'" echo "============================================================"