forked from wangziqi/gongxue-base
MySQL 已在服务器运行,部署只需三步: 1. 本地构建 → rsync 同步 2. npm ci(首次)+ migration:run 3. pm2 startOrReload
45 lines
1.1 KiB
Bash
Executable File
45 lines
1.1 KiB
Bash
Executable File
#!/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')"
|