arrows-rotate(v5.5.7 マイグレーション) バイナリファイルの移行

バイナリファイルの移行

次期メジャーリリース 6.0 Server Pro および Community Edition のリリースでは、バイナリファイルのストレージ使用量が半分になります。オンライン移行がバージョンに含まれており、 5.5.7 アップグレードの一環としてダウンタイムを最小限にできます。

Server Pro 以降 OVERLEAF_*バイナリファイルは2箇所に保存されます:「filestore」にあるアクティブファイルストレージと完全なプロジェクト履歴システムです。今後は各ファイルのコピーを完全なプロジェクト履歴システムに1つだけ保存します。

統合ストレージシステムへの移行は2つの部分で構成されています:移行フェーズを制御する新しいフラグと、すべてのアクティブおよびソフト削除されたプロジェクトを処理するスクリプトです。

フェーズ:

  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=0 (デフォルト)、ファイルは filestore に読み書きされます。ファイルは履歴に非同期で書き込まれます。

  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 、ファイルは履歴から読み取り、filestore にフォールバックし、filestore と履歴の両方に書き込まれます。へのダウングレードは可能です。 OVERLEAF_FILESTORE_MIGRATION_LEVEL=0 は可能です。

  • OVERLEAF_FILESTORE_MIGRATION_LEVEL=2 ファイルは履歴にのみ読み書きされます。オフラインで行わない限り、へのダウングレードは不可能です。 OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 は不可能です。オフラインで実施された場合を除きます。

データをに格納する場合 S3arrow-up-right および filestore(OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID)と履歴(OVERLEAF_HISTORY_S3_ACCESS_KEY_ID)で別々のサービスアカウントを使用する場合:ブロブに対して filestore ユーザーに履歴バケットの読み取り権限を付与してください OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET 。今後、filestore サービスはコンパイラサービスからの読み取りを提供します。

circle-exclamation
circle-check
circle-info

Server Pro/CE バージョンにアップグレードした場合 6.0 その後以前のバージョンにダウングレードしたい場合は、フルシステムバックアップから復元する必要があります。

移行手順

1

バックアップを作成する

フルの バックアップを作成するarrow-up-right インスタンスの一貫したスナップショットを含むフルのバックアップを作成してください()。 mongo, redis および sharelatex ディレクトリ。

2

を更新します

ツールキット: を使用してください $ bin/upgrade を最新バージョンにアップグレードするスクリプト ツールキット に尋ねられたら、を行ってください 使用してはいけません プロンプトを確認してください アップグレード イメージですか? — 代わりに、手動でファイルを編集し、値をに設定してください config/version ファイルを手動で編集し、値をに設定してください。 5.5.7.

レガシーな docker-compose.yml: のバージョンを更新します sharelatex サービスを 5.5.7.

3

影響を受けるプロジェクト数を見積もる

# Overleaf Toolkit ユーザー:
$ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"

# レガシーな docker-compose.yml ユーザー:
$ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"

出力例:

現在のステータス:
- プロジェクトの総数: 10
- 削除されたプロジェクトの総数: 5
進捗を推定するために1000プロジェクトをサンプリングしています...
プロジェクトのサンプル統計:
- サンプルされたプロジェクト: 9(全プロジェクトの90%)
- ハッシュがすべて揃っているサンプルプロジェクト: 5
- ハッシュのバックフィルが必要なプロジェクトの割合: 44%(推定)
- サンプルプロジェクトには完全なプロジェクト履歴システムと照合する必要があるファイルが11個あります。
- サンプルプロジェクトには完全なプロジェクト履歴システムにアップロードする必要があるファイルが3個あります(全ファイルの約27%と推定)。
削除されたプロジェクトのサンプル統計:
- サンプルされた削除プロジェクト: 4(全削除プロジェクトの80%)
- ハッシュがすべて揃っているサンプル削除プロジェクト: 3
- ハッシュのバックフィルが必要な削除プロジェクトの割合: 25%(推定)
- サンプル削除プロジェクトには完全なプロジェクト履歴システムと照合する必要があるファイルが2個あります。
- サンプル削除プロジェクトには完全なプロジェクト履歴システムにアップロードする必要があるファイルが1個あります(全ファイルの約50%と推定)。
4

プロジェクト履歴キューをフラッシュする

# Overleaf Toolkit ユーザー:
$ bin/docker-compose exec sharelatex /overleaf/bin/flush-history-queues

