音楽のサブスク利用はやめよう:NavidromeとDockerで自分専用の音楽ストリーミングサーバーを構築する

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

サブスクのレンタルモデルからの脱却

深夜2時、Spotifyでお気に入りのアンダーグラウンド・ヒップホップ・アルバムが「お住まいの地域ではご利用いただけません」となったときのことです。ライセンス紛争や月額料金の値上げ(今や多くのサービスで11.99ドル)が、ついに私を限界まで追い込みました。NASには400GBもの高音質FLACファイルが眠っているのに、所有すらしていない圧縮音源にお金を払っていたのです。巨大なメディアスイートのような重いツールを使わずに、自分の手持ちのデータをスマホや車に飛ばす方法が必要でした。

多くの人はJellyfinを選びますが、一通の手紙を届けるためにセミトレーラーを使うような大掛かりな感覚があります。動作は重く、音楽のメタデータ処理は不安定になりがちで、インターフェースはビデオ優先です。Navidromeは違います。Go言語で書かれたこのツールは、オーディオコレクションを「おまけ」ではなく「主役」として扱います。

なぜNavidromeがホームラボの軽量級で勝るのか

このスタックに決める前に、よくある候補を検討しました。Plexは洗練されていますが、最高の音楽機能(Plexamp)はサブスクリプション制です。Jellyfinは1GB RAMのVPSでは苦戦しました。AirsonicはJavaベースであるため、ライブラリを開こうとするだけでサーバーのファンが回り始めました。Navidromeは効率性の面でまさに「スイートスポット」を突いています。

  • 最小限のフットプリント: 私のインスタンスのアイドル時のメモリ使用量は約45MBです。5万曲をインデックスしている最中でも、200MBを超えることはほとんどありません。
  • Subsonicエコシステム: これが秘密兵器です。Subsonic APIを実装しているため、Symfonium、Dsub、Amperfyといった数十年にわたるサードパーティ製アプリを利用できます。
  • 純粋なファイルシステム・マッピング: 独自のデータベース内にファイルを埋め込むことはありません。ディスク上のフォルダを整理すれば、Navidromeはその変更をUIにそのまま反映します。

私はこのセットアップを14ヶ月間使い倒してきました。手動での再起動は一度も必要ありませんでしたし、家族3人が同時にストリーミングしてもメモリリークが発生することはありませんでした。

トレードオフ:期待すべきこと

完璧なツールなど存在しません。イメージをプルする前に、Navidromeの特定の設計思想を理解しておく必要があります。

メリット

  • 爆速なUI: Reactベースのウェブインターフェースは非常に軽快です。数千人のアーティストの中から検索しても、ミリ秒単位で結果が出ます。
  • リアルタイム・トランスコーディング: 5Gの接続が不安定な場合でも、FFMPEGを使用して35MBのFLACファイルをリアルタイムで2MBのOpusストリームに圧縮します。
  • 真のマルチユーザー対応: 隔離されたアカウントを作成できます。パートナーの微妙な80年代ポップスへのこだわりが、あなたの「よく聴く曲」リストを台無しにすることはありません。

デメリット

  • 完璧なタグ管理が必要: NavidromeはID3タグに厳格です。ライブラリが「track01.mp3」のようなファイルばかりだと、UIは混沌とした状態になります。あらかじめMusicBrainz Picardなどでライブラリを整理しておく必要があります。
  • ビデオ非対応: これは音楽専用機です。コンサート映像やミュージックビデオをホストすることはできません。

アーキテクチャ:Dockerとセキュリティ

Navidromeをスタンドアロン의 バイナリとして実行するのは避けましょう。コンテナ化することで、docker compose pull 一発でアップデートが完了します。私は常にTraefikやNginx Proxy Managerのようなリバースプロキシと組み合わせています。暗号化されていないHTTP経由でSubsonic APIを公開してはいけません。

ステップ・バイ・ステップ:サーバーのデプロイ

まずはディレクトリの整理から始めましょう。設定データとメディアファイルを分けておくことで、バックアップが大幅に高速化されます。

mkdir -p ~/homelab/navidrome/data
mkdir -p ~/homelab/navidrome/music

次に、docker-compose.yml ファイルを作成します。この設定は安定性を重視し、特定のリソースパスを含んでいます。

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    user: 1000:1000 # 'id' コマンドで UID/GID を確認してください
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      ND_MUSICFOLDER: "/music"
      ND_DATAFOLDER: "/data"
      ND_CACHEFOLDER: "/data/cache"
      ND_LOGLEVEL: "info"
      ND_SESSIONTIMEOUT: "24h"
      ND_SCANINTERVAL: "1h"
      ND_TRANSCODINGCACHESIZE: "500MB"
    volumes:
      - ./data:/data
      - /path/to/your/music:/music:ro # 読み取り専用マウントでファイルを保護

次のコマンドでスタックをデプロイします:

docker compose up -d

設定とモバイルアプリのセットアップ

http://your-server-ip:4533 でダッシュボードにアクセスし、管理者アカウントを作成します。モバイルアプリを使用する場合は、ユーザープロファイル設定で「Subsonic API」が有効になっていることを確認してください。

最高の体験のために、Androidなら Symfonium、iOSなら Amperfy をお勧めします。アプリからドメイン(例:https://music.yourdomain.com)を指定し、資格情報を入力すれば、コレクション全体が数秒で同期されます。月額料金を払うことなく、Spotifyのような体験が得られます。

「Unknown Artist」問題の解決

ダッシュボードが「Unknown」フォルダだらけになっている場合は、メタデータが原因です。beets のようなCLIツールや、MusicBrainz Picard のGUIを使ってタグを修正しましょう。修正後、Navidromeで「Quick Scan」を実行します。このセットアップにより、私は商用サービスを完全に解約できました。遅延はなく、数年ぶりに、聴いている音楽を「自分のもの」として所有している実感があります。

Share: