PT工具之Docker全家桶+HTTPS详细配置教程

一、前言

因为使用Docker的隔离性、可移植性比较好,所以自己使用的服务一般都使用Docker部署,这样每次迁移时将挂载的目录备份即可,不需要考虑机器的版本和兼容性,更换设备时基本可以做到一键迁移,而且升级镜像也比较方便。

这次的教程是将PT下载中的一些常用应用都使用docker部署,将之聚合到一篇文章,方便自己查看,也希望能够帮助到有相同需求的朋友。

二、服务简介

(一)服务种类

这次介绍的服务有下面几种:

  • 阿里云DDNS
  • Nginx
  • qBittorrent
  • Transmission
  • IYUUPlus
  • 迅雷快鸟

所有服务均采用docker-compose进行部署,也就是只需要个docker-compose.yml,在Linux环境下,比如盒子里,只需要使用docker-compose up -d命令即可直接运行,在NAS环境下更简单,以威联通为例,点击创建应用程序,将docker-compose.yml中的内容粘贴进去即可,无需任何额外配置。

比如我的威联通的服务基本全部采用docker进行配置:

Containers

Linux环境的docker的安装可以参考我的这篇文章:Ubuntu使用Docker搭建编译环境完整教程

(二)适合对象

本文中的内容因为涉及到DDNS和Nginx反向代理,所以最适合的用户是有公网IP和域名的朋友;如果没有的话,可以跳过DDNS和Nginx,直接看相关服务的部署,同时服务部署完成后,需要在内网访问。

如果你符合下面所有条件,恭喜你,你就是本文最佳目标读者:

  • 喜欢使用Docker部署服务
  • 有动态公网IP
  • 有域名
  • 会申请证书
  • 需要使用https

(三)网络架构

主要服务的网络架构如下:

network

因为如果你要在外网使用服务的话,使用http就等于裸奔,你网络链路上的任何一个环节都可以看到你输入的账号和密码,所以墙裂建议使用https

几块钱买一个域名,然后证书的申请很简单,阿里和腾讯都有免费的一年证书,动手能力再强一点的,可以使用Let's Encrypt自动颁发证书,自动续期。

三、服务部署

好了,啰里啰唆这么多,终于到了我们服务部署的环节。

(一)阿里云DDNS

1.前提条件

DDNS相信已经不需要我详细介绍,简单点说就是你的公网IP每次拨号后会改变,每次IP改变后自动将你的域名解析到新的IP,这样你只要访问你的域名,就可以持续访问到你的服务。

前提条件:

  • 有公网IP
  • 已经在阿里云购买域名
  • 已经获取AccessKey

关于AccessKey的获取可以参考我的这篇文章:

Windows使用阿里云RAM访问控制API实现自建DDNS动态域名解析

2.配置文件

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.2'

services:
ddns:
image: chenhw2/aliyun-ddns-cli
container_name: ddns
restart: always
environment:
AKID: 获取到的AccessKey ID
AKSCT: 获取到的AccessKeySecret
DOMAIN: 你要解析的域名
REDO: 60

3.创建容器

这里以威联通为例,打开Container Station,点击创建,点击创建应用程序,将上面的yml中内容粘贴进去即可,验证OK后点击创建。

create

(二)Nginx

这里的Nginx主要作用是对其他服务进行反向代理,我们和Nginx之间的通信采用https加密,Nginx和内网的服务采用http进行通信,这样有下面几个好处:

  • Nginx一般比服务自带的https兼容性好
  • 证书统一管理,同一个域名只需要部署一份证书
  • 方便后期证书升级更换
  • 内网可以正常使用http访问服务,防止https配置错误时无法访问服务

1.准备工作

去你购买域名的服务商处申请证书,然后选择Nginx服务器证书下载,一般是一个pem文件和一个key文件。

2.使用docker部署nginx

这里我们使用host模式部署nginx,这样后期可以直接进行代理而不需要再expose新的端口。

需要注意的是,下面的/share/CACHEDEV3_DATA/Docker/路径前缀需要替换为你机器的实际路径,建议所有Docker部署的服务放到统一的文件中进行管理,也方便我们后期进行备份。

这里有2个路径需要我们关注:

  • /share/CACHEDEV3_DATA/Docker/nginx/conf.d:nginx配置文件夹,后面所有服务的配置文件都在这里新增
  • /share/CACHEDEV3_DATA/Docker/nginx/ssl:SSL证书文件夹,我们的证书文件需要放到这个目录

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: '3'

