QNAP日志—--容器篇
点击展开更新日志
2024
10-13
- 更新 qb、ddns、jellyfin 容器部署
11-07
- 添加【声明】
- 更新代理镜像地址
- 添加 qb docker-compose.yml
- 添加 embyserver 部署
11-11
- 更新"更新日志"时间线格式,去掉单次更新的年份;
- 补充 ddns 常见问题。
- 修正创建 Macvlan ip 错误的问题。
- 补充 npm 登录 502 报错原因。
会有些什么呢?
2025
02-16
更新 Bitwarden 配置。、
¶源起
五月的时候买了一台威联通的 C462,当时只是作为备份服务器在使用,并没有过多研究,最近有空正好开始好好的玩玩,根据网上的教程和摸索,简要记录一下。
声明:
以下所有的操作,均为在我个人的威联通 C462 最新官方版本上执行。
不保证在其它任何设备上能获得同样结果,不对产生的任何错误负责,有问题请按照必应-谷歌-评论-邮件的顺序依次处理。
¶网络环境
因为有互联网访问需求,因此需要搞一个公网 IP 或者穿透,最终还是确定用 IPv6。所以在光猫和路由打开 IPv6,同时关闭防火墙,本地内网设备就可以获取到 IPv6 了,记得 检查一下 是否正常。
至于路由改桥接啥的自行谷歌一下吧,我这边因为是用的室友的,所以能用就行(●’◡’●)
¶Container station 容器
考虑到
dockerhub
可能直接上不去,所以下载的时候建议使用镜像,如果自备魔法自然更好。提供一个可用镜像代理:
dockerpull.org
(更新,现在需要手法才能打开了),下载镜像的时候加在最前面即可,如:dockerpull.com
dockerpull.com/linuxserver/qbittorrent
¶qBittorrent/transmission
- 描述:磁力下载。Free and reliable P2P Bittorrent client.
- 镜像:
https://hub.docker.com/r/linuxserver/qbittorrent
- 网络模式:bridge
- 存储:
/media:/media
可写,没有用downloads
是因为方便 mp 的下载目录能够和 qb 保持一致。
- Web 配置:
- 初始默认 admin 密码请查看日志获取
- 更改【选项】-【连接】中【监听端口】,一般 6881 都是被屏蔽的,下不动种子。实际上点击 Tracker 也能看到报错。
docker-compose.yml
1 |
|
- TZ 时区,https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
直接部署即可,没啥需要注意的,哦,还是有一点。
qb 默认 web 端口是 8080,但是在浏览器直接输入
ip:8080
是不行的,需要末尾加上一个/
,或者复制 Container qb 详细页面的 8080 端口,直接复制出来就可以。
¶ddns-go
- 描述:自动将变动的公网 IP 绑定的固定的域名
- 镜像:jeessy/ddns-go
- 官网:https://github.com/jeessy2/ddns-go
- 网络模式:host
- Web 配置:
- DNS Provider:根据自己的 DNS 服务商绑定 token,下面蓝色小字可以跳转到获取 token 的页面
- IPv4:如果没有公网 IPv4,就不要勾选
enable
,可能会导致 v6 用不了 - IPv6:
Get IP method
: By network card 从网卡获取Domains
: 需要从外网访问的域名,一行一个
- Others:勾选禁止互联网访问 Web 管理页面。可以修改用户名和密码
- Webhook:IP 变动通知。可以在 Github 上查看支持的通知方式。
记得保存!
如果使用 Macvlan,,虽然可以另外指定一个 IPv4 且同时监听 IPv6,但是此时 localhost 是解析到 NAS 本机的,因为 npm 登录会请求本地
3000
端口的 node 服务,此时如果还部署了其它 3000 端口的服务,登录就会报错405 Not Allowed
。
¶常见问题
无法获取网卡信息
网络模式需要选择Host主机模式,因为是从当前环境获取网卡,如果是 docker 网络,那么就获取不到。
405 Not Allowed 登录报错
因为登录 API 会请求 http://localhost:3000
的服务,显然这个地址请求到了别的地方,一般是网路模式为 Host/Macvlan,且存在使用 3000 端口的其它服务,与 npm 产生冲突。更改网络模式为 host 或者更换 3000 端口服务都可以。
所以最好的建议就是,npm 使用 host 模式,既可以监听 IPv6 的请求,也可以直接通过 docker 网络进行转发;使用 3000 等端口的服务更换默认端口,比如 3000 -> 13000。
npm 502 Bad Gatewy 登录报错
我要沙银了!这个 b 报错困扰了我好久,反复重装容器了好几次,一般刚装好是可以的,重启就寄,issue 上也有人遇到,但是没有找到解决方法,甚至还有卸载宿主机 node 的!(不是,那这 docker 隔绝了个啥呀,显然不是啊)。
事情的转机还是来自日志 /data/logs/fallback_error.log
, upstream http://127.0.0.1:3000
超时?为啥官方文档压根没提这个端口的事,F12 看一下登录的接口,显然就是 API token 的后端接口,但是这个服务没启动起来。
所以问题变成这是个什么服务,为什么没起起来?所以我又重新拉取镜像部署了一套,查看部署日志:
可以看到有一个进程 ID(PID) 为 160 的进程在监听 3000 端口,所以就看看这是个嘛玩意。容器内没有 ps 命令,所以要先安装:
1 | apt-get update # 你可以先试试直接执行下一句(●'◡'●),看看会发生什么 |
查看这个 160 的进程是什么:
1 | # ps -ef | grep 160 |
这下就明晰了,真相只有一个!把这条 node 命令复制到 NAS 上的 npm 终端跑一下 node --abort_on_uncaught_exception --max_old_space_size=250 index.js &
,等几秒钟出现监听端口或者直接回到终端提示符即可,再试试是否正常:
1 | curl http://localhost:3000 |
如果出现 {"status":"OK","version":{"major":2,"minor":12,"revision":1}}
,恭喜 🎉,你已经成功解决了这个问题,回到 81 端口登录,锵锵,可以啦!
20241126 更新,我大概知道为什么作者没有提及这个端口了,因为正常情况下就不会存在这个问题。先来看正常的启动日志:
1 | [11/27/2024] [11:08:50 AM] [Global ] › ℹ info Using Sqlite: /data/database.sqlite |
在启动 3000 端口的服务前,会请求 ip-range 这个文件,很多情况下会卡在这里(众所周知的原因),所以服务也就启不起来,因为最近在玩软路由,才发觉这个问题。
无法通过互联网访问:Connection refused
先确认光猫 IPv6 开了吗,IPv6 防火墙关了吗,路由 IPv6 防火墙关了吗,本地机器能获取到公网 IPv6 吗,240e 开头的那个哦。
如果都没问题,NAS 防火墙放行了吗?
如果以上都确认没问题了,大概就是 npm 部署用的桥接,没有 IPv6,自然也就无法转发 IPv6 的流量,原因可以看上面的注意事项。
¶jellyfin
- 描述:影像库
- 镜像:nyanmisaka/jellyfin
- 高级设置:
- 运行时:特权模式
- 设备:Direct Rendering Infrastructure (226), 可写
- 存储:自己创建
/media
目录并挂在进来,可以参考下面链接。
- 高级设置:
- 网络模式:默认 bridge,因为需要看 v6 的直播且 QTS 容器不支持开启 v6,所以用的 host。——这个问题的表现为,播放时会提示客户端不兼容,实际上查看 ffmpeg 日志 key 发现是网络不通。
- Web 配置:贴一个我觉得不错的链接。
- 注意事项
- 更改显示语言为中文还是显示英文:清理缓存
- 如果无法播放或者报错:控制台看看日志+谷歌
- 插件加载不出来:删除第一个默认的,如果需要找个镜像
¶portainer
¶emby
- 描述:媒体服务器
- 镜像:https://hub.docker.com/r/emby/embyserver
- 网络模式:macvlan
- 正好解决了容器没有 IPv6 的问题占用宿主机端口的问题
docker-compose.yml
1 | version: "2.3" |
emby 是通过 portainer 进行安装的,其它安装方式类似。
-
创建 Macvlan
- 在 portainer 管理页面左侧容器选择【Network】-【Add network】
- 配置
- Name: 网络名称,比如 Macvlan_template
- DriverL: macvlan
- Macvlan configuration: 选择【Configuration】(默认)
- Parent network card: 父网卡,选择宿主机网卡,比如
eth0
- IPV4 Network configuration: 宿主机 IPV4 网段和网关配置
- Subnet: 子网,如宿主机 IP 为 192.168.77.19,则子网为 192.168.77.0/24
- Gateway: 网关,一般都是 xxx.xxx.xxx.1,比如上面我的就是 192.168.77.1
- IP range: IP 范围,同子网即可
- IPV6 Network configuration: 宿主机 IPV6 网段和网关配置
- Subnet: 子网,如果有公网 IPV6(240e 开头),那就用这个,否则就是局域 v6。格式 xxxx:xxxx:xxxx:xxxx::64(四段)
- Gateway: 网关,一般都是 xxx:xxx:xxx:xxx::1,比如上面我的就是 abcd:1234:2231:bca1::1
- IP range: IP 范围,同子网即可
- 【Create the network】创建网络。注意,这里还不能直接用,需要先配置一个模板(上面我们创建的这个)才能创建实际使用的环境
- 按照上面的步骤重新创建一个
macvlan
驱动网络,但是【Macvlan configuration】配置选择【Creation】!下面的【Configuration】选择刚才创建的【Macvlan_template】创建网络。
-
拉取镜像
- 先在左侧【Image】中拉取 embyserver 镜像到本地,如果 dockerhub 拉不下来就先加一个镜像地址
-
创建容器
- 左侧【Container】选择【Add container】,输入容器名称和镜像,和上面拉取的需要保持一致。
- Advanced container settings 高级设置
- Volumes:数据卷
- 先选择后面的【Bind】,表示映射到宿主机目录
- 将容器中的
/config
- 配置目录 、/media
- 媒体目录 分别映射到宿主机指定位置,权限【Writable】
- Network:网络
- Network: 选择上面创建的 Macvlan,不是模板那个啊
- Hostname:
- IPv4 Address: 保持和宿主机同一网段,任一未使用 IPv4 即可
- IPv6 Address: 保持和宿主机同一网段,任一未使用 IPv6 即可
- 其它非必要的不必填
- Env:环境变量,配置以下关键变量即可,其它可以保持默认
- UID: 0 (管理员 ID,默认 1000,可以先用 1000 试一下,不行再改)
- GID: 0 (管理员组 ID,默认 100,可以先试一下,不行再改)
- LIBVA_DRIVERS_PATH: /lib/dri (显卡驱动路径,用于硬解)
- Runtime & Resource:运行环境
- 开启【Priviledged mode】特权模式
- Runtime: runc
- Devices: 添加一个,
/dev/dri:/dev/dri
映射显卡到 docker
- 部署容器
- Volumes:数据卷
-
浏览器打开 容器 IP:8096 进入 emby!
-
检查硬解
进入【设置】-【转码】配置,【启用硬件加速】一栏选择【高级】,检查下方首选硬件编码器和首选硬件解码器是否有内容,如果没有那就是开启失败,大概率是没有权限。补充一句,emby 想要开启硬件需要购买高级会员(大概 RMB 800+ 永久),实在囊中羞涩(比如正在敲文字的这位),可以使用开心版ヾ(≧▽≦*)o,本文不提供任何非官方版本,全凭能耐,各显神通。
其它问题
- 电影详情界面演职人员头像加载不出来
因为众所周知的原因,需要设置 http 代理:重新创建容器新增环境变量(这里以 Clash 为例):1
2ALL_PROXY http://ip:7890
HTTP_PROXY http://ip:7890
¶nginx-proxy-manager
- 描述:可视化 Nginx 代理
- 镜像:jc21/nginx-proxy-manager:latest
- 网络模式:Host
- Web 配置:
Proxy Hosts
: 这就是最常见的反向代理了,还可以自动申请 SSL 证书/自己上传泛域名证书。- 其它的暂没用上,先留着后面补充。
说明
- 网络模式为什么使用 Host?
因为需要从 IPv6 进行访问,容器内无法开启 IPv6,如果一定是要用 NAT,可以选择控制台/路由中做一下端口转发
¶MP
- 描述:自动化观影
- Wiki:Wiki
Wiki 很详细了,跟着步骤安装就可以了,仅个别地方做提醒,避免多走弯路。
提醒
- 该应用的核心是 PT,如果不清楚是什么,或者没有相关平台账号,可以就此止住了,相关内容自行检索;
- 站点相关功能(自动追番、下载、搜索等)需通过特定平台账号激活,参考 Wiki【配置】-【认证】部分内容,仅支持提及到的站点认证,如果没有这些账号,也可以止住了;
- 任何一环节出现问题或未按照预期响应,请先看日志定位问题;
¶caddy
¶Bitwarden
¶官方
我没用官方的,所以请参考链接~
¶第三方
- 创建数据目录:
1 | mkdir bitwarden |
- 创建容器
1 | docker run -d --name vaultwarden \ |
- SMTP_HOST: SMTP 服务器地址,阿里云企业邮箱需要管理员先开启允许三方客户端
- SMTP_FROM: sender
- SMTP_PORT: tls-587 SSL-465
- SMTP_SECURITY: 加密方式, tls-starttls SSL-force_tls
- SMTP_USERNAME: sender 邮箱!
- SMTP_PASSWORD: 密码/授权码
- INVITATIONS_ALLOWED: 禁用普通用户邀请注册,管理员不受影响
- DOMAIN: 访问域名,不设置可能会有一些奇奇怪怪的问题
- SIGNUPS_ALLOWED: 禁用注册,如果自己使用建议加上,创建容器先不加,账户创建好再加上。
- ADMIN_TOKEN: 管理后台,地址
<DOMAIN>/admin
,不是必要的就不要配置了,要配置 token 一定要用长且复杂的字符串。可以在 git bash 使用openssl rand -base64 48
生成一段。
- 配置反代
因为之前已安装了 lucky,因此配置很简单,略。 - 第一次注册
打开访问地址https://bitwarden.evergarden.top
, 注册。后续配置可参考官方 Wiki 说明配置即可。
¶其它服务
¶直播
虽然先在看直播的时间少了,但有时候还是想要看一看的,所以 Jellyfin/emby + 直播,算是我的一个重点内容。一半以上的时间花在了找直播源上,笑死(/▽\),真正配置的时间不超过 10min。
以 “直播源”、“m3u” 为关键词可以搜索到很多 Github 的项目收集的各种直播源,不过有一部分已”年久失修“不可用,另一部分虽然一直在更新,不过遗憾的是我本地却无法播放(不排除是挂了代理没有 ipv6 的原因——正好写文章的时候想到,不过也不想验证了,验证了,确实存在代理的原因,但有些源确实播放不了),经过搜索,总算找到了一个可以用的了。
简要说明一下,如果想要在 Jellyfin/Emby 这类软件中添加直播,一般需要两个链接/文件:
- 包含直播源的 m3u 文件/链接
- EPG 链接(EPG-电子节目指南): 节目单
EPG 的效果如下:
YanG-1989
感谢大佬分享,喜欢可以给大佬点个 Star~
- Github 地址:https://github.com/YanG-1989/m3u
- 直播订阅:https://yang-1989.eu.org/
- EPG:https://epg.iill.top/
将直播源地址填入 Jellyfin/Emby 的直播页面的【调谐器设备|电视源】,可以是订阅地址,或本地上传的 m3u 文件(ps:记得上传到挂载点才能访问到)
将 EPG 地址填入 Jellyfin/Emby 的【电视指南数据提供方|指南数据源】,格式选择 【XmlTV】,配置完成后,等待刷新完成,之后就可以在首页看到上面的效果了。
常见问题 1:直播无法播放,错误为媒体与服务器不兼容 balabala
原因 1:直播源很多都是 IPv6,代理一般是 IPv4,所以挂代理的情况下无法播放,关闭即可。
原因 2:容器 NAT 网络的容器默认没有 IPv6,也无法播放 IPv6 的直播,要么想办法开启容器 v6,比如 macvlan,要么更换为 Host 模式
原因 n:查询日志获取具体报错信息,然后谷歌。
¶参考致谢
一些用到过的参考内容,感谢各位大佬的教程: