ci: 归档 ECS 专用工作流;新增 NAS 自动部署流水线

This commit is contained in:
2026-10-10 16:33:29 +08:00
parent 0593ff7e62
commit a41a6644a4
17 changed files with 45 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
name: Deploy Backend to ECS
# 数字我后端(纯成人版)。真正的生产目录 = /var/www/digitalme-api.invoratec.cn
# (它有正确 .env: creator_cn 共享库+前缀 / DASHSCOPE / JWT),nginx digitalme-api → :3603。
on:
workflow_dispatch: {} # ★ 允许在 Actions 页面手动触发部署(老板要求 2026-07-28)
push:
# ⚠ 只监听 master。原来 [master, main] 是一把上膛的枪:
# main 是落后 169 个提交的僵尸分支,往它推任何一行代码,
# 都会把旧代码盖到生产上。(已发生过一次。main 现已删除。)
branches: [master]
paths:
- 'digital-me-backend/**'
- '.github/workflows/deploy-adult-backend.yml'
jobs:
# 说明:原「测试门 test job」(node --test + mongo service)已按要求移除。
# 它总是报错、且 deploy 本就未 needs 它(不阻断部署),只让每次运行显示一个红叉、
# 看起来像"部署失败"。移除后部署运行恢复全绿。
# 要恢复 CI 测试:另建一个独立 workflow(如 test.yml)跑 node --test,不要再挂进部署流程误报。
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Copy files to ECS
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.ECS_HOST }}
username: ${{ secrets.ECS_USER }}
password: ${{ secrets.ECS_PASSWORD }}
source: 'digital-me-backend/src,digital-me-backend/scripts,digital-me-backend/package.json,digital-me-backend/package-lock.json'
target: /var/www/digitalme-api.invoratec.cn
strip_components: 1
overwrite: true
rm: false
timeout: 60s
command_timeout: 5m
- name: Install + restart PM2 (:3603)
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.ECS_HOST }}
username: ${{ secrets.ECS_USER }}
password: ${{ secrets.ECS_PASSWORD }}
command_timeout: 10m
script: |
cd /var/www/digitalme-api.invoratec.cn
[ -f .env ] || { echo "❌ 生产 .env 缺失,中止"; exit 1; }
# ★ 2026-07-28 上线前【关闭 stub 登录】:不再强制写 ALLOW_STUB_LOGIN=true。
# 代码层(config.js)已保证生产环境即使 .env 误设 true 也强制忽略(防账号接管);
# 这里再把历史遗留的 =true 就地改成 false,彻底消除。要放开消费端登录 = 接真实
# 阿里云短信(SMS_PROVIDER=aliyun + ALIYUN_SMS_*) / 微信开放平台(WECHAT_APP_ID/SECRET)。
if grep -q '^ALLOW_STUB_LOGIN=true' .env; then sed -i 's/^ALLOW_STUB_LOGIN=true/ALLOW_STUB_LOGIN=false/' .env; fi
# ★ 万相文生图开关(老板拍板开):开通后 inkArt/漫画轻版/二创样板间美术视频样板渲成真图=成品。
# 复用 DASHSCOPE key·国内 DashScope;用户点击才生成、结果缓存,非自动批量。
# ⚠ 若 DASHSCOPE 账号未开通万相文生图(账号层,同 TTS 曾遇),置 true 也不出图——那是账号问题非代码。
grep -q '^INK_ART_ENABLED=' .env || echo 'INK_ART_ENABLED=true' >> .env
npm install --production --no-audit --no-fund --prefer-offline --no-progress 2>&1 | tail -8 || \
npm install --production --no-audit --no-fund 2>&1 | tail -20
# 收敛为单进程 digitalme-api on :3603(清掉错误的 adult/teen 空目录进程)。
pm2 delete digitalme-adult-api 2>/dev/null || true
pm2 delete digitalme-teen-api 2>/dev/null || true
pm2 delete digitalme-api 2>/dev/null || true
fuser -k 3603/tcp 2>/dev/null || true
sleep 2
PORT=3603 pm2 start src/index.js --name digitalme-api --node-args="--max-old-space-size=512" --update-env
pm2 save
sleep 6
echo "=== pm2 ==="; pm2 list | grep digitalme || true
echo "=== 崩溃日志(如有) ==="; pm2 logs digitalme-api --lines 25 --nostream 2>/dev/null | tail -30 || true
H=$(curl -sf http://localhost:3603/health || true); echo "health:[$H]"
echo "$H" | grep -q '"ok":true' || { echo "❌ 后端没起来"; exit 1; }
echo "$H" | grep -q '"edition"' && { echo "❌ 旧代码"; exit 1; } || echo "✓ 新代码已上线"