Ubuntu 22.04 为 Jellyfin 配置代理

这篇具有很好参考价值的文章主要介绍了Ubuntu 22.04 为 Jellyfin 配置代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

最近捡了一个 1L 小主机, 目前装上了 Ubuntu 22.04, 打算把这个小东西当作家庭服务器用起来. 玩这个当然少不了搭建一套私有影音系统啦, 于是在网上找解决方案, 自然而然地搭起了一套 Jellyfin 环境, 然后就开始踩坑了:).

在了解了什么是刮削、怎么刮削、为什么要用刮削器之后很自然地就去看 TMM 这东西, 然后发现它新版 (v4) 收费 (不吐槽收费, 只是我觉得我没必要用, 而且我也不想为了规避收费就用老版). 再一个就是谁家服务器跑 GUI 呢? TMM 有 CLI 但好像是从 v4 才开始支持的? 具体没有细看, 最后想了想手动刮削还是太折腾. 那么能不能用 Jellyfin 自带的刮削器呢? 让它定期自动扫描自动刮削? 瞄了一眼 Jellyfin 的配置, 默认装的插件就有 IMDB、TVDB 等站点的元数据匹配功能, 只是由于懂得都懂的原因连不上这些 API 而已. 那么解决思路就很清晰了: 使用魔 (ke) 法 (xue), 给 Jellyfin 上代理 buff.

Jellyfin 配置代理

首先安装是通过 官方文档 进行的, 没有选择 docker 容器的方式进行安装, 而是直接安装在系统级作为一个 service:

Once installed, Jellyfin will be running as a service. Manage it with sudo systemctl {action} jellyfin.service or sudo service jellyfin {action}.

由于 Jellyfin 是不支持在管理页面的网络设置里直接配代理的, 根据 这个 issus 我们知道 Jellyfin 支持 http_proxyhttps_proxy 这两个环境变量, 那解决思路就很清晰了:

  1. 获取一个代理服务器;
  2. 给 Jellyfin 配上这两个环境变量, 指向代理服务器的 [地址:端口] 就可以了.

代理服务器我用本机 (和 Jellyfin 进程运行在同一个系统上), 代理软件选的是 Clash, 端口: 12333.

系统级环境变量 (❌) ☹️

开发组在那个关于代理的 issue 是这么说的:

I think it can already be done by setting environment variables http_proxy and https_proxy, at least on Linux. Not sure we need to add support for this in the server itself.

最开始我误解了这个答案, 以为直接提供系统级环境变量就可以了, 但是不管是修改 /etc/environment 还是 /etc/profile (/etc/profile.d), 亦或是修改 non-login shell 的 rc 配置文件 (如: /etc/bashrc), 配置对 Jellyfin 均无效, 但是它们都可以在对应的环境中生效 (login / non-login shell 环境都测试过, 没有问题), 测试方式就是直接 curl www.google.com, 有回应即说明代理生效.

最后回过神来, Jellyfin 是由 systemd 管理的一个 service, systemd 环境变量的配置是不依赖任何外部环境的, 包括 /etc/environment、login / non-login shell 环境配置文件等. 那么就要换一个思路: 给 systemd service 单独设置环境变量.

Systemd 环境变量 (✔️) 😄

经过查阅资料, 我了解到 systemd 环境变量有两种类型:

  1. 适用于所有 services;
  2. 适用于单个 service.

配置所有的 services

适配于所有 services 的环境变量原理是修改 systemd 的配置文件: /etc/systemd/system.conf, 修改 DefaultEnvironment= 这一条目就可以为所有 services 指定默认的环境变量, 具体可以看这个 post, 我的原则是能不改配置文件就不改, 于是采取头疼医头, 脚疼医脚的策略, 单独配置 Jellyfin 这个 service.

单独配置某个 service

使用 systemctl edit {service} 即可编辑某个 service, 如:

sudo systemctl edit jellyfin.service

执行之后会看唤起编辑器 (我这里是 nano), 看到这样的显示:

### Editing /etc/systemd/system/jellyfin.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file

### Lines below this comment will be discarded

按照注释的提示在两块注释之间写的内容会被保留下来, 本文只关注环境变量的配置, 其他配置的修改请自行查阅文档.

Environment 写法

很简单, 直接用赋值即可, 可以出现多个 Environment = , 例如:

[Service]
Environment = "http_proxy=127.0.0.1:12333"
Environment = "https_proxy=127.0.0.1:12333"
EnvironmentFile 写法