# レガシーな docker-compose.yml ユーザー:
$ docker compose exec sharelatex /overleaf/bin/flush-history-queues

すべてのプロジェクトがフラッシュされるまでフラッシュを繰り返してください("project_ids":0).

発見されたプロジェクト {"project_ids":0,"limit":100000,"ts":"2025-09-01T10:35:33.353Z"}
合計 {"succeededProjects":0,"failedProjects":0}
triangle-exclamation
5

移行フェーズを1に進める

ツールキット: 設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL=1config/variables.env.

レガシーな docker-compose.yml: 設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1' Toolkit で使用される environment セクション of the sharelatex サービス。

6

設定変更を適用してインスタンスを起動する

ツールキット: bin/up -d

レガシーな docker-compose.yml: docker compose up -d

7

バイナリファイルへのアクセスを確認する

ブラウザで Overleaf エディタでプロジェクトを開き、画像のようなバイナリファイルを選択してください。

8

移行スクリプトを実行する

# Overleaf Toolkit ユーザー:
$ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"

# レガシーな docker-compose.yml ユーザー:
$ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"
triangle-exclamation

出力は次のようになります:

UV_THREADPOOL_SIZE=16 を設定してください
{"name":"default","hostname":"c25e9faaeb53","pid":971,"level":30,"backend":"fs","msg":"Loading backend","time":"2025-07-25T15:00:58.166Z","v":0}
/var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log にログを書き込んでいます
プロジェクトファイルのバックアップを開始しています...
読み込まれたグローバルブロブ: 0
削除されていないプロジェクトを処理しています...
1 プロジェクトを処理しました、経過時間 0s
ライブプロジェクトの更新が完了しました
削除されたプロジェクトを処理しています...
コレクション deletedProjects は空のようです。

削除されたプロジェクトの更新が完了しました
Done.

移行が成功すると、終了コードが返されます: 0, および失敗がないことを示す最後の行:

Done.

ログファイルはこのようになります(スクリプトが表示するパスを使用してください):

