如何在Ubuntu 20.04 LTS Server / Desktop上安装Jellyfin Media Server
本教程将向您展示如何在Ubuntu 20.04 LTS服务器/桌面上安装Jellyfin媒体服务器。 Jellyfin是一个免费的开源应用程序,它使您可以在一个漂亮的界面中组织电影,电视节目,音乐和照片,并在网络上或通过网络在PC,平板电脑,手机,电视,Roku等上流式传输这些媒体文件。互联网。 Jellyfin可以安装在Linux,MacOS和Windows上。
果冻功能
Jellyfin是Emby媒体服务器的一个分支。 它具有许多与Plex和Emby相同的功能。
- 与Plex或Emby不同,Jellyfin是100%免费和开源的。 无广告。 移动应用没有播放限制。 (尽管iOS应用无法在后台播放视频。)
- 观看直播电视并设置自动录制以扩展您的媒体库。
- 自动从TheTVDB,TheMovieDB,TheOpenMovie数据库和Rotten Tomatoes中获取艺术品,元数据。
- 支持DLNA。
- 可以安装可选插件以提供其他功能。
- 支持使用FFMpeg的视频编码/解码的硬件加速。
- 和更多。
在Ubuntu 20.04上安装Jellyfin Media Server
Jellyfin未包含在默认的Ubuntu存储库中,但它具有自己的存储库。 运行以下命令以将Jellyfin存储库添加到您的Ubuntu系统。
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/jellyfin.list
接下来,运行以下命令将Jeffyfin GPG密钥导入Ubuntu系统,以便APT可以在安装过程中验证软件包的完整性。
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
并且由于该存储库使用HTTPS连接,因此我们还需要安装 apt-transport-https
和 ca-certificates
包。
sudo apt install apt-transport-https ca-certificates
最后,在Ubuntu系统上更新软件包索引并安装Jellyfin。
sudo apt update sudo apt install jellyfin
此命令还将安装其他3个软件包作为依赖项:
jellyfin-ffmpeg
:用于视频转码。jellyfin-server
:后端服务器。jellyfin-web
:前端Web界面。
现在已经安装了Jellyfin媒体服务器,我们可以通过以下方法检查其状态:
systemctl status jellyfin
如您所见,它在我的Ubuntu 20.04系统上运行。 (按 q
键以收回对终端的控制权。)
如果Jellyfin媒体服务器未运行,则可以使用以下命令启动它:
sudo systemctl start jellyfin
Jellyfin媒体服务器初始设置
基于Web的管理界面位于端口8096上。您可以通过以下URL访问Jellyfin Web界面。
http://127.0.0.1:8096/web
如果在远程Ubuntu服务器上安装了Jellyfin,则需要使用Nginx或Apache设置反向代理才能访问Web UI,本教程后面将对此进行说明。
第一步是选择您喜欢的语言。
在下一个屏幕上,创建一个用户帐户。
现在您可以添加库。 请点击 Add Media Library
按钮。
选择一个 内容类型 (电影,音乐,电视节目等)和显示名称。
然后点击 加号(+) 按钮选择内容的文件夹。
请注意 jellyfin
用户需要具有对媒体目录的读取和执行权限。 例如,我的2T外部硬盘驱动器安装在 /media/linuxbabe/
,由root拥有。 不在群组中的用户 root
无法访问它,所以我运行以下命令给用户 jellyfin
读取并执行权限。 (我不建议通过以下方式更改所有权 chown
要么 chgrp
命令。 使用 setfacl
命令就足够了。)
sudo setfacl -m u:jellyfin:rx /media/linuxbabe/
您可能还需要在单个媒体目录上分配权限,如下所示。
sudo setfacl -m u:jellyfin:rx /media/linuxbabe/directory-name
添加递归标志(-R
), 这使 jellyfin
读取并执行驱动器上每个文件和子目录的权限。
sudo setfacl -R -m u:jellyfin:rx /media/linuxbabe/
如果外部硬盘驱动器仅用于存储媒体文件,则可以这样做,但是如果外部硬盘驱动器上有敏感文件,则不要这样做。
完成添加媒体文件夹后,即可配置库设置。 选择您的语言,国家/地区等。
请点击 Ok
和 Next
按钮。 您以后可以随时添加更多库。 下一步允许您选择是否启用远程访问。 我不建议启用本机远程访问方法,因为它不提供HTTPS加密,因此请取消选中这两个复选框。 如果需要远程访问,请在本文后面阅读如何设置反向代理。
请点击 Next
和 Finish
按钮。 最后,登录到您的Jellyfin帐户。
重做初始设置
如果您在初始设置中出错,则可以重新开始。 首先,编辑Jellyfin配置文件。
sudo nano /etc/jellyfin/system.xml
更改
<IsStartupWizardCompleted>true</IsStartupWizardCompleted>
至
<IsStartupWizardCompleted>false</IsStartupWizardCompleted>
保存并关闭文件。 然后重新启动Jellyfin。
sudo systemctl restart jellyfin
现在访问 localhost:8096/web
您将再次看到设置向导。
在哪里下载电影和电视节目
- 使用像Deluge这样的洪流客户端。
- 了解如何从Usenet下载。
Usenet的优势
- 它可以为您提供更好的隐私,因为其他人看不到您正在下载的内容。
- 超快的下载速度。
- Usenet上的文件通常比torrent文件保留的时间更长。 例如,Newsdemon将文件存储4430天(超过12年),因此您可以非常快的速度下载旧内容。
设置反向代理
既然听 127.0.0.1:8096
,Jellyfin Web界面仅可用于来自同一台计算机的连接。 为了能够从远程计算机访问Jellyfin Web界面,我们可以使用Nginx或Apache为Jellyfin设置反向代理。
Nginx的
Nginx是非常流行的Web服务器和反向代理。 如果您想使用Nginx,请运行以下命令进行安装。
sudo apt install nginx
然后为Jellyfin创建一个服务器阻止文件。
sudo nano /etc/nginx/conf.d/jellyfin.conf
将以下内容添加到此文件。 更换 jellyfin.example.com
用您自己的域名。 您还应该为此子域创建DNS A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。
server { listen 80; listen [::]:80; server_name jellyfin.example.com; access_log /var/log/nginx/jellyfin.access; error_log /var/log/nginx/jellyfin.error; set $jellyfin 127.0.0.1; location / { proxy_pass http://127.0.0.1:8096; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; # Disable buffering when the nginx proxy gets very resource heavy upon streaming proxy_buffering off; } # location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/ location ~ ^/web/$ { # Proxy main Jellyfin traffic proxy_pass http://$jellyfin:8096/web/index.html/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; } location /socket { # Proxy Jellyfin Websockets traffic proxy_pass http://$127.0.0.1:8096; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; } # Security / XSS Mitigation Headers add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; }
保存并关闭此文件。 然后测试Nginx配置。
sudo nginx -t
如果测试成功,请重新加载Nginx以使更改生效。
sudo systemctl reload nginx
现在您可以通过以下方式访问Jellyfin媒体服务器 jellyfin.example.com
。
阿帕奇
如果您比Nginx更喜欢Apache,请使用以下命令安装Apache Web服务器。
sudo apt install apache2
要将Apache用作反向代理,我们需要启用 proxy
模块和标头模块。
sudo a2enmod proxy proxy_http headers proxy_wstunnel
然后为Jellyfin创建一个虚拟主机文件。
sudo nano /etc/apache2/sites-available/jellyfin.conf
将以下配置放入文件中。 更换 jellyfin.example.com
与您的实际域名。 不要忘记为此子域创建DNS A记录。 如果您没有真实域名,建议您到NameCheap购买。 价格低廉,终身免费提供Whois隐私保护。
<VirtualHost *:80> ServerName jellyfin.example.com ErrorDocument 404 /404.html #HTTP proxy ProxyPass / http://localhost:8096/ ProxyPassReverse / http://localhost:8096/ #Websocket proxy SSLProxyEngine on <Location /:/websockets/notifications> ProxyPass wss://localhost:8096/:/websockets/notifications ProxyPassReverse wss://localhost:8096/:/websockets/notifications </Location> Header always unset X-Frame-Options </VirtualHost>
保存并关闭文件。 然后启用此虚拟主机。
sudo a2ensite jellyfin.conf
重新启动Apache
sudo systemctl restart apache2
现在您可以使用域名访问Jellyfin媒体服务器 jellyfin.example.com
。
启用HTTPS
为了在您从外部访问Jellyfin服务器时对HTTP通信进行加密,我们可以通过安装由Let’s Encrypt颁发的免费TLS证书来启用HTTPS。 运行以下命令以在Ubuntu 20.04上安装Let’s Encrypt客户端(certbot)。
sudo apt install certbot
如果使用Nginx,则还需要安装Certbot Nginx插件。
sudo apt install python3-certbot-nginx
接下来,运行以下命令以获取并安装TLS证书。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com
如果使用Apache,则需要安装Certbot Apache插件。
sudo apt install python3-certbot-apache
接下来,运行以下命令以获取并安装TLS证书。
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d jellyfin.example.com
哪里:
--nginx
:使用nginx插件。--apache
:使用Apache插件。--agree-tos
:同意服务条款。--redirect
:通过301重定向强制HTTPS。--hsts
:将Strict-Transport-Security标头添加到每个HTTP响应。 强制浏览器始终对域使用TLS。 防御SSL / TLS剥离。--staple-ocsp
:启用OCSP装订。 有效的OCSP响应被装订到服务器在TLS期间提供的证书。
现在应该获得证书并自动安装。
您可以通过HTTPS访问Jellyfin Web界面: https://jellyfin.example.com
。
如何在Ubuntu 20.04上升级Jellyfin
当新版本的Jellyfin媒体服务器发布时,您可以通过执行以下命令来对其进行升级。
sudo apt update sudo apt upgrade
然后重新启动Jellyfin。
sudo systemctl restart jellyfin
故障排除
如果您的Ubuntu服务器运行WireGuard VPN,您可能会在Jellyfin日志中看到以下错误(sudo journalctl -eu jellyfin
)。
[ERR] Error sending socket message from 10.0.0.102 to 239.255.255.250:1900 System.Net.Sockets.SocketException (0xFFFFFFFF): Bad value for ai_flags
此错误意味着无法将消息从WireGuard接口发送到239.255.255.250,这是SSDP(简单服务发现协议)多播地址。 这是由于不允许您的WireGuard接口访问IP地址。
要解决此问题,请编辑WireGuard接口配置文件。
sudo nano /etc/wireguard/your-interface.conf
找出 AllowedIPs
参数。 我的像下面。
AllowedIPs = 10.0.0.0/8
如您所见,VPN客户端仅被允许连接到10.0.0.0/8网络。 现在添加 239.255.255.250
地址。
AllowedIPs = 10.0.0.0/8, 239.255.255.250
保存并关闭文件。 重新启动WireGuard。
sudo systemctl restart [email protected]
重新启动Jellyfin。
sudo systemctl restart jellyfin
检查Jellyfin日志(sudo journalctl -eu jellyfin
)。 上面的错误应该消失了。
包起来
我希望本教程可以帮助您在Ubuntu 20.04上安装Jellyfin媒体服务器。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