#!/bin/bash # AI Chatbot 部署脚本 # 使用方法: ./deploy.sh set -e # 配置 SERVER="156.225.27.52" PORT="5204" USER="root" PASSWORD="Jsjj@8888" REMOTE_DIR="/var/www/ai-chatbot" LOCAL_DIR="." # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}开始部署到服务器...${NC}" # 检查本地是否有未提交的更改 if [ -n "$(git status --porcelain)" ]; then echo -e "${YELLOW}警告: 有未提交的更改${NC}" read -p "是否继续? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 1. 准备部署文件(跳过本地构建,在服务器上构建) echo -e "${GREEN}步骤 1: 准备部署文件...${NC}" tar --exclude='node_modules' \ --exclude='.next' \ --exclude='.git' \ --exclude='.env.local' \ --exclude='.env.production' \ --exclude='*.log' \ --exclude='deploy.tar.gz' \ -czf deploy.tar.gz . # 2. 上传到服务器 echo -e "${GREEN}步骤 2: 上传文件到服务器...${NC}" sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no -P $PORT deploy.tar.gz $USER@$SERVER:/tmp/ # 3. 在服务器上执行部署 echo -e "${GREEN}步骤 3: 在服务器上部署...${NC}" sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no -p $PORT $USER@$SERVER << 'ENDSSH' set -e REMOTE_DIR="/var/www/ai-chatbot" BACKUP_DIR="/root/backups/ai-chatbot" # 创建目录 mkdir -p $REMOTE_DIR mkdir -p $BACKUP_DIR # 备份现有部署(如果存在) if [ -d "$REMOTE_DIR/.next" ]; then echo "备份现有部署..." tar -czf $BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).tar.gz -C $REMOTE_DIR . fi # 解压新文件 echo "解压新文件..." cd $REMOTE_DIR tar -xzf /tmp/deploy.tar.gz # 安装依赖 echo "安装依赖..." pnpm install --production=false # 运行数据库迁移 echo "运行数据库迁移..." pnpm db:migrate || echo "数据库迁移失败,请检查配置" # 构建项目 echo "构建项目..." pnpm build # 重启应用 echo "重启应用..." pm2 restart ai-chatbot || pm2 start ecosystem.config.js # 清理 rm /tmp/deploy.tar.gz echo "部署完成!" ENDSSH # 4. 清理本地临时文件 echo -e "${GREEN}步骤 4: 清理临时文件...${NC}" rm deploy.tar.gz echo -e "${GREEN}部署完成!${NC}" echo -e "${YELLOW}请检查应用状态: ssh -p $PORT $USER@$SERVER 'pm2 status'${NC}"