ランタイムを使い捨て可能にし、永続状態を明示し、クリーンな移行先で復元手順を再現できるようにすることで、復旧可能なJellyfinコンテナデプロイメントを構築します。
コンテナイメージは復旧に必要な入力の一つにすぎません。正常に動作するJellyfinサービスには、設定とデータベースの状態、メディアのマウント先、UID/GIDの所有権、ハードウェアアクセラレーション用のデバイスマッピング、ポート、シークレット、ネットワーク名、そして復元したデータを読み取れる正確なイメージバージョンも必要です。目標は「Dockerが自動的に再起動する」ことではありません。障害が発生したホストを、どこに正式な状態が保存されていたかを推測せずに再構築できることです。
Composeファイルを書く前に復旧単位を定義する
コンテナを完全に削除しても残す必要があるものを一覧化します。Composeまたは同等のデプロイ定義、環境入力、シークレットの復旧方法、Jellyfinの設定とデータベース、必要なメタデータ、プラグインの状態、メディアストレージへの対応関係を含めます。キャッシュとトランスコード用ディレクトリは別に分類し、視聴履歴やユーザー設定と同じバックアップ優先度にならないようにします。
実績のあるDocker Compose復旧ガイドでは、復旧可能なセットを、定義、環境ファイル、シークレット、バインドマウントまたはボリューム、データベース整合性のあるコピー、イメージ参照、復元順序として説明しています。これはJellyfinにも適した抽象化です。単なるフォルダーではなく、サービスの契約を復旧します。
これらの入力を短い復旧マニフェストに記録します。その一覧から再構築できない場合、コンテナはまだ文書化されていないホスト状態に依存しています。基本的なJellyfin復旧単位を単独で復元・検証できるようになるまで、プロキシ、監視、追加のデータベースを導入しないでください。
交換可能なランタイム、永続状態、メディアを分離する
イメージは交換可能であるべきですが、アプリケーションの状態はそうであってはなりません。Jellyfinの設定・データパスを明示的な永続ストレージにマウントし、メディアは別にマッピングします。ワークフローで許可される場合は、メディアを読み取り専用にするのが望ましいです。キャッシュとトランスコード用の一時領域は独立した役割として管理し、一時ディレクトリの容量不足がデータベース障害やバックアップ容量の急増に直結しないようにします。
最近のDocker復旧ガイドでは、コンテナのファイルシステムを永続状態として扱わず、Compose定義、ボリュームまたはバインドマウント、環境入力、ホスト外のバックアップを分けています。重要なのは正確なディレクトリ名ではなく、各ライフサイクルに明示的なホスト側の管理者と復元方法を割り当てることです。
人間が読めるホストパスによってバックアップやトラブルシューティングが明確になる場合はバインドマウントを、使用するツールが名前付きボリュームを確実にインベントリ化してバックアップできる場合は名前付きボリュームを優先します。どちらも復旧可能です。失敗の原因になるのは、元のホストを失った後で初めて中身を探すような、名前のない、または文書化されていない場所です。
ランタイムを固定し、ホスト固有のインターフェースを記録する
復旧可能なデプロイメントでは、現在の永続状態を生成したJellyfinのバージョンを把握しておく必要があります。更新ポリシーに適した範囲でバージョンを指定したイメージ参照を使用し、最後に正常動作したイメージを記録します。さらに、コンテナのユーザーID、レンダーデバイスのマッピング、補助グループ、ネットワークモード、公開ポート、リバースプロキシへの依存関係を文書化します。
コンテナの更新では、永続状態を残したまま実行可能なレイヤーだけが変わることがあります。そのため、再現可能なセルフホスティングのワークフローには、記憶ではなく明示的な定義が必要です。最近のDockerセルフホスティングガイドがComposeを使用しているのは、長い一回限りのコマンドではなく、宣言的なプロジェクトディレクトリからサービス設定を再作成できるためです。
古いイメージだけでロールバックできると考えないでください。新しいJellyfinバージョンが永続データを移行する可能性があるため、完全なロールバックにはアップグレード前の状態と古いランタイムの組み合わせが必要になる場合があります。したがって、復旧ドキュメントにはバージョン、状態コピーのタイムスタンプ、デプロイ定義をまとめて保存します。
整合性を保ってバックアップし、隔離環境で復元を実証する
バックアップでは、一貫性のあるアプリケーション状態を取得し、稼働中のボリュームと同じ障害ドメインの外部に保存する必要があります。ファイルベースのデータベースを稼働中に通常の再帰コピーで複製すると、完全に見えても有効な復旧ポイントではないセットが生成されることがあります。適切な場合はJellyfinのアプリケーション対応バックアップ方法を使用するか、整合性の挙動を理解したうえで、制御された停止またはスナップショット方式を採用します。
同じ原則は、より広範なバックアップテストにも当てはまります。バックアップは、単にファイルを展開するのではなく、使用可能なアプリケーションを再作成する実際の復元テストに合格して初めて信頼できます。Jellyfinでは、テスト環境を別のポートで起動し、本番メディアを読み取り専用にして、ユーザー、ライブラリ、視聴状態、代表的な再生、プラグイン、再起動を一つずつ検証します。
復元にかかった時間と、手動で行ったすべての対応を記録します。忘れられていたchmod、隠れた環境値、一回限りのデバイスマッピングが必要だった場合は、それをデプロイメント契約に追加してリハーサルを繰り返します。クリーンな移行先を、本番環境の可変状態を借りずに、記録された入力だけから再構築できたときに初めて復元テストは完了します。
必要なマウントやデバイスがない場合はフェイルクローズする
意図したメディアマウントが存在しない場合や、GPUデバイスが公開されていない場合でも、コンテナは起動できます。その結果、空のライブラリ、予期しないソフトウェアトランスコード、ローカルの代替ディレクトリへの書き込みが発生する可能性があります。実用的なComposeサービス準備ガイドが示すように、「実行中」と「準備完了」は異なる状態であり、依存関係のチェックで利用側サービスを制御する必要があります。起動時に重要なパスを検証してから本番同様に動作させることで、復旧はより安全になります。
ZimaSpaceのJellyfinサービススタック移行ガイドも同じ境界を採用しています。古い構成を廃止する前に、マウント、永続状態、ハードウェアアクセス、再生、再起動の動作を検証します。
マウントの存在、空き容量、設定の所有権、アクセラレーターの認識をプレフライトチェックに含めます。必要なパスの検証に失敗した場合は、空のディレクトリを使って起動せず停止します。アクセラレーションに失敗した場合は、家庭内の目標に応じて既知の縮退モードでサービスを維持するか停止します。サイレントなフォールバックによって、1台のデバイス欠落がホスト全体のCPU問題に発展するのを防いでください。
コンテナの再構築が退屈になるまで障害訓練を行う
コンテナの削除、ホストの再起動、不適切なイメージ更新、キャッシュの喪失、メディアマウントの欠落、アプリケーション状態のクリーンなディレクトリへの復元をテストします。これらの経路をテストするために、実際のメディアを破壊する必要はありません。目的は、どの層が自動的に復旧し、どの層にバックアップが必要で、どの層をフェイルクローズすべきかを証明することです。
復旧可能な設計では、復元したデータで使い捨て可能な環境からアプリケーションを起動できることも実証する必要があります。隔離復元検証ワークフローでは、一時コンテナとヘルスチェックを使って、本番環境に触れずにアプリケーションデータをテストします。新しいランタイムが初めて本番状態を変更する前に、バックアップとロールバックの方法を把握しておくべきです。
サービス定義がバージョン管理され、永続パスが明確で、バックアップが別の場所にあり、復元に成功し、交換用ホストで家庭内の復旧目標時間内にJellyfinを復旧できるようになったら、アーキテクチャを追加するのをやめます。別のサービスやホストを追加するのは、測定済みの容量要件または障害ドメイン要件を解決するときだけにしてください。復旧可能性を生むのは、コンテナの数ではなく、明示的な状態と訓練された復元手順です。
NAS&サーバー設定
もっと読む

AIに似た分析と自動化がJellyfinのストレージおよびコンピューティング要件をどう変えるか
自動化と関連するAI分析では、通常のJellyfin再生に加えて、スキャン、派生データ、CPU/GPU処理、キャッシュ、作業用領域、バックグラウンドスケジューリングが追加されます。

小さなアパートや賃貸住宅のネットワークにJellyfinを統合する方法
安定したローカルアドレス、最小限の配線、静音ハードウェア、CGNATを考慮したリモートアクセス、そして元に戻せる変更を軸に、賃貸住宅に適したJellyfinネットワークを構築しましょう。

1台のJellyfinホストでサポートできるユーザー数とバックグラウンドジョブ数はどれくらいですか?
Jellyfinユーザーとバックグラウンドジョブを1つの共有ワークロード予算として扱い、再生遅延、キュー、またはリソース圧迫が繰り返し発生した時点で容量の限界とします。

