Jellyfin 是用于构建媒体服务器的免费软件。它允许您从多个设备或客户端收集、管理和流式传输媒体文件。Jellyfin 是一款免费的自托管应用程序,可以安装在您的服务器上,因此您可以在本地环境(例如在家中)创建自己的媒体服务器,然后允许多个客户端和设备访问您的所有媒体文件。
Jellyfin 是 Emby 和 Plex 等专有媒体文件服务器的替代品。它允许您从任何设备和任何地方管理媒体文件。
本指南将向您展示如何在 Debian 12 上安装 Jellyfin 媒体服务器。您将通过预构建的二进制包安装 Jellyfin,并使用 UFW(简单防火墙)、Letsencrypt 的 SSL/TLS 证书和 Apache2 反向代理来保护它。
先决条件
要开始此过程,请确保您具备以下条件:
- 具有 2 或 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)。启用后,您应该获得的输出被启用。这意味着 Jellyfin 将在系统启动时自动启动。
默认情况下,Jellyfin 在 localhost 中运行,端口为 8096。执行下面的 ss 命令来验证 Debian 系统上的端口列表。
ss -tulpn
您可以看到Jellyfin 媒体服务器使用 端口8096 。
最后,运行以下 systemctl 命令来启动、停止或重新启动 Jellyfin 服务。
sudo systemctl start jellyfin
sudo systemctl stop jellyfin
sudo systemctl restart jellyfin
UFW 的安全设置
在以下部分中,您将通过 UFW 保护 Jellyfin 媒体服务器的安全。您将安装 UFW,然后打开 HTTP 和 HTTPS 协议以供客户端访问。您必须打开 HTTP 和 HTTPS 协议,因为您将使用 Apache2 作为反向代理。
首先,通过下面的 apt install 命令安装 UFW。
sudo apt install ufw -y
安装 UFW 后,运行下面的 ufw 命令来添加OpenSSH服务,然后启动并启用 UFW。
sudo ufw allow OpenSSH
sudo ufw enable
出现提示时键入 y,UFW 应正在运行并启用。
现在运行以下命令来添加WWW 完整配置文件并验证 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(正在运行)表示服务的状态正在运行。
使用 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 根目录。
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 user@email.com --no-eff-email --webroot -w /var/www/html/jellyfin/public_html -d media.hwdomain.io
完成此过程后,您的 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.hwdomain.io
# Comment to prevent HTTP to HTTPS redirect
Redirect permanent / https://media.hwdomain.io/
ErrorLog /var/log/apache2/media.hwdomain.io-error.log
CustomLog /var/log/apache2/media.hwdomain.io-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.hwdomain.io
# 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.hwdomain.io/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/media.hwdomain.io/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.hwdomain.io-error.log
CustomLog /var/log/apache2/media.hwdomain.io-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
使用网络浏览器并访问 Jellyfin 安装的域名,例如 https://media.hwdomain.io/。如果配置成功,您应该会看到 Jellyfin 安装向导,如下所示:
Jellyfin 媒体服务器安装
在接下来的步骤中,您将通过安装向导完成 Jellyfin 媒体服务器配置。
首先,选择 Jellyfin 安装的默认语言,然后单击“下一步”。
现在,为 Jellyfin 安装创建一个新的管理员用户。输入您的用户名和密码,然后单击“下一步”。
对于媒体库,您可以稍后配置它们。单击“下一步”继续。
选择您的库的首选元数据语言,然后单击“下一步”。
选中允许远程连接选项以启用对 jellyfin 媒体服务器的远程访问。另外,您可以通过选中该选项来启用端口映射。然后,单击“下一步”。
如果配置成功,您应该会收到消息You're Done!。单击完成以完成 jellyfin 安装。
现在,您应该被重定向到 Jellyfin 登录页面。输入 Jellyfin 的管理员用户和密码,然后单击“登录”。
如果一切顺利,您应该会看到 Jellyfin 管理仪表板,如下所示:
最后,单击“管理”部分中的“仪表板”菜单。您应该看到有关 Jellyfin 媒体服务器安装的详细信息:
结论
作为本指南的总结,您已经使用 Apache2 反向代理和 Letsencrypt 的 SSL/TLS 在 Debian 12 上完成了 Jellyfin 媒体服务器的安装。您还使用 UFW 保护了 jellyfin 服务器的安全,并完成了 Jellyfin 媒体服务器的基本配置。您可以创建新的媒体库并将媒体文件上传到 Jellyfin。