本文档记录了 AFFiNE 项目的部署系统和流程。它涵盖了 AFFiNE 如何部署到不同环境、每个环境的配置以及自托管选项。有关构建系统的信息,请参阅构建系统。有关 CI/CD 管道的详细信息,请参阅CI/CD 管道。有关自托管说明,请参阅自托管指南。
AFFiNE 支持三种主要的部署环境
| 环境 | 描述 | URL | 代码中的路径 |
|---|---|---|---|
| Canary (金丝雀) | 包含最新功能的开发版本 | https://affine.fail | .github/workflows/deploy.yml (dev 命名空间) |
| Beta (测试版) | 用于测试的预发布版本 | https://insider.affine.pro | .github/workflows/deploy.yml (beta 命名空间) |
| 稳定 | 生产发布版本 | https://app.affine.pro | .github/workflows/deploy.yml (生产命名空间) |
下图展示了高层部署架构
来源
.github/workflows/deploy.yml.github/workflows/release-desktop.yml.github/workflows/release-mobile.yml.docker/selfhost/compose.ymlAFFiNE 的云部署通过 Kubernetes 使用 Helm chart 进行处理,并通过 GitHub Actions 工作流进行编排。
来源
.github/workflows/deploy.yml.github/workflows/build-images.yml.github/actions/deploy/deploy.mjs.github/helm/affine/charts/graphql/templates/migration.yaml在每个环境中分配的资源不同,由 .github/actions/deploy/deploy.mjs 控制
| 环境 | GraphQL Replicas (副本) | Sync Replicas (副本) | Renderer Replicas (副本) | Doc Replicas (副本) | GraphQL CPU | Sync CPU |
|---|---|---|---|---|---|---|
| Canary (金丝雀) | 2 | 2 | 2 | 2 | 1 core (核心) | 1 core (核心) |
| Beta (测试版) | 2 | 2 | 2 | 2 | 1 core (核心) | 1 core (核心) |
| 稳定 | 3 | 3 | 3 | 3 | 可配置 | 可配置 |
来源
.github/actions/deploy/deploy.mjs:27-66AFFiNE 使用 Helm chart 来定义其 Kubernetes 资源
来源
.github/helm/affine/charts/graphql/templates/deployment.yaml.github/helm/affine/charts/doc/templates/deployment.yaml.github/helm/affine/charts/sync/templates/deployment.yaml.github/helm/affine/charts/renderer/templates/deployment.yaml.github/helm/affine/charts/gcloud-sql-proxy/templates/deployment.yaml.github/helm/affine/values.yaml桌面应用程序部署由 release-desktop.yml 工作流处理。
来源
.github/workflows/release-desktop.yml| 平台 | 架构 | 包格式 |
|---|---|---|
| Windows | x64,arm64 | EXE, NSIS 安装程序, ZIP |
| macOS | x64,arm64 | DMG、ZIP |
| Linux | x64 | AppImage, DEB, Flatpak, ZIP |
来源
.github/workflows/release-desktop.yml:72-101.github/workflows/release-desktop.yml:198-214移动应用部署使用 release-mobile.yml 工作流来构建和部署 iOS 和 Android 应用程序。
来源
.github/workflows/release-mobile.ymlAFFiNE 可以使用 Docker Compose 进行自托管,其配置在 .docker/selfhost/compose.yml 中定义。
来源
.docker/selfhost/compose.yml.github/deployment/self-host/compose.yamlpackages/backend/server/scripts/self-host-predeploy.js用户可以通过 .env 文件中定义的环境变量来配置其自托管安装。
| 可变 | 描述 | 默认值 |
|---|---|---|
| AFFINE_REVISION | 要部署的版本 (stable, beta, canary) | stable (稳定版) |
| PORT | 服务器端口 | 3010 |
| UPLOAD_LOCATION | 用于存储上传文件的路径 | ~/.affine/self-host/storage |
| CONFIG_LOCATION | 用于存储配置文件的路径 | ~/.affine/self-host/config |
| DB_DATA_LOCATION | PostgreSQL 数据存储路径 | ~/.affine/self-host/postgres/pgdata |
| DB_USERNAME | PostgreSQL 用户名 | affine |
| DB_PASSWORD | PostgreSQL 密码 | |
| DB_DATABASE | PostgreSQL 数据库名 | affine |
来源
.docker/selfhost/.env.example.docker/selfhost/compose.yml下表总结了 AFFiNE 部署过程中涉及的关键文件
| 文件路径 | 目的 |
|---|---|
.github/workflows/deploy.yml | 主云部署工作流 |
.github/workflows/release-desktop.yml | 桌面应用发布工作流 |
.github/workflows/release-mobile.yml | 移动应用发布工作流 |
.github/actions/deploy/deploy.mjs | 云基础设施的部署逻辑 |
.github/helm/affine/ | Kubernetes 部署的 Helm charts |
.docker/selfhost/compose.yml | 用于自托管的 Docker Compose 配置 |
.docker/selfhost/.env.example | 自托管的环境变量示例 |
packages/backend/server/scripts/self-host-predeploy.js | 自托管的预部署脚本 |
部署工作流与 AFFiNE CI/CD 管道集成。部署进行前,.github/workflows/build-test.yml 中的构建测试必须通过。部署过程利用了 CI 管道中经过测试的相同构建产物。
有关 CI/CD 管道的更多详细信息,请参阅CI/CD 管道。
来源
.github/workflows/build-test.yml.github/workflows/deploy.ymlAFFiNE 的云部署利用 Google Kubernetes Engine (GKE) 及相关服务
在部署到不同环境时,通过 Helm charts 配置相应的云资源,环境特定的设置存储在 GitHub Actions secrets 中。
来源
.github/actions/deploy/deploy.mjs:68-99.github/helm/affine/charts/gcloud-sql-proxy/templates/deployment.yaml刷新此 Wiki
最后索引时间2025 年 4 月 18 日(1ae36d)