services:
nginx:
image: nginx:stable-alpine
container_name: nginx
restart: always
#privileged: true
environment:
- TZ=Asia/Shanghai
network_mode: "host"
volumes:
- /etc/localtime:/etc/localtime:ro
- /share/CACHEDEV3_DATA/Docker/nginx/conf.d:/etc/nginx/conf.d
- /share/CACHEDEV3_DATA/Docker/nginx/log:/var/log/nginx
- /share/CACHEDEV3_DATA/Docker/nginx/dist:/opt/dist:ro
- /share/CACHEDEV3_DATA/Docker/nginx/ssl:/ssl:ro

3.部署证书

假设我们下载的证书文件分别是home.shangyexin.com.keyhome.shangyexin.com.pem,将这2个文件放置到你上面配置的证书文件夹,比如/share/CACHEDEV3_DATA/Docker/nginx/ssl

4.启动容器

现在你就可以启动容器了,具体的每个服务的代理设置我们会在相应的服务中分别讲解。

(三)qBittorrent

1.配置文件

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3.2"

services:
qbittorrent:
image: linuxserver/qbittorrent
container_name: qbittorrent
environment:
- PUID=1001
- PGID=1001
- TZ=Asia/Shanghai
- UMASK_SET=022
- WEBUI_PORT=8081
volumes:
- /share/CACHEDEV3_DATA/Docker/qbittorrent/config:/config
- /share/CACHEDEV3_DATA/Multimedia/QBDownloads:/downloads
ports:
- 10681:10681
- 10681:10681/udp
- 8081:8081
restart: unless-stopped

2.配置解释

(1)PUIDPGID

这是容器里启动服务的用户的用户UID和GID,一般是为了限制容器服务的权限,比如你可以在NAS里,新建一个docker用户,所有的docker服务都用这个权限来启动。

用户新建完成后,ssh登陆NAS后,使用cat /etc/passwd查看这个用户的UID和GID,比如像这样:docker:x:1000:100:Linux User,,Docker服务用户,:/share/homes/docker:/bin/sh,然后修改上面的PIUD=1000PGID=100,如果你没有这个需求,不用管这个选项即可。

(2)WEBUI_PORT

这里需要改成你web想要访问的端口,服务启动后,输入IP+端口才能访问到你的服务。注意的是配置文件中的ports选项的第三行需要同步将这个端口expose出来,也就是这里的端口需要改成和WEBUI_PORT一样的端口。

(3)ports

这里的10681需要改成你实际使用,qbittorrent用来传入连接的端口,这个和你的WEB端口是两个东西,是BT下载用的。这个端口,路由器里面需要配置端口转发,你的qbittorrent配置里也要配置成相同端口。

qb_ports

这里多说一句,因为我路由器里配置的端口范围转发,比如转发10000-11000所有范围的端口到我的NAS,这样只要我NAS的所有服务都配置成这个范围的端口,就不需要为每个端口进行转发配置。

(4)volumes

这里是将的宿主机的磁盘挂载到容器里面去,这样我们可以直接修改文件而不需要进入容器。

  • /share/CACHEDEV3_DATA/Docker/qbittorrent/config,qb的配置文件夹,改成你的实际设备路径,后期的种子文件夹可以直接去这个里面找。
  • /share/CACHEDEV3_DATA/Multimedia/QBDownloads: 下载文件夹,你下载所有文件都在这个文件夹。

3.反向代理

这个时候,如果你一切操作都OK的话,你已经可以在内网访问到你的qBittorrent了,比如你的NAS的IP地址是192.168.31.8,在内网你输入http://192.168.31.8:8081应该就可以访问到qBittorrent了。

但是如果我们还想上https,增加我们在外网访问的安全性,还需要使用Nginx进行反向代理配置。

(1)配置文件

还记得我们上面的Nginx配置文件路径吗,比如/share/CACHEDEV3_DATA/Docker/nginx/conf.d,使用SSH登入系统,使用cd命令进入当前文件夹,使用vim或者直接用sftp将当前配置文件复制到这个目录即可。

配置文件qbittorrent.conf,文件名可以修改,但是一定要使用conf后缀名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 10081 ssl http2;
listen [::]:10081 ssl http2;

server_name home.shangyexin.com;

ssl_certificate /ssl/home.shangyexin.com;
ssl_certificate_key /ssl/home.shangyexin.com;
client_max_body_size 100G;

location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host 127.0.0.1:8081;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}

proxy_cookie_path / "/; Secure";
}

(2)配置解释

这里的listen端口10081需要改成你配置过转发的端口,也就是你在外网能够访问到端口,比如我们的8081没有配置转发,所以在外网无法使用http进行访问。

server_name 改成你的实际域名。

ssl_certificate 因为我们已经将容器内的ssl文件夹映射到宿主机的/share/CACHEDEV3_DATA/Docker/nginx/ssl文件夹,所以这里不用修改,只需要你将证书文件放到你映射的文件夹即可。

