がとらぼでは過去にFreeBSDでPlex Media ServerやVolumioのライブラリ管理をメディアサーバに任せるの記事でPlex Media Serverを紹介しました。Plex Media Serverは導入が簡単で多くのプラットフォームに対応し、当時としては先進的かつ洗練されたUIを備えた高機能なメディアサーバでした。多くの機能を無料で利用できたことも魅力です。
しかし、Plexがネットアカウントによる集中管理を強化し、有料機能を強く推すようになったことで、次第に不満を感じるユーザーも増えています。
クローズドなネットワーク環境でも利用できるオープンソースのメディアサーバを求める人々の間で注目を集めているのが、今回紹介する Jellyfin です。
Jellyfinは動画に強い構成を持っていますが、音楽専用サーバを探している場合は、LMS(Lyrion Music Server / 旧Logitech Media Server)を選ぶのも良いでしょう。
ただし、「がとらぼ」の中の人は、メディアサーバのWeb UIではなくネットワークメディアプレーヤーで利用する方針のため、LMSの強みである音楽ライブラリとの親和性を重視せず、今回はJellyfinを導入することにしました。
インストールの事前準備
Jellyfinの導入は非常に簡単です。特にLinux系OSでは、コマンド1行で完了します。
今回はシングルボードコンピュータ「Orange Pi Zero 3」に、Armbian(Debianベース)のイメージを焼いたmicroSDカードを使用しました。rootアカウント(初期パスワード1234)でSSHログインし、まずはネットワーク設定だけを行います。ネットワーク設定のデフォルトはDHCPですが、メディアサーバはIPアドレスを固定しておくのが望ましいためです。
最近のDebian系ではネットワークをnetplanで設定しますが、Armbianではarmbian-configを使えば簡単にネットワーク設定を行うことも可能です。armbian-configを使っても実際のネットワーク設定はnetplanでなので/etc/netplan下に設定が作られます。ただし、armbian-configではIPv6設定ができない場合があり、設定項目にIPv6がない場合はnetplan用の設定ファイルを直接修正・作成する必要があります。IPv4の設定だけarmbian-configで行い、作成された/etc/netplan下の設定ファイルにIPv6の設定を追加するのが簡単です。
事前準備として、動画や音楽ファイルを保存するストレージを用意しておく必要があります。シングルボードコンピュータの場合はUSBメモリやUSB接続のSSD/HDDが一般的です。PCであれば既存の内蔵ストレージを利用し、メディア用のディレクトリを決めておけば十分でしょう。
今回は、USBメモリをシングルボードコンピュータに接続し、メディアファイルの保存先として使用することにしました。
USBメモリを自動的にマウントする方法はいくつかありますが、今回はUSBメモリのデバイスUUIDを指定してマウントする方法を採用します。
まず、USBメモリのUUIDを確認します。ここでは、USBメモリが /dev/sda として認識されているものとします。もし認識デバイスが不明な場合は、USBメモリを接続した後に dmesg コマンドを実行し、最後の数行を確認します。そこで /dev/sda や /dev/sdb、/dev/sdc といったデバイス名が表示されていれば、それ(sdb, sdc)が対象のデバイスです。
# ls -al /dev/disk/by-uuid/ | grep sda
lrwxrwxrwx 1 root root 10 Oct 9 20:59 35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a -> ../../sda1
この例では、35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a が目的のディスクUUIDです。
※この文字列はデバイスごとに異なります。この記事に記載された値をコピーして使用しないでください。
次に、USBメモリのマウント先ディレクトリを作成します。パスは任意ですが、ここでは /mnt/media とします。
# mkdir /mnt/media
エディタで/etc/fstabを編集
# vim /etc/fstab
(次の1行を追加)
UUID=35ef9e60-7c0d-4f71-8c6b-31ac8f471f5a /mnt/media ext4 defaults 0 0
設定が完了しても、/etc/fstabへの変更は即時反映されません。通常はシステム再起動後に有効になります。
システムを再起動せずに、すぐにマウントを反映させたい場合は、以下のコマンドを実行します。
# systemctl daemon-reload
# sudo mount -a
これでUSBメモリがマウントされました。/etc/fstabに設定したため、次回以降の再起動時も自動的にマウントされます。
Jellyfinのインストール
Jellyfinの公式インストールドキュメントに従って手順を進めれば、問題なく導入できます。スクリプト実行時に多くのファイルをインターネットからダウンロードするため、ネット接続は必須です。
インストールスクリプトはシステムのOSやCPUアーキテクチャを自動判別し、最適なファイルやパッケージを導入します。
ただし、2025年10月現在、Debian 13(Trixie)ではCPUアーキテクチャに関係なくJellyfinが正常に起動しない不具合が報告されています。
Orange Pi Zero 3(arm64環境)でもTrixie上では起動できず、Debian 12(Bookworm)を使用したところ正常に動作しました。
以下は、Bookworm環境での実行例です。
なお、rootユーザーで実行していますが、コマンドにsudoが含まれているため、rootでなくても問題ありません。
_ _ _ __ __ _ _ _
/_\ _ _ _ __ | |__(_)__ _ _ _ ___ _ _ _ _ ___ / _|/ _(_)__(_)__ _| |
/ _ \| '_| ' \| '_ \ / _` | ' \___| || | ' \/ _ \ _| _| / _| / _` | |
/_/ \_\_| |_|_|_|_.__/_\__,_|_||_| \_,_|_||_\___/_| |_| |_\__|_\__,_|_|
v25.11 rolling for Orange Pi Zero3 running Armbian Linux 6.12.47-current-sunxi64
Packages: Debian stable (bookworm), possible distro upgrade (trixie)
Updates: Kernel upgrade enabled and 3 packages available for upgrade
Support: DIY (custom image)
IPv4: (LAN) 192.168.11.64 (WAN) 255.255.255.256
IPv6: 20zz:zzz:zzz:zzz:yyyy:yyyy:yyyy:yyyy
Performance:
Load: 14% Uptime: 4 min
Memory usage: 16% of 971M
CPU temp: 44°C Usage of /: 7% of 29G
RX today: 17 KiB
Commands:
Configuration : armbian-config
Upgrade : armbian-upgrade
Monitoring : htop
root@orangepizero3:~# curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0> Determining optimal repository settings.
100 10841 100 10841 0 0 10602 0 0:00:01 0:00:01 --:--:-- 10618
Found the following details from '/etc/os-release':
Real OS: debian
Repository OS: debian
Repository Release: bookworm
CPU Architecture: arm64
If this looks correct, press <Enter> now to continue installing Jellyfin.
> Fetching repository signing key.
> Installing Jellyfin repository into APT.
Types: deb
URIs: https://repo.jellyfin.org/debian
Suites: bookworm
Components: main
Architectures: arm64
Signed-By: /etc/apt/keyrings/jellyfin.gpg
> Updating APT repositories.
Hit:1 http://security.debian.org bookworm-security InRelease
Hit:2 http://deb.debian.org/debian bookworm InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Hit:4 http://deb.debian.org/debian bookworm-backports InRelease
Hit:5 https://github.armbian.com/configng stable InRelease
Get:7 https://repo.jellyfin.org/debian bookworm InRelease [10.6 kB]
Get:8 https://repo.jellyfin.org/debian bookworm/main arm64 Packages [5,056 B]
Hit:6 http://mirrors.bfsu.edu.cn/armbian bookworm InRelease
Fetched 15.7 kB in 3s (4,567 B/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
> Installing Jellyfin.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1 libogg0
libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libwebp7
libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
Suggested packages:
libbluray-bdj opus-tools opencl-icd
Recommended packages:
libaacs0
The following NEW packages will be installed:
jellyfin jellyfin-ffmpeg7 jellyfin-server jellyfin-web libbluray2 libicu72 libmp3lame0 libmpg123-0 libnuma1
libogg0 libopenmpt0 libopus0 libtheora0 libudfread0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7
libwebp7 libwebpmux3 libx264-164 libx265-199 libxml2 libzvbi-common libzvbi0 ocl-icd-libopencl1
0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded.
Need to get 106 MB of archives.
After this operation, 324 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 libudfread0 arm64 1.1.2-1 [15.7 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libicu72 arm64 72.1-3+deb12u1 [9,202 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 libxml2 arm64 2.9.14+dfsg-1.3~deb12u4 [620 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 libbluray2 arm64 1:1.3.4-1 [124 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 libmp3lame0 arm64 3.100-6 [357 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 libmpg123-0 arm64 1.31.2-1+deb12u1 [141 kB]
Get:7 http://deb.debian.org/debian bookworm/main arm64 libogg0 arm64 1.3.5-3 [23.0 kB]
Get:8 http://deb.debian.org/debian bookworm/main arm64 libvorbis0a arm64 1.3.7-1 [86.2 kB]
Get:9 http://deb.debian.org/debian bookworm/main arm64 libvorbisfile3 arm64 1.3.7-1 [25.4 kB]
Get:10 http://deb.debian.org/debian bookworm/main arm64 libopenmpt0 arm64 0.6.9-1 [622 kB]
Get:11 http://deb.debian.org/debian bookworm/main arm64 libopus0 arm64 1.3.1-3 [176 kB]
Get:12 http://deb.debian.org/debian bookworm/main arm64 libtheora0 arm64 1.1.1+dfsg.1-16.1+deb12u1 [144 kB]
Get:13 http://deb.debian.org/debian bookworm/main arm64 libvorbisenc2 arm64 1.3.7-1 [80.4 kB]
Get:14 http://deb.debian.org/debian bookworm/main arm64 libvpx7 arm64 1.12.0-1+deb12u4 [892 kB]
Get:15 http://deb.debian.org/debian bookworm/main arm64 libwebp7 arm64 1.2.4-0.2+deb12u1 [260 kB]
Get:16 http://deb.debian.org/debian bookworm/main arm64 libwebpmux3 arm64 1.2.4-0.2+deb12u1 [109 kB]
Get:17 http://deb.debian.org/debian bookworm/main arm64 libx264-164 arm64 2:0.164.3095+gitbaee400-3 [443 kB]
Get:18 http://deb.debian.org/debian bookworm/main arm64 libnuma1 arm64 2.0.16-1 [20.3 kB]
Get:19 http://deb.debian.org/debian bookworm/main arm64 libx265-199 arm64 3.5-2+b1 [603 kB]
Get:20 http://deb.debian.org/debian bookworm/main arm64 libzvbi-common all 0.2.41-1 [69.7 kB]
Get:21 http://deb.debian.org/debian bookworm/main arm64 libzvbi0 arm64 0.2.41-1 [258 kB]
Get:22 http://deb.debian.org/debian bookworm/main arm64 ocl-icd-libopencl1 arm64 2.3.1-1 [42.1 kB]
Get:23 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-server arm64 10.10.7+deb12 [43.3 MB]
Get:24 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin-web all 10.10.7+deb12 [32.8 MB]
Get:25 https://sgp1.mirror.jellyfin.org/files/debian bookworm/main arm64 jellyfin-ffmpeg7 arm64 7.1.2-2-bookworm [15.4 MB]
Get:26 https://repo.jellyfin.org/debian bookworm/main arm64 jellyfin all 10.10.7+deb12 [2,434 B]
Fetched 106 MB in 32s (3,327 kB/s)
Selecting previously unselected package jellyfin-server.
(Reading database ... 39006 files and directories currently installed.)
Preparing to unpack .../00-jellyfin-server_10.10.7+deb12_arm64.deb ...
Unpacking jellyfin-server (10.10.7+deb12) ...
Selecting previously unselected package jellyfin-web.
Preparing to unpack .../01-jellyfin-web_10.10.7+deb12_all.deb ...
Unpacking jellyfin-web (10.10.7+deb12) ...
Selecting previously unselected package libudfread0:arm64.
Preparing to unpack .../02-libudfread0_1.1.2-1_arm64.deb ...
Unpacking libudfread0:arm64 (1.1.2-1) ...
Selecting previously unselected package libicu72:arm64.
Preparing to unpack .../03-libicu72_72.1-3+deb12u1_arm64.deb ...
Unpacking libicu72:arm64 (72.1-3+deb12u1) ...
Selecting previously unselected package libxml2:arm64.
Preparing to unpack .../04-libxml2_2.9.14+dfsg-1.3~deb12u4_arm64.deb ...
Unpacking libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Selecting previously unselected package libbluray2:arm64.
Preparing to unpack .../05-libbluray2_1%3a1.3.4-1_arm64.deb ...
Unpacking libbluray2:arm64 (1:1.3.4-1) ...
Selecting previously unselected package libmp3lame0:arm64.
Preparing to unpack .../06-libmp3lame0_3.100-6_arm64.deb ...
Unpacking libmp3lame0:arm64 (3.100-6) ...
Selecting previously unselected package libmpg123-0:arm64.
Preparing to unpack .../07-libmpg123-0_1.31.2-1+deb12u1_arm64.deb ...
Unpacking libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Selecting previously unselected package libogg0:arm64.
Preparing to unpack .../08-libogg0_1.3.5-3_arm64.deb ...
Unpacking libogg0:arm64 (1.3.5-3) ...
Selecting previously unselected package libvorbis0a:arm64.
Preparing to unpack .../09-libvorbis0a_1.3.7-1_arm64.deb ...
Unpacking libvorbis0a:arm64 (1.3.7-1) ...
Selecting previously unselected package libvorbisfile3:arm64.
Preparing to unpack .../10-libvorbisfile3_1.3.7-1_arm64.deb ...
Unpacking libvorbisfile3:arm64 (1.3.7-1) ...
Selecting previously unselected package libopenmpt0:arm64.
Preparing to unpack .../11-libopenmpt0_0.6.9-1_arm64.deb ...
Unpacking libopenmpt0:arm64 (0.6.9-1) ...
Selecting previously unselected package libopus0:arm64.
Preparing to unpack .../12-libopus0_1.3.1-3_arm64.deb ...
Unpacking libopus0:arm64 (1.3.1-3) ...
Selecting previously unselected package libtheora0:arm64.
Preparing to unpack .../13-libtheora0_1.1.1+dfsg.1-16.1+deb12u1_arm64.deb ...
Unpacking libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Selecting previously unselected package libvorbisenc2:arm64.
Preparing to unpack .../14-libvorbisenc2_1.3.7-1_arm64.deb ...
Unpacking libvorbisenc2:arm64 (1.3.7-1) ...
Selecting previously unselected package libvpx7:arm64.
Preparing to unpack .../15-libvpx7_1.12.0-1+deb12u4_arm64.deb ...
Unpacking libvpx7:arm64 (1.12.0-1+deb12u4) ...
Selecting previously unselected package libwebp7:arm64.
Preparing to unpack .../16-libwebp7_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libwebpmux3:arm64.
Preparing to unpack .../17-libwebpmux3_1.2.4-0.2+deb12u1_arm64.deb ...
Unpacking libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Selecting previously unselected package libx264-164:arm64.
Preparing to unpack .../18-libx264-164_2%3a0.164.3095+gitbaee400-3_arm64.deb ...
Unpacking libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Selecting previously unselected package libnuma1:arm64.
Preparing to unpack .../19-libnuma1_2.0.16-1_arm64.deb ...
Unpacking libnuma1:arm64 (2.0.16-1) ...
Selecting previously unselected package libx265-199:arm64.
Preparing to unpack .../20-libx265-199_3.5-2+b1_arm64.deb ...
Unpacking libx265-199:arm64 (3.5-2+b1) ...
Selecting previously unselected package libzvbi-common.
Preparing to unpack .../21-libzvbi-common_0.2.41-1_all.deb ...
Unpacking libzvbi-common (0.2.41-1) ...
Selecting previously unselected package libzvbi0:arm64.
Preparing to unpack .../22-libzvbi0_0.2.41-1_arm64.deb ...
Unpacking libzvbi0:arm64 (0.2.41-1) ...
Selecting previously unselected package ocl-icd-libopencl1:arm64.
Preparing to unpack .../23-ocl-icd-libopencl1_2.3.1-1_arm64.deb ...
Unpacking ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Selecting previously unselected package jellyfin-ffmpeg7.
Preparing to unpack .../24-jellyfin-ffmpeg7_7.1.2-2-bookworm_arm64.deb ...
Unpacking jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Selecting previously unselected package jellyfin.
Preparing to unpack .../25-jellyfin_10.10.7+deb12_all.deb ...
Unpacking jellyfin (10.10.7+deb12) ...
Setting up libudfread0:arm64 (1.1.2-1) ...
Setting up jellyfin-web (10.10.7+deb12) ...
Setting up libicu72:arm64 (72.1-3+deb12u1) ...
Setting up libmpg123-0:arm64 (1.31.2-1+deb12u1) ...
Setting up libogg0:arm64 (1.3.5-3) ...
Setting up libx264-164:arm64 (2:0.164.3095+gitbaee400-3) ...
Setting up jellyfin-server (10.10.7+deb12) ...
Created symlink /etc/systemd/system/multi-user.target.wants/jellyfin.service → /lib/systemd/system/jellyfin.service.
Setting up libopus0:arm64 (1.3.1-3) ...
Setting up libvorbis0a:arm64 (1.3.7-1) ...
Setting up libwebp7:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libnuma1:arm64 (2.0.16-1) ...
Setting up ocl-icd-libopencl1:arm64 (2.3.1-1) ...
Setting up libtheora0:arm64 (1.1.1+dfsg.1-16.1+deb12u1) ...
Setting up libvpx7:arm64 (1.12.0-1+deb12u4) ...
Setting up libwebpmux3:arm64 (1.2.4-0.2+deb12u1) ...
Setting up libxml2:arm64 (2.9.14+dfsg-1.3~deb12u4) ...
Setting up libzvbi-common (0.2.41-1) ...
Setting up libmp3lame0:arm64 (3.100-6) ...
Setting up libvorbisenc2:arm64 (1.3.7-1) ...
Setting up libzvbi0:arm64 (0.2.41-1) ...
Setting up libvorbisfile3:arm64 (1.3.7-1) ...
Setting up libx265-199:arm64 (3.5-2+b1) ...
Setting up libbluray2:arm64 (1:1.3.4-1) ...
Setting up libopenmpt0:arm64 (0.6.9-1) ...
Setting up jellyfin-ffmpeg7 (7.1.2-2-bookworm) ...
Setting up jellyfin (10.10.7+deb12) ...
Processing triggers for man-db (2.11.2-2) ...
Processing triggers for libc-bin (2.36-9+deb12u13) ...
> Waiting 15 seconds for Jellyfin to fully start up.
-------------------------------------------------------------------------------
● jellyfin.service - Jellyfin Media Server
Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/jellyfin.service.d
└─jellyfin.service.conf
Active: active (running) since Thu 2025-10-09 21:35:13 JST; 26s ago
Main PID: 3951 (jellyfin)
Tasks: 35 (limit: 982)
Memory: 134.9M
CPU: 34.836s
CGroup: /system.slice/jellyfin.service
├─3951 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg
└─4043 /usr/lib/jellyfin-ffmpeg/ffmpeg -hide_banner -f lavfi -i nullsrc=s=1x1:d=10000 -f null -
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vaapi with option Action t…ilable
Oct 09 21:35:36 orangepizero3 mpp[4039]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [WRN] Filter: overlay_vulkan with option Action …ilable
Oct 09 21:35:36 orangepizero3 mpp[4040]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 mpp[4041]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:36 orangepizero3 jellyfin[3951]: [21:35:36] [INF] Available hwaccel types: ["cuda", "drm", "…kmpp"]
Oct 09 21:35:36 orangepizero3 mpp[4042]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:37 orangepizero3 mpp[4043]: mpp_platform: can not found match soc name: xunlong,orangepi-ze…0i-h618
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean Transcode Directory Completed after …econds
Oct 09 21:35:38 orangepizero3 jellyfin[3951]: [21:35:38] [INF] Clean up collections and playlists Complet…econds
Hint: Some lines were ellipsized, use -l to show in full.
-------------------------------------------------------------------------------
You should see the service as 'active (running)' above. If not, use https://jellyfin.org/contact to find us for troubleshooting.
You can access your new instance now at http://192.168.11.64:8096 in your web browser to finish setting up Jellyfin.
Thank you for installing Jellyfin, and happy watching!
インストールには少し時間がかかりますが、必要なパッケージの導入からサービス登録・起動まで自動で行われます。本当にコマンド1行の実行で完了しました。
表示される内容の内、必ず確認しておくべきものは黄色にしています。
実行結果の最後にブラウザでアクセスするためのURLが表示されるのでそれをコピペでブラウザを開きます。192.168.11.64:8096は「がとらぼ」のLAN環境での例なのでこのままコピーしないでください。
Jellyfinの設定
Jellyfinの設定はWebブラウザから行います。
ブラウザで http://JellyfinのホストIPアドレス:8096 を開きます。初期設定時だけでなく、今後アクセスする際も常にポート「8096」を指定する必要がある点に注意してください。

初回アクセス時には初期設定ウィザードが表示されます。このウィザードで行う設定は、後からいつでも変更可能です。
最初に表示されるのは言語選択画面ですが、ブラウザの言語設定により自動的に日本語表示になっているため、ここでは確認程度の選択なのかもしれません。選択欄の初期値は英語なので「日本語」を選択し、「次へ」をクリックします。

続いて、最初のユーザー登録を行います。このユーザーが管理者となります。初期値は「jellyfin」ですが、任意のユーザー名に変更可能です。パスワードを2回入力し、「次へ」をクリックします。

メディアライブラリ(動画や音楽ファイルの保存場所)を1つ以上登録します。SSHなどでホストにアクセスし、USBメモリ上のディレクトリを作成してから、そのディレクトリを選択します。

メディアライブラリの追加・設定画面です。Jellyfinではコンテンツタイプの指定が非常に重要です。
「音楽」を選ぶ場合は、公式のディレクトリ構成と命名規則に従う必要があります。これまで利用していたメディアサーバでは求められなかったルールなので、最初は少し戸惑います。
なお、コンテンツタイプには「映画」「(TV)番組」「ブック」(電子書籍・オーディオブック)などもあり、それぞれ独自の命名規則があります。
「がとらぼ」の中の人はこの規則が少々面倒に感じたため、命名規則が不要な「ミュージックビデオ」にするか、あるいはメタデータ取得を気にせず「音楽」として設定する予定です。

Jellyfinでは複数のライブラリを作成できます。異なるコンテンツタイプごとに分けたり、同じタイプでも複数に分割することも可能です。ライブラリが大きくなりすぎるとスキャンや更新に時間がかかるため、分割管理できるのは利点です。

ライブラリごとにメタデータの言語を設定できます。日本語文字コード(S-JIS, EUC, UTF-8)の扱いが完全に自動かどうかは不明ですが、日本語メタデータの扱いにも一定の対応があるようです。

リモートアクセスの設定は特に変更せず、「次へ」をクリックします。

これで初期設定は完了です。「完了」をクリックします。

ログイン画面が表示されます。
先ほど登録したアカウント情報でサインインします。家庭内LANのみで使用する場合は「ログイン状態を保存する」にチェックを入れておくと便利です。
ただし、ネットワークメディアプレーヤー経由で利用する場合は、頻繁にログインする機会はないため、どちらでも問題ありません。

ダッシュボードのメイン画面です。「マイメディア」に登録済みのライブラリが表示され、「・・に最近追加された」には新しく登録されたフォルダが並びます。ただし、この欄の表示期間や件数の仕様は不明です。この時点で20フォルダ以上登録(ライブラリのスキャンも)していても、3つしか表示されませんでした。(後に15以上表示されました)
画面左上のハンバーガーメニュー「」をクリックするとメニューが開きます。

メニュー表示時の画面です。主に利用するのは「ダッシュボード」と「設定」です。初期設定で思い通りにいかなかった項目の修正・追加・削除はこの2つで行います。特に「ダッシュボード」はメディアサーバの管理操作で使用する重要な項目です。(次)

ダッシュボードでは、ライブラリの追加・削除後にスキャンを実行する際によく利用します。
個別ライブラリの更新は、「ダッシュボード」内の「ライブラリ」メニューから対象を選択して行います。
また意外なことに、「プラグイン」は「設定」ではなくこの「ダッシュボード」にあります。導入済みプラグインの管理は「プラグイン」から、新規追加は「カタログ」から行います。機能拡張系のプラグインがもう少し増えるとより魅力的になるでしょう。

ここからは設定画面ではなく、再生用のライブラリ表示画面です。つまり、WebブラウザでJellyfinをメディアプレーヤーとして利用する際の画面です。動作確認目的として使う場面が多いでしょう。
以下は、コンテンツタイプ「ミュージックビデオ」のライブラリを表示した例です。フォルダ内の動画から自動生成されたサムネイルが表示され、それぞれをクリックすると中身が表示されます。(次)

選択したフォルダ内にある楽曲やビデオファイルの一覧が表示されます。

「ミュージックビデオ」の場合、ファイルを選択すると再生画面に切り替わります。(次)
「音楽」の場合は、フォルダを開いた時点でこの画面に似た楽曲リストが表示されます。

個別のビデオ・楽曲の再生画面です。あくまでJellyfinのWeb UI上での再生であり、音声や映像が出力されるのはブラウザを操作しているPCやモバイルデバイス側です。
ネットワークメディアプレーヤーで再生する場合、このWeb画面の操作とネットワーク・メディアプレーヤーの動作は連動しないので注意が必要です。
Plex Media Serverに比べてやや癖はありますが、クローズド環境で使える高機能なメディアサーバがきわめて簡単に導入できました。Web UIの見た目は地味ですが、これはあくまで管理操作用なので大きな問題ではありません。
次回以降は、このメディアサーバと組み合わせて使用する新しいネットワークメディアプレーヤーを紹介する予定です。
実際には、先にネットワークメディアプレーヤーをVolumioから別のものに変更したことがきっかけで新しいメディアサーバ(今回のJellyfin)を導入したため、順序としては逆になります。
また、Jellyfin導入前にNAS+DLNAサーバの「openmediavault」も試したので、機会があればそちらの紹介も行いたいと思います。(ただしomvの記事は掲載しないかもしれません)
2025年11月16日追記:
Jellyfin 10.11.*からサービス起動時に特定のディレクトリの容量チェックが入るようになり、容量が想定に満たない場合はサービスが起動しなくなっています。/tmp (シングルボードコンピュータ用Debianはメモリディスクであることが多いです)と、 /var/log/jellyfin (シングルボードコンピュータ用Debianでは /var/log がzramのようなメモリディスク等で低容量であることが多いです)と /var/lib/jellyfin (これはあまり問題にならないかと思われます)
/tmp はtmpfsで割り当てられているでしょうから容量を4GB以上に変更します。 /var/log は容量が少なくても、 /var/log/jellyfin は容量の多いファイルシステムのディレクトリにシンボリックリンクで対応可能です。