Ayakaleaf Pro 支持水平扩展。我们已经过测试并验证它在多副本情况下可以正常运行。
从 Server CE/Server Pro
5.0.3 开始,环境变量已从 SHARELATEX_* 更名为 OVERLEAF_*。如果你使用的是 4.x 版本(或更早版本),请确保变量使用相应的前缀(例如使用 SHARELATEX_SITE_URL 而不是 OVERLEAF_SITE_URL)要求

外部集中式数据存储
Server Pro 中的数据存储可分为四类数据存储:-
MongoDB
- 大部分数据持久化存储在 MongoDB 中。
- 我们支持本地实例或外部实例,例如 MongoDB Atlas(在 AWS 基础设施内运行的全托管 MongoDB 服务)。
-
Redis
- Redis 存储临时数据,例如在刷新到 MongoDB 之前待处理的文档更新。
- Redis 用于在不同服务之间传递文档更新,并通知编辑器某个项目中的状态变化。
- Redis 用于存储用户会话。
- 我们支持本地实例或外部实例。
-
项目文件和历史文件
- 不可编辑的项目文件存储在 MongoDB 之外。 新的项目历史系统(Server Pro 3.5 及以后版本)同样将历史记录存储在 MongoDB 之外。
- 对于小型单实例部署,我们支持本地文件系统(可以由本地 SSD、NFS 或 EBS 提供支持)或 S3 兼容的数据存储系统。
-
对于水平扩展,我们仅支持 S3 兼容的数据存储系统。
-
临时文件
- 为获得最佳性能,LaTeX 编译需要在快速的本地磁盘上运行。编译输出无需持久化或备份。
- 新上传文件的缓冲以及项目 zip 文件的创建同样受益于使用本地磁盘。
我们强烈建议使用本地磁盘。使用任何类型的网络磁盘(例如 NFS 或 EBS)都可能导致意外的编译错误和其他性能问题。
Git-bridge
Server Pro 从 4.0.1 版本开始提供 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。
HAProxy 配置示例
HAProxy 配置示例
Server Pro 配置
密钥 各 Server Pro 实例需要使用一致的共享密钥:WEB_API_PASSWORD(web api 认证)STAGING_PASSWORD和V1_HISTORY_PASSWORD使用相同的值(历史认证)CRYPTO_RANDOM(用于会话 cookie)OT_JWT_AUTH_KEY(历史认证)
/dev/urandom 读取的 32 个随机字节(256 个随机位)。
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,以逗号分隔)。
Server Pro 从 4.0.1 版本开始提供 Git-bridge。
-
将
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_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
docker-compose.yml 配置示例
docker-compose.yml 配置示例
以下配置展示了一个自包含的部署。要使该演示正常运行,你需要提供有效的 SSL 密钥/证书,并调整
OVERLEAF_SITE_URL(4.x 及更早版本为 SHARELATEX_SITE_URL)。在实际部署中,你必须按照行内注释的说明,将虚拟密钥替换为真实密钥。在实际部署中,你还需要将各个容器迁移到专用节点上,并根据你的本地网络设置调整 IP 地址。硬件
我们建议所有参与水平扩展的 Server Pro 实例使用相同的硬件规格。 关于 Server Pro 实例硬件规格的一般性建议同样适用。升级 Server Pro
作为升级过程的一部分,Server Pro 会自动运行数据库迁移。这些迁移并非设计为可在多个实例上并行运行。 迁移需要在实际的 Web 应用程序启动之前完成。你可以检查日志中是否出现Finished migrations 条目,或者等待应用程序开始接受流量。
升级流程如下:
- 安排一个维护窗口
- 停止所有 Server Pro 实例
- 按照文档中的说明进行一致性备份
- 使用新版本启动单个 Server Pro 实例
- 验证新实例是否按预期工作
- 使用新版本启动其他实例

