4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SynologyのNASにメディアサーバーを構築した話

4
Posted at

image.png

自宅のSynology NAS(DSM7)の中に、Jellyfinを使ったメディアサーバーを構築しました。Container Manager(Docker)でコンテナを立てるだけなので、思っていたよりずっと手軽でした。公式の手順書はオプション設定も含めて結構ボリュームがあるんですが、個人で使うだけなら省略できる項目がかなり多かったので、その辺りの「実際に必要だった設定」と「ハマったポイント」を中心にまとめておきます。

Jellyfinとは

Jellyfinは、メディアサーバーソフトです。NASやPCの中にある映像・音楽ファイルを整理して、TVやスマホ、ブラウザなど色々なデバイスから再生できるようにしてくれます。完全に無料・オープンソースで、アカウント登録やクラウド連携も不要。すべて自宅のNAS内で完結するのが気に入って採用しました。

構築の流れ

大きく分けると、こんな流れです。

  1. NASにContainer Manager(Docker)をインストールする
  2. プロジェクトを作成してdocker-compose.ymlを書く
  3. ビルドして起動する
  4. 初期セットアップウィザードを実行する
  5. ライブラリ(メディアフォルダ)を登録する

image.png

1. Container Managerをインストールする

パッケージセンターから「Container Manager」を検索してインストールします。DSM7ではDocker単体ではなくこのContainer Managerが標準のGUIになっています。

image.png

2. docker-compose.ymlを書く

Jellyfin公式のDockerドキュメントには、かなり手厚いサンプルのdocker-compose.ymlが載っています。ただ、これを丸ごと使う必要はなくて、個人の自宅利用なら次のくらいまで削ってしまって問題ありませんでした。

services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    ports:
      - 8096:8096/tcp
    volumes:
      - /volume1/docker/jellyfin/config:/config
      - /volume1/docker/jellyfin/cache:/cache
      - /volume1/video:/media

公式サンプルに対して、実際に省略した項目と理由はこんな感じです。

  • user: uid:gid:UID/GIDを指定してrootではなく特定ユーザーで動かす設定。Container Manager側で管理者権限のあるDSMユーザーとしてボリュームをマウントしているので、指定しなくても権限エラーは起きませんでした。複数人で細かく権限を分けたい場合は必要になりそうです。
  • - 7359:7359/udp:クライアント側の「サーバー自動検出(オートディスカバリー)」用のポート。サーバーのURLを直接ブックマークして使うだけなら不要でした。
  • media2の追加マウント(read_only: true:2つ目の独立したメディアフォルダを読み取り専用で追加する設定。動画・音楽・写真を全部1つの共有フォルダにまとめてしまったので、自分には不要でした。
  • フォント用のバインドマウント:トランスコード時に字幕を焼き込む(ハードサブ)際、独自フォントを使うための設定。標準フォントのままで十分だったので省略しました。
  • JELLYFIN_PublishedServerUrl環境変数:リバースプロキシ配下や外部ドメイン経由でアクセスする際の自動検出用アドレス。自宅LAN内だけで使うので不要でした。
  • extra_hosts: host.docker.internal:hostネットワークモードでヘルスチェックを通すための設定。Container Managerは基本bridgeネットワークで動くので不要でした。
  • restart: 'unless-stopped':明示的には付けませんでした。NASは基本つけっぱなしなので今のところ困っていませんが、再起動後も自動起動させたい場合は付けておくのがおすすめです。

3. ビルドして起動する

プロジェクト作成画面で上記のYAMLを貼り付けて「次へ」を進めるとビルドが始まり、完了するとコンテナが自動的に起動します。

image.png

4. 初期セットアップウィザード

http://NASのIPアドレス:8096 にアクセスすると、Jellyfinの初期セットアップウィザードが開きます。言語選択→管理者アカウント作成→ライブラリ追加、という流れで進めれば完了です。

ハマったポイント:ファイルを置いただけでは出てこない

セットアップ自体はすんなり終わったんですが、運用に入ってから一つ詰まりました。共有フォルダに新しい動画ファイルを追加しても、Jellyfin側のライブラリにしばらく反映されないんです。最初はマウントパスの設定ミスを疑いましたが、原因はJellyfinの「リアルタイム監視」機能が、Dockerのバインドマウント越しだとうまく効かないことがあるためでした。

対処はシンプルで、ダッシュボード→ライブラリ→対象ライブラリ(または「すべてのライブラリをスキャン」)から手動でスキャンを実行すれば、すぐに反映されます。「ファイルを追加したら更新ボタンを押す」をワンセットの作業として覚えておくのがコツです。

image.png

使ってみて

構成自体はかなりシンプルなまま、特に困ることなく動いています。NAS内で完結しているので追加の月額費用もかからず、家の中の複数デバイスから同じメディアを再生できるのは便利です。ファイルを追加したときのスキャン操作だけ忘れないようにすれば、あとはほぼメンテナンスフリーで使えています。
image.png

まとめ

SynologyのNASにJellyfinを構築するなら、Container Managerでdocker-compose.ymlを書いて起動するだけで十分です。公式サンプルにある複数ライブラリ・カスタムフォント・リバースプロキシ向けの設定は、自宅で一人(または家族内)で使う分には省略してしまって問題ありませんでした。逆に、ファイルを追加したあとのライブラリスキャンだけは忘れずに、という点だけ覚えておけばつまずきにくいはずです。

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?