Jellyfinメディアサーバー:あなたの自己ホスト型ホームエンターテイメントハブ

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Jellyfinメディアサーバー:あなたの自己ホスト型ホームエンターテイメントハブ

自分だけのNetflixやSpotifyを、コンテンツを完全にコントロールし、月額料金なしで利用したいと思ったことはありませんか?自己ホスト型メディアサーバーのエキサイティングな世界へようこそ!

Jellyfinは、この分野で素晴らしいオープンソースの選択肢として際立っています。映画、テレビ番組、音楽、さらには写真のコレクションを、どこからでも、あらゆるデバイスで再生できる、洗練されたアクセスしやすいストリーミングサービスに変身させます。自分自身のメディアサーバーをセットアップすることは、単なるエンターテイメントだけでなく、ネットワークストレージ、Docker、Linux、クライアントサーバーアーキテクチャについて学ぶ実用的な方法でもあります。

このガイドでは、Jellyfinサーバーのセットアップ手順を順を追って説明します。まずDockerを使った迅速なデプロイから始め、その重要な機能を探索し、高度な設定に深く入り込み、最後に、個人のメディアライブラリをスムーズに動作させるための実用的なヒントを共有します。これは、HomeLabのセットアップに堅牢なメディアソリューションを統合するための頼りになるガイドだと考えてください。

私の経験上、このようなシステムを構築・維持することは非常に重要なスキルです。システム管理、ネットワーキング、問題解決の要素が融合されており、これらはDevOpsやITのあらゆる職務において非常に価値があります。さらに、集中型のメディアハブを持つことは純粋に素晴らしいことです。

クイックスタート:Jellyfinサーバーを数分で稼働させる

準備はいいですか?Jellyfinをすぐに稼働させましょう。使いやすさと移植性のために、Docker Composeを使用します。このアプローチは非常に効率的で、いくつかのターミナルコマンドだけでJellyfinをデプロイできます。

必要なもの:

  • マシン: 仮想マシン (VM)、Raspberry Pi 4 (最低4GB RAM) のような低消費電力デバイス、古いデスクトップPC、または専用サーバーが考えられます。Linux (またはDocker DesktopがインストールされたWindows/macOS) が動作している必要があります。
  • Docker & Docker Compose: 選択したマシンにこれらがインストールされていることを確認してください。インストールされていない場合は、特定のオペレーティングシステム向けの公式Dockerドキュメントに従ってセットアップしてください。
  • メディアファイル: 映画、テレビ番組、または音楽ファイルが必要です。5〜10本の少ないコレクションでも始めるには十分です。これらはマシンまたは接続されたストレージデバイスに保存してください。

Docker Composeのセットアップ:

まず、Jellyfinのセットアップ専用のディレクトリを作成します。ターミナルを使ってこのディレクトリに移動します。次に、docker-compose.ymlというファイルを作成し、以下の内容を貼り付けます。

version: '3.8'
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 1000:1000 # オプション:ファイル権限を正しく設定するために、ホストのユーザーIDとグループIDを使用します
    network_mode: host # または 'host' モードが望ましくない/不可能な場合は 'ports' を使用します
    volumes:
      - ./config:/config
      - ./cache:/cache
      - /path/to/your/movies:/data/movies:ro
      - /path/to/your/tvshows:/data/tvshows:ro
      - /path/to/your/music:/data/music:ro
      # オプション:ハードウェアトランスコーディング用 (例:Intel Quick Sync)
      # - /dev/dri:/dev/dri
    environment:
      - PUID=1000 # 上記のユーザーIDに対応
      - PGID=1000 # 上記のグループIDに対応
      - TZ=Asia/Ho_Chi_Minh # タイムゾーンを設定します
    restart: unless-stopped
    # network_mode: host を使用しない場合、コメントを解除してポートを調整してください:
    # ports:
    #   - 8096:8096 # HTTP
    #   - 8920:8920 # HTTPS
    #   - 1900:1900/udp # UPnP/DLNA検出用
    #   - 7359:7359/udp # Jellyfinデバイス検出用

