マイクロサービス
Overleaf Server CE および Overleaf Pro インスタンスをデプロイおよび管理する推奨方法は、Toolkit の使用です。
Toolkit は、必要なマイクロサービスのオーケストレーションを抽象化するカスタムスクリプトを使用して Overleaf インスタンスの作成を簡素化します。バンドルされた初期化スクリプトを実行し、永続ストレージのパスなどいくつかの設定オプションを指定するだけで、Toolkit は Overleaf Server CE または Pro インスタンスを構成するマイクロサービスのプロビジョニングと接続を処理します。
これにより、オンプレミスインスタンスを特徴づけるユーザーエクスペリエンスのカスタマイズや特定機能の実装に専念できます。Toolkit は裏で複雑さをすべて処理し、Overleaf インスタンスの簡略化されたデプロイを可能にします。
歴史的な理由から、メインの Overleaf コンテナは sharelatexと呼ばれており、次に基づいています: sharelatex/sharelatex Docker イメージ。これは技術が ShareLaTeX のコードベースに基づいており、そのコードベースが Overleaf に統合されたためです。詳しくは このブログ記事arrow-up-right を参照してください。将来的には、Overleaf の命名規則に合わせて名前が変更される予定です。
アーキテクチャ
Overleaf コンテナ内部では、ソフトウェアは一連のマイクロサービスとして動作し、次によって管理されます: runit。コンテナ内部の興味深いファイルのいくつかは次のとおりです:
/etc/service/:マイクロサービスの初期化ファイル。/var/log/overleaf/:各マイクロサービスのログ。/overleaf/services/:さまざまなマイクロサービスのコード。/var/lib/overleaf/:永続データのマウントポイント(ホスト上のOVERLEAF_DATA_PATHで示されたディレクトリに対応)。
MongoDB と Redis のコンテナ
Overleaf は MongoDB と Redis の 2 つの外部データベースに依存します。デフォルトでは、Toolkit はこれら各データベース用のコンテナを、Overleaf コンテナに加えてプロビジョニングし、合計で 3 つの Docker コンテナを作成します。
既存の MongoDB または Redis インスタンスに接続したい場合は、適切な設定を overleaf.rc 設定ファイルに記載することで接続できます。
エディタとコンパイルプロセス
このセクションは、ドキュメントの扱いとコンパイルプロセスの概要を提供します。
このページは、Overleaf Pro のみで利用可能な Sandboxed Compiles を用いたコンパイルプロセスを説明します。Server CE ではコンパイルプロセスは単純なサブプロセスを使用します — ここで コンテナ内でシェルを起動します を参照している項目は単一の項目に置き換えてください サブプロセスでコンパイルを実行する.
構成要素 / アクター:
ユーザー— アプリケーションのユーザーエディタ— ブラウザ上で動作するクライアントアプリケーションclsi— PDF をコンパイルするために使用されるマイクロサービスdocument-updater— ドキュメントの更新を処理するために使用されるマイクロサービスfilestore— バイナリファイルを扱うマイクロサービスreal-time— WebSocket を扱うために使用されるマイクロサービスweb— API リクエストを処理する(あまり小さくない)マイクロサービス
Redis キャッシング
ユーザー:エディタページを読み込む
エディタ:WebSocket を開く
エディタ:WebSocket を介してドキュメントを開くリクエストを送信する
real-time -> document-updater:ドキュメントが MongoDB から Redis にロードされる
エディタ:WebSocket を介してドキュメント更新を送信する
real-time -> document-updater:ドキュメントが Redis で更新される
エディタ:より多くのコンパイル要求を送信する
最後のフラッシュから 5 分が経過した後(ドキュメント毎):
document-updater:ドキュメントを Redis から MongoDB にフラッシュする
エディタ:さらに更新を送信する
100 回の更新ごと(ドキュメント毎):
document-updater:ドキュメント履歴を Redis から MongoDB にフラッシュする
ユーザー:エディタを離れる / ブラウザタブを閉じる
5 分後
real-time:他の共同編集者がいるかをチェックし、いなければ:
real-time -> document-updater:ドキュメントを Redis から MongoDB にフラッシュする
MongoDB から Redis への読み込み
document-updater -> web -> docstore:MongoDB から読み込む
Redis から MongoDB へのフラッシュ
document-updater -> web -> docstore:MongoDB に書き込む
コンパイル — 「フル」同期モード
エディタ:sync-mode を「full」に設定してコンパイル要求を送信する
web -> document-updater:ドキュメントが Redis から MongoDB にフラッシュされる可能性がある
web -> docstore:すべてのドキュメントが MongoDB からダウンロードされる
web -> clsi:コンパイル要求が次に送信される
clsi、含まれるもの:sync-mode
ファイルツリーのハッシュ -> 「プロジェクト状態」
内容を含むすべてのドキュメント -> 7MB のリクエストボディ制限の対象
個別ダウンロード用のバイナリファイル URL
clsi:sync-mode と「プロジェクト状態」でオンディスクの状態を確認する
これはフル同期なので、以前のオンディスク状態は無視できる
clsi:コンパイルディレクトリをクリーンアップする
clsi:すべてのドキュメントを書き込む(コンパイルディレクトリに)
clsi:すべてのバイナリファイルを書き込む(コンパイルディレクトリに)
clsiプロジェクトごとのローカルキャッシュからファイルをコピーするキャッシュミス時:
clsi -> filestore:ファイルをダウンロードする
clsi:「プロジェクト状態」を書き込む
clsi:望ましい構成で Docker コンテナが存在することを保証する
コンテナ作成オプション、texlive バージョンを含む
ハッシュオプション
コンテナ名:
project-<project-id>-<user-id>-<hash>
clsi:コンテナを起動し stdout/stderr をメモリにストリーム -> 上限 2MB
clsi:停止したコンテナを残す -> 24 時間後にクリーンアップされる
clsi:stdout/stderr をディスクに書き込む
clsi:出力ファイルを一意の出力ディレクトリにコピーする
build-id は 8 バイトのランダム値とミリ秒精度のタイムスタンプで構成される
最後の 3 つ(匿名) / 最後の 1 つ(ログインユーザー)以外のビルドフォルダをすべて削除する
clsi:コンパイルが失敗 / タイムアウトした
コンパイルキャッシュを削除する — 部分的なファイルや破損したキャッシュがある可能性があるため
エディタ:output.log と output.pdf をダウンロードする
コンパイル — 「インクリメンタル」同期モード
エディタ:sync-mode を「incremental」に設定してコンパイル要求を送信する
web -> document-updater:Redis からドキュメントを取得する
「プロジェクト状態」ハッシュも Redis に保存される
web ファイルツリーのハッシュをに送信する
document-updater以下はOverleaf向けに特別に最適化された一連のTeX Liveイメージで、document-updater不一致の場合、インクリメンタルコンパイルをフルコンパイルに切り替えることができるエディタが「full」コンパイルを要求したときのコンパイルプロセスを参照してください
web -> clsi:コンパイル要求が次に送信される
clsi、含まれるもの:sync-mode
ファイルツリーのハッシュ -> 「プロジェクト状態」
Redis からのすべてのドキュメントとその内容 -> 7MB のリクエストボディ制限の対象
バイナリファイルは無し
clsi:sync-mode と「プロジェクト状態」でオンディスクの状態を確認する
これはインクリメンタル同期なので、「プロジェクト状態」は一致する必要がある
不一致の場合:409 で応答し、web に「full」同期で再試行させる
エディタが「full」コンパイルを要求したときのコンパイルプロセスを参照してください
clsi:更新されたドキュメントを書き込む(コンパイルディレクトリに)
clsi:望ましい構成で Docker コンテナが存在することを保証する
コンテナ作成オプション、texlive バージョンを含む
ハッシュオプション
コンテナ名:
project-<project-id>-<user-id>-<hash>
clsi:コンテナを起動し stdout/stderr をメモリにストリーム -> 上限 2MB
clsi:停止したコンテナを残す -> 24 時間後にクリーンアップされる
clsi:stdout/stderr をディスクに書き込む
clsi:出力ファイルを一意の出力ディレクトリにコピーする
build-id は 8 バイトのランダム値とミリ秒精度のタイムスタンプで構成される
最後の 3 つ(匿名) / 最後の 1 つ(ログインユーザー)以外のビルドフォルダをすべて削除する
clsi:コンパイルが失敗 / タイムアウトした
コンパイルキャッシュを削除する — 部分的なファイルや破損したキャッシュがある可能性があるため
エディタ:output.log と output.pdf をダウンロードする
コンパイル — モード間の切り替え
エディタ:コンパイル失敗を観測した場合、次のコンパイルは「フル」コンパイルになる
エディタ:コンパイル成功を観測した場合、次のコンパイルは「インクリメンタル」コンパイルになる
最終更新