QNAP Container Station Jellyfin Server 構築
「TS-h1283XU-RP」上のコンテナ(Container Station)で Jellyfin Server を構築します。
基本のセットアップ方法については、「QNAP QuTS hero 5 セットアップ」をご覧ください。
ページ内目次
Jellyfin って何?
自前でホスティング可能なマルチメディアサーバーのソフトウェアです。
Netflix、Amazonプライムビデオと同じような動画配信を自分のサーバーから出来るようになります。
音楽などにも対応しているためSpotifyの代わりにすることも可能です。
しかしながら、データ自体は自分で用意する必要があること、著作権法の関係があるので自分だけで使用することが注意点です。
有名どころのマルチメディアサーバーソフトウェアでは、以下のようなものが見つかります。
Plexは有名ですが、ユーザー管理(LDAP非対応・オンライン認証必要)の点で除外します。
EmbyとJellyfinがLDAPに対応しているため、どちらかを採用したいです。
JellyfinはEmbyからフォークして開発されたもので、Embyはクローズドソースに移行したようです。
また、多くの機能が有償となっており、今回はJellyfinを構築したいと思います。
Jellyfin Server を Container Station に設定
詳細はこちらにある通りで、このDockerイメージを動かす場合には、いくつかの設定が必要になります。
latest タグと各種バージョンのタグがあります。
事前準備
データの保存先としてディレクトリを作成します。
以下のディレクトリを準備しておきます。
- /share/Container/jellyfin/cache/
- /share/Container/jellyfin/config/
コマンド例:
mkdir -p /share/Container/jellyfin/cache/ && mkdir -p /share/Container/jellyfin/config/
メディアファイルの置き場は後で考えます。
とりあえず動作に最低限必要なディレクトリを用意します。
Dockerコンテナの設定
「Container Station」にはDocker Hubの仕様から、全てのタグが列挙されないというバグがあります。
タグが多いイメージに関して、Docker Hub APIはタグを取得する際の件数制限があり、全てのタグが表示されません。
Jellyfinのプロジェクトに関しては、非常にタグが多いプロジェクトで、latestタグ列挙まで行かず止まってしまいますので、自分でタグを入力して進める方法を取ります。
「Container Station」を開き、「コンテナ」タブから「作成」ボタンを押してコンテナ作成をします。
「コンテナの作成」という画面が表示されるので、イメージ欄に「jellyfin/jellyfin:latest」と入力して「次へ」を押して進みます。
「コンテナを作成する前にレジストリからイメージをプルしてみてください。」にチェックを入れなくてもローカルにイメージが無い場合にはプルされるので大丈夫です。
コンテナ再作成等、アップデートしたいときにチェックを入れましょう。
2026年1月時点では、10.11.5が最新版です。「latest」ではなく「10.11」タグを使用してもいいと思います。
使いたいバージョンに応じて適宜書き換えてください。
- 名前:任意(わかりやすいもの)
- 設定・再起動ポリシー:「停止時以外」
- ネットワーク設定・露出ポート:ホスト 8096/tcp コンテナ 8096/tcp
- ネットワーク設定・デフォルトの Web URL ポート:無効
7359/udp も開けておくと、Jellyfin クライアントが自動でサーバーを発見できるようです。
私の環境では、サーバーを置いてあるセグメントとは別セグメントを普段使っているので必要ない設定になります。
同一セグメントにインターフェースを置く場合には設定したほうが便利だと思います。
「詳細設定」をクリックして、詳細設定に進む。
「環境」ページ
「新しい変数の追加」ボタンで以下の内容を増やす。
- 変数「TZ」値「Asia/Tokyo」
「ストレージ」ページ
ボリューム「/cache」・「/config」設定があるため、それを一旦削除。
「ボリュームの追加」ボタン横の矢印から「マウントされたホストのパスをバインド」を選択して追加。
- ホスト「/Container/jellyfin/cache」に対してコンテナ「/cache」RWのままで
- ホスト「/Container/jellyfin/config」に対してコンテナ「/config」RWのままで
(なお、ボリュームの設定のままでも、ボリュームに /share/Container/jellyfin/ のパスで設定を入れると勝手にマウントになります)
この設定でコンテナ内のディレクトリをファイルシステムにマッピングさせます。
前述の通り、メディアファイルのディレクトリ設定は後でコンテナを「再作成」で設定することにします。
また、名前解決を行うために以下の設定を入れるといいでしょう。
ホスト「/Container/hosts」に対してコンテナ「/etc/hosts」をROで追加
これはLDAP接続のドメイン名解決のためなので必須ではないです。
なぜ「/Container/hosts」ファイルにするのかは、「QNAP QuTS hero 5 セットアップ」をご覧ください。
確実な時刻同期のために「/etc/localtime」をROで追加してもいいかもしれません。
以上で最低限起動する設定になっています。
「完了」でコンテナを作成しましょう。
Jellyfin Server のインストール
先程設定した8096番ポートにブラウザでアクセスすると初期インストール画面が表示されます。
サーバー名の設定と管理者アカウントの設定です。
ここで入力したサーバー名はアクセスしたときにタイトル等に表示されるものです。
メディアライブラリは現時点では追加せずにとりあえず進みます。
動画・音楽ファイルに対してメタデータの検索を行う場合に優先する言語を選んでおきます。
当たり前ですが、リモートアクセスを許可しないと様々な場所からアクセスして使うことが出来ません。
これで設定は完了します。
先程設定した管理者アカウントでログインできることを確認しておきましょう。
メディアライブラリは追加しませんでしたので何も表示されません。
右上のメニューから「管理」→「ダッシュボード」と進めることを確認してください。
Jellyfin の詳細設定
ユーザーについてはLDAP側で管理したいです。(著作権の問題があるので共有内容については気をつけてください)
LDAPの認証についてはプラグイン形式で提供されています。
管理画面のプラグインより、「LDAP-Auth」をインストールします。
インストール後はサーバーの再起動をして反映を待ちます。
LDAP-Auth プラグイン
プラグインの画面から設定に進めます。
例として「 QNAP Container Station LLDAP Server 構築」設定済みとします。
- https://github.com/jellyfin/jellyfin-plugin-ldapauth
- https://github.com/lldap/lldap/blob/main/example_configs/jellyfin.md
LLDAPを使用する場合には以下に設定例があるのでこちらも参考に。
以下、設定例です。
- LDAP Server:ldap.example.com
- LDAP Port:6360
- Secure LDAP:チェックを入れたまま
- StartTLS:チェックを外したまま
- LDAP Client Cert Path:入力なし
- LDAP Client Key Path:入力なし
- LDAP Root CA Path:入力なし
- Skip SSL/TLS Verification:チェックを外したまま
- Allow Password Change:チェックを外したまま
- Password Reset Url:入力なし
- LDAP Bind User:uid=ldap-readonly,ou=people,dc=ldap,dc=example,dc=com
- LDAP Bind User Password:パスワード
- LDAP Base DN for searches:ou=people,dc=ldap,dc=example,dc=com
Usersセクション
- LDAP Search Filter:(uid=*) または (&(uid=*)(!(uid=ldap-readonly))(!(uid=admin))) 等
- LDAP Search Attributes:uid, mail
- LDAP Uid Attribute:uid
- LDAP Username Attribute:uid
- LDAP Password Attribute:userPassword
- Enable profile image synchronization:チェックを外したまま
- Remove profile images not in LDAP:チェックを外したまま
- LDAP Profile Image Attribute:jpegphoto
Administratorsセクション
- LDAP Admin Base DN:入力なし
- LDAP Admin Filter:そのまま
- Enable Admin Filter 'memberUid' mode:チェックを外したまま
Testingセクション
- Enable User Creation:チェックを入れたまま
ライブラリアクセスセクション
- すべてのライブラリへのアクセスを有効化:任意の設定にする
以上の設定でLDAPのユーザーがログインできるようになります。
メディアライブラリの追加
例として音楽ライブラリを追加する場合の設定です。
コンテナの再作成の画面より詳細設定に進みます。
ストレージを開き、「ボリュームの追加」ボタン横の矢印から「マウントされたホストのパスをバインド」を選択して追加。
- ホスト「/Music/Library」に対してコンテナ「/media/music」ROでマウントする
(Jellyfinサーバー側から書き換えを許可するのであればRWでもいいかもしれません)
これでコンテナを再作成すると、「/media/music」にホスト側のライブラリがマウントされます。
もちろん、ホスト側のパスは一例ですので、環境によって変更してください。
上記例では、Musicという共有フォルダが作成してあり、その中にLibraryフォルダがある前提となっております。
音楽ライブラリの作り方
ここに示してある構造の通りにデータを入れていきます。
色々試した結果、FLACにエンコードして「/Music/Library/[アーティスト名]/[アルバム名]/[曲.flac]」で入れることに落ち着きました。
mp3に入れるアルバムアートが一部アプリで読めなかったこと、FLACもビットレート他を統一しておかないと読めない環境もありました。
私はCDを購入後、Plextorドライブを使用してオフセット0となるCUE + WAV形式で取り込みをしています。
そこからJellyfin向けに変換する作業が必要になりました。
具体的には「fre:ac」を使用してFLACにエンコード、「TagScanner」を使用してタグ編集です。
なお、ハイレゾのFLAC等をそのまま使用すると読めないアプリ、端末等がありますので、必ず変換します。
44.1kHz/16bitに統一するために「fre:ac」の信号処理を設定しておきます。
一般設定中「処理」にて「選択中」に以下の順序で処理を入れる。
- 「サンプリングレート変換」Medium/44100Hzにする
- 「サンプリング形式変換」整数16bit/TPDFにする
これでCD音質に統一されたFLACファイルが出来上がりますので、あとはタグを整備してライブラリにファイルを配置していくと良いです。
Jellyfinの使い方
ブラウザでアクセスすれば各種メディアファイルがブラウザ上で再生できます。
ただし、クライアントアプリがあったほうが使いやすいと思います。
iOS(iPhone・iPad)環境
- Jellyfin Mobile バックグラウンド音楽再生不可
- Swiftfin 動画専用
- Streamyfin バックグラウンド再生できるが表示がバグるときあり
- Manet Music FLACで良い感じに動作、動作軽量だがアーティスト一覧列挙されない?
- Fintunes FLACで良い感じに動作、アルバムアート一部表示されないことあり。
- Finamp FLACで良い感じに動作、動作軽量
- Infuse 動画専用
「Jellyfin Mobile」と「Swiftfin」は公式で提供されているものです。
しかし、音楽を聞く上では、バックグラウンド再生できないという致命的な問題があります。
その上、「Swiftfin」は動画専用のようで表示すらされないです。
「Fintunes」は良い感じに動いています。MP3ファイルのアルバムアートは表示されないようです。FLACはOK。
「Finamp」もかなり良いです。
