Skip to main content
若要在開發環境中設定沙箱編譯,開發環境與正式環境之間有些許差異。你需要注意以下 3 件事:
  • 檔案權限問題
  • history-v1 與 filestore 之間的磁碟區共用
  • 子目錄問題

啟用沙箱編譯

這裡只需要像在 Overleaf CE 中一樣啟用沙箱編譯即可,唯一需要注意的是使用者設定。這裡我們將其設為 root。 在正式環境中,我們使用 www-data 作為 Overleaf 容器與 TeX 編譯容器之間的共用使用者。然而在開發環境中,容器內的預設使用者是 node,且沒有 www-data 使用者可供對應,因此我們改用 root 作為替代做法。
請不要使用你自行建置的映像檔,否則可能會遇到一連串錯誤。

修正檔案權限

LaTeX 會以 TEXLIVE_IMAGE_USER 環境變數所指定的使用者身分在同層容器中執行。在上述範例中,此值設為 root,其 uid 為 0。這會與上述權限產生衝突,因為 root 使用者沒有寫入 compiles 子資料夾的權限。 一個快速的修正方式是將 compiles 的群組擁有權交給 root 群組並授予讀寫權限,同時設定 setgid,讓新的子資料夾也繼承此擁有權:
bash
詳細說明請參閱 services/clsi/README.md。

history-v1 與 filestore 之間的磁碟區共用

預設情況下,filestore 在 Overleaf 中扮演 S3 與其他服務之間的橋樑。然而在 Overleaf CE 或 Server Pro 中,所有檔案預設都儲存在本機。因此,Overleaf 採用了一個相當巧妙的方法。
server-ce/config/settings.js
同時,data/history 也會被 history 服務使用。如此一來,不同的微服務便能共用相同的資料。你需要在開發環境中將 history-v1-buckets 這個磁碟區加入 filestore 服務,否則 clsi 將無法從 filestore 服務拉取 blob 檔案。
develop/docker-compose.yml
此外,你還需要在 dev.env 設定中加入 BUCKET 名稱:
develop/dev.env

使用子目錄

Filestore 預設將 useSubdirectories 設為 true,但在開發環境中,history v1 會將所有資料扁平化,進而造成衝突。若要修正此問題,你需要加入以下設定:
develop/dev.env
在 history v1 中,所有 project_blobs 檔案原本是這樣儲存的:
你需要將 useSubdirectories 設為 true,改用子目錄模式。此時,blob 中原本的 _ 會被替換為 /。
最後修改於 2026年10月5日