手動ダウンロードはもう卒業:Dockerの「Arr」スタックでホームメディアを自動化する

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

5分で完了するクイックスタート

Docker Composeはこのスタックをデプロイするための標準的な手法です。コードを触る前に、適切なディレクトリ構造を設定する必要があります。多くの人がここで失敗し、ファイル転送の遅延やCPUリソースの浪費を招いています。「ハードリンク(Hardlinks)」を確実に使用して、ファイルを瞬時に移動できるように設定しましょう。

mkdir -p ~/homelab/data/{downloads,media/{movies,tv}}
mkdir -p ~/homelab/config/{sonarr,radarr,prowlarr,qbittorrent}

次に、ホームラボのディレクトリに docker-compose.yml ファイルを作成します。この構成では、単一の /data マウントポイントを使用して、超高速なファイル管理を実現します。

services:
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
    volumes:
      - ./config/prowlarr:/config
    ports:
      - 9696:9696
    restart: unless-stopped

  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
    volumes:
      - ./config/radarr:/config
      - ./data:/data
    ports:
      - 7878:7878
    restart: unless-stopped

  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
    volumes:
      - ./config/sonarr:/config
      - ./data:/data
    ports:
      - 8989:8989
    restart: unless-stopped

  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
      - WEBUI_PORT=8080
    volumes:
      - ./config/qbittorrent:/config
      - ./data:/data
    ports:
      - 8080:8080
    restart: unless-stopped

docker-compose up -d を実行します。数秒以内に、ローカルネットワーク上でプロ仕様のメディアパイプラインが稼働し始めます。

ディープダイブ:「Arr」スタックが重要な理由

これまで何十回もこの環境を構築してきましたが、本当の魔法は単なるダウンロード機能にあるのではありません。手動の混乱から、プロフェッショナルな自動パイプラインへと移行することに意味があります。各アプリケーションには特定の役割があり、それらが正しく連携することで、ホームラボは自己修復機能を持つライブラリへと進化します。

Prowlarr:司令塔

Prowlarrは、全体を繋ぎ合わせる「接着剤」だと考えてください。お気に入りのインデクサーをSonarrやRadarrに個別に登録する代わりに、ここで一度追加するだけで済みます。設定は自動的にすべてのアプリに同期されます。トラッカーのURLが変更された場合も、一箇所更新するだけでスタック全体がオンライン状態を維持できます。

Sonarr & Radarr:デジタル司書

Sonarrはテレビ番組を管理し、Radarrは映画を担当します。これらは単なるダウンローダーではなく、洗練されたデータベースマネージャーです。ローカルライブラリを24時間365日監視し、欠けているエピソードを特定して、1080p BluRayや4K HEVCなど、設定したルールに基づいて最適な品質のファイルを検索します。

「Atomic Move(アトミック・ムーブ)」の秘密

初心者は /downloads/movies のように個別のボリュームをマウントしがちですが、これは大きな間違いです。Dockerがこれらを異なるファイルシステムとして認識すると、データの物理的なコピーが発生します。このプロセスは低速で、SSDの寿命を縮める原因にもなります。

単一の /data ボリュームを使用することで、システムは「Atomic Move(即時移動)」を実行します。60GBの4K映画も、ミリ秒単位でライブラリに表示されます。物理ディスク上ではデータは移動しません。これにより、元のファイルをシード(共有)し続けながら、リネームされたバージョンをメディアフォルダに綺麗に配置することができます。

高度なチューニング:品質とカスタムフォーマット

基本的な同期が機能し始めたら、こだわりを反映させましょう。単なる1080pファイルではなく、特定のリリースグループや、ディスク容量を最大40%節約できるH.265などのコーデックを指定したくなるはずです。

Trash Guidesのインポート

最高の結果を得るには、「Trash Guides」を参考にしてください。これらはコミュニティによって精査されたプロファイルで、高ビットレート(20 Mbps以上など)のリリースを優先し、映画館で撮影された「CAM」版を無視するように設定できます。これらのJSONプロファイルをRadarrに直接インポートすることで、自動的に「こだわり派」の設定を反映できます。

FlareSolverrによるブロックの回避

一部のパブリックトラッカーは、Cloudflareを使用して自動ボットをブロックしています。Prowlarrが特定のサイトに接続できない場合は、FlareSolverrコンテナを追加してください。これは「私は人間です」という認証を自動的に解決するプロキシとして機能します。

  flaresolverr:
    image: ghcr.io/flaresolverr/flaresolverr:latest
    container_name: flaresolverr
    environment:
      - LOG_LEVEL=info
    ports:
      - 8191:8191
    restart: unless-stopped

現場で学んだ教訓

私はこのスタックを何年も運用してきました。以下の3つの習慣を身につければ、停電やハードウェア障害の際にも、システムをゼロから再構築する手間を省けます

  • コンテナ名を使用する: 設定で localhost を絶対に使用しないでください。Dockerのサービス名(例:http://qbittorrent:8080)を使用します。これにより、内部IPアドレスが変更されても、アプリ同士が互いを見つけることができます。
  • プライバシーを保護する: トレントを使用する場合は、ダウンロードクライアントをVPN経由でルーティングしてください。gluetun のようなコンテナは、qBittorrentの通信のための安全なゲートウェイとして機能します。
  • ストレージ容量に注意する: Radarrは非常に優秀ですが、時には優秀すぎることがあります。「トレンド」リストなどを購読していると、週末の間に10TBのドライブを簡単に埋めてしまうことがあります。DiscordのウェブフックやApprise通知を設定し、ディスク使用率が90%に達したときにアラートを受け取るようにしましょう。

このスタックの構築は、ホームサーバー愛好家にとって基本となるプロジェクトです。コンテナ化がいかに強力であるかを完璧に証明してくれます。一度自動化が始まれば、二度と手動でファイルを探すことはしたくなくなるでしょう。

Share: