Skip to main content
Ayakaleaf Pro 支持水平扩展。我们已经过测试并验证它在多副本情况下可以正常运行。
本文档列出了在多个节点上运行 Ayakaleaf Pro 的技术要求,并提供相关指南。
从 Server CE/Server Pro 5.0.3 开始,环境变量已从 SHARELATEX_* 更名为 OVERLEAF_*。如果你使用的是 4.x 版本(或更早版本),请确保变量使用相应的前缀(例如使用 SHARELATEX_SITE_URL 而不是 OVERLEAF_SITE_URL)
设置水平扩展需要投入大量精力。我们建议仅在达到一定规模时才考虑水平扩展。举例来说,一个面向总计 1,000 名用户的 Server Pro 安装,已成功部署在一台配备两颗 4 核处理器和 32GB 系统内存的服务器上。有关建议,请参阅硬件要求文档。 采用水平扩展的 Server Pro 部署涉及一系列外部组件,例如负载均衡器和 S3 兼容的存储后端。 我们可以帮助排查 Server Pro 容器中可能因配置错误而导致的错误,并根据本文档提供一般性建议。遗憾的是,我们无法协助配置第三方应用程序/系统。 解决与你用于提供外部组件的硬件/软件相关的特定技术问题,不在我们的支持条款范围内。

要求

外部集中式数据存储

Server Pro 中的数据存储可分为四类数据存储:
  • MongoDB
    • 大部分数据持久化存储在 MongoDB 中。
    • 我们支持本地实例或外部实例,例如 MongoDB Atlas(在 AWS 基础设施内运行的全托管 MongoDB 服务)。
    注意: 遗憾的是,目前我们尚未正式支持 CosmoDB/DocumentDB 等 MongoDB 兼容数据库,因为我们没有用它们测试过 Server Pro。虽然使用兼容数据库部署 Server Pro 可能可行,但我们仅正式支持使用 MongoDB 的部署。
  • Redis
    • Redis 存储临时数据,例如在刷新到 MongoDB 之前待处理的文档更新。
    • Redis 用于在不同服务之间传递文档更新,并通知编辑器某个项目中的状态变化。
    • Redis 用于存储用户会话。
    • 我们支持本地实例或外部实例。
    注意: 遗憾的是,目前我们尚未正式支持 KeyDB/Valkey 等 Redis 兼容的键值存储,因为我们没有用它们测试过 Server Pro。虽然使用兼容存储部署 Server Pro 可能可行,但我们仅正式支持使用 Redis 的部署。
  • 项目文件和历史文件
    • 不可编辑的项目文件存储在 MongoDB 之外。 新的项目历史系统(Server Pro 3.5 及以后版本)同样将历史记录存储在 MongoDB 之外。
    • 对于小型单实例部署,我们支持本地文件系统(可以由本地 SSD、NFS 或 EBS 提供支持)或 S3 兼容的数据存储系统。
    • 对于水平扩展,我们仅支持 S3 兼容的数据存储系统。
    重要: 水平扩展不支持 NFS/Amazon EFS/Amazon EBS。有关 Server Pro 存储扩展的更多详情,请参阅硬件存储要求部分。
  • 临时文件
    • 为获得最佳性能,LaTeX 编译需要在快速的本地磁盘上运行。编译输出无需持久化或备份。
    • 新上传文件的缓冲以及项目 zip 文件的创建同样受益于使用本地磁盘。
我们强烈建议使用本地磁盘。使用任何类型的网络磁盘(例如 NFS 或 EBS)都可能导致意外的编译错误和其他性能问题。

Git-bridge

Server Pro 从 4.0.1 版本开始提供 Git-bridge。
git 仓库存储在本地磁盘上,没有可用的复制选项。Git-bridge 应以单例方式运行。为获得最佳性能,我们建议为 git-bridge 数据使用本地磁盘。git-bridge 数据磁盘应定期备份。 对于水平扩展的数据存储,你需要:
  • 一个可供所有 Server Pro 实例访问的集中式 MongoDB 实例
  • 一个可供所有 Server Pro 实例访问的集中式 Redis 实例
  • 一个用于存放项目文件和历史文件的集中式 S3 兼容存储后端
  • 每个实例上用于临时文件的本地磁盘
  • 托管 git-bridge 容器的实例上用于 git-bridge 数据的本地磁盘

负载均衡器要求

  • 持久路由,例如使用 cookie 这一要求源自以下组件:
    • Server Pro 中的实时编辑功能使用 WebSocket,并以 XHR 轮询作为回退方案。每个编辑会话在服务器端都有本地状态,因此同一编辑会话的请求必须始终路由到同一个 Server Pro 实例。协作功能使用 Redis Pub/Sub 在多个 Server Pro 实例之间共享更新。
    • 为了优化性能,LaTeX 编译会将输出和编译缓存保存在本地。向某个 Server Pro 实例发出编译请求后,后续的 PDF/日志下载请求需要路由到同一个 Server Pro 实例。
  • 较长的请求超时时间,以支持大型 LaTeX 文档的编译
  • WebSocket 支持,以获得最佳性能
  • 50MB 的 POST 负载大小
  • Keep-alive 超时时间必须低于 Server Pro 的 keep-alive 超时时间 Server Pro 中的 keep-alive 超时时间可以通过环境变量 NGINX_KEEPALIVE_TIMEOUT 进行配置,默认值为 65s。 在默认值下,负载均衡器中设置 60s 的 keep-alive 超时时间即可正常工作。 如果设置 NGINX_KEEPALIVE_TIMEOUT=120,负载均衡器可以选择 115s。
  • 客户端 IP 将请求头 X-Forwarded-For 设置为客户端 IP。
  • 终止 SSL 时 负载均衡器需要添加请求头 X-Forwarded-Proto: https。

Server Pro 配置

密钥 各 Server Pro 实例需要使用一致的共享密钥:
  • WEB_API_PASSWORD(web api 认证)
  • STAGING_PASSWORD 和 V1_HISTORY_PASSWORD 使用相同的值(历史认证)
  • CRYPTO_RANDOM(用于会话 cookie)
  • OT_JWT_AUTH_KEY(历史认证)
所有这些密钥都需要配置各自唯一的值,并在各实例之间共享。 如果未进行配置,当用户请求被路由到不同的 Server Pro 实例时,请求将无法通过认证检查,用户要么会频繁被重定向到登录页面,要么在 UI 中的操作会以意想不到的方式失败。 如果未进行配置,Server Pro 会为每个密钥使用一个新的随机值,该值基于从 /dev/urandom 读取的 32 个随机字节(256 个随机位)。
MongoDB 将 OVERLEAF_MONGO_URL(4.x 及更早版本为 SHARELATEX_MONGO_URL)指向集中式 MongoDB 实例。 Redis 将 OVERLEAF_REDIS_HOST(4.x 及更早版本为 SHARELATEX_REDIS_HOST)和 REDIS_HOST 指向集中式 Redis 实例。 用于项目文件和历史文件的 S3 兼容存储 详情请参阅 S3 兼容存储文档。 临时文件 默认将本地 SSD 绑定挂载到 /var/lib/overleaf(4.x 及更早版本为 /var/lib/sharelatex)即可满足需求。请务必将 SANDBOXED_COMPILES_HOST_DIR 指向宿主机上的挂载点。
我们强烈建议使用本地磁盘。使用任何类型的网络磁盘(例如 NFS 或 EBS)都可能导致意外的编译错误和其他性能问题。
代理配置
  • 设置 OVERLEAF_BEHIND_PROXY=true(4.x 及更早版本为 SHARELATEX_BEHIND_PROXY)以获取准确的客户端 IP。
  • 将 TRUSTED_PROXY_IPS 设置为负载均衡器的 IP(可以指定多个 CIDR,以逗号分隔)。
Git-bridge 集成
Server Pro 从 4.0.1 版本开始提供 Git-bridge。
git-bridge 容器需要一个配套的 Server Pro 容器来处理传入的 git 请求。该配套容器也可以处理常规用户流量。在示例配置中,第一个实例充当 git-bridge 的配套容器,但实际上任何实例都可以承担这一角色。 为什么需要指定一个 Server Pro 容器作为 git-bridge 的配套容器?因为 Server Pro 会向 git-bridge 提供历史服务的下载 URL,我们需要将这些历史 URL 配置为可从 git-bridge 容器访问。 Server Pro 容器配置:
  • 将 GIT_BRIDGE_ENABLED 设置为 'true'
  • 将 GIT_BRIDGE_HOST 设置为 <git-bridge container name>,例如 git-bridge
  • 将 GIT_BRIDGE_PORT 设置为 8000
  • 将 V1_HISTORY_URL 设置为 http://<server-pro sibling container name>:3100/api。 注意:仅 git-bridge 容器的配套容器需要进行此设置。其他实例可以使用 localhost URL,即默认值。
git-bridge 容器配置:
  • 将 GIT_BRIDGE_API_BASE_URL 设置为 http://<server-pro sibling container name>/api/v0,例如 http://server-pro-ha-1/api/v0
  • 将 GIT_BRIDGE_OAUTH2_SERVER 设置为 http://<server-pro sibling container name>,例如 http://server-pro-ha-1
  • 将 GIT_BRIDGE_POSTBACK_BASE_URL 设置为 http://<git-bridge container name>:8000,例如 http://git-bridge:8000
  • 将 GIT_BRIDGE_ROOT_DIR 设置为绑定挂载的 git-bridge 数据磁盘,例如 /data/git-bridge
以下配置展示了一个自包含的部署。要使该演示正常运行,你需要提供有效的 SSL 密钥/证书,并调整 OVERLEAF_SITE_URL(4.x 及更早版本为 SHARELATEX_SITE_URL)。在实际部署中,你必须按照行内注释的说明,将虚拟密钥替换为真实密钥。在实际部署中,你还需要将各个容器迁移到专用节点上,并根据你的本地网络设置调整 IP 地址。

硬件

我们建议所有参与水平扩展的 Server Pro 实例使用相同的硬件规格。 关于 Server Pro 实例硬件规格的一般性建议同样适用。

升级 Server Pro

作为升级过程的一部分,Server Pro 会自动运行数据库迁移。这些迁移并非设计为可在多个实例上并行运行。 迁移需要在实际的 Web 应用程序启动之前完成。你可以检查日志中是否出现 Finished migrations 条目,或者等待应用程序开始接受流量。 升级流程如下:
  1. 安排一个维护窗口
  2. 停止所有 Server Pro 实例
  3. 按照文档中的说明进行一致性备份
  4. 使用新版本启动单个 Server Pro 实例
  5. 验证新实例是否按预期工作
  6. 使用新版本启动其他实例
最后修改于 2026年10月5日