From 8e344b4246cd6a02a282111c72c67d4538bf2061 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 9 May 2026 17:15:11 +0800 Subject: [PATCH] update variable name --- .github/workflows/README.md | 2 +- .github/workflows/SETUP.md | 18 +++++++-------- .github/workflows/docker-build-deploy.yml | 27 +++++++++++------------ .github/workflows/legacy-data-migrate.yml | 14 ++++++------ 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/.github/workflows/README.md b/.github/workflows/README.md index a18996c..0849854 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -4,7 +4,7 @@ - **工作流文件**: [docker-build-deploy.yml](docker-build-deploy.yml) - **测试 job**:在构建镜像前于 `api/` 下执行 `uv sync --dev` 与 `pytest`。 -- **Secrets**:预发 `STAGING_*`、生产 `PROD_*`、镜像 `ALIYUN_CR_*` — 详见 [SETUP.md](SETUP.md)。 +- **Secrets**:预发无前缀 `SSH_*` / `DEPLOY_PATH`、生产 `PROD_*`、镜像 `ALIYUN_CR_*` — 详见 [SETUP.md](SETUP.md)。 - **分支 / Tag**:`main` → Staging 服务器;语义化 tag `v*.*.*` → Production 服务器;路径过滤为 `api/**` 与本 workflow。 - **手动补跑**:`workflow_dispatch` 仅支持 `main` / `master`(Staging)或 `vMAJOR.MINOR.PATCH` tag(Production)。其它 ref 会在测试与构建前失败。 diff --git a/.github/workflows/SETUP.md b/.github/workflows/SETUP.md index c94b6d4..3ca43ef 100644 --- a/.github/workflows/SETUP.md +++ b/.github/workflows/SETUP.md @@ -6,12 +6,12 @@ | Secret | 说明 | |--------|------| -| `STAGING_SSH_PRIVATE_KEY` | 预发机 SSH 私钥全文 | -| `STAGING_SSH_HOST` | 预发机主机名或 IP | -| `STAGING_SSH_USER` | SSH 用户名 | -| `STAGING_SSH_PORT` | SSH 端口(默认 `22`) | -| `STAGING_DEPLOY_PATH` | 预发机上的部署目录 | -| `PROD_SSH_PRIVATE_KEY` | 生产机 SSH 私钥(可与预发不同) | +| `SSH_PRIVATE_KEY` | 预发(Staging)机 SSH 私钥全文 | +| `SSH_HOST` | 预发机主机名或 IP | +| `SSH_USER` | 预发 SSH 用户名 | +| `SSH_PORT` | 预发 SSH 端口(默认 `22`) | +| `DEPLOY_PATH` | 预发机上的部署目录 | +| `PROD_SSH_PRIVATE_KEY` | 生产机 SSH 私钥 | | `PROD_SSH_HOST` | 生产机主机 | | `PROD_SSH_USER` | 生产 SSH 用户 | | `PROD_SSH_PORT` | 生产 SSH 端口 | @@ -19,10 +19,8 @@ | `ALIYUN_CR_USERNAME` | 阿里云 ACR 用户名 | | `ALIYUN_CR_PASSWORD` | 阿里云 ACR 密码 | -> **Staging 服务器**:`main` 分支发布使用 `STAGING_*`,用于部署到独立的预发服务器。
-> **Production 服务器**:推送 `v*.*.*`(如 `v1.2.0`)时使用 `PROD_*`。 - -旧的无前缀 `SSH_HOST` / `SSH_USER` / `SSH_PRIVATE_KEY` / `SSH_PORT` / `DEPLOY_PATH` 指向生产机,当前 release workflow 不再读取它们;不要把这些值复制成 `STAGING_*`。Staging 需要填写另一台预发服务器自己的 `STAGING_*`。 +> **Staging**:`main` 发布使用无前缀 `SSH_*` 与 `DEPLOY_PATH`。
+> **Production**:`v*.*.*` tag 发布使用 `PROD_*`。 ## 触发条件 diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index fbb9d92..06b1b92 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -1,11 +1,10 @@ -# API Docker:main → Staging 机(Repository secrets: STAGING_*),Tag v*.*.* → Prod 机(PROD_*) +# API Docker:main → Staging 机(无前缀 SSH_* / DEPLOY_PATH),Tag v*.*.* → Prod 机(PROD_*) # 在 Repo → Settings → Secrets and variables → Actions 中配置,无需 GitHub Environments。 -# 命名:STAGING_SSH_HOST / STAGING_SSH_USER / STAGING_SSH_PRIVATE_KEY / STAGING_SSH_PORT / STAGING_DEPLOY_PATH -# PROD_SSH_HOST / PROD_SSH_USER / PROD_SSH_PRIVATE_KEY / PROD_SSH_PORT / PROD_DEPLOY_PATH +# Staging:SSH_HOST / SSH_USER / SSH_PRIVATE_KEY / SSH_PORT / DEPLOY_PATH +# Production:PROD_SSH_HOST / PROD_SSH_USER / PROD_SSH_PRIVATE_KEY / PROD_SSH_PORT / PROD_DEPLOY_PATH # 阿里云镜像仍为仓库级:ALIYUN_CR_USERNAME / ALIYUN_CR_PASSWORD # -# 注意:旧的无前缀 SSH_HOST / SSH_PRIVATE_KEY / DEPLOY_PATH 指向生产机;本 workflow 不再读取它们。 -# Staging 必须使用另一台服务器对应的 STAGING_*,Production 使用 PROD_*。 +# 勿把 PROD 私钥与 Staging 混用:staging 只读 SSH_PRIVATE_KEY,prod 只读 PROD_SSH_PRIVATE_KEY。 # # 旧库 pg_dump 一次性迁入当前 schema:见 workflow「Legacy DB migrate (one-shot)」(手动运行,非每次构建)。 # @@ -184,14 +183,14 @@ jobs: - name: Ensure staging SSH secret is set if: needs.resolve-deploy-target.outputs.target != 'prod' env: - STAGING_SSH_PRIVATE_KEY: ${{ secrets.STAGING_SSH_PRIVATE_KEY }} + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} run: | - if [ -z "$STAGING_SSH_PRIVATE_KEY" ]; then - echo "::error::STAGING_SSH_PRIVATE_KEY 未配置或为空,无法部署 staging。请在 Repository secrets 中设置 STAGING_SSH_*。" + if [ -z "$SSH_PRIVATE_KEY" ]; then + echo "::error::SSH_PRIVATE_KEY 未配置或为空,无法部署 staging。请在 Repository secrets 中设置 SSH_HOST / SSH_USER / SSH_PRIVATE_KEY / SSH_PORT / DEPLOY_PATH。" exit 1 fi - # 勿用 `prod && PROD_KEY || STAGING_KEY`:PROD 为空时会错误回退到 staging 密钥,导致连生产机报 Permission denied。 + # 勿用 `prod && PROD_KEY || SSH_KEY`:PROD 为空时会错误回退到 staging 密钥,导致连生产机报 Permission denied。 - name: Set up SSH (production) if: needs.resolve-deploy-target.outputs.target == 'prod' uses: webfactory/ssh-agent@v0.9.1 @@ -202,7 +201,7 @@ jobs: if: needs.resolve-deploy-target.outputs.target != 'prod' uses: webfactory/ssh-agent@v0.9.1 with: - ssh-private-key: ${{ secrets.STAGING_SSH_PRIVATE_KEY }} + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Export deploy connection env run: | @@ -215,10 +214,10 @@ jobs: } >> "$GITHUB_ENV" else { - echo "SSH_HOST=${{ secrets.STAGING_SSH_HOST }}" - echo "SSH_USER=${{ secrets.STAGING_SSH_USER }}" - echo "SSH_PORT=${{ secrets.STAGING_SSH_PORT || '22' }}" - echo "COMPOSE_DIR=${{ secrets.STAGING_DEPLOY_PATH || '/opt/life-echo' }}" + echo "SSH_HOST=${{ secrets.SSH_HOST }}" + echo "SSH_USER=${{ secrets.SSH_USER }}" + echo "SSH_PORT=${{ secrets.SSH_PORT || '22' }}" + echo "COMPOSE_DIR=${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}" } >> "$GITHUB_ENV" fi diff --git a/.github/workflows/legacy-data-migrate.yml b/.github/workflows/legacy-data-migrate.yml index 8d86724..dda3ed3 100644 --- a/.github/workflows/legacy-data-migrate.yml +++ b/.github/workflows/legacy-data-migrate.yml @@ -3,12 +3,12 @@ # 目标库须已是 alembic upgrade head(与线上一致);占号用户清理逻辑依赖当前全部迁移后的表结构。 # # 不会在 push / 部署时自动运行,仅手动 workflow_dispatch,避免每次构建误迁库。 -# 远端需已用 docker compose 部署(目录约定与 docker-build-deploy 一致:STAGING_DEPLOY_PATH / PROD_DEPLOY_PATH)。 +# 远端需已用 docker compose 部署(目录约定与 docker-build-deploy 一致:DEPLOY_PATH / PROD_DEPLOY_PATH)。 # # 备份文件:提交在仓库 api/backups/(默认 life_echo_20260313_182756.sql), # workflow 会先 scp 到远端再迁移。其他 *.sql 仍被 gitignore,需按需增加 ! 例外行。 # -# Secrets:与 Docker Build and Deploy 相同(STAGING_* / PROD_*)。 +# Secrets:与 Docker Build and Deploy 相同(staging:无前缀 SSH_* / DEPLOY_PATH;production:PROD_*)。 name: Legacy DB migrate (one-shot) @@ -82,7 +82,7 @@ jobs: if: github.event.inputs.environment != 'production' uses: webfactory/ssh-agent@v0.9.1 with: - ssh-private-key: ${{ secrets.STAGING_SSH_PRIVATE_KEY }} + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Export deploy connection env run: | @@ -95,10 +95,10 @@ jobs: } >> "$GITHUB_ENV" else { - echo "SSH_HOST=${{ secrets.STAGING_SSH_HOST }}" - echo "SSH_USER=${{ secrets.STAGING_SSH_USER }}" - echo "SSH_PORT=${{ secrets.STAGING_SSH_PORT || '22' }}" - echo "COMPOSE_DIR=${{ secrets.STAGING_DEPLOY_PATH || '/opt/life-echo' }}" + echo "SSH_HOST=${{ secrets.SSH_HOST }}" + echo "SSH_USER=${{ secrets.SSH_USER }}" + echo "SSH_PORT=${{ secrets.SSH_PORT || '22' }}" + echo "COMPOSE_DIR=${{ secrets.DEPLOY_PATH || '/opt/life-echo' }}" } >> "$GITHUB_ENV" fi