refactor: 精简部署流程,移除 MySQL 管理
Some checks failed
CI 检查 / lint (pull_request) Has been cancelled
CI 检查 / typecheck (pull_request) Has been cancelled
CI 检查 / test (pull_request) Has been cancelled

MySQL 已在服务器运行,部署只需三步:
1. 本地构建 → rsync 同步
2. npm ci(首次)+ migration:run
3. pm2 startOrReload
This commit is contained in:
2026-07-20 15:35:45 +08:00
parent a87f26a915
commit 151ef06ec2
2 changed files with 17 additions and 46 deletions

View File

@@ -1,26 +1,20 @@
# PM2 手动部署工作流 # PM2 手动部署工作流
# 手动触发 → 构建前后端 → rsync 同步 → 服务器执行 PM2 重载 # 手动触发 → 构建 → rsync → 安装依赖 → 数据库迁移 → PM2 重载
# #
# 前置准备: # 前置准备:
# 1. 服务器需安装 PM2: npm i -g pm2 # 1. 服务器 MySQL 已在运行
# 2. 服务器需预先启动 MySQL # 2. 服务器已安装 PM2: npm i -g pm2
# 3. Gitea 仓库 Settings → Secrets 配置以下密钥 # 3. Gitea 仓库 Settings → Secrets 配置:
# - SSH_PRIVATE_KEY : 部署用 SSH 私钥 # - SSH_PRIVATE_KEY : 部署用 SSH 私钥
# - SSH_HOST : 服务器地址 # - SSH_HOST : 服务器地址
# - SSH_USER : SSH 用户名 # - SSH_USER : SSH 用户名
# - SSH_PORT : SSH 端口(默认 22可选 # - SSH_PORT : SSH 端口(默认 22可选
# - REMOTE_DIR : 服务器上的项目目录,如 /opt/gongxue # - REMOTE_DIR : 服务器项目目录,如 /opt/gongxue
name: PM2 部署 name: PM2 部署
on: on:
workflow_dispatch: workflow_dispatch:
inputs:
skip_build:
description: '跳过构建(仅同步 + PM2 重载)'
required: false
type: boolean
default: false
jobs: jobs:
deploy: deploy:
@@ -35,7 +29,6 @@ jobs:
node-version: '22' node-version: '22'
- name: 安装依赖 & 构建 - name: 安装依赖 & 构建
if: ${{ !inputs.skip_build }}
run: | run: |
npm ci npm ci
npm run build -w @gongxue/server npm run build -w @gongxue/server
@@ -68,7 +61,7 @@ jobs:
--exclude='.codegraph/' \ --exclude='.codegraph/' \
./ deploy-server:${{ secrets.REMOTE_DIR }}/ ./ deploy-server:${{ secrets.REMOTE_DIR }}/
- name: 安装依赖 & 数据库迁移 - name: 安装依赖 → 迁移 → PM2 重载
run: | run: |
ssh deploy-server " ssh deploy-server "
cd ${{ secrets.REMOTE_DIR }} cd ${{ secrets.REMOTE_DIR }}
@@ -78,15 +71,10 @@ jobs:
npm ci --omit=dev npm ci --omit=dev
fi fi
echo '执行数据库迁移...' echo '执行数据库迁移...'
npm run migration:run -w @gongxue/server || echo '迁移跳过(无变更或已是最新)' npm run migration:run -w @gongxue/server
" echo 'PM2 重载...'
- name: PM2 重载
run: |
ssh deploy-server "
cd ${{ secrets.REMOTE_DIR }}
pm2 startOrReload ecosystem.config.cjs --update-env pm2 startOrReload ecosystem.config.cjs --update-env
pm2 save pm2 save
echo '=== PM2 进程状态 ===' echo '=== PM2 状态 ==='
pm2 status pm2 status
" "

View File

@@ -1,18 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 恭学教育 — PM2 部署脚本 # 恭学教育 — PM2 部署脚本
# 用法: ./deploy.sh [ssh_host] # 用法: ./deploy.sh [ssh_host]
# 前提: 服务器 MySQL 已在运行PM2 已安装
set -euo pipefail set -euo pipefail
SSH_HOST="${1:-tencent}" SSH_HOST="${1:-tencent}"
REMOTE_DIR="/opt/gongxue" REMOTE_DIR="/opt/gongxue"
echo "=== 1/5 本地构建后端 ===" echo "=== 1/4 本地构建后端 ==="
npm run build -w @gongxue/server npm run build -w @gongxue/server
echo "=== 2/5 本地构建前端 ===" echo "=== 2/4 本地构建前端 ==="
npm run build -w @gongxue/admin npm run build -w @gongxue/admin
echo "=== 3/5 同步到 ${SSH_HOST} ===" echo "=== 3/4 同步到 ${SSH_HOST} ==="
rsync -avz --delete \ rsync -avz --delete \
--exclude='node_modules' \ --exclude='node_modules' \
--exclude='.git' \ --exclude='.git' \
@@ -22,25 +23,17 @@ rsync -avz --delete \
--exclude='.turbo/' \ --exclude='.turbo/' \
./ "${SSH_HOST}:${REMOTE_DIR}/" ./ "${SSH_HOST}:${REMOTE_DIR}/"
echo "=== 4/5 检查 MySQL + 安装依赖 ===" echo "=== 4/4 安装依赖 → 迁移 → PM2 重载 ==="
ssh "${SSH_HOST}" " ssh "${SSH_HOST}" "
cd ${REMOTE_DIR} cd ${REMOTE_DIR}
mkdir -p logs mkdir -p logs
# 确保 MySQL 已启动systemd 或手动启动)
if systemctl is-active --quiet mysqld 2>/dev/null || systemctl is-active --quiet mysql 2>/dev/null; then
echo 'MySQL 已运行'
else
echo '⚠ MySQL 未运行,请确保 MySQL 已启动'
fi
if [ ! -d node_modules ]; then if [ ! -d node_modules ]; then
echo '首次部署,安装依赖...' echo '首次部署,安装依赖...'
npm ci --omit=dev npm ci --omit=dev
fi fi
" echo '执行数据库迁移...'
npm run migration:run -w @gongxue/server
echo "=== 5/5 PM2 重载 ===" echo 'PM2 重载...'
ssh "${SSH_HOST}" "
cd ${REMOTE_DIR}
pm2 startOrReload ecosystem.config.cjs --update-env pm2 startOrReload ecosystem.config.cjs --update-env
pm2 save pm2 save
pm2 status pm2 status
@@ -49,13 +42,3 @@ ssh "${SSH_HOST}" "
echo "" echo ""
echo "部署完成!" echo "部署完成!"
echo "访问: http://$(ssh "${SSH_HOST}" 'hostname -I 2>/dev/null | awk "{print \$1}" || curl -s ifconfig.me')" echo "访问: http://$(ssh "${SSH_HOST}" 'hostname -I 2>/dev/null | awk "{print \$1}" || curl -s ifconfig.me')"
echo ""
echo "══════ 首次部署/数据迁移 ══════"
echo "1) 上传旧数据库:"
echo " scp ~/Downloads/dorm_billing_*.sql.gz ${SSH_HOST}:${REMOTE_DIR}/"
echo "2) 服务器上执行:"
echo " ssh ${SSH_HOST}"
echo " cd ${REMOTE_DIR}"
echo " cp .env.example .env && vim .env # 改密码"
echo " sudo setcap 'cap_net_bind_service=+ep' \$(which node)"
echo " ./migrate.sh dorm_billing_*.sql.gz # 迁移旧数据"