このファイルの各部分が何をするのか、簡単に見ていきましょう:

  • image: jellyfin/jellyfin: この行は、公式のJellyfin Dockerイメージを使用するようDockerに指示します。
  • container_name: jellyfin: コンテナに覚えやすい名前を割り当て、管理を容易にします。
  • user: 1000:1000, PUID, PGID: これらの設定は、正しいファイル権限のために非常に重要です。1000をホストシステム上のユーザーのユーザーID (UID) とグループID (GID) に置き換えてください。これらはターミナルでid -uid -gを実行することで確認できます。適切なIDは、Jellyfinがメディアファイルを読み取り、その設定を書き込めるようにします。
  • network_mode: host: これは、コンテナがホストマシンのネットワークスタックを直接使用するように設定します。これにより、ポートアクセスと設定が簡素化されることがよくあります。明示的なポートマッピング (例:Jellyfinのデフォルトポートを他のサービスが使用している場合) を希望する場合は、この行をコメントアウトし、下のportsセクションのコメントを解除して必要に応じて調整してください。
  • volumes: これらは、ホストマシンからDockerコンテナにディレクトリをマッピングし、データを永続化してアクセス可能にします。
    • ./config:/config: ここにJellyfinのすべての設定、データベース、ユーザーデータが保存されます。サーバーの状態を維持するために、このディレクトリのバックアップは不可欠です。
    • ./cache:/cache: トランスコードされたファイルや画像キャッシュなどの一時データを保存します。
    • /path/to/your/movies, /path/to/your/tvshows, /path/to/your/music: 重要:これらのパスは、ホストマシン上のメディアフォルダの実際の場所で置き換える必要があります。末尾の:roは読み取り専用アクセスを意味し、メディアコンテンツのセキュリティ対策として推奨されます。
    • /dev/dri:/dev/dri: この行はデフォルトでコメントアウトされていますが、ハードウェアトランスコーディング (Intel Quick Syncなど) を使用する予定がある場合に不可欠となります。これについては後で詳しく説明します。
  • environment: タイムゾーンなど、コンテナ内で環境変数を設定できます。
  • restart: unless-stopped: ホストマシンが再起動したり、コンテナが予期せずクラッシュしたりした場合に、Jellyfinが自動的に再起動するようにします。

docker-compose.ymlファイルが完成したら、同じディレクトリでターミナルを開き、次のコマンドを実行します。

docker compose up -d

このコマンドは、Jellyfin Dockerイメージをダウンロードし (まだ持っていない場合)、コンテナを作成し、バックグラウンドでサイレントに実行を開始します (-dはデタッチモードを表します)。

初期セットアップ手順:

コンテナが正常に起動したら、ウェブブラウザを開き、http://[Your_Server_IP_Address]:8096にアクセスしてください。Jellyfinのセットアップウィザードが表示されますので、以下の手順に従ってください:

  1. 言語の選択: リストからお好みの言語を選択します。
  2. 管理者ユーザーの作成: メインの管理アカウントに強力なユーザー名とパスワードを設定します。これはサーバーを管理するために使用するアカウントです。
  3. メディアライブラリの追加: ここでJellyfinをメディアファイルに接続します。「メディアライブラリを追加」をクリックし、コンテンツタイプ (例:「映画」) を選択し、説明的な名前を付け、次にDockerコンテナ内のパスを指定します。例えば、docker-compose.yml/path/to/your/movies/data/moviesにマッピングした場合、ここに/data/moviesと入力する必要があります。Jellyfinはこのディレクトリをスキャンしてコンテンツを探します。
  4. メタデータオプション: 現時点では、デフォルト設定のままで問題ありません。後で好みに合わせて調整することができます。
  5. リモートアクセス: ローカルネットワーク外からの接続を許可するかどうかを決定します。セキュリティのため、現時点ではオフにしておき、リバースプロキシでサーバーを保護した後でのみ有効にすることをお勧めします。

ウィザードを完了します。Jellyfinはライブラリのスキャンを開始します。コレクションの規模 (例:数百本の映画) に応じて、このプロセスには数分から1時間かかる場合があります。

最初の再生:

ライブラリがスキャンされ整理されたので、ウェブインターフェースから直接メディアを閲覧できるようになりました。他のデバイスでコンテンツを楽しむには、お使いの携帯電話 (Android/iOS)、スマートTV (例:Samsung、LG)、またはストリーミングスティック (Apple TV、Android TV、Roku、Amazon Fire TV) 用のJellyfinアプリをダウンロードするだけです。

