前言:关于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

说明:默认的用户名和密码分别是adminadminadmin,你只是内网下访问的话,可以偷懒不修改,可是后面我们要穿透到公网,所以还是建议你修改下密码吧,这个操作就不用我教了了吧。

输入正确口令后,进入界面后会发现是英文,也是可以改简体中文的,具体如下:

中文.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年的证书,可以参考我上面一篇文章:传送门,下载好这几个文件以后,可以把它先传到/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://192.168.1.2:80访问网页端了。这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。

四、结语

本文参考了很多qb的安装教程,但大多都是对公网用户的教程,几乎没发现内网穿透qbittorrent的,我也尝试了好久,试错了很多次。对于这个,个人接触时间也不够多,认识也有不到位的地方,所以难免有介绍不到位的地方,如有发现,欢迎留言。

参考链接:

标签: none

已有 4 条评论

  1. 特意上来给你留言,你是对的,有两句话很有用,一是# 下面填你的域名,不要填127.0.0.1(别问我为什么,我踩了坑了,试错出来的)二是:这种方式和上面的内网穿透不要同时用,这种方案多用于在vps端配置ssl。把握这两点基本就可以成功了,顶楼主

    1. 很高兴可以帮到你→_→

  2. 我也搞了好半天,好在有这篇文章

  3. Andy Andy

    唉,看了還是不明白怎麼弄。。。

添加新评论