Jellyfin服务部署手册
记录部署 jellyfin 服务器步骤及填坑说明手册
部署
转为群晖的UI部署方案:Synology | Jellyfin
Docker 容器方案: Container | Jellyfin
⚠我这个部署在群晖上,支持
硬件解码,你需要根据自身情况调整挂载,详细见:
1 | # 定义用户信息 |
无法访问媒体信息
问题复现
从容器中尝试访问媒体信息报错:Permission denied
解决过程
检查权限
因为我直接使用群晖的 video 目录,这个目录可以从 Console
上看到,权限并非 755
在 WEB 界面,也可以看到该目录的权限比较复杂
因为我已经指定了容器运行的 UID 和
GID,正常情况下服务会以指定的用户权限运行
如果是 root 用户呢?会不会可以进入到媒体目录?测试一下
🆗
尝试解决
问题找到了,权限问题,使用 root 可以,但是我指定的用户不可以,那么问题来了,在群晖上我默认的用户能不能访问媒体文件呢?试一下 🆗
对比一下两个用户的信息,群晖用户多了一个 groups
的属性!
查询了一下 Docker 官方对于 RUN
命令的详细说明,其中有对于 USER 相关的说明
Docker run reference | Docker Documentation
1
2
3
4 -u="", --user="": Sets the username or UID used and optionally the groupname or GID for the specified command.
The followings examples are all valid:
--user=[ user | user:group | uid | uid:gid | user:gid | uid:group ]
仅支持 A:B
形式,只能指定一个用户和一个用户组,那么既然默认组没有权限,尝试修改一下用户组
🙂
最小权限原则,我在我的 LDAP 建了一个专用的用户,并且创建了一个专用的用户组
删除容器重新拉起,看看问题是否解决
🎉搞定啦~
错误猜测,仅记录
排查过程
Jellyfin
官方的手册,提示挂载目录的命令让我有些疑惑:docker run xxxx --mount type=bind,source=$MEDIA,target=/media,指明需要使用
bind 挂载,这个是不是导致问题的元凶?
Bind Mounts are needed to pass folders from the host OS to the container OS whereas volumes are maintained by Docker and can be considered easier to backup and control by external programs. For a simple setup, it's considered easier to use Bind Mounts instead of volumes. Multiple media libraries can be bind mounted if needed:
译文:
需要绑定装载将文件夹从主机操作系统传递到容器操作系统,而卷由Docker维护,可以认为更容易由外部程序进行备份和控制。对于简单的设置,使用绑定装载而不是卷更容易。如果需要,可以绑定装载多个媒体库:
为此,查询了 Docker 官方对于 bind mount 的解释
Bind mounts | Docker Documentation
When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.
译文
使用绑定装载时,主机上的文件或目录将装载到容器中。文件或目录由其在主机上的绝对路径引用。相反,当您使用卷时,主机上的Docker存储目录中会创建一个新目录,Docker会管理该目录的内容。
以下这段内容,说明了区别
Differences between
-vand--mountbehavior🔗Because the
-vand--volumeflags have been a part of Docker for a long time, their behavior cannot be changed. This means that there is one behavior that is different between-vand--mount.If you use
-vor--volumeto bind-mount a file or directory that does not yet exist on the Docker host,-vcreates the endpoint for you. It is always created as a directory.If you use
--mountto bind-mount a file or directory that does not yet exist on the Docker host, Docker does not automatically create it for you, but generates an error.
汇总一下 -v 和 --mount 的区别:
当 Docker 宿主机被挂载的路径 不存在
时,-v
会自动创建该目录的文件夹,--mount
会报错
结论
--mount
并不会导致权限问题,只是在宿主机目录不存在情况下的行为不同而已。
TMDb(The Movie Database) 无法刮削
1 | 手动筛选的 ip,2022.11.1 更新 |
配置
美化
可以添加自定义 CSS 实现类似毛玻璃的特效
以下操作基于 版本:10.8.8
展开侧边栏 ➡控制台
➡常规 ➡ 找到 品牌
设置,填写 自定义CSS
标准版本
1
@import url("https://cdn.jsdelivr.net/npm/jellyskin@latest/dist/main.css");
增加LOGO版本
1
@import url("https://cdn.jsdelivr.net/npm/jellyskin@latest/dist/logo.css");
提升性能版
1
@import url("https://cdn.jsdelivr.net/npm/jellyskin@12.2.0/dist/addons/improvePerformance.css")
⚠这个版本将从对话框中移除背景模糊,从登录页面中移除渐变滚动条和动画网格渐变(替换为普通渐变动画)
紧凑海报版
1
@import url("https://cdn.jsdelivr.net/npm/jellyskin@12.2.0/dist/addons/compactPosters.css");
增加 LDAP 认证
以下操作基于 版本:10.8.8
安装
展开侧边栏 ➡控制台 ➡ 找到
高级 ➡插件
➡目录,找到 LDAP Authentication
➡安装 🔂 重启服务
配置
LDAP服务设置
LDAP用户设置
Jellyfin用户设置
用户名属性需要依据 LDAP 的属性决定,一般有以下几种:
- uid
- cn
- displayName
- sAMAccountName
如果不清楚,可以使用 Docker 部署一个 PHPLDAPAdmin 来查看
Github: osixia/docker-phpLDAPadmin: phpLDAPadmin container image 🐳🌴
附快速启动命令
1 | # 设置 LDAP 服务器信息 |
启用硬件解码
文件命名不规范导致无法正确刮削信息
参考上面链接里的说明,使用 tMM (tinyMediaManager) 自动刮削信息并重命名电影
重要重命名规范
电影
以 速度与激情9 为例,见下图:
因此,需要符合高清电影命名规范,参见:如何看懂高清资源命名:常见命名规则及解释 - 知乎
设置值修改为:
1 | # 文件夹名-默认重命名格式 |
剧集
很类似电影,以 海豹突击队 为例
1 | 文件名-个人使用 |
群晖使用Docker部署
‼关于 Host 污染的问题,可以参见:Video Station 搜刮器 TMDB 注册及一键修改 hosts - 我不是矿神
官方DockerImage
tinymediamanager/tinymediamanager - Docker Image | Docker Hub
简单启动 [官方]
1 | docker run \ |
优化版本
英文版
中文优化版本
Github 提供的简单启动命令
1 | docker run -d --name=tinymediamanager \ |
整合优化版启动命令
1 | # 定义用户信息 |
容器拉取使用代理
参考上面的官方手册,在 DSM7.x 版本,群晖也使用了
systemd
作为服务托管工具,因此可以参考官方文档使用代理服务,不过需要注意
📢⚠ 群晖上 Docker 的名称有些变化,不叫
docker,而是
pkg-Docker-dockerd,可以通过如下命令验证
1 | systemctl status pkg-Docker-dockerd |
因此结合官方文档,需要预先创建文件
1 | sudo mkdir -p /etc/systemd/system/pkg-Docker-dockerd.service.d |
通过 vi/nano 或者其他随便什么工具,修改
/etc/systemd/system/pkg-Docker-dockerd.service.d/http-proxy.conf
文件,内容参见
1 | [Service] |
按照实际情况修改完成后,使用以下命令重启
1 | sudo systemctl daemon-reload |
如何验证呢?执行以下命令
1 | sudo systemctl show --property=Environment pkg-Docker-dockerd |
可以看到已生效
通过代理服务器的日志也可以看到请求全部经过了代理
容器及客户端使用代理
Configure Docker to use a proxy server | Docker Documentation
Configure Docker to use a proxy server | Docker Documentation
版本 🆙 17.07,可以直接写入以下到
~/.docker/config.json
1 | { |
容器需要使用代理可以通过环境变量,传入
1 | --env HTTP_PROXY="http://192.168.1.12:3128" |
备用下载地址
阿里云下载
群晖共享(备用)
有可能提示证书异常,忽略即可
客户端
官方地址: Clients | Jellyfin
IOS 用户请直接使用:App
Store 或搜索 Jellyfin
阿里云下载
群晖共享(备用)
有可能提示证书异常,忽略即可