101 lines
2.3 KiB
Bash
Executable File
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}"
|
|
|