搞台 NAS (4):Openmediavault 通过 Docker 部署 qBittorrent

在前两篇文章中,我们安装了 Openmediavault、部署了 ZFS 文件系统,这次我们将会用 Docker 容器部署 BT/PT 下载应用——qBittorrent。NAS 下载 BT/PT 是我的核心需求,使用 Docker 部署这类应用应该算是常规操作。

OMV 部分总共分为三篇文章,这是第 3 篇:

  1. Openmediavault 的安装与配置
  2. Openmediavault 部署 ZFS 文件系统
  3. 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 版本,只能先用这个较老的版本凑活凑活了。

PUIDPGID 是用于解决挂载数据卷权限问题的两个环境变量,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。

参考资料

本作品采用知识共享署名 4.0 国际许可协议进行许可。
本文链接:https://blog.ceba.tech/2022/07/NAS-4-OMV-Docker-qBittorrent/