本教程适用于以下操作系统版本
- Debian 12 (Bookworm)
- Debian 11 (Bullseye)
- Debian 10 (Buster)
本页内容
- 先决条件
- 添加 Jellyfin 软件仓库
- 安装与管理 Jellyfin
- 使用 UFW 配置安全设置
- 安装并配置 Apache2 作为反向代理 安装 Apache2 和 Certbot 使用 Certbot 生成 SSL/TLS 证书 将 Apache2 配置为反向代理
- Jellyfin 媒体服务器安装
- 结论
- 安装 Apache2 和 Certbot
- 使用 Certbot 生成 SSL/TLS 证书
- 将 Apache2 配置为反向代理
Jellyfin 是一款用于构建媒体服务器的自由软件。它可以让你从多个设备或客户端收集、管理和串流媒体文件。Jellyfin 是一款免费的自托管应用,可以安装在你的服务器上,因此你可以在本地环境(例如家中)搭建自己的媒体服务器,并允许多个客户端和设备访问你的所有媒体文件。
Jellyfin 是 Emby 和 Plex 等专有媒体文件服务器的替代方案。它可以让你在任何设备、任何地点管理媒体文件。
本指南将介绍如何在 Debian 12 上安装 Jellyfin 媒体服务器。你将通过预编译的二进制包安装 Jellyfin,并使用 UFW(Uncomplicated Firewall)、来自 Letsencrypt 的 SSL/TLS 证书以及 Apache2 反向代理来保护它。
先决条件
在开始之前,请确保满足以下条件:
- 一台配备 2 GB 或 4 GB 内存的 Debian 12 服务器。
- 具有管理员权限的非 root 用户。
- 指向服务器 IP 地址的域名。
添加 Jellyfin 软件仓库
Jellyfin 媒体服务器有多种安装方式,可以手动安装,也可以通过适用于大多数 Linux 发行版的预编译包安装。在第一步中,你将把 Jellyfin 软件仓库添加到你的 Debian 服务器。
首先,运行以下 apt 命令,在你的 Debian 机器上安装依赖项。
sudo apt install apt-transport-https ca-certificates gnupg curl -y

依赖项安装完成后,执行以下命令添加 jellyfin 软件仓库的 GPG 密钥,该密钥将保存在 /etc/apt/keyrings/jellyfin.gpg 。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/jellyfin.gpg
现在执行以下命令,将 jellyfin 软件仓库添加到你的 Debian 服务器。执行命令后,将创建仓库文件 /etc/apt/sources.list.d/jellyfin.sources 。
cat <<EOF | sudo tee /etc/apt/sources.list.d/jellyfin.sources
Types: deb
URIs: https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release )
Suites: $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release )
Components: main
Architectures: $( dpkg --print-architecture )
Signed-By: /etc/apt/keyrings/jellyfin.gpg
EOF

最后,使用以下 apt update 命令更新并刷新你的 Debian 软件包索引。
sudo apt update
你应该能看到 jellyfin 仓库已添加到系统仓库列表中。

安装与管理 Jellyfin
添加 jellyfin 仓库后,就可以安装 jellyfin 媒体服务器了。完成以下步骤以安装 jellyfin,并学习如何通过 systemctl 管理 jellyfin 服务。
执行以下 apt install 命令以安装 jellyfin 媒体服务器。输入 y 确认,然后按 ENTER 继续。
sudo apt install jellyfin

安装完成后,使用以下命令确认 Jellyfin 服务正在运行且已启用。
sudo systemctl is-enabled jellyfin
sudo systemctl status jellyfin
如果正在运行,你应该会看到输出 active (running) 。如果已启用,你看到的输出应为 enabled 。这意味着 Jellyfin 会在系统启动时自动启动。

默认情况下,Jellyfin 在 localhost 的 8096 端口上运行。执行以下 ss 命令,以验证你的 Debian 系统上的端口列表。
ss -tulpn
你应该会看到 8096 端口被 Jellyfin 媒体服务器占用。

