lovart3/deploy.sh
2025-12-17 20:15:18 +08:00

101 lines
2.3 KiB
Bash
Executable File

#!/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}"