#!/usr/bin/env bash # 恭学教育 — PM2 部署脚本 # 用法: ./deploy.sh [ssh_host] # 前提: 服务器 MySQL 已在运行,PM2 已安装 set -euo pipefail SSH_HOST="${1:-tencent}" REMOTE_DIR="/opt/gongxue" echo "=== 1/4 本地构建后端 ===" npm run build -w @gongxue/server echo "=== 2/4 本地构建前端 ===" npm run build -w @gongxue/admin echo "=== 3/4 同步到 ${SSH_HOST} ===" rsync -avz --delete \ --exclude='node_modules' \ --exclude='.git' \ --exclude='*.db' \ --exclude='.DS_Store' \ --exclude='logs/' \ --exclude='.turbo/' \ ./ "${SSH_HOST}:${REMOTE_DIR}/" echo "=== 4/4 安装依赖 → 迁移 → PM2 重载 ===" ssh "${SSH_HOST}" " cd ${REMOTE_DIR} mkdir -p logs if [ ! -d node_modules ]; then echo '首次部署,安装依赖...' npm ci --omit=dev fi echo '执行数据库迁移...' npm run migration:run -w @gongxue/server echo 'PM2 重载...' pm2 startOrReload ecosystem.config.cjs --update-env pm2 save pm2 status " echo "" echo "部署完成!" echo "访问: http://$(ssh "${SSH_HOST}" 'hostname -I 2>/dev/null | awk "{print \$1}" || curl -s ifconfig.me')"