バイナリファイルの移行
Server Pro と Community Edition の次期メジャーバージョン6.0 では、バイナリファイルのストレージ使用量が半分に削減されます。バージョン 5.5.7 にはオンライン移行が含まれており、アップグレードの一環としてダウンタイムを最小限に抑えられます。
Server Pro 4.x 以降、バイナリファイルは「filestore」のアクティブファイルストレージと完全なプロジェクト履歴システムの 2 か所に重複して保存されています。今後は、各ファイルのコピーは 1 つだけ、完全なプロジェクト履歴システムに保存されるようになります。
統合ストレージシステムへの移行は 2 つの要素で構成されます。移行のフェーズを制御する新しいフラグと、すべてのアクティブなプロジェクトおよびソフト削除されたプロジェクトを処理するスクリプトです。
フェーズ:
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)と履歴(OVERLEAF_HISTORY_S3_ACCESS_KEY_ID)で別々のサービスアカウントを使用している場合は、filestore ユーザーに blob 用の履歴バケット OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET への読み取りアクセス権を付与してください。今後は、filestore サービスがコンパイラーサービスからの読み取りに応答するようになります。
標準の Server Pro ライセンスでは、本番環境に加えて本番以外の環境/サンドボックス環境でもアプリケーションを 1 つ実行できます。テスト用に本番以外の環境を用意することを強くおすすめします。
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 のお客様についても、できる限りサポートいたします。 バイナリファイル移行スクリプトが失敗した場合(つまり、エラーで終了した場合や、失敗したプロジェクトの数として 0 以外が出力された場合)は、次の詳細をメール 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 スクリプトを使用し、不正なパスごとにコマンドを 1 回ずつ実行します。

