Jellyfinを単一のコンテナから堅牢なサービススタックへ移行する方法

Eva Wong は テクニカルライター であり、 生粋の技術好き としてZimaSpaceで活動しています。ホームラボやオープンソースソフトウェア をこよなく愛する生粋のギークで、複雑な技術概念をわかりやすく、実践的なガイド にまとめることを得意としています。Evaは、セルフホスティングは難しいものではなく、楽しむものだと考えています。チュートリアルを通じて、初めてのNAS構築からDockerコンテナの使いこなしまで、コミュニティがハードウェアのセットアップをわかりやすく理解できるよう 支援しています。、初めてのNAS構築からDockerコンテナの習得まで。

まず現在の動作を明確に定義して永続データを保護し、その後、取り消し可能でテスト済みの段階を踏んでサービスを追加し、Jellyfinを移行します。

この手順は、文書化されていないコマンドや一体型の構成では手狭になった、稼働中のDockerコンテナを対象としています。目標はコンテナ数を最大化することではなく、マウント、ネットワーク、デバイス、ヘルスチェック、バックアップ範囲、ロールバックを明確にした、再現可能なJellyfinサービスを構築することです。メディアストレージはアプリケーションの状態から分離し、受け入れテストに合格するまでは旧インスタンスを残し、家庭内で運用できる依存サービスだけを追加します。

耐障害性の対象を定める

新しいスタックで対処すべき障害を選びます。Jellyfinプロセスのクラッシュ、不適切なイメージ更新、設定用ストレージの喪失、プロキシの利用不能、ホストの再起動、ホスト全体の喪失などです。それぞれ必要な対策は異なります。再起動ポリシーはプロセス終了後の復旧に役立ちますが、削除されたボリュームを復元したり、到達不能なメディアマウントを修復したりはできません。

設定、視聴履歴、サービスの稼働状況について、測定可能な復旧目標を定めます。許容できる停止時間とデータ損失の範囲、アラートの送信先、再構築可能な部分を決めてください。この範囲を明確にすれば、特定したリスクを減らさないデータベース、プロキシ、ダッシュボード、自動化を小規模なホーム環境の移行に追加せずに済みます。

稼働中のコンテナを確認する

正確なイメージ参照、コマンド、環境変数、公開ポート、ネットワーク、再起動ポリシー、ユーザーIDとグループID、デバイスのマッピング、DNS設定、ラベル、設定用マウント、キャッシュ用マウント、メディア用マウント、シークレットを記録します。すべてのホストパスの所有者と権限も記録してください。コンテナUIのスクリーンショットだけでは、完全なデプロイ記録にはなりません。

そのインベントリを、動作を変えずにCompose定義へ落とし込みます。このDocker runからComposeへの移行ガイドにあるフラグごとの手順が役立つのは、最初の目標を機能拡張ではなく再現性としているためです。最初の切り替えでは、現在稼働中のイメージのダイジェストまたはバージョンを固定します。

永続データ、キャッシュ、メディアを分離する

Jellyfinの設定とデータベースの状態は、分かりやすい名前を付けた永続パスにマッピングします。使い捨てのキャッシュやトランスコード用データは、重要なバックアップデータと混同されないよう、別のパスに配置します。所有するメディアは個別にマウントし、手順上可能な場合は読み取り専用にします。アプリケーション層の耐障害性によって、大規模なメディアライブラリの保護範囲が曖昧にならないようにしましょう。

バックアップ方法によってアプリケーションの整合性が保証されない場合は、最初の整合性のある状態のコピーを作成する前に、Jellyfinを停止するか、動作を一時停止します。アクセス権、チェックサムまたはファイル数、バックアップ時刻、復元先を記録します。コンテナイメージにユーザーデータが含まれていると思い込んではいけません。デプロイ定義、シークレット、永続状態、メディア参照は、それぞれ別個の復旧入力です。

ネットワークを変更する前に復元を検証する

一時的な復元先を作成し、保護されたアプリケーション状態をそこにコピーして、メディアを読み取り専用でマウントしたうえで、別のポートで固定したJellyfinサービスを起動します。ユーザー、ライブラリ、視聴履歴、メタデータ、プラグイン、代表的な再生を確認します。一時インスタンスを破棄し、記憶に頼った手順があれば、手順書に従って最初からやり直します。