最后,运行以下 systemctl 命令来启动、停止或重启 Jellyfin 服务。
sudo systemctl start jellyfin
sudo systemctl stop jellyfin
sudo systemctl restart jellyfin
使用 UFW 配置安全设置
在接下来的部分中,你将通过 UFW 来保护你的 Jellyfin 媒体服务器。你将安装 UFW,然后开放 HTTP 和 HTTPS 协议以允许客户端访问。由于你将使用 Apache2 作为反向代理,因此必须开放 HTTP 和 HTTPS 协议。
首先,通过以下 apt install 命令安装 UFW。
sudo apt install ufw -y

UFW 安装完成后,运行以下 ufw 命令添加 OpenSSH 服务,然后启动并启用 UFW。
sudo ufw allow OpenSSH
sudo ufw enable
出现提示时输入 y,UFW 便会开始运行并启用。
现在运行以下命令添加 WWW Full 配置文件,并验证 UFW 状态。WWW Full 配置文件将在你的 Debian 系统上同时开放 HTTP 和 HTTPS 协议。
sudo ufw allow "WWW Full"
sudo ufw status
输出应表明 UFW 处于活动状态,并且已启用 OpenSSH 和 WWW Full 配置文件。

安装并配置 Apache2 作为反向代理
在本指南中,你将在 Apache2 中将 Jellyfin 媒体服务器作为反向代理运行。你还将使用通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书来保护你的安装。
现在,完成以下任务:安装 Apache2 和 Certbot、生成 SSL/TLS 证书,并创建 Jellyfin 媒体服务器的 Apache2 虚拟主机配置。
安装 Apache2 和 Certbot
首先,运行以下命令安装 Apache2 Web 服务器和 Certbot。输入 y 确认,然后按 ENTER。
sudo apt install apache2 certbot

安装完成后,apache2 服务应默认处于运行且已启用状态。使用以下 systemctl 命令进行验证。
sudo systemctl is-enabled apache2
sudo systemctl status apache2
enabled 的输出表明 apache2 服务将在开机时自动启动。而 active (running) 的输出表明服务当前处于运行状态。