http://127.0.0.1:8081中的端口改成你设置的内网WEBUI_PORT端口。

client_max_body_size:可选项,比如用于一次性添加大量种子。

(3)配置生效

只需要重启Nginx即可使我们的配置生效,因为我们的Nginx也是使用docker配置的,所以重启Nginx这个容器就行了。

这时候在浏览器中输入你的域名加端口即可在外网使用https进行访问,以增加我们账号密码的安全性:

https://home.shangyexin.com:10081

(四)transmission

1.配置文件

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3.2"

services:
transmission:
image: lscr.io/linuxserver/transmission
container_name: transmission
environment:
- PUID=1001
- PGID=1001
- TZ=Asia/Shanghai
- TRANSMISSION_WEB_HOME=/transmission-web-control/
- USER=your_user_name
- PASS=your_passwd
volumes:
- /share/CACHEDEV3_DATA/Docker/transmission/config:/config
- /share/CACHEDEV3_DATA/Network/transmission/downloads:/downloads
- /share/CACHEDEV3_DATA/Network/transmission/watch:/watch
- /share/CACHEDEV3_DATA/Multimedia/QBDownloads:/qbdownloads
ports:
- 9091:9091
- 10413:10413
- 10413:10413/udp
restart: unless-stopped

2.配置解释

(1)PUIDPGID

同上面的qbittorrent

(2)TRANSMISSION_WEB_HOME

这是WEB_UI的风格,这里改成中文的,很多人习惯使用的/transmission-web-control/

(3)USERPASS

改成你想设置的用户名和密码。

(4)volumes

这里是将的宿主机的磁盘挂载到容器里面去,前面需要改成你设备的实际路径。

  • config:配置目录,后面的种子文件夹在这里面
  • downloads:下载目录
  • watch:种子监控目录
  • qbdownloads: 可选项,这样transmission可以访问到qbittorrent的下载文件

(5)ports

左边的的9091需要改成你实际使用,右边容器内的端口不能改,但这里建议不修改,这里的端口就是我们web访问的端口。

这里的10413需要改成你实际使用,transmission用来传入连接的端口,这个端口,路由器里面需要配置端口转发,你的transmission配置里也要配置成相同端口。

tr_ports

3.反向代理

这个时候,如果你一切操作都OK的话,你已经可以在内网访问到你的transmission了,比如你的NAS的IP地址是192.168.31.8,在内网你输入http://192.168.31.8:9091应该就可以访问到transmission了。

但是如果我们还想使用https,增加我们在外网访问的安全性,还需要使用Nginx进行反向代理配置。

(1)配置文件

还记得我们上面的Nginx配置文件路径吗,比如/share/CACHEDEV3_DATA/Docker/nginx/conf.d,使用SSH登入系统,使用cd命令进入当前文件夹,使用vim或者直接用sftp将当前配置文件复制到当前目录即可。

配置文件transmission.conf,文件名可以修改,但是一定要使用conf后缀名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 10091 ssl http2;
listen [::]:10091 ssl http2;

server_name home.shangyexin.com;

ssl_certificate /ssl/home.shangyexin.com.pem;
ssl_certificate_key /ssl/home.shangyexin.com.key;
client_max_body_size 100G;

location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $http_host;
}
}

(2)配置解释

这里的listen端口10091需要改成你配置过转发的端口,也就是你在外网能够访问到端口,比如我们的8081没有配置转发,所以在外网无法使用http进行访问。

server_name改成你的实际域名。

ssl_certificate因为我们已经将容器内的ssl文件夹映射到宿主机的/share/CACHEDEV3_DATA/Docker/nginx/ssl文件夹,所以这里不用修改,只需要你将证书文件放到你映射的文件夹即可。

http://127.0.0.1:9091中的端口改成你设置的内网端口。

client_max_body_size:可选项,比如用于一次性添加大量种子。

(3)配置生效

只需要重启Nginx即可使我们的配置生效,因为我们的Nginx也是使用docker配置的,所以重启Nginx这个容器就行了。

这时候在浏览器中输入你的域名加端口即可在外网使用https进行访问,以增加我们账号密码的安全性:

https://home.shangyexin.com:10091

(五)IYUUPlus

篇幅所限,这里不讲解软件的详细使用,只有部署服务的流程。

1.配置文件

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3.2"

services:
iyuuplus:
image: iyuucn/iyuuplus
container_name: iyuuplus
volumes:
- /share/CACHEDEV3_DATA/Docker/iyuuplus/db:/IYUU/db
- /share/CACHEDEV3_DATA/Docker/qbittorrent/config/qBittorrent/BT_backup:/BT_backup
- /share/CACHEDEV3_DATA/Docker/transmission/config/torrents:/torrents
ports:
- 8787:8787
restart: unless-stopped