次に、クライアントをサーバーのIPアドレス (例:http://[Your_Server_IP_Address]:8096) に向け、管理者資格情報を使用してログインし、ストリーミングを開始してください!おめでとうございます。あなたの自己ホスト型エンターテイメントハブが完全に稼働しました。

詳細解説:あなたのメディア王国を理解する

サーバーが稼働し始めたところで、Jellyfinを非常に強力で適応性の高いメディアソリューションにしているいくつかの重要な概念を探ってみましょう。

メタデータの力:

Jellyfinは、豊富なメタデータを取得することで真価を発揮します。これにより、単なるビデオファイルのフォルダが、美しくナビゲートしやすいライブラリに変わります。映画のポスター、キャストリスト、あらすじ、リリース日、評価などの情報を、The Movie Database (TMDB)、TheTVDB、MusicBrainzといった様々なオンラインデータベースから自動的に収集します。

この自動プロセスが完璧に機能するためには、一貫したファイル命名が非常に重要です。以下の例のような、明確で予測可能な構造を目指してください:

  • 映画: Movies/Movie Title (Year)/Movie Title (Year).ext (例:/data/movies/Inception (2010)/Inception (2010).mkv)
  • テレビ番組: TV Shows/Show Name/Season XX/Show Name - SXXEXX - Episode Title.ext (例:/data/tvshows/The Office (US)/Season 01/The Office (US) - S01E01 - Pilot.mkv)
  • 音楽: Music/Artist/Album/Track Number - Track Title.ext (例:/data/music/Led Zeppelin/Led Zeppelin IV/04 - Stairway to Heaven.flac)

これらの命名規則に厳密に従うことで、Jellyfinがメディアコンテンツを識別し、充実させる精度が大幅に向上します。

ユーザー管理とプロフィール:

Jellyfinはあなただけのものではありません。共有を前提に設計されています。家族や友人のために個別のユーザーアカウントを簡単に作成できます。各ユーザーは、個別の視聴状況、パーソナライズされたおすすめ、さらにはカスタマイズ可能なコンテンツ制限を備えた自分専用のエクスペリエンスを得られます。

  1. ダッシュボード > ユーザー セクションに移動します。
  2. + 新規ユーザー をクリックします。
  3. ユーザー名を入力し、安全なパスワードを設定し、オプションで特定のアクセス権限を定義します。特定のライブラリへのアクセスを制限したり、ペアレンタルコントロールの評価 (例:G, PG, PG-13) を適用したり、ユーザーがサーバーにアクセスできる時間をスケジュールしたりすることもできます。この機能は、若い視聴者のコンテンツアクセスを管理するのに特に役立ちます。

誰が、何を、いつアクセスするかをきめ細かく制御できることで、あなたのパーソナルメディアサーバーはより多機能でプロフェッショナルなものになります。

クライアントと互換性:

Jellyfinは幅広いクライアントアプリケーションを提供しており、想像できるほぼどこからでもメディアを楽しむことができます:

  • Webインターフェース: 最新のウェブブラウザからアクセスできる、フル機能のインターフェースです。
  • モバイルアプリ: AndroidおよびiOSデバイスの両方で専用アプリケーションが利用可能です。
  • TVアプリ: Android TV、Apple TV、Roku、Amazon Fire TVなどの人気プラットフォーム向けのアプリが見つかります。
  • ゲーム機: 公式クライアントは稀ですが、コミュニティ開発のクライアントが存在する場合や、コンソールに内蔵されたウェブブラウザを使用できることがよくあります。
  • メディアプレイヤー: KodiやMPVなどの人気メディアプレイヤーとシームレスな統合が可能です。

ストリームを開始すると、Jellyfinはまずコンテンツを「ダイレクトプレイ」しようとします。これは、クライアントデバイスがファイルの形式をネイティブにサポートしている場合に発生します。そうでない場合、Jellyfinはメディアをその場で「トランスコード」し、互換性のある形式に変換します。このトランスコーディングプロセスは、サーバーの処理能力、特にCPUまたは専用GPUに大きく依存します。これについては、高度な使用法のセクションでさらに詳しく見ていきます。

高度な使い方:ホームエンターテイメント体験を向上させる

基本に慣れてきたら、Jellyfinの全機能を解き放つ時です。これらの高度な設定はHomeLabのセットアップでは一般的であり、セキュリティ、パフォーマンス、アクセシビリティを大幅に向上させます。

リモートアクセスとセキュリティ:

適切なセキュリティ対策を講じずにJellyfinサーバーを直接インターネットに公開することは、一般的に安全ではありません。ベストプラクティスは、リバースプロキシとSSL/TLS暗号化を組み合わせることにあります。

  • リバースプロキシ (Nginx/Caddy): リバースプロキシは仲介役として機能し、Jellyfinサーバーの前に配置され、すべての着信リクエストを処理します。SSL証明書の管理、セキュリティポリシーの適用、正しい内部サービスへのトラフィックのインテリジェントなルーティングが可能です。
  • SSL/TLS暗号化 (Let’s Encrypt): 外部からのアクセスには常にHTTPSを使用してください。Let’s Encryptは無料のSSL証明書を提供しており、Certbotのようなツールによって自動的にプロビジョニングおよび管理されるか、より簡単なセットアップのためにCaddyに直接統合することができます。

以下に、リバースプロキシを設定する最小限のNginx設定スニペットを示します。この例では、Jellyfinがlocalhost:8096で実行されており、ドメインがmedia.yourdomain.comであることを前提としています:

server {
    listen 80;
    listen [::]:80;
    server_name media.yourdomain.com;

    # セキュリティのためにHTTPからHTTPSへリダイレクト
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name media.yourdomain.com;

    # SSL証明書 (重要: Let's Encryptなどからの実際のパスに置き換えてください)
    ssl_certificate /etc/letsencrypt/live/media.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/media.yourdomain.com/privkey.pem;

    # 基本的なセキュリティヘッダー (より堅牢な保護のために追加を検討してください)
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    location / {
        proxy_pass http://localhost:8096; # またはJellyfinが異なるIPにある場合は http://your_server_ip:8096
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_cache_bypass $http_upgrade;
        proxy_redirect off;
    }
}

ルーターのポートフォワーディングを設定することを忘れないでください。これにより、ポート80および443に到着する外部トラフィックがリバースプロキシサーバーに転送されます。

ハードウェアトランスコーディング:

特に高ビットレートの4Kコンテンツを同時に複数のデバイスにシームレスにストリーミングするには、ハードウェアトランスコーディングが非常に価値があります。この技術は、ビデオ処理のワークロードをCPUから専用GPU (内蔵またはディスクリート) に移行させ、パフォーマンスを劇的に向上させます。

  • Intel Quick Sync: サーバーにIntel製のCPUと統合グラフィックス (最新のIntelプロセッサの一般的な機能) が搭載されている場合、Quick Syncを利用できます。まず、ホストシステムに正しいドライバーがインストールされていることを確認します (例:Debian/Ubuntuでsudo apt install intel-media-va-driver-non-freeを実行)。次に、docker-compose.ymlファイルの- /dev/dri:/dev/dri行のコメントを解除して、GPUハードウェアをDockerコンテナに公開します。
  • NVIDIA NVENC/NVDEC: NVIDIA GPUを搭載したシステムでは、NVIDIA Container Toolkitをインストールし、特定のDockerランタイムオプションを使用する必要があります。このセットアップは少し複雑ですが、優れたトランスコーディングパフォーマンスを発揮します。

GPUアクセスを有効にしたら、Jellyfinウェブインターフェース内のダッシュボード > 再生 > トランスコーディングに移動し、お好みのハードウェアアクセラレーション方法を選択します。

メディアワークフローの自動化:

広範なメディアライブラリを管理している方や、真に手間のかからない体験を求めている方のために、いくつかのコンパニオンアプリケーションがすべてを自動化できます。これらのツールは、新しいコンテンツの発見からファイルの整理まで、タスクを効率化します。

  • Sonarr (テレビ番組)、Radarr (映画)、Lidarr (音楽): これらの人気アプリケーションは、リリーススケジュールを監視し、新しいコンテンツを自動的にダウンロードして、Jellyfinが監視するフォルダにきちんと配置します。
  • Prowlarr: これはインデクサーマネージャーとして機能し、Sonarr、Radarr、Lidarrの設定を一元化します。

これらのツールの完全な設定ガイドはこの記事の範囲外ですが、設定が完了すればJellyfinと完璧に統合され、HomeLabメディアサーバーを信じられないほど効率的なメディアハブに変貌させます。

データバックアップ戦略:

苦労して厳選したメディアファイルは重要ですが、Jellyfinの設定、ユーザーデータ、そして細心の注意を払ってスクレイピングされたすべてのメタデータも同様に不可欠です。./configボリューム (Docker Composeファイルで/configにマッピングしたディレクトリ) を定期的にバックアップすることが重要です。単純なrsyncコマンドや、このディレクトリのtarボールを作成するスケジュールされたスクリプトで十分な場合が多いです。これらのバックアップは、安全のために常に別の物理ディスクまたはクラウドストレージに保存してください。

実用的なヒントとトラブルシューティング

最も堅牢なセットアップであっても、予期せぬ問題に遭遇することがあります。Jellyfinサーバーを最適に稼働させ、一般的な問題をトラブルシューティングするための実用的なヒントをいくつか紹介します。

パフォーマンスの最適化:

  • ストレージ速度: 大容量のメディアファイルは低速なHDDでも問題なく保存できますが、configcacheボリュームにはSSDの使用を検討してください。Jellyfinのデータベースとキャッシュデータは、より高速なI/Oから大きな恩恵を受け、よりきびきびとしたユーザーインターフェースと、はるかに迅速なライブラリスキャンにつながります。
  • ネットワーク帯域幅: サーバーが安定した堅牢な有線ネットワーク接続を持っていることを確認してください。Wi-Fiだけに頼ると、特に高ビットレートのストリームや複数のユーザーが同時にストリーミングしている場合に、遅延が発生し、帯域幅のボトルネックが生じる可能性があります。
  • クライアントデバイスの機能: ボトルネックがサーバー自体ではなく、使用しているクライアントデバイスである場合があります。古いスマートTVや低電力のストリーミングスティックは、特定のビデオコーデックや非常に高い解像度 (4Kなど) に苦労し、意図せずサーバーに不要なトランスコーディングを強制する可能性があります。サーバーの負荷を最小限に抑えるために、常にクライアントの設定でダイレクトプレイオプションを確認してください。

一般的な問題と解決策:

  • 「メディアが表示されない!」
    • ライブラリスキャン: ダッシュボード > ライブラリ に移動し、影響を受けているライブラリのscanを手動でトリガーします。
    • 権限: Jellyfinコンテナユーザー (PUID/PGID) がメディアフォルダへの読み取りアクセス権を持っていることを再確認します。
    • ファイル命名: ファイルがJellyfinの推奨する命名規則に従っていることを確認します。
  • 「バッファリングの問題や再生の遅延。」
    • トランスコーディング: 再生中にJellyfinダッシュボードをチェックして、トランスコーディングがアクティブになっているか確認します。アクティブな場合は、ハードウェアトランスコーディングが有効になっていて正しく機能していることを確認します。
    • ネットワーク: サーバーのネットワーク速度とクライアントの接続をテストします。
    • サーバーリソース: サーバーのCPU、RAM、ディスクI/Oを監視します。これらのいずれかが最大値に達している場合、システムにボトルネックがあることを示しています。
  • ログファイル: 迷ったときはいつでもログを確認してください!Jellyfinコンテナのログ (マップされたcache/logディレクトリにあります) は、何が起こっているかに関する非常に貴重な洞察を提供します。また、docker compose logs jellyfinコマンドを使用しても便利に表示できます。

最新の状態を保つ:

最新の機能、バグ修正、重要なセキュリティパッチの恩恵を受けるために、Jellyfinコンテナを定期的に更新してください。Docker Composeを使用すると、このプロセスは簡単です:

docker compose pull jellyfin
docker compose up -d

これらのコマンドは、最新の公式Dockerイメージをプルし、新しいバージョンでコンテナを再作成します。マップされたボリュームのおかげで、データは安全かつ永続的に保たれます。

コミュニティリソース:

Jellyfinコミュニティは活気に満ちており、非常に役立ちます。問題に遭遇した場合は、ためらわずにこれらのリソースを参照してください:

結論

自分自身のJellyfinメディアサーバーを構築することは、HomeLab愛好家にとって真にやりがいのあるプロジェクトです。Dockerで迅速にデプロイする方法、そのコアコンポーネントの理解、リモートアクセスやハードウェアトランスコーディングなどの高度な機能の実装、そして一般的な落とし穴のトラブルシューティングを学びました。Jellyfinを使えば、単にメディアをストリーミングするだけでなく、あなたのニーズに合わせて正確に調整された、パーソナライズされた強力なエンターテイメントシステムを構築しているのです。自己ホスト型メディア王国をお楽しみください!

Share: