使用docker部署qBittorrent并借助frp把其WEBUI穿透到公网
前言:关于qBittorrent
,我感觉很多人都比我懂得多,下载磁力链接/种子对应的文件,速度很快,前提是每个人都有“人人为我,我为人人”的意识,那样才长久。
本文呢,主要是介绍内网下部署qBittorrent
服务(公网部署方案一样),然后用frp
将其WEBUI
穿透到公网,实现https
的方式访问。我这里使用树莓派,所以本文实现在公网下通过https://qb.yourdomain.com:port
来访问部署于树莓派下的qb
服务。
条件准备:
- 内网下的linux设备(比如树莓派,群晖)
- 一个域名,且添加到Cloudflare解析
- 一台公网机器,其IP作为上面域名的A记录值
- 会使用基本linux命令,明白
mkdir vim cd wget
等的用法 - ssh客户端,推荐Putty
- 传文件可能会用到Winscp软件
一、部署docker
1.1 安装docker
我使用的设备是树莓派,默认安装了sudo
,默认用户是pi
,且在sudo
组里,所以如果你用的不是普通用户,或者机器本身默认没安装sudo
,那么你直接以root
身份运行,命令前不需要加sudo
:
# 树莓派raspbian自带的vim有点坑,所以要重新安装vim
sudo apt remove vim-common -y
# 更新源,安装wget和vim
sudo apt update && sudo apt -y install wget vim
# 安装docker
wget -qO- get.docker.com | bash
# 将pi用户加入docker组(执行此命令后断开ssh连接,再重连一次)
sudo usermod -aG docker pi
1.2 配置docker自启动
上面命令安装了docker服务,执行下面命令配置docker:
# 启动docker(默认好像就是已经启动了)
sudo systemctl start docker
# 查看docker状态
sudo systemctl status docker
# 查看docker版本号
docker -v 或者 docker version
# 将docker加入开机自启动
sudo systemctl enable docker
二、部署qBitorrent服务
2.1 拉取镜像
docker pull linuxserver/qbittorrent
2.2 创建配置文件夹
# 在pi的家目录执行即可
cd ~
# 创建配置文件夹
mkdir qbittorrent && cd qbittorrent
mkdir config && mkdir downloads
说明:这里创建的config
目录将来映射后用于存放qb程序的配置信息,downloads
目录将来用于存放qb程序下载来的资源。
2.3 创建容器
由于树莓派我没有找到docker-compose,那么创建一个run.sh也是可以的(虽然格式没有docker-compose.yml规范):
vim run_qb.sh
//下面是配置范例
#!/bin/bash
docker run -d \
--name qb \
--restart always \
-p 1234:6881 \
-p 1234:6881/udp \
-p 80:80 \
-e TZ=Asia/Shanghai \
-e PUID=1000 \
-e PGID=1000 \
-e WEBUI_PORT=80 \
-v /home/pi/qbittorrent/config:/config \
-v /home/pi/qbittorrent/downloads:/downloads \
linuxserver/qbittorrent
//上面是配置样例
# 执行此脚本,创建容器
bash ./run_qb.sh
说明:前两个-p 1234:6881
,注意这里的6881
端口号不要修改,它是容器构建时候就已经确定了的,建议宿主机不要用默认的6881,比如我这里选的是1234,那就是-p 1234:6881 -p 1234:6881/udp
。第三个-p 80:80
,其中后面的80是后面的-e WEBUI_PORT=80
来确定的,前面的80是宿主机的端口号,建议两者配置一致。至于-v
后面跟目录的映射,前面跟宿主机目录(自行配置)
,后面跟容器内的目录(写定,不要修改)
,这个一般不会出错。
2.4 网页端访问
现在你可以浏览器输入你内网机器在局域网的地址了,比如http://192.168.1.2:80
,因为是http,浏览器默认填充80,所以80可省,但加上也不会报错,效果如下:
说明:默认的用户名和密码分别是admin
和adminadmin
,你只是内网下访问的话,可以偷懒不修改,可是后面我们要穿透到公网,所以还是建议你修改下密码吧,这个操作就不用我教了了吧。
输入正确口令后,进入界面后会发现是英文,也是可以改简体中文
的,具体如下:
选择“简体中文”后,拉到最下面,点击save保存即可。
三、部署frp服务
3.1 服务端安装frps
ssh登陆你的公网机器,执行下面命令部署frps:
# 假定你的vps架构是x86_64,下载此包
cd /etc && wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_amd64.tar.gz
# 解压缩,可以使用Tab键补全
tar -zxf frp_0.34.0_linux_amd64.tar.gz
# 切换目录
cd ./frp_0.34.0_linux_amd64
# 修改frps.ini配置文件
vim frps.ini
#下面是配置文件示例
[common]
bind_port = 7000
vhost_https_port = 443
privilege_token = password
# 上面是配置文件示例
frp releases地址是:https://github.com/fatedier/frp/releases
说明:配置文件中bind_port
是客户端与服务端沟通使用的端口号,你可以修改自己想要的端口号;vhost_https_port
是你的frp程序提供https流量的映射端口,这个端口是要占用本公网机器的端口,所以使用443的话要保证vps上443没有被占用,且你frps运行的时候要给root权限;privilege_token
相当于是一层鉴权吧,你可以设置个密码,知道你密码的人才可以配置frpc和你的frps通信
。
# 运行测试
./frps -c ./frps.ini
3.2 客户端配置frpc
由于众所周知的原因,我们从github上下载东西是很慢的,所以你也可以先在电脑端挂代理下载好frp-linux.zip
的包,关于如何获取cf免费15年的证书,可以参考我上面一篇文章:传送门,下载好这几个文件以后,可以把它先传到/tmp
目录,然后使用命令移动其位置:
# 假定你的内网机器是arm 32bit架构(arch命令获知),下载压缩包
cd /etc/ && sudo wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_arm.tar.gz
# 解压缩
sudo tar -zxf frp_0.34.0_linux_arm.tar.gz
# 切换目录
cd frp_0.34.0_linux_arm
frp releases地址是:https://github.com/fatedier/frp/releases
下载好以后,下面具体配置frpc.ini
配置文件:
# 配置frpc.ini配置文件
# 下面是配置文件格式
[common]
# 这里填写你公网机器的IP
server_addr = 1.2.3.4
# 这里填你设置的frpc和frps沟通的端口,默认7000
server_port = 7000
# 这里填你设置的密码
privilege_token = password
# 下面[...]名字自定义,比如我自定义的就是[frp_qb_https_site]
[frp_qb_https_site]
type = https
#下面填你qb http服务的端口号
local_port = 80
# 下面填你的域名
custom_domains = qb.yourdomain.com
# 调用内置的https2http插件
plugin = https2http
plugin_local_addr = 127.0.0.1:80
# 下面填你的域名,不要填127.0.0.1(别问我为什么,我踩了坑了,试错出来的)
plugin_host_header_rewrite = qb.yourdomain.com
plugin_header_X-From-Where = frp
# 配置证书,记得把上面的证书用命令移动到/etc/frp目录下
plugin_crt_path = /etc/frp/cf.crt
plugin_key_path = /etc/frp/cf.key
## 上面是配置文件示例
配置好配置文件以后,可以执行下面给命令试运行:
# 执行下面命令试运行
./frpc -c ./frpc.ini
说明:不出意外的话,现在你的内网机器已经通过frp暴露出去了,也就是你已经可以使用流量通过https://qb.yourdomain.com:443
访问你内网下的qbittorrent
服务了。
3.3 frp的systemd服务
上面命令只是试运行,退出终端程序也退出了,这显然是我们不能接受的,细心的朋友应该已经发现frp
作者已经写好了systemd
配置,你只需要把它移动到合适的位置,然后就可以让它在后台跑起来,并添加开机自启动。不过需要注意的是服务端frps.ini
配置文件里用到了443端口,而默认的systemd配置里用户身份是nobody
,可能会无法监听此低位端口,你需要把它修改为root
,然后再尝试使用。
3.4 证书问题
关于vps端nginx与此frps公用443端口,紧接的之前的那篇文章已经介绍了,可以去看那篇,此篇文章只是那篇文章的一个实际应用实例(稍微有一点不一样)。
另外关于让qbittorrent
自己来加载ssl证书的配置,其实也很简单,你需要先把证书和key先放到/home/pi/qbittorrent/config
,由于使用了docker映射目录,对应的是容器里的/config
目录,所以你需要在qbittorrent web
网页端这样填证书位置:
这样填好以后,然后下拉保存即可。然后通过https://192.168.1.2:80
访问网页端了。这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。
四、结语
本文参考了很多qb的安装教程,但大多都是对公网用户的教程,几乎没发现内网穿透qbittorrent
的,我也尝试了好久,试错了很多次。对于这个,个人接触时间也不够多,认识也有不到位的地方,所以难免有介绍不到位的地方,如有发现,欢迎留言。
特意上来给你留言,你是对的,有两句话很有用,一是# 下面填你的域名,不要填127.0.0.1(别问我为什么,我踩了坑了,试错出来的)二是:这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。把握这两点基本就可以成功了,顶楼主
很高兴可以帮到你→_→
我也搞了好半天,好在有这篇文章
唉,看了還是不明白怎麼弄。。。