这种写法是指定一个外部文件作为环境变量的内容, 可以使 service 配置和环境变量配置解耦, 具体可以参阅一下 Jellyfin 的默认 service 配置, 它用的就是这种写法. 同理, 也可以出现多个 EnvironmentFile = , 比如我们写一个外部配置:

[Service]
EnvironmentFile = /etc/default/jellyfin_proxy.env

文件 /etc/default/jellyfin_proxy.env 内容如下:

http_proxy=127.0.0.1:12333
https_proxy=127.0.0.1:12333

效果和直接设定 Environment 是一样的.

最后我们要保存的内容就是:

### Editing /etc/systemd/system/jellyfin.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file

[Service]
Environment = "http_proxy=127.0.0.1:12333"
Environment = "https_proxy=127.0.0.1:12333"

### Lines below this comment will be discarded

或者是 (别忘了创建对应的外部配置文件):

### Editing /etc/systemd/system/jellyfin.service.d/override.conf
### Anything between here and the comment below will become the new contents of the file

[Service]
EnvironmentFile = /etc/default/jellyfin_proxy.env

### Lines below this comment will be discarded

编辑 && 保存完成后, 我们让 systemd 重新载入一下它的守护进程, 并重启 Jellyfin service:

sudo systemctl daemon-reload && sudo systemctl restart jellyfin.service
结果验证

我们先通过 sudo systemctl status jellyfin.service 查看 service 状态, 得到以下输出:

