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 應以單一執行個體(singleton)方式執行。為了獲得最佳效能,我們建議 git-bridge 資料使用本機磁碟。git-bridge 資料磁碟應定期備份。 在水平擴展的資料儲存方面,您需要:
  • 一個可供所有 Server Pro 執行個體存取的集中式 MongoDB 執行個體
  • 一個可供所有 Server Pro 執行個體存取的集中式 Redis 執行個體
  • 一個用於專案與歷史檔案的集中式 S3 相容儲存後端
  • 每個執行個體上用於暫存檔案的本機磁碟
  • 託管 git-bridge 容器之執行個體上用於 git-bridge 資料的本機磁碟

負載平衡器需求

  • 持久性路由,例如使用 cookie 此需求源自以下元件:
    • Server Pro 的即時編輯功能使用 WebSockets,並以 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 設定,預設值為 65 秒。 使用預設值時,負載平衡器的 keep-alive 逾時時間設為 60 秒即可運作。 若設定 NGINX_KEEPALIVE_TIMEOUT=120,負載平衡器可以選擇 115 秒。
  • 用戶端 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 以預設方式 bind-mount 至 /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 會將歷史服務的下載 URL 提供給 git-bridge,我們需要將這些歷史 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 設為以 bind-mount 掛載的 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日