実用的なComposeバックアップでは、デプロイファイル、環境設定の入力値、ボリューム、アプリケーションとの整合性が保たれたデータベースのエクスポートがあればそれも保存する必要があります。このComposeのバックアップとアップグレードガイドでは、イメージだけ、または稼働中のデータベースファイルだけをコピーしても、完全な復旧手段にならない理由を説明しています。

宣言型のJellyfinサービスに切り替える

メンテナンス時間を設定し、古いコンテナを停止して、最終的な整合性のある状態バックアップを取得し、古いインスタンスが自動的に再起動しないようにします。同じ永続パスとデバイスアクセスを使って、同等のComposeサービスを起動します。ローカルでのヘルスチェックと再生確認に成功してから、公開ルートを変更せずに維持します。

コンテナのヘルス状態、ログ、ライブラリの認識、ハードウェアデバイスへのアクセス、ダイレクト再生、代表的なトランスコード1件、字幕処理、再起動を検証します。サービスからデバイスやマウントが見えない場合は、作業を中断し、プレッシャーのなかで複数のレイヤーを編集するのではなく、以前のコンテナに戻します。ロールバックには、以前の固定イメージ、切り替え前の状態、元の実行パラメーターを使います。

隣接サービスを境界ごとに1つずつ追加する

リモートからのアクセスに個別管理のルートが必要な場合にのみ、リバースプロキシを導入します。明確なヘルスシグナルがあり、それに対応する担当者がいる場合は、監視を追加します。再起動ループ、ストレージの喪失、バックアップの失敗を把握する必要がある場合は、アラート通知先を追加します。各サービスについて、担当者、永続状態の扱い、ネットワーク範囲、更新方法、障害時の影響を決めておきます。

こうした境界を設ける設計上の理由については、ZimaSpaceによるJellyfinのデプロイでサービススタックを使う理由の解説をご覧ください。移行時には、このモデルを慎重に適用します。一緒に復旧する必要があるコンポーネントをまとめ、再生が任意のダッシュボードや自動化に依存しないようにします。

ヘルス、アップデート、バックアップを可視化する

ヘルスチェックは、単にプロセスが起動中かどうかではなく、ユーザーが利用する経路に基づいて定義してください。Jellyfinがローカルで応答すること、メディアのマウントが存在すること、有効にしている場合は公開経路が意図したサービスに到達すること、既知のファイルを1つ読み込めることを確認します。チェックに失敗したら、運用者が普段使っている通知先に通知し、アプリケーション、ストレージ、ネットワークのどこで障害が起きたかを見分けられるだけの情報を添えてください。

Version the Compose definition, keep secrets out of the repository, and review image changes before deployment. Automate backups only after a manual restore works. The workflow in this Jellyfin health-check and monitoring guide illustrates how declarations, checks, alerts, and backups connect; preserve an approval and rollback point for updates that can change stored state.

古い経路を廃止する前に障害対応訓練を実施する

ホストを再起動し、Jellyfinを予期せず停止させ、プロキシを利用不能にし、テスト用のメディアパスを切断し、アプリケーションの状態を一時的なクリーンな場所に復元してください。それぞれの演習で、想定どおりのアラート、復旧の順序、ユーザーから見える動作を確認してください。唯一のメディアコピーに対して、破壊的なストレージ障害を模擬しないでください。

復旧時間と手動で実行したコマンドを記録してください。すぐに再起動してもライブラリが空のままなら、そのコンテナはサービスのテストに不合格です。バックアップがあっても、目標時間内に復元できなければ、復旧のテストに不合格です。サービスを追加する前に、こうした要件を満たしてください。

移行を安定した運用契約で締めくくる

新しいJellyfinサービスが、普段の家庭での利用、計画的なアップデート、ホストの再起動、そして問題なく復元できることを確認するリハーサルを乗り越えてから、元のコンテナを廃止してください。選択した保持ポリシーに従い、古いパラメーター、切り替え直前の最終バックアップ、現在のCompose定義、シークレットの復旧方法、マウント構成、ロールバック手順をアーカイブしてください。

スタックの再現性、監視、復旧性が確保され、運用者が理解できる状態になったら、拡張を止めましょう。測定された容量、信頼性、または障害ドメインの要件によって必要になった場合にのみ、ノードや依存関係を追加してください。レジリエンスを支えるのは、既知の状態と訓練された復旧手順であり、図に描かれたコンテナの数ではありません。

NASとサーバーのセットアップ

続きを読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.