菜单

部署

相关源文件

本文档记录了 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.yml

云部署流程

AFFiNE 的云部署通过 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 CPUSync CPU
Canary (金丝雀)22221 core (核心)1 core (核心)
Beta (测试版)22221 core (核心)1 core (核心)
稳定3333可配置可配置

来源

  • .github/actions/deploy/deploy.mjs:27-66

Helm Chart 结构

AFFiNE 使用 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

桌面构建平台和格式

平台架构包格式
Windowsx64,arm64EXE, NSIS 安装程序, ZIP
macOSx64,arm64DMG、ZIP
Linuxx64AppImage, 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.yml

自托管部署

AFFiNE 可以使用 Docker Compose 进行自托管,其配置在 .docker/selfhost/compose.yml 中定义。

来源

  • .docker/selfhost/compose.yml
  • .github/deployment/self-host/compose.yaml
  • packages/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_LOCATIONPostgreSQL 数据存储路径~/.affine/self-host/postgres/pgdata
DB_USERNAMEPostgreSQL 用户名affine
DB_PASSWORDPostgreSQL 密码
DB_DATABASEPostgreSQL 数据库名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自托管的预部署脚本

与 CI/CD 流水线的集成

部署工作流与 AFFiNE CI/CD 管道集成。部署进行前,.github/workflows/build-test.yml 中的构建测试必须通过。部署过程利用了 CI 管道中经过测试的相同构建产物。

有关 CI/CD 管道的更多详细信息,请参阅CI/CD 管道

来源

  • .github/workflows/build-test.yml
  • .github/workflows/deploy.yml

云提供商集成

AFFiNE 的云部署利用 Google Kubernetes Engine (GKE) 及相关服务

  • Google Cloud SQL for PostgreSQL 数据库
  • Google Redis 用于缓存
  • Google Cloud Storage (通过 R2 兼容层) 用于对象存储
  • Google Cloud IAM 用于服务账户管理

在部署到不同环境时,通过 Helm charts 配置相应的云资源,环境特定的设置存储在 GitHub Actions secrets 中。

来源

  • .github/actions/deploy/deploy.mjs:68-99
  • .github/helm/affine/charts/gcloud-sql-proxy/templates/deployment.yaml