搞台 NAS (4):Openmediavault 通过 Docker 部署 qBittorrent
在前两篇文章中,我们安装了 Openmediavault、部署了 ZFS 文件系统,这次我们将会用 Docker 容器部署 BT/PT 下载应用——qBittorrent。NAS 下载 BT/PT 是我的核心需求,使用 Docker 部署这类应用应该算是常规操作。
OMV 部分总共分为三篇文章,这是第 3 篇:
- Openmediavault 的安装与配置
- Openmediavault 部署 ZFS 文件系统
- Openmediavault 通过 Docker 部署 qBittorrent
安装 Docker
点击左侧“系统”、“omv-extras”、“Docker”,点击“安装”按钮,开始安装进程。安装完成后,回到同一界面,应该能看到提示状态是“已安装、运行中”,版本号应当不低于 20.10.17。
如果发现版本号低于 20.10.17,请点击“移除”按钮,移除当前版本的 Docker。使用 ssh 连接到服务器,运行下面的命令安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker Hub 镜像加速
推荐添加阿里云、中国科大的容器镜像,以加快 Docker Hub 上的镜像拉取速度。编辑 /etc/docker/daemon.json
这个文件,在其中添加如下一项:
"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/"]
修改后的文件形如:
{
"data-root": "/var/lib/docker",
"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/"]
}
然后重启 Docker 服务:
sudo service docker restart
踩到的坑与捉到的虫
这段内容可以略过:)
我当初用上面的办法安装好 Docker 之后,发现我没有办法启动任何 Docker 容器,会报如下错误:
ceba@openmediavault:~$ sudo docker start portainer
Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser --version` failed with output:
error: exec: "apparmor_parser": executable file not found in $PATH
Error: failed to start containers: portainer
我寻找了许多材料、尝试了许多办法来解决这个问题,包括缺少安装 apparmor,但都无济于事。后来找到了这篇帖子,发现到我通过 OMV-Extras 插件安装的是一个巨大古老的 Docker 版本(v20.10.5)。于是根据帖子提示,手动执行了安装命令,终于解决了这一问题。
但我还是很好奇为啥会装上这么古老的 Docker。我检查了 OMV-Extras 安装 Docker 时的输出,发现这个家伙竟然是从 Debian 源安装 docker.io
,而不是从 Docker 源安装 docker-ce
,前者已经是上古时代的东西了。
我在 OMV-extras 的仓库翻了翻,发现了下面这段代码:
setDockerPackages()
{
if [[ "${arch}" == "i386" ]] || ! grep -q 'download.docker.com' ${omvextrasList}; then
# there is no i386 docker-ce package in the docker repos
# if docker repos are disabled, use debian repos as well
# use docker.io from Debian repo
dockerPackages="docker.io docker-compose ${dockerPackages}"
else
dockerPackages="docker-ce ${dockerPackages}"
fi
}
这段代码竟然直接根据源列表中是否含有 download.docker.com
这个字符串来决定 Docker 包名……我之前更换 OMV-extras 软件源的时候就修改了 Docker 的镜像仓库,清华 TUNA 源里显然并不包含 download.docker.com
这个字符串,于是 OMV-extras 就以为没有 Docker 源,选择了从 Debian 源安装。
真相大白,于是跑去写了个 Issue。很快啊,不到二十分钟,人家就修完提交了,顺带也把 Issue 关掉了。
现在大概是没有这个 bug 了。
部署 qBittorrent
我们使用 linuxserver 制作的 linuxserver/qbittorrent 镜像,使用 docker compose 部署。
通过 ssh 登入服务器,拉取 linuxserver/qbittorrent 镜像:
sudo docker pull linuxserver/qbittorrent:4.4.1
然后在主目录下建立 qbittorrent
文件夹,在其中建立 docker-compose.yml
,内容如下:
---
version: "2.1"
services:
qbittorrent:
image: linuxserver/qbittorrent:4.4.1
container_name: qbittorrent
environment:
- PUID=998 # 数据卷所有者的 id
- PGID=100 # 数据卷所属用户组的 id
- TZ=Asia/Shanghai # 时区
- WEBUI_PORT=8080 # Web 界面端口,须和下方保持一致
volumes: # 数据卷挂载,帽号前面是宿主机,帽号后面是容器内
- /main/test/qbittorrent-config:/config # 配置文件目录,根据需要修改帽号前内容
- /main/test/downloads:/downloads # 下载文件目录,根据需要修改帽号前内容
ports:
- 8080:8080 # Web 界面端口,须和上方保持一致
- 26881:26881 # BT/PT 下载用通信端口,根据需要设置
- 26881:26881/udp # BT/PT 下载用通信端口,根据需要设置
restart: unless-stopped
network_mode: host # 网络模式,改为 host 模式
这里我们选择了 qBittorrent 的 4.4.1 版本,它是 linux 下最后一个使用 Qt5 的版本。随后的版本使用了 Qt 6.3.0,但这个版本的 Qt6 存在 bug 导致 RSS 订阅功能不可用。最新的 qBittorrent 4.4.3 尚未更换 Qt 版本,只能先用这个较老的版本凑活凑活了。
PUID
、PGID
是用于解决挂载数据卷权限问题的两个环境变量,PUID 设为数据卷所有者的 id,PGID 设为数据卷所属用户组的 id。在这里,数据卷所有者之前已改为 admin
,id 是 998;用户组是 users
,id 是 100
。可以通过 id user
命令来查看。
数据卷理论上可以挂载到任意位置,但通常都是会放在文件系统之中的,相对更加安全一些。这里就放在了 test 数据集下面的两个目录里。
网络模式强烈改为 host
模式,这样就会直接使用主机网卡,好处多多:可以直接使用 IPv6 地址,不用再碰 Docker 糟糕的 IPv6 支持;少过一层虚拟网卡,性能更好,连接性更优。PS:我当初找了一堆资料研究 Docker 怎么开 IPv6,后来发现用 host 模式直接解决了。
准备好 docker-compose.yml
文件后,在它所在的目录下(即 qbittorrent
)运行下面的指令,启动编组:
sudo docker compose up -d
然后就可以打开浏览器,访问 <your_nas_ip>:8080
来看看能否打开 qBittorrent 的界面啦。默认的登陆用户是 admin
,密码是 adminadmin
。
登录进去之后就可以随便玩耍了,随便塞个新番的 BT 种子试试看。
修改 Hosts
考虑到网络环境,有必要给一些 BT、PT 网站手动设置 Hosts。/etc/hosts
这个文件是由 OMV 自动管理的,需要稍稍绕点弯路。
首先新建 /etc/hosts2
文件,里面填好需要设置的 Hosts 内容。然后再新建文件 /srv/salt/omv/deploy/hosts/20myentries.sls
,内容如下:
append_custom_hosts:
file.append:
- name: "/etc/hosts"
- source: "/etc/hosts2"
随后运行 sudo omv-salt deploy run hosts
命令,即可使上面的设置生效。可以再次查看 /etc/hosts
文件,hosts2
的内容应该已经填充到其中了。
结语
在完成 qBittorrent 的部署之后,openmediavault 的折腾之旅算是告一段落了。本来还应该折腾折腾虚拟化,但实在使不想搞了。希望这几篇文章能给想要使用 OMV 的同学一些帮助,让大家少踩一些坑。
溜了溜了,这就去换 TrueNAS。
参考资料
- Can’t run docker containers after upgrade to v6. AppArmor missing”. Openmediavault Forum.
- Something went wrong trying to pull and start portainer on OMV 6. Openmediavault Forum.
- Can’t get any dockers to run without privileged mode on ProxMox kernel, please help. Openmediavault Forum.
- Docker images can’t network when using Proxmox kernel. Openmediavault Forum.
- Request: OMV only partially rewrite /etc/hosts. Openmediavault Forum.
- linuxserver/qbittorrent. Docker Hub.
- Kavindu Narathota. Let’s install qBittorrent on Docker. medium.com.
- Elsa Granger. Docker IPv6. www.elsagranger.com.
- 曾大仁. docker 容器开启ipv6. 知乎.
- Enable IPv6 support. Docker Document.
- ungleich virtualisation team. How to enable IPv6 in docker. ungleich.ch.
- 咕咕鸽. 【有用的小知识】Docker-qBittorrent 开启IPv6 笔记. blog.laoda.de.
- 咕咕鸽. 【好玩的Docker项目】10分钟搭建你专属的下载神器——qbittorrent. blog.laoda.de.
- geniusjoe. omv 家用 nas 搭建[2], qbitttorrent 部署. 知乎.
- RSS feeds do not work with qt6. Github repo qbittorrent/qBittorrent Issue.
- The way to determine Docker packages when install Docker. Github repo OpenMediaVault-Plugin-Developers/openmediavault-omvextrasorg Issue.
本作品采用知识共享署名 4.0 国际许可协议进行许可。
本文链接:https://blog.ceba.tech/2022/07/NAS-4-OMV-Docker-qBittorrent/