使用docker部署qBittorrent并借助frp把其WEBUI穿透到公网 作者: 毕世平 时间: 2020-10-02 分类: 默认分类 前言:关于`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可省,但加上也不会报错,效果如下: ![qb界面.png](https://shiping.date/usr/uploads/2020/10/4082280515.png) **说明**:默认的用户名和密码分别是`admin`和`adminadmin`,你只是内网下访问的话,可以偷懒不修改,可是后面我们要穿透到公网,所以还是建议你修改下密码吧,这个操作就不用我教了了吧。 输入正确口令后,进入界面后会发现是英文,也是可以改`简体中文`的,具体如下: ![中文.png](https://shiping.date/usr/uploads/2020/10/3137940975.png) 选择“简体中文”后,拉到最下面,点击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年的证书,可以参考我上面一篇文章:[传送门](https://shiping.date/archives/frp_https_site.html "传送门"),下载好这几个文件以后,可以把它先传到`/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`网页端这样填证书位置: ![qb证书.png](https://shiping.date/usr/uploads/2020/10/2632323943.png) 这样填好以后,然后下拉保存即可。然后通过`https://192.168.1.2:80`访问网页端了。这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。 # 四、结语 本文参考了很多qb的安装教程,但大多都是对公网用户的教程,几乎没发现内网穿透`qbittorrent`的,我也尝试了好久,试错了很多次。对于这个,个人接触时间也不够多,认识也有不到位的地方,所以难免有介绍不到位的地方,如有发现,欢迎留言。 ## 参考链接: - [To小白:群晖docker套件安装qBittorrent——星际蜗牛的折腾日记 NO.8](To小白:群晖docker套件安装qBittorrent——星际蜗牛的折腾日记 NO.8 "To小白:群晖docker套件安装qBittorrent——星际蜗牛的折腾日记 NO.8") - [frp github地址](https://github.com/fatedier/frp "frp github地址") - [qbittorrent dockerhub地址](https://hub.docker.com/r/linuxserver/qbittorrent "qbittorrent dockerhub地址") - [使用Frp为你的Web服务器添加https支持](https://blog.walterlv.com/post/add-https-support-for-web-service-using-frp.html "使用Frp为你的Web服务器添加https支持") 标签: none
特意上来给你留言,你是对的,有两句话很有用,一是# 下面填你的域名,不要填127.0.0.1(别问我为什么,我踩了坑了,试错出来的)二是:这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。把握这两点基本就可以成功了,顶楼主
很高兴可以帮到你→_→
我也搞了好半天,好在有这篇文章
唉,看了還是不明白怎麼弄。。。