$ docker cp sharelatex:/var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log .
$ cat file-migration-2025-07-25T15_00_58_199Z.log
{"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"end":"68839a8f577b9f009d947b27 (2025-07-25T14:54:07.000Z)","msg":"actually completed batch","time":"2025-07-25T15:00:58.379Z","v":0}
{"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"time":"2025-07-25T15:00:58.383Z","LOGGING_IDENTIFIER":"4effa2000000000000000000","projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063,"eventLoop":{"idle":48.277844,"active":381.53244699971054,"utilization":0.8876763888372498},"diff":{"eventLoop":{"idle":48.223536,"active":134.04030200059555,"utilization":0.7354190687027976},"projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063},"deferredBatches":[],"msg":"file-migration stats","v":0}
9

インスタンスを停止する

ツールキット: bin/stop sharelatex

レガシーな docker-compose.yml: docker compose stop sharelatex

10

アプリケーションから古いファイルをアクセス不可にする

古いファイルをセカンダリストレージに移動できます。後で問題が発生した場合に備えて、しばらくの間ファイルを保持することを推奨します。

# ツールキットユーザー:
$ bin/docker-compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files

# レガシーな docker-compose.yml ユーザー:
# /var/lib/overleaf のデフォルトのバインドマウントを使用していると想定しています
$ docker compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files
# 選択的なバインドマウントを使用している場合は、コンテナ内の /var/lib/overleaf/data/user_files のバインドマウントを単に削除できます。
11

移行フェーズを2に進める

ツールキット: 設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL=2config/variables.env.

レガシーな docker-compose.yml: 設定 OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2' Toolkit で使用される environment セクション of the sharelatex サービス。

12

設定変更を適用してインスタンスを起動する

ツールキット: bin/up -d

レガシーな docker-compose.yml: docker compose up -d

13

バイナリファイルへのアクセスを確認する

ブラウザで Overleaf エディタでプロジェクトを開き、画像のようなバイナリファイルを選択してください。

オフライン移行

バイナリファイル移行スクリプトが実行中にユーザーのログインを防ぎたい場合は、次の手順に従ってください:

  • 管理者アカウントで Overleaf インスタンスにログインする

  • をクリックする 管理 ボタンを押して選択 サイトを管理

  • をクリックしてください エディタを開く/閉じる タブ

  • をクリックする エディタを閉じる ボタン

  • をクリックする すべてのユーザーの接続を切断 ボタン

これが行われると、ログインしているユーザーはメンテナンスページにリダイレクトされ、ログインページを訪れる新しいユーザーはメンテナンスページと できません ログインできなくなります。

インスタンスを再起動する際はこれらの手順を繰り返す必要があります。サイトを再開するには、インスタンスを再起動してください。

オンライン移行

アプリケーションを稼働させたまま移行スクリプトを実行することは可能です。考慮すべき点がいくつかあります:

  • 移行プロセスは IO 集中型です。スクリプト実行中はリソース使用状況を監視してください。

  • 高い処理並列度では、サービスのイベントループが一部ブロックする可能性があり、ユーザー体験が低下することがあります。 filestore まずはデフォルト値から開始することを推奨します。 --concurrency=10 および --concurrent-batches=1 .

  • スクリプトはいつでも停止できます。再起動すると前回処理したプロジェクトを検証し、既に処理済みのファイルはスキップします。混雑の少ない時間帯(例:夜間)に移行を実行したい場合に便利です。

推奨はサイトを閉じ、プロジェクト数が1000未満のメンテナンスウィンドウでオフライン移行を実行することです(--report を付けてスクリプトを実行したときの出力を参照してください)。 --report)。プロジェクト数が多い場合はスクリプトを実行して進行状況を監視し、オンラインで続行するかオフラインで実行するかを判断してください。

レガシーバイナリファイルデータのクリーンアップ

移行が完了し、プロジェクトがすべてのファイルにアクセスできることを確認したら、古いファイルストレージ /var/lib/overleaf/data/user_filesを削除できます。しばらくの間これらのファイルを保持することを強くお勧めします—まずフォルダ名を変更してアプリケーションからアクセスできないようにすることができます。

トラブルシューティング

ここにトラブルシューティングのアドバイスを追加します。通常サポートは Server Pro のお客様にのみ提供しますが、この移行の性質を考慮して、バイナリファイル移行に特有の問題が発生した CE のお客様にも可能な限りサポートを提供します。

バイナリファイル移行スクリプトが失敗した場合(エラーで終了する、または失敗プロジェクト数がゼロ以外を出力する場合)、次の詳細をメールでサポートチームに送ってください。 [email protected]envelope、詳細:

件名: バイナリファイル移行の問題

本文:

  • インスタンスタイプ: CE または Server Pro(適宜削除)

  • インストールタイプ: Overleaf toolkit または docker-compose.yml またはその他(適宜削除)

  • バージョン: 5.5.x(ツールキット: $ cat config/version)

  • マイグレーションスクリプトの出力(コンテナ内の次の場所にあるはずです): /var/log/overleaf)

  • レポート:(移行スクリプトをで実行してください --report)

  • 処理されたプロジェクト:(スクリプトの最終実行による)

  • マイグレーションの所要時間:

  • bin/doctor 出力(toolkit使用時)

  • Toolkit バージョン: $ git rev-parse HEAD (Toolkit 使用時)

ログファイルをメールに添付することを検討してください。 filestore サービス のログをメールに添付してください。ログは次の場所にあります: /var/log/overleaf/filestore.log の中に sharelatex コンテナ内からエクスポートするには次のようにします:

ログファイルを添付する前に、機密情報を編集(赤字化)してください。

欠落ファイル

古いバージョンの Server Pro/CE では、ユーザーのアップロードが完了する前にファイルツリーエントリを作成していたため、アップロードが失敗したときにファイルが欠落しているように見えることがありました。これらのケースのいくつかが、すべてのファイルツリーを処理するときにエラーとして報告されることがあります。

欠落ファイルの数が少ない場合は、これらのケースを手動で確認し、ブラウザのエディタから削除することを検討してください。

欠落ファイルの数が多い場合は、上記のメールテンプレートを参照してサポートに連絡することを検討してください。

壊れたファイルツリーの検出

ファイル名が空など、ファイルツリーが不正なプロジェクトではマイグレーションが失敗することがあります。これらの問題の一覧は次のコマンドで確認できます。 find_malformed_filetrees データベース内のすべてのプロジェクトをチェックするスクリプト:

無効なパスを修正するには、次のスクリプトを使用してください。 fix_malformed_filetree 各不正パスごとに1回ずつ次のコマンドを実行します:

最終更新