Files
MemeMind-Server/deploy.sh
richarjiang ed1b5455a2 chore: add deployment configuration for PM2 and production environment
- Add deploy.sh script for automated deployment via rsync
- Add ecosystem.config.js for PM2 process management (2 instances)
- Add .env.production.example as production env template
- Update config.module.ts to support .env.production file
- Add 'pnpm run deploy' script to package.json
2026-03-15 14:27:48 +08:00

95 lines
2.3 KiB
Bash
Executable File

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