2.配置解释

(1)volumes

这里是将的宿主机的磁盘挂载到容器里面去,前面需要改成你设备的实际路径。

  • /share/CACHEDEV3_DATA/Docker/iyuuplus/db:程序数据库存放位置,改成机器中你想放置的任意路径
  • /share/CACHEDEV3_DATA/Docker/qbittorrent/config/qBittorrent/BT_backup:这是前面qBittorrent里配置文件的路径,这里更加详细点,是种子的存放目录的绝对路径
  • /share/CACHEDEV3_DATA/Docker/transmission/config/torrents:这是前面transmission里配置文件的路径,这里更加详细点,是种子的存放目录的绝对路径

3.反向代理

这个时候,如果你一切操作都OK的话,你已经可以在内网访问到你的IYUUPlus了,比如你的NAS的IP地址是192.168.31.8,在内网你输入http://192.168.31.8:8787应该就可以访问到IYUUPlus了。

但是如果我们还想使用https,增加我们在外网访问的安全性,还需要使用Nginx进行反向代理配置。

(1)配置文件

还记得我们上面的Nginx配置文件路径吗,比如/share/CACHEDEV3_DATA/Docker/nginx/conf.d,使用SSH登入系统,使用cd命令进入当前文件夹,使用vim或者直接用sftp将当前配置文件复制到当前目录即可。

配置文件iyuuplus.conf,文件名可以修改,但是一定要使用conf后缀名:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server { 
listen 10787 ssl http2;
listen [::]:10787 ssl http2;

server_name home.shangyexin.com;

ssl_certificate /ssl/home.shangyexin.com.pem;
ssl_certificate_key /ssl/home.shangyexin.com.key;

location / {
proxy_redirect off;
proxy_pass http://127.0.0.1:8787;
proxy_set_header Host $http_host;
}
}

(2)配置解释

这里的listen端口10787需要改成你配置过转发的端口,也就是你在外网能够访问到端口,比如我们的8787没有配置转发,所以在外网无法使用http进行访问。

server_name改成你的实际域名。

ssl_certificate因为我们已经将容器内的ssl文件夹映射到宿主机的/share/CACHEDEV3_DATA/Docker/nginx/ssl文件夹,所以这里不用修改,只需要你将证书文件放到你映射的文件夹即可。

http://127.0.0.1:8787中的端口改成你设置的内网端口。

(3)配置生效

只需要重启Nginx即可使我们的配置生效,因为我们的Nginx也是使用docker配置的,所以重启Nginx这个容器就行了。

这时候在浏览器中输入你的域名加端口即可在外网使用https进行访问,以增加我们账号密码的安全性:

https://home.shangyexin.com:10787

(六)迅雷快鸟

这里只适合迅雷超级VIP用户,或者迅雷快鸟用户,可以自己到官网看相应的资费,上行最高提高到50M,下行最高提高到700M,但是一定要到官网看看自己有没有办法提速和实际能提速多少,比如我就是将200M下行提速到了500M下行。

好处就是可以按月购买以及比有的地方的官方提速包要便宜些,至于使用容器的好处就是不需要电脑打开迅雷客户端才提速,可以一直保证家中的带宽是提速状态。

1.配置文件

docker-compose.yml参考:

1
2
3
4
5
6
7
8
9
10
version: "3.2"

services:
xunlei:
image: scjtqs/xunlei-fastdick
container_name: xunlei
environment:
- XUNLEI_UID=your_xunlei_username
- XUNLEI_PASSWD=your_xunlei_passwd
restart: unless-stopped

2.配置解释

没啥好解释的,XUNLEI_UIDXUNLEI_PASSWD换成你的迅雷用户名和密码就行了,看docker输出的日志是成功后,再测速看看有无成功即可。

xunleikuainiao

四、写在最后

因为篇幅所限,本篇主要写了一些常用的PT工具的docker部署办法,还有一些常用的服务比如个人云盘Nextcloud和个人多媒体服务器Jellyfin等等就不写在这里了。

其实Nextcloud的配置可以参考我的这篇文章:使用docker-compose搭建Nextcloud个人云盘并开启https教程,只是当时针对服务器写的,可能很多东西没有解释的那么详细。

还有本人水平所限,可能文中有很多错误或者不是最优配置,请谅解。

但是容器用多了真的再也回不去了,毕竟谁能够拒绝再也不用为环境而头疼,几分钟内立刻搭建好自己常用的服务呢。

希望多多少少能帮助到一些人吧。

Enjoy it now.


PT工具之Docker全家桶+HTTPS详细配置教程
https://www.shangyexin.com/2021/12/14/docker-pt/
作者
Yasin
发布于
2021年12月14日
许可协议