● jellyfin.service - Jellyfin Media Server
     Loaded: loaded (/lib/systemd/system/jellyfin.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/jellyfin.service.d
             └─override.conf
     Active: active (running) since Sun 2023-02-12 21:36:54 CST; 2min 6s ago
   Main PID: 519127 (jellyfin)
      Tasks: 15 (limit: 38223)
     Memory: 81.9M
        CPU: 6.216s
     CGroup: /system.slice/jellyfin.service
             └─519127 /usr/bin/jellyfin --webdir=/usr/share/jellyfin/web --restartpath=/usr/lib/jellyfin/restart.sh --ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg

可以看到输出这里的 Drop-In 部分包含了一个文件: /etc/systemd/system/jellyfin.service.d/override.conf, 这个文件实际上是我们刚刚编辑保存的, systemd 自动在它的管理路径里创建了这个文件, 以后我们可以直接对这个文件进行更改, 保存后也是一样先让 systemd 重新载入一下它的守护进程, 并重启对应的 service 即可以完成更改. 这个 Drop-In 的原理可以理解为运行时合入, 它会在 service 启动时将其默认的配置文件和 override.conf 动态合并并作为 service 运行时的新配置, 这样就可以在不改变 service 默认配置的情况下为 service 提供额外的配置. 我个人更喜欢这种方式而不是改变 systemd 的配置以此来让所有 services 拥有同样的默认环境, 因为它不用修改原来的配置文件, 在软件更新的时候 (无论是 systemd 还是 service 更新) 不用考虑上游的配置文件覆盖本地的问题.

双重验证: 对待问题应该要有刨根究底的态度, 我们到底解决了这个问题没有? 显示 Drop-In 就说明环境变量真的生效了么?

回答这两个问题我们可以直接查看 Jellyfin 对应进程的运行时环境变量, 使用如下命令:

cat /proc/519127/environ | tr '\0' '\n' | grep http

其中 519127 是我们刚才通过 systemd 获取到的 Jellyfin 进程的 PID, 输出如下:

http_proxy=127.0.0.1:12333
https_proxy=127.0.0.1:12333

这下我们就可以放心了, 环境变量设置成功, 经过后续测试 Jellyfin 元数据刮削就一切正常了.

PS: Jellyfin 有个坑点, 至少对于我测试的两个地址: 一个是环回地址 (127.0.0.1), 一个是局域网地址 (192.168.68.198, 使用局域网的另一台设备做代理服务器) 来说, 设置环境变量时不能加上协议头 (http:// 或 https://), 否则就算设置成功也不会生效, 不清楚是不是 Jellyfin 的玄学 bug, 亦或者说是神奇 feature 😑. 所以上文写的都是没有加协议头的配置, 可以走代理并正常工作, 加了即使设置成功, 在 Jellyfin 里也无效 (然而在其他环境这两个环境变量的协议头是可加可不加的, 不影响).文章来源地址https://www.toymoban.com/news/detail-454943.html

References

  • hoping settings to let the jellyfin getting metadata through proxy;
  • why-doesnt-etc-environment-work-for-systemd-services;
  • Systemd is not using environment from /etc/profile.d on CentOS 7;
  • how-to-set-environment-variable-in-systemd-service;
  • set-environment-variable-for-all-services-running-under-systemd.

到了这里,关于Ubuntu 22.04 为 Jellyfin 配置代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu22.04配置远程登陆

    第一步:首先需要安装以下两个服务: 在这一步上述代码需要在root模式下,非root模式下用sudo apt install... 【创建root用户:sudo passwd root,然后两次输入密码即可】 第二步:修改配置文件以允许root用户和其他用户登录: (一)、将#PermitRootLogin prohibit-password 修改为PermitRootLo

    2024年02月12日
    浏览(49)
  • Ubuntu22.04配置WiFi

    注意:在 /etc/netplan/ ​下的配置文件,格式一定要正确,否则用 sudo netplan try ​的时候会报错 一、查看无线网卡的名称 ‍ 二、修改配置文件 文件路径 :/etc/netplan/*.yaml ​ ​ ​ 修改前备份: sudo cp *.yaml *.yaml.bak ​ 修改: sudo vim *.yaml ​ 配置格式: 示例: 三、应用配置 ​

    2024年02月08日
    浏览(40)
  • Ubuntu22.04配置静态ip

    老规矩 - 上官网链接 为修改的文件内容如下 cat vim /etc/netplan/00-network-manager-all.yaml 修改对应文件 sudo vim /etc/netplan/00-network-manager-all.yaml

    2024年02月22日
    浏览(53)
  • ubuntu 22.04 深度学习环境配置

    网址:https://www.nvidia.com/download/index.aspx 根据硬件选择,我这里是 ubuntu 服务器,显卡是v100 (非必要)补充:在禁用原显卡驱动时,可以增加一步。 这两个命令都是用于配置Linux系统中与Nouveau显卡驱动相关的设置,但它们的具体作用和写入内容是不同的。 第一个命令是 禁止

    2024年02月09日
    浏览(60)
  • Ubuntu22.04配置系统下载源

    相信很多小伙伴都在拓展自己业务能力的同时,想涉足于未来的人工智能领域。而绕不开的就是Linux系统,目前最新版本的Ubuntu的Linux操作系统版本为:22.10,可点击下载选择相应版本。 本篇以Ubuntu22.04版本为例,简要介绍如何更改Ubuntu的下载源。 1、点击左下角的应用程序,

    2024年02月06日
    浏览(57)
  • Ubuntu 22.04 版本的网络配置

    Ubuntu 22.04 版本是一款强大的操作系统,它提供了广泛的网络配置选项,包括网络连接、路由设置、DNS 配置和防火墙配置等。在这篇博客中,我们将仔细介绍关于 Ubuntu 22.04 版本的网络配置。 网络连接配置 在安装 Ubuntu 22.04 后,通常需要配置网络连接以便访问互联网。有两种

    2024年02月09日
    浏览(40)
  • ubuntu22.04 配置静态ip

    存储在/etc/netplan目录中。 您可能会在此目录中找到一个或多个YAML文件。 文件的名称可能因安装程序而异。 通常,该文件名为01-netcfg.yaml,50-cloud-init.yaml或NN_interfaceName.yaml, 通过运行以下命令保存文件并应用更改: 校验修改是否生效 选择ipv4 选择 Manual 配置静态ip 结束

    2024年02月14日
    浏览(48)
  • Ubuntu22.04 netplan 网络配置

     Ubuntu18.04修改IP地址的方法(error in network definition ......is missing /prefixlength)_error in network definition: expected sequence-CSDN博客 Ubuntu20.04 单网卡配置多ip_ubuntu单网卡多ip-CSDN博客  ubuntu配置多网段IP-CSDN博客  Netplan使用(高版本Ubuntu静态/动态IP设置方法)-CSDN博客  Canonical Netplan

    2024年01月16日
    浏览(42)
  • Ubuntu22.04网络配置,静态IP配置

    Ubuntu22.04网络配置,静态IP配置 或

    2024年02月15日
    浏览(53)
  • Ubuntu18.04~Ubuntu22.04安装并配置VNC

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 有些操作需要Desktop环境而又不方便去现场看的这个方法能够满足你的需求,就是使用VNC实现远程桌面,这个方法理论上只适用于局域网环境,如果是互联网可能需要配代理什么的,这里不详细讨论。 当

    2024年02月07日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包