安全なJellyfinアップグレード境界とは、1つの変更単位として、実行時環境と永続状態がバージョン互換性、復旧可能性、テスト可能性を維持しなければならない範囲です。
コンテナ化されたホームサーバーでは、実行可能レイヤーは使い捨てにできるため、Jellyfinイメージの置き換えは簡単に見えます。しかし、データベース、設定、プラグイン、メディアパス、生成された状態は再作成後も残ります。新しいバージョンは、こうした永続構造を直ちに移行する場合があります。アップグレード境界とは、新しいコードが、古いコードでは理解できなくなる可能性のある状態を変更し始める地点です。そのため、ロールバックでは古いイメージタグだけでなく、互換性のあるアップグレード前のコピーを保持する必要があります。
アップグレード境界に含まれるのはJellyfinのバイナリだけではない
アップグレードでは実行可能コードが変わりますが、そのコードはより長いライフサイクルを持つ永続状態の読み書きを行います。設定、ユーザーレコード、視聴履歴、ライブラリメタデータ、プラグイン状態、キャッシュ構造、ファイルシステムパスはすべて、起動や移行に関与する可能性があります。安全な境界では、どのオブジェクトを同時に変更し、どれを置き換え可能とするかを明確にします。
10.11への移行は、データベース移行によってライブラリ状態の表現方法が変わり、その後のポイントリリースでも運用上の問題が明らかになったため、その範囲を示す好例です。これはアップグレード境界に関わる出来事です。実行時環境が単に同じ古い状態を別の方法で表示するのではなく、今後の起動が依存する永続データを変換するからです。
各デプロイメントについて、実行時バージョン、ホストまたはコンテナ定義、永続データパス、プラグインディレクトリ、外部認証の依存関係、メディアマウント、変更に含まれるバックアップを一覧化してください。運用担当者がそれらのオブジェクトを明確にできなければ、ロールバック計画では何を一緒に復元すべきか判断できません。
実行時環境のロールバックとデータのロールバックは異なる操作
コンテナイメージは不変で、永続ボリュームが保持されるため、イメージはすぐに置き換えられることが多いです。しかし、その性質がロールバックを分かりにくくします。新しいバージョンによってすでに移行されたデータに古いイメージを接続すると、古いバイナリ自体が正常でも起動に失敗する可能性があります。実行時環境を元に戻せることは、状態も元に戻せることを意味しません。
データベースのデプロイメントに関する指針では、この違いが明確に示されています。コードのロールバックが安全なのは、古いアプリケーションが、再び扱うスキーマとデータとの互換性を維持している場合だけです。Jellyfinで一方向の移行後に真のロールバックを行うには、以前の実行時環境とともに、アップグレード前のデータベースおよび設定状態を復元する必要がある場合があります。
だからこそ、「以前のDockerタグを残しておく」だけでは不十分です。古いイメージは古いコードを再作成できることを示し、バックアップは古い状態を再作成できることを示します。安全なアップグレード境界では、この2つの復旧対象を組み合わせて保持し、将来の運用担当者が互換性のない要素を個別に復元しないよう、どのバージョンでバックアップを作成したかを記録します。
スキーマ移行は最も難しい互換性の境界を作る
アプリケーションコードは再デプロイできることが多い一方、スキーマやデータの移行では、レコードが新しい形式に書き換えられることがあります。破壊的または変換を伴う変更が確定すると、古いバージョンでは変換後のデータベースを解釈できなくなる可能性があります。そのため、最も安全なアップグレードプロセスでは、移行開始時点を、復旧状態がすでに取得・検証済みでなければならない時点として扱います。
現在のJellyfinロールバック分析では、不可逆なデータベース移行があるため、新しいデータベースを古いサーバーバージョンで単純に開くことはできないと指摘されています。すべての移行が慎重に設計されている場合でも、逆方向の手順を明示的にテストするまでは、互換性の境界はバージョン固有だと考えるべきです。
実務上の意味は、「新しいコンテナを停止できるか」と「サービス全体を以前の状態に戻せるか」を分けて考えることです。前者は簡単ですが、後者には互換性のある永続データが必要です。アップグレード前のスナップショットまたはバックアップを変更チケットの一部として記録し、アップグレード後のサーバーが定義した安定性確認期間を終えるまで削除しないでください。
プラグインとクライアントAPIが二次的な互換性境界を形成する
コアサーバーが正常に起動しても、新しいリリースで変更されたインターフェースに依存する拡張機能やクライアントは失敗する可能性があります。プラグインはサーバー側コードを読み込み、認証プロバイダーはログインに影響し、クライアントはAPIの動作に依存する場合があります。これらは二次的な境界です。データベース移行自体が成功しても、サービス機能を停止させる可能性があるためです。
Jellyfinのコアが正常に起動しても、プラグインが独自のバージョン境界を作ることがあります。JellyfinTweaksのメンテナンスリリースでは、個別のマニフェストと10.11向けの明示的なサポートが導入され、バージョン固有のプラグインサポートが示されました。必須プラグインをアップグレードの依存関係として扱い、プロセスが起動したから互換性があると決めつけず、対象サーバーバージョンでテストしてください。
受け入れテストでは、境界を明確にする必要があります。家庭内でLDAPや別の認証プラグインが必須なら、ローカル管理者でログインできるだけでは不十分です。主要なテレビクライアントが最低サーバーバージョンや変更されたAPIを必要とするなら、その組み合わせを正確にテストしてください。アップグレードの準備には、切り替え後にユーザーが実際に必要とする依存関係も含まれます。
障害の境界:唯一の正常な状態コピーに新バージョンを起動すると、確実なロールバックができなくなる
危険な瞬間は新しいイメージをダウンロードするときではありません。復旧コピーが検証される前に、そのイメージで唯一の正式なデータベースと設定一式を変更させるときです。部分的な移行後にアップグレードが失敗した場合、同じ状態に対して何度も試行すると、最初の障害を元に戻すことが難しくなり、クリーンな比較ポイントが失われる可能性があります。
データベース移行のテスト指針では、`up`と`down`のコマンドだけで復旧可能性が証明されると考えず、本番に近いテストデータ、復元訓練、部分的な障害のテストを用いた移行のロールバック安全性が推奨されています。Jellyfinでこれに相当するのは、ロールバックの判断が不要になるまで、対象バージョンによって変更されない、検証済みのアップグレード前バックアップまたはスナップショットを用意することです。
そのバックアップには、既知の互換性がある実行時環境と、文書化されたパスマッピングを組み合わせる必要があります。古い、または不完全なバックアップは誤った安心感を与えます。一方、対応するデプロイメント定義がない正常なバックアップは、空のライブラリや壊れた権限を復元する可能性があります。安全な境界とは、単独のデータベースファイルではなく、復旧可能なサービス状態です。
状態を組み合わせたアップグレード手順を使用する
変更前に、現在のバージョンと対象バージョンを固定し、デプロイメント定義を取得し、プラグインと必須クライアントを一覧化し、永続状態の一貫性のあるバックアップを作成して、少なくとも一度は隔離環境でそのバックアップを復元してください。アップグレード中は無関係な自動化を停止し、移行が完了するまで監視し、証拠が必要な形で最初の試行が失敗した場合は、同じ状態を何度も再作成しないでください。
ZimaSpaceによる起動時の移行経路に関する分析は、起動を単に「コンテナが起動した」という1つのイベントとしてではなく、永続状態に対する一連の操作として観察すべき理由を裏付けています。アップグレードの受け入れ確認には、移行の完了、ライブラリの整合性、ユーザー、視聴状態、代表的な再生、必須プラグイン、正常な再起動を含めるべきです。
選択した観察期間を経てこれらの確認に合格するまで、アップグレード前の復旧一式を保持してください。ロールバックが必要になった場合は、バージョンを混在させず、古い実行時環境と対応するアップグレード前の状態を一緒に復元します。アップグレード前に、前進方向のアップグレード経路と後退方向の復旧経路の両方が定義されている場合にのみ、新しいバージョンへ本番データを公開する境界を越えてください。
テック&AIハブ
もっと読む

バックアップの頻度は Jellyfin のリカバリーポイントの品質にどのような影響を与えますか?
バックアップ間隔を短くするとJellyfinの状態喪失を抑えられますが、復旧ポイントの品質は、一貫性のある取得、保持履歴、復元テストにも左右されます。

Jellyfinはデバイス間の変更をどのように検出し、整合させるのか?
デバイス間でJellyfinの状態を一貫させる仕組みはサーバー中心です。サーバーが変更を検出または受け取り、状態を確定して保存し、クライアントはその共有された正本から更新します。

Jellyfinが予想以上に多くの一時データを保持する原因とは?
一時的なJellyfinデータは、作成者やライフサイクル、再利用価値がそれぞれ異なります。作成者、再利用価値、そして削除を実行すべきクリーンアップのトリガーに基づいて、保持期間を診断してください。

