feat(deployment): add QEMU setup for cross-platform builds and improve Docker Buildx configuration
Deploy production / deploy (push) Has been cancelled

This commit is contained in:
yuxuanhui
2026-09-25 00:00:08 +08:00
parent 99bc36439e
commit 5a7f39726b
4 changed files with 34 additions and 6 deletions
+5 -3
View File
@@ -77,7 +77,9 @@ postgresql+asyncpg://wq_user:YOUR_PASSWORD@10.0.0.30:5432/wq_alpha
继续使用 `ubuntu-latest` 标签,该标签对应的**实际执行环境**需要 Git、Bash、Node.js 20(checkout v4)、Docker CLI/Buildx、OpenSSH 客户端、tar、base64,并能连接构建机的 Docker daemon。容器模式 Runner 也需要具备这些工具和 Docker 连接能力。
Runner 需要访问 checkout action、基础镜像仓库、依赖源、A 的镜像仓库和 B 的 SSH 端口。`BUILD_PLATFORM` 必须匹配 B;若与构建机架构不同,需事先在构建机配置对应的跨架构构建能力。
Runner 需要访问 checkout/QEMU action、基础镜像仓库、依赖源、A 的镜像仓库和 B 的 SSH 端口。`BUILD_PLATFORM` 必须匹配 B:当前 Runner 为 `aarch64`、B 为 `x86_64`,仍应配置 `linux/amd64`(或使用默认值)。
工作流先通过 `docker/setup-qemu-action` 注册 amd64/arm64 模拟支持,再创建独立的 `docker-container` Buildx 构建器。QEMU 初始化需要构建机的 Docker daemon 允许运行特权容器并注册 binfmt;此操作作用于构建机。日志会显示构建机架构、目标平台和构建器支持的平台。Gitea 中禁用该 action 的 GitHub 缓存功能。前后端均显式使用同一个构建器,成功或失败后清理构建器及临时认证目录,不切换 Runner 原有默认构建器。跨架构模拟通常比同架构构建慢。
### B:运行环境
@@ -101,7 +103,7 @@ sudo install -d -m 700 -o deploy -g deploy /opt/wq-alpha
`main` push 或手动运行工作流会依次执行:
1. checkout 当前提交,在 Runner 构建 backend/web,分别推送到 A 的 Gitea Packages。两个镜像均推送成功才执行 SSH 部署。
1. checkout 当前提交,初始化 QEMU 和独立 Buildx 构建器,按 B 的目标平台构建 backend/web,分别推送到 A 的 Gitea Packages。两个镜像均推送成功才执行 SSH 部署。
2. `scripts/deploy-remote.sh` 严格验证 B 主机公钥,通过同一 SSH 连接传入应用环境变量、生产 Compose 和部署脚本。
3. B 为每次尝试创建 `DEPLOY_PATH/releases/<提交 SHA>.<随机后缀>/`,只保存 `compose.production.yaml` 和 `scripts/deploy-production.sh`,无需更新项目源码。
4. B 登录 A 的仓库并拉取两个镜像。随后获得 Docker 部署锁,运行新 backend 镜像校验配置和数据库连接。
@@ -145,7 +147,7 @@ docker logs --tail=100 wq-alpha-production-web-1
不要公开含业务信息的日志,普通维护不要使用 `down -v`。发布目录可在确认无需回退后人工清理,不影响 named volumes;数据库备份和恢复在数据库管理端进行。
配置依据:[Gitea Container Registry](https://docs.gitea.com/usage/packages/container/)、[Docker 登录](https://docs.docker.com/reference/cli/docker/login/)、[Compose pull](https://docs.docker.com/reference/cli/docker/compose/pull/)、[Compose run](https://docs.docker.com/reference/cli/docker/compose/run/)、[Compose up](https://docs.docker.com/reference/cli/docker/compose/up/)。
配置依据:[Gitea Container Registry](https://docs.gitea.com/usage/packages/container/)、[Docker 跨平台构建](https://docs.docker.com/build/building/multi-platform/)、[QEMU action](https://github.com/docker/setup-qemu-action/tree/v3)、[Docker 登录](https://docs.docker.com/reference/cli/docker/login/)、[Compose pull](https://docs.docker.com/reference/cli/docker/compose/pull/)、[Compose run](https://docs.docker.com/reference/cli/docker/compose/run/)、[Compose up](https://docs.docker.com/reference/cli/docker/compose/up/)。
## 5. 1Panel 夜间全量目录同步