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