Files
digital-me-history/ci/archive/ecs-workflows/deploy-adult-backend.yml
T

75 lines
4.4 KiB
YAML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 "✓ 新代码已上线"