二進位檔案遷移
即將推出的 Server Pro 與社群版主要版本6.0 將把二進位檔案的儲存空間用量減少一半。5.5.7 版本包含線上遷移,讓升級過程中的停機時間降到最低。
自 Server Pro 4.x 起,二進位檔案會儲存兩份:一份在「filestore」的作用中檔案儲存區,另一份在完整專案歷史系統中。今後,每個檔案只會在完整專案歷史系統中儲存一份。
遷移至整合儲存系統包含兩個部分:一個用於控制遷移階段的新旗標,以及一個處理所有作用中與已軟刪除專案的指令碼。
階段:
OVERLEAF_FILESTORE_MIGRATION_LEVEL=0(預設):檔案從 filestore 讀取並寫入 filestore。檔案會以非同步方式寫入歷史記錄。OVERLEAF_FILESTORE_MIGRATION_LEVEL=1:檔案從歷史記錄讀取,必要時退回 filestore,並同時寫入 filestore 與歷史記錄。可以降級至OVERLEAF_FILESTORE_MIGRATION_LEVEL=0。OVERLEAF_FILESTORE_MIGRATION_LEVEL=2:檔案只從歷史記錄讀取並寫入歷史記錄。除非遷移是以「離線」方式執行,否則無法降級至OVERLEAF_FILESTORE_MIGRATION_LEVEL=1。
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID)與 history(OVERLEAF_HISTORY_S3_ACCESS_KEY_ID)使用不同的服務帳號:請授予 filestore 使用者讀取歷史 blob bucket OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET 的權限。今後,filestore 服務將負責處理來自編譯器服務的讀取請求。
標準的 Server Pro 授權允許你在一個正式環境以及一個非正式/沙箱環境中執行本應用程式;強烈建議你準備一個非正式環境用於測試。
若你升級至 Server Pro/CE
6.0 版後決定降級至較早的版本,應從完整的系統備份還原。遷移程序
1
建立備份
為執行個體建立完整備份,其中包含 mongo、redis 與 sharelatex 目錄的一致性快照。
2
更新
Toolkit: 使用
$ bin/upgrade 指令碼將 toolkit 升級至最新版本。出現提示 Upgrade image? 時,不要確認——而是手動編輯 config/version 檔案,將值設為 5.5.7。舊版 docker-compose.yml: 將 sharelatex 服務的版本更新為 5.5.7。3
估計受影響的專案數量
4
清空專案歷史佇列
"project_ids":0)。若「failedProjects」不為零,請聯絡支援團隊,且不要繼續進行二進位檔案遷移。
5
將遷移階段推進至 1
Toolkit:在
config/variables.env 中設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL=1。舊版 docker-compose.yml:在 sharelatex 服務的 environment 區段中設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1'。6
套用設定變更並啟動執行個體
Toolkit:
bin/up -d舊版 docker-compose.yml:docker compose up -d7
驗證二進位檔案的存取
在瀏覽器中以 Overleaf 編輯器開啟專案,並選取一個二進位檔案,例如圖片。
8
執行遷移指令碼
若你將日誌檔案持久化到 sharelatex 容器之外,請確認日誌目錄的擁有者設為
www-data 使用者(uid=33),以便寫入輸出的日誌檔案。0,且最後幾行會顯示沒有失敗:9
停止執行個體
Toolkit:
bin/stop sharelatex舊版 docker-compose.yml:docker compose stop sharelatex10
讓應用程式無法存取舊檔案
現在可以將舊檔案移至次要儲存空間。建議保留這些檔案一段時間,以防日後出現問題。
11
將遷移階段推進至 2
Toolkit:在
config/variables.env 中設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL=2。舊版 docker-compose.yml:在 sharelatex 服務的 environment 區段中設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2'。12
套用設定變更並啟動執行個體
Toolkit:
bin/up -d舊版 docker-compose.yml:docker compose up -d13
驗證二進位檔案的存取
在瀏覽器中以 Overleaf 編輯器開啟專案,並選取一個二進位檔案,例如圖片。
離線遷移
若要在二進位檔案遷移指令碼執行期間阻止使用者登入,請依照下列步驟操作:- 以管理員帳號登入 Overleaf 執行個體
- 點選 Admin 按鈕並選擇 Manage Site
- 點選 Open/Close Editor 分頁
- 點選 Close Editor 按鈕
- 點選 Disconnect all users 按鈕
線上遷移
你可以在應用程式仍在執行時執行遷移指令碼,但需要考量以下幾點:- 遷移過程會大量使用 IO,指令碼執行期間應監控資源使用狀況。
- 若處理並行度較高,
filestore服務的事件迴圈可能會出現阻塞,導致使用者體驗下降。建議先使用預設值--concurrency=10與--concurrent-batches=1。 - 你可以隨時停止指令碼。再次啟動時,會驗證先前的專案並略過已處理的檔案。若你偏好在較不忙碌的時段(例如夜間)執行遷移,這會很有用。
--report 執行遷移指令碼的輸出),我們建議關閉網站,並在維護時段內以離線方式執行遷移。若專案數量龐大,你可以先執行指令碼並監控進度,再依照實際情況決定要繼續以線上或離線方式執行。
清除舊版二進位檔案資料
完成遷移並確認專案仍可存取所有檔案後,你可以移除/var/lib/overleaf/data/user_files 中的舊檔案儲存區。我們強烈建議保留這些檔案一段時間——你可以先重新命名資料夾,讓應用程式無法存取它們。
疑難排解
我們會在此處加入疑難排解建議。請注意,雖然我們通常只為 Server Pro 客戶提供支援,但考量此遷移的性質,我們也會盡力協助遇到二進位檔案遷移特定問題的 CE 客戶。 若二進位檔案遷移指令碼失敗(即以錯誤結束,或印出的失敗專案數不為零),請透過電子郵件將下列詳細資訊寄給我們的支援團隊 support+filestoremigration@overleaf.com,內容包括: 主旨:Binary file migration problem 內文:- 執行個體類型:CE 或 Server Pro(刪除不適用者)
- 安裝類型:Overleaf toolkit、
docker-compose.yml或其他(刪除不適用者) - 版本:5.5.x(toolkit:
$ cat config/version) - 遷移指令碼輸出(應位於容器內的
/var/log/overleaf底下) - 報告:(以
--report執行遷移指令碼) - 已處理的專案:(依據最後一次執行指令碼的結果)
- 遷移所需時間:
bin/doctor輸出(使用 toolkit 時)- Toolkit 版本:
$ git rev-parse HEAD(使用 Toolkit 時)
filestore 服務的日誌檔案。你可以在 sharelatex 容器內的 /var/log/overleaf/filestore.log 找到它,並以下列方式匯出:
遺失的檔案
舊版的 Server Pro/CE 會在使用者上傳完成前建立檔案樹項目,因此上傳失敗時,檔案可能會顯示為遺失。在處理所有檔案樹時,你可能會發現少數此類情況被回報為錯誤。 若遺失的檔案數量不多,可以考慮手動檢查這些情況,並在瀏覽器的編輯器中刪除它們。 若遺失的檔案數量很多,請考慮聯絡支援團隊,郵件範本請見上方。找出損壞的檔案樹
對於檔案樹格式錯誤的專案(例如檔名為空),遷移可能會失敗。你可以使用find_malformed_filetrees 指令碼檢查資料庫中的所有專案,找出這些問題的清單:
fix_malformed_filetree 指令碼,針對每個有問題的路徑各執行一次指令:

