#!/bin/bash # 部署脚本 - 将代码部署到远程服务器 # 用法: pnpm run deploy set -e # 配置变量 SERVER_IP="119.91.211.52" SERVER_USER="root" REMOTE_DIR="/var/www/MemeMind-Server" APP_NAME="mememind-server" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} MemeMind Server 部署脚本${NC}" echo -e "${GREEN}========================================${NC}" # 1. 本地构建 echo -e "\n${YELLOW}[1/4] 构建项目...${NC}" pnpm run build echo -e "${GREEN}✓ 构建完成${NC}" # 2. 同步文件到服务器 echo -e "\n${YELLOW}[2/4] 同步文件到服务器 ${SERVER_IP}...${NC}" rsync -avz --delete \ --exclude 'node_modules' \ --exclude '.git' \ --exclude 'coverage' \ --exclude '.env.local' \ --exclude '*.log' \ --exclude '.DS_Store' \ ./dist/ ${SERVER_USER}@${SERVER_IP}:${REMOTE_DIR}/dist/ rsync -avz \ --exclude 'node_modules' \ package.json \ pnpm-lock.yaml \ ecosystem.config.js \ ${SERVER_USER}@${SERVER_IP}:${REMOTE_DIR}/ echo -e "${GREEN}✓ 文件同步完成${NC}" # 3. 在服务器上安装依赖并重启 echo -e "\n${YELLOW}[3/4] 在服务器上安装依赖...${NC}" ssh ${SERVER_USER}@${SERVER_IP} << 'ENDSSH' cd /var/www/MemeMind-Server # 检查 pnpm 是否安装 if ! command -v pnpm &> /dev/null; then echo "安装 pnpm..." npm install -g pnpm fi # 安装依赖 pnpm install --prod echo "依赖安装完成" ENDSSH echo -e "${GREEN}✓ 依赖安装完成${NC}" # 4. 重启 PM2 echo -e "\n${YELLOW}[4/4] 重启 PM2 服务...${NC}" ssh ${SERVER_USER}@${SERVER_IP} << ENDSSH cd ${REMOTE_DIR} # 检查 PM2 是否已运行该应用 if pm2 list | grep -q "${APP_NAME}"; then echo "重载应用 ${APP_NAME}..." pm2 reload ${APP_NAME} else echo "启动应用 ${APP_NAME}..." pm2 start ecosystem.config.js fi # 保存 PM2 配置 pm2 save echo "" echo "PM2 状态:" pm2 list ENDSSH echo -e "${GREEN}✓ 服务重启完成${NC}" echo -e "\n${GREEN}========================================${NC}" echo -e "${GREEN} 部署成功!${NC}" echo -e "${GREEN}========================================${NC}" echo -e "API 地址: http://${SERVER_IP}:3000/api" echo -e "Swagger 文档: http://${SERVER_IP}:3000/api/docs"