使用 Certbot 生成 SSL/TLS 证书
在生成 SSL/TLS 证书之前,先通过 a2enmod 命令启用部分 Apache2 模块,并重启 Apache2 服务。
sudo a2enmod proxy proxy_http ssl proxy_wstunnel remoteip http2 headers
sudo systemctl restart apache2
现在运行以下命令,创建新目录 /var/www/html/jellyfin/public_html,并将其所有权更改为 www-data 用户和组。该目录将用作生成 SSL/TLS 证书的临时 web-root 目录。
sudo mkdir -p /var/www/html/jellyfin/public_html
sudo chown -R www-data:www-data /var/www/html/jellyfin/public_html
接下来,运行以下 certbot 命令生成新的 SSL/TLS 证书。在执行命令之前,请务必修改电子邮件地址和域名。
sudo certbot certonly --agree-tos --email
[email protected]
--no-eff-email --webroot -w /var/www/html/jellyfin/public_html -d media.howtoforge.local
处理完成后,你的 SSL/TLS 证书将位于 /etc/letsencrypt/live/domain.com 目录中。其中 fullchain.pem 文件是公钥,privkey.pem 是私钥。
将 Apache2 配置为反向代理
使用以下 nano 编辑器命令创建新的虚拟主机配置文件 /etc/apache2/sites-available/jellyfin.conf 。
sudo nano /etc/apache2/sites-available/jellyfin.conf
插入以下配置,并务必将域名、SSL/TLS 证书路径以及服务器 IP 地址替换为你自己的信息。这样,你就将 Apache2 设置为运行在 8096 端口上的 jellyfin 媒体服务器的反向代理。
<VirtualHost *:80> ServerName media.howtoforge.local # Comment to prevent HTTP to HTTPS redirect Redirect permanent / https://media.howtoforge.local/ ErrorLog /var/log/apache2/media.howtoforge.local-error.log CustomLog /var/log/apache2/media.howtoforge.local-access.log combined </VirtualHost> # If you are not using an SSL certificate, replace the 'redirect' # line above with all lines below starting with 'Proxy' <IfModule mod_ssl.c> <VirtualHost *:443> ServerName media.howtoforge.local # This folder exists just for certbot(You may have to create it, chown and chmod it to give apache permission to read it) DocumentRoot /var/www/html/jellyfin/public_html ProxyPreserveHost On # Letsencrypt's certbot will place a file in this folder when updating/verifying certs # This line will tell Apache to not to use the proxy for this folder. ProxyPass "/.well-known/" "!" # Tell Jellyfin to forward that requests came from TLS connections RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" ProxyPass "/socket" "ws://192.168.10.15:8096/socket" ProxyPassReverse "/socket" "ws://192.168.10.15:8096/socket" ProxyPass "/" "http://192.168.10.15:8096/" ProxyPassReverse "/" "http://192.168.10.15:8096/" SSLEngine on SSLCertificateFile /etc/letsencrypt/live/media.howtoforge.local/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/media.howtoforge.local/privkey.pem Protocols h2 http/1.1 # Enable only strong encryption ciphers and prefer versions with Forward Secrecy SSLCipherSuite HIGH:RC4-SHA:AES128-SHA:!aNULL:!MD5 SSLHonorCipherOrder on # Disable insecure SSL and TLS versions SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 ErrorLog /var/log/apache2/media.howtoforge.local-error.log CustomLog /var/log/apache2/media.howtoforge.local-access.log combined </VirtualHost> </IfModule>
完成后保存文件并退出编辑器。
接下来,运行以下 a2ensite 命令以激活虚拟主机 jellyfin.conf ,然后验证你的 Apache2 配置语法。
sudo a2ensite jellyfin.conf
sudo apachectl configtest
如果你的 Apache2 配置语法正确,你应该会看到输出 Syntax OK 。

现在使用以下命令重启 apache2 服务以使更改生效。你的 jellyfin 安装应该已在 Apache2 反向代理下运行并受到保护。
sudo systemctl restart apache2
打开你的 Web 浏览器,访问你的 Jellyfin 安装的域名,例如 https://media.howtoforge.local/ 。如果配置成功,你应该会看到如下的 Jellyfin 安装向导:

Jellyfin 媒体服务器安装
在接下来的步骤中,你将通过安装向导完成 Jellyfin 媒体服务器的配置。
首先,为你的 Jellyfin 安装选择默认语言,然后点击 Next 。

现在,为你的 Jellyfin 安装创建一个新管理员用户。输入你的用户名和密码,然后点击 Next 。

对于媒体库,你可以稍后进行配置。点击 Next 继续。

为你的媒体库选择偏好的 Metadata 语言,然后点击 Next 。

勾选 Allow remote connections 选项以启用对 jellyfin 媒体服务器的远程访问。你也可以勾选该选项来启用端口映射。然后点击 Next 。

如果你的配置成功,你应该会看到提示 You're Done! 。点击 Finish 完成 jellyfin 的安装。

现在,你应该会被重定向到 Jellyfin 登录页面。输入你的 Jellyfin 管理员用户名和密码,然后点击 Sign In 。

如果一切顺利,你应该会看到如下的 Jellyfin 管理仪表盘:

最后,点击 Administration 部分中的 Dashboard 菜单。你应该会看到有关你的 Jellyfin 媒体服务器安装的详细信息:

结论
作为本指南的总结,你已经在 Debian 12 上完成了 Jellyfin 媒体服务器的安装,并搭配了 Apache2 反向代理以及来自 Letsencrypt 的 SSL/TLS。你还使用 UFW 保护了 jellyfin 服务器,并完成了 Jellyfin 媒体服务器的基本配置。你可以创建一个新的媒体库,并将你的媒体文件上传到 Jellyfin。