一步到位的 vps 从入门到放弃
包含网盘,下载工具,远程控制,端口穿透,科学上网工具,以及上面这些技术的环境基础搭建
环境
debian 9,512m/1024m 内存 vps
下文默认在 root 下执行
基础环境搭建
基础环境我选择 lnmp (或者叫做 lemp)推荐直接使用 apt 进行安装。因为 lnmp 为直接编译安装,安装时间长,占用内存大,且 apt 安装兼容性最好(虽然可能会少功能)。宝塔更是有隐私风险,强烈不推荐。
安装前务必卸载 nginx,php 和 mysql(通过 apt remove 卸载),因为所使用的目录不同(apt 安装使用的目录是 /etc,而 lnmp 会安装到 /usr/local 下)
另外如果遇到安装 lnmp 后某些组件无法自启,请使用 systemctl unmask 和 enable 命令进行修复
比如我就是 nginx 出现了问题:
service status nginx
,检测出结果为 unmask但使用
lnmp nginx start
可以启动systemctl unmask nginx.service
后systemctl enable nginx
,重启发现 nginx 正常启动
使用 lnmp 一键包(和宝塔二选一) 不推荐
参考文章:lnmp 一键安装包.org
因为我的机器是 512m 的,所以推荐安装 lnmp 1.6 测试版,因为该版本自动分配了 1g 的虚拟内存,避免编译时因为内存太小而编译失败
1 | wget http://soft.vpser.net/lnmp/lnmp1.6beta.tar.gz -cO lnmp1.6beta.tar.gz && tar zxf lnmp1.6beta.tar.gz |
运行完后得到 lnmp1.6 文件夹,修改其中的 lnmp.conf ,将Enable_PHP_Fileinfo
这项改为'y'
,除非接下来你不需要安装Cloudreve。如果安装前这步忘记做了,可以安装后通过该文所写补装 fileinfo。
之后,安装 lnmp,需要大概 40 分钟
1 | cd lnmp1.6 && ./install.sh lnmp |
中途会叫你输入 mysql 相关的管理员密码,自己设定并记住这个密码,后面要用到。其他选项保持默认即可。
安装完后,输入 which nginx
和which lnmp nginx
,查看前者显示的路径里面是否在后者显示的路径中有包含。建议对 mysql 和 php 也做相似的操作。如果都有的话证明安装成功。
然后运行php -m
,查看其中时候是否有 fileinfo 和 gd 两个扩展。
全部检查完毕,证明 lnmp 部署成功。
使用宝塔面板进行安装(和 lnmp 二选一)(强烈不推荐)
宝塔面板操作更简单,但是所需内存也更大。
安装:
1 | wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh |
安装后会显示面板地址和账户密码,马上输入面板地址和账户密码并更改密码以及放行端口(特别是对于改过 ssh 端口的),如果能进入 ssh 却忘记了密码的,可以通过bt指令
来更改密码。另外,一开始是用ip地址:端口号/目录
给定面板地址,有的时候绑上域名后反而打不开面板,可能需要改端口号解决,同样是使用bt
指令。
因为宝塔面板在 debian 使用的是 ufw 防火墙,若是觉得宝塔面板的防火墙碍事,可以通过命令关闭
1 | systemctl disable ufw.service |
登录面板后通过提示安装 lnmp+phpadmin(php 可视化管理工具),安装完后再插件页面选中安装的 php,插件管理处添加 fileinfo 即可。
docker 安装及一些基本操作
参考文章:Docker 极速下载
安装 docker(ubuntu参考利用国内网络丝滑的安装 Docker - 知乎或者是docker-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror):
1
2
3
4
5#已经502
#curl -sSL https://get.daocloud.io/docker | sh
export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
curl -fsSL https://get.docker.com/ | sudo -E sh安装 docker-compose
1
2
3
4
5
6#curl -L https://get.daocloud.io/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
compose_new_ver=$(wget -qO- -t1 -T2 "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g'|sed 's/[a-z]*//g')
#230328更新,daocloud的docker-compose似乎炸掉了
#curl -L https://get.daocloud.io/docker/compose/releases/download/v${compose_new_ver}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/v${compose_new_ver}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose常用命令(此处的 xxx 可以是 id 也可以是 name)
用途 命令 查看系统内现存的镜像 docker image ls
删除系统内现存镜像 docker rmi xxx
查看容器 docker ps -a
查看容器(全消息,防止 command 行被压缩) docker ps -a --no-trunc
停止容器 docker stop xxx
删除容器 docker rm xxx
添加自启(container 正在运行时) docker update --restart=always xxx
docker-compose 文件加载(后台运行带 -d 参数) docker-compose up -d
docker-compose 文件卸载 docker-compose down
docker-compose更新并重载,最后清理 docker-compose pull
docker-compose up -d --remove-orphans
docker image prune
查看容器错误信息 docker logs xxx
这里说一下 docker-compose 的原理:将 docker 模块的参数写在一个文件中,运行加载命令就会把模块和参数一起配置好运行,如果发现其中有的模块镜像还没有被拉取会先行拉取,拉去过就会直接部署。如果要对其中已经部署成容器的模块进行修改,不能直接进入容器修改,而是需要使用相同的文件利用卸载命令进行卸载后再修改文件里面的参数然后再重新加载。
所以:
- 如果要运行两个不同的 docker-compose 的话,建议下载到不同的文件夹中或者使用不同的便于分辨的名字;
- 修改前一定记得用未修改的原文件进行卸载!如果使用修改后的文件不卸载直接加载可能会遭遇莫名其妙不好处理的错误。
进入容器中进行操作
参考文章:docker容器中文件的上传与下载
最常用的方法是使用 docker 内的 bash 程序,这时需要用到 docker 的 exec 命令
1
docker exec -it xxxx /bin/sh
这里的和下面的 xxxx 需要填写容器的 id(可通过 ps 命令查询)
/bin/sh
有可能在别的路径或者是别的 bash,需要根据不同程序自己修改,但大部分是这个,不过也可能没有。。。那就没辙了此时如果需要复制本机的文件到 docker 或者反过来操作,可以通过 docker cp 指令
1
docker cp xxxx:/root/test.txt /root/
冒号后面的是 docker 内路径,另一个就是本机路径。
(23.6.7 更新) 查看容器中的二进制文件在哪里:
1
docker exec xxxx which [命令]
新建一个用户
后面某些应用(caddy,transmission)需要非 root 下运行,如果不自己新建用户的话,他们默认的用户会冲突,表现在两者共有的文件夹在其中一个应用中无法进行某些操作(如删除)。
新建方法
1 | useradd -d [用户目录] -m [用户名] |
下面教程以我的用户名 zbttl 为例。
安装 screen 和 sudo
apt install screen sudo -y
screen 常用命令(xxx 为自己起的名字)
| 作用 | 命令 |
| ——————– | ——————— |
| 打开一个 screen 窗口 | screen -S xxx |
| 查看已经打开的窗口 | screen -ls |
| 进入正在运行的窗口 | screen -r xxx |
| 强退一个窗口 | screen -X -S xxx quit |
其他各项依赖
系统更新
1
apt-get update && apt-get dist-upgrade -y
gcc 编译相关
1
apt-get install -y libcurl4-openssl-dev libevent-dev ca-certificates libssl-dev pkg-config build-essential intltool libgcrypt-dev libssl-dev libxml2-dev gcc
进程守护 supervisor
1
apt install supervisor -y
注意,如果往后发现下面通过 supervisor 设定的自启不正常了,可以检查一下
/etc/supervisor/supervisord.conf
,里面应该有这么一行1
files = /etc/supervisor/conf.d/*
这行东西如果后面跟了什么后缀或者没写到文件里面都有可能造成异常,通过
supervisorctl
也可以获知哪些程序自启了哪些没有或者没正常自启。python
1
apt install python python-pip -y
买一个域名,将 vps 指向域名,可以多做几个三级域名以免去 nginx location 项的编写。
修改时间1
tzselect
按照提示选择国家与地区,最后会得到一行代码,运行后 vps 时间就会校准为你当前所在地区的时间。如果你在大陆的话,一般直接运行以下代码:1
TZ='Asia/Shanghai'; export TZ
确认一下1
date -R
划掉的这个方法,是临时改时间的方法;要永久生效的话需要将
TZ='Asia/Shanghai'; export TZ
写入 profile 文件中,而且还不知道是否在系统中全局生效(可能只在终端中生效?)好处是泛用性比较好。
适用于 debian,永久更改时区的办法,参考:如何在Debian 9上设置或更改时区
查看时区代码,找到其中你所在时区对应的时区代码
1
timedatectl list-timezones
修改,和上面一样,人在大陆,这么输
1
timedatectl set-timezone Asia/Shanghai
确认
1
timedatectl
更改语言
1
dpkg-reconfigure locales
在弹出的窗口一路 page down 找到
zh_CN.UTF-8 UTF-8
,按下空格勾选,回车后选择默认语言,同样选到zh_CN.UTF-8
,重启即可。
目录设计
web:/home/web
证书:/home/ssl
用户目录:/home/zbttl
下载目录: /home/zbttl/download
1 | mkdir /home/web /home/ssl |
lnmp 配置
nginx
配置文件
apt install 安装的 nginx 配置文件位于 /etc/nginx
处,而 lnmp 一键包安装则位于 /usr/local/nginx/conf
内,宝塔的是/www/server/nginx/conf
内。如果使用后两者的界面来配置站点的话,它们还会把配置文件里面的站点扔到 conf 目录的 vhost 文件夹里面。虽然后两者都配有界面可以安装修改站点,要纠错或者是改点内容的话还是手工到目录里面改比较好。
配置站点
apt 安装的 nginx。默认的 nginx 会读取
/etc/nginx/modules-enabled/
里面的 conf 文件,所以把下面提到的手工配置的server
代码块放到自建的文件里就好。也可以仿照 lnmp 的,在nginx.conf
的http
代码块内新增一行1
include vhosts/*.conf;
然后也在
vhosts
文件夹里面放文件(server 代码块)。lnmp 一键包:
lnmp vhost add
,第一个问题输入自己的三级域名,第二个问题直接回车,第三个问题输入网站所在目录,第四个问题根据所要配置的站点而决定(比如 cloudreve 就要求 rewrite 到 thinkphp),第五个问题决定你的站点能不能访问到 phpinfo(可以查看当前 php 状态和所安装的组件的页面),第六个问题问你写不写日志,第七个问题要不要创建同名数据库(实际上大多数情况都是自己创建数据库,选 n 或者直接回车就好了),第七个问题要不要做证书(我选择手工做,待会会讲到)。之后回车搞定。如果要查看已经制作了几个站点,输入
lnmp vhost list
。如果想要删除站点,输入
lnmp vhost del
。宝塔面板:这个就方便多了,点进网站,添加站点,如果想上面那样一路 n 下来的话,只需要填两个地方就行了
以下假设我配置了一个 708hentai.baobaobao.xxx 的站点。
基本的手工配置
进入 vhost
目录,打开站点 conf 文件,大概会是这样的:
listen:nginx 所在的端口,如果填写 80 证明是 http 端口,443 是 https 端口,这两种情况下地址后面无需附上端口号。
server_name:三级域名
index:主页
root:站点所在目录
include:包括的扩展性配置文件,这里的两个 include 后面指的就刚刚的 rewrite 和 phpinfo 是否启用的配置。
location:跟在网址和端口后面「/xxxx」的,相当于站点目录的相关配置,一般「/」这个代表默认目录。这里的四个 location 建议删掉,否则容易出问题。
关于各程序的详细配置
关于证书的配置
参考资料:
- acme.sh + Let’s Encrypt + nginx 配置通配符HTTPS
- Let’s Encrypt通配符证书申请办法,实测有效
- Linux 下使用 acme.sh 配置 Let’s Encrypt 免费 SSL 证书 + 通配符证书
因为是同一个二级域名下衍生的大量三级域名,所以建议申请泛域名证书。除非是 api网站 中写明支持可以获得 api key 的域名商,否则,请把域名的 dns 解析托管到 cloudfare 上。下文以域名已托管到 cloudfare 为例。
打开 CF 的 api 网址,找到最底部的 Global API Key,点击 view,记下字符串。
在 ssh 处输入下列代码,key 后面的 xxx 输入刚刚记下的字符串,email 后面的 xxx 则输入你的 cf 登录邮箱。
1
2export CF_Key="xxxxxx"
export CF_Email="xxxxxx"下载,安装,申请证书,注意里面一个是二级域名一个是泛域名,两个缺一不可(
-k ec-256
可选,ecc 证书兼容性稍差无法兼容安卓 2.2 等超旧版本,但速度快于普通 rsa 证书)1
2
3curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh --issue --dns dns_cf -d example.com -d *.example.com -k ec-256例如我的域名是 baobaobao.xxx,那么就应该这么写
1
acme.sh --issue --dns dns_cf -d baobaobao.xxx -d *.baobaobao.xxx -k ec-256
(22.10.31 更新) acme.sh 改为由 zerossl 提供证书了,所以需要先注册邮箱
1
acme.sh --register-account -m xxx@xxx.com
或者,在申请证书的参数加入
--server letsencrypt
1
~/.acme.sh/acme.sh --server letsencrypt --issue --dns dns_cf -d baobaobao.xxx -d *.baobaobao.xxx -k ec-256
安装证书,
keypath
和fullchainpath
后面的路径和名字自定,建议放到同一目录,可以放到/home
或者/etc
,后续还要再给读写权限。1
acme.sh --installcert -d baobaobao.xxx --keypath /home/ssl/baobaobao.key --fullchainpath /home/ssl/baobaobao.crt --reloadcmd "nginx -s reload" --ecc
生成
dhparam.pem
文件,生成目录跟上面两个文件的目录保持一致(仅 nginx 使用,caddy 跳过该步骤)1
openssl dhparam -out /home/ssl/dhparam.pem 2048
填入 nginx 中即可。
可通过 Qualys SSL Labs’s SSL Server Test 或者 HTTP Security Report 进行测试。拿到 a 即可,如果想要拿到 a+,需要开启 hsts。
acme 的其他命令
查看注册了哪些域名:
1
acme.sh list
移除域名:
1
acme.sh remove xxx [--ecc]
关于效果测试
https 因为有 hsts 的特性,一旦输入过 https 的网址,浏览器就会自动对相同网址的 host 部分进行不全,此时 web 服务器协议就算回到 http,在相同浏览器上因为补全为 https 的原因,会打不开。所以建议测试的时候用浏览器的隐身模式,不会记录下 hsts。如果不慎受到 hsts 影响,可以通过chrome://net-internals/#hsts
进行清除。
另外,有时候关掉服务器后页面仍然能加载,是因为缓存的原因,可以通过右键刷新按钮,选择硬性加载来强制刷新缓存。或者一开始就用隐身模式进行调试。
另外,如果 nginx 开不起来,也可能是配置文件有问题,可通过
1 | nginx -t |
检测配置文件。
另外也可以在 /var/log/nginx
中检视日志文件。(不过 nginx 的日志做转发的时候很不直观)
mysql(5.7)
在宝塔面板上添加删除 mysql 用户很方便,gui 一把梭,不再赘述。只谈谈 lnmp 一键包的(当然宝塔也适用使用以下步骤)。另外宝塔编辑表也可以用自带的 phpadmin 而不需要在自己的电脑上安装 navicat,或者,在相应数据库内设置访问权限为所有人,才能用 navicat 登陆。
登录 mysql
输入mysql -p
,再输入你 lnmp 安装时创建的密码即可登录。
不过推荐使用 mysql 自动补全工具来登录。
先安装
1 | pip install tldr mycli |
然后敲入 mycli 输入密码即可登录。
新建用户
因为一直使用 root 用户去创建其他服务所用的数据库有一定危险性,所以先去创建一个用户。先查看默认有什么数据库show databases;
,应该会有名为mysql
的默认数据库。进入use mysql;
,查看目前的账户情况:
1 | select Host,user,Password,plugin from user; |
host 是允许登录的主机,user 代表用户,password 表示密码(这里显示的密码是通过加密的),plugin 只要是空的就不用管。
然后我们新建一个名为 zbttl 的用户,xxxx处填入密码:
1 | CREATE USER 'zbttl'@'%' IDENTIFIED BY 'xxxx'; |
给予权限
1 | GRANT ALL PRIVILEGES ON *.* TO 'zbttl'@'%'; |
ALL PRIVILEGES
表示操作(select,update)这些,on 后面表示数据库,这里也可以自己自定义,多个操作用逗号隔开,我选择全给。
然后再次查看目前的帐号情况,发现用户已经被添加进去了:
然后我们需要刷新一下权限表:
1 | flush privileges; |
允许外网 ip 通过其他工具登录
想要从主机上用 navicat 登录 mysql,发现无法登陆?
刚刚建立的用户,localhost 一栏写的是 %,代表可以从任何地址进行访问。不过因为防火墙没有开,所以仍然不能进行访问,需要配置一下路由表:
1 | iptables -I INPUT -p tcp --dport 3306 -j ACCEPT |
而 root 用户因为没有配置 % 这个地址,所以只能从 ssh 内进行访问。如果也想用 navicat 访问,需要添加 % 这一行,在上一步给予权限的位置加上这一步(xxxx 同样是密码)
1 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION; |
即可。
各功能安装
docker 类
百度一键签到
参考文章:MoeNetwork/Tieba-Cloud-Sign
下载 compose 文件
1
2mkdir -p /root/docker-compose/tieba/&&cd /root/docker-compose/tieba/
wget https://raw.githubusercontent.com/zsnmwy/Tieba-Cloud-Sign/master/docker-compose.yml然后打开文件,修改
CSRF:"true"
为 false
“80:8080”中的 80 最好修改成其他数字,比如 90,避免和 nginx 的 http 端口冲突web 里的
DB_USER
和DB_NAME
可以改,和底下 db 的MYSQL_DATABASE
和MYSQL_ROOT_PASSWORD
对的上就可以。部署
docker-compose up -d
在浏览器输入
ip:端口号
,比如我 vps ip 是 45.27.100.100 那么这里就是45.27.100.100:90
根据提示前往安装,不可写主机处选否,自动获得数据库配置信息填是,然后填入名字,邮箱和密码(登录的时候要用),确定后即可进入登录界面。
获取 BDUSS(直接帐号登录的功能基本是废的),方法页面里有说明,结束。
记得添加自启。可以通过 docker update 命令。也可以通过在 compose 文件中模块下写入
1
restart: always
一共就两个模块,都写进去就好了。
(20.11.12 更新) 用 tx 轻量服务器搭,出现 2002 错误。有一些解决方法有待参考:
参考资料:
下载 filebrowser 镜像
1 | docker pull filebrowser/filebrowser |
选好 filebrowser 配置文件夹和主文件夹(即 filebrowser 的生效文件夹)所指向的目录,注意配置文件夹不能是主文件夹的子目录,否则会有危险。配置文件夹我选择的是/home/filebrowser
,主文件夹便是 zbttl 的默认目录 /home/zbttl
,如果是通过 root 权限运行那么无所谓,不是的话需要注意配置文件夹权限。
之后在配置文件夹里面新建一个 filebrowser.db
文件,否则程序运行时就会自动创建同名的文件夹导致错误(我也不知道为什么会那么沙雕,反正是作者承认的 bug,当然也可以选择在下一步不映射这个文件,但如果将来要迁移 filebrowser 的话没有这个文件夹就需要重新配置)。还可以手工建一个名为 .filebrowser.json
的文件,如果运行时映射了但之前没建的话就会使用默认配置,root 并有单独域名的情况下使用默认配置没有问题,但如果考虑到我们的使用环境(在 zbttl 这个用户下使用),必须要做出修改,或者运行时将参数写在命令中。
.filebrowser.json
这个文件的默认配置长这样:
1 | { |
我们需要修改 port(非 root 下 1000 以下端口受限,容器内容器外都是),假设我们用 7777 这个端口。另外还有一个 baseurl,这个待会再提。
不修改 baseurl 的话,最后成果长这样:
1 | { |
然后看一眼教程里面的默认命令
1 | docker run -d -v /home/file_browser:/srv -v /home/file_browser/config.json:/etc/config.json -v /home/file_browser/database.db:/etc/database.db -p 100:80 filebrowser/filebrowser |
冒号前是实机目录,冒号后是容器内目录。刚刚说过 config.json 实际上默认自带不需要映射,但我们修改过里面的内容(比如接下来我们要修改的 baseurl)又不想在命令里面写明的话可以做映射。选择映射到实机 100 端口,避开 http 的 80 端口。-d 的意思是,后台运行
根据我们的配置,做出修改:
1 | docker run -u 1000 --name filebrowser -v /home/zbttl:/srv -v /home/filebrowser/filebrowser.db:/database.db -v /home/filebrowser/.filebrowser.json:/.filebrowser.json -p 7777:7777 filebrowser/filebrowser |
-u 的意思是运行用户的 uid,可以通过 id 命令查询 id zbttl
。不使用后台,看看报不报错。
然后用浏览器 ip:7777 即可打开。通过浏览器访问,默认账号密码:admin
加上后台和自启(也可以选择强行停止然后删除原容器后加上 -d 和自启参数再次运行):
1 | docker ps -a |
另外如果想映射到虚拟主机目录下(比如域名使用 xxx/filemanager:777 时有效),需要加入 –baseurl 参数,可以写在刚刚的配置文件中,这里以写在命令中为例。务必加在镜像名后,如:
1 | docker run -d -u 1000 -v /home/zbttl:/srv -v /home/filebrowser/filebrowser.db:/database.db -v /home/filebrowser/.filebrowser.json:/.filebrowser.json -p 7777:7777 filebrowser/filebrowser --baseurl /filemanager/ |
主要用于你想用手上现有的域名 + 虚拟主机而不是另开新的三级域名来搭建 filemanager 时使用(后面讲 nginx 时我会再提到)
aria2 docker
有条件先去看离线下载类的 aria2,配置文件和破解线程限制的指南在那里。
(21.3.8 更新) 发现线程破解啥的,P3TERX 大佬喂到嘴里了。。。详情见:P3TERX/Aria2-Pro-Core: Aria2 static binaries for GNU/Linux with some powerful feature patches. | 破解无限线程 防掉线程优化 静态编译 二进制文件 增强版。
现在作者推荐使用新版 dockerr 配合直接使用网桥模式,将 docker 端口直接透出来;bt 端口默认重新配置过,不再需要另外指定以防和 transmission 产生冲突;我思索了一下,和 transmission 相比,aria2 没法管理已经下载好的文件,所以和 vps 内 filebrowser 配合使用的 transmission 才需要正确设置权限,aria2 现在只用于直接下载然后和 rclone 配合上传文件到 onedrive,不接触 vps 内文件,就懒得老老实实配置用户给它了。
所以我现在的使用方法是,不做修改直接使用作者给的带有 rclone 功能的命令。将之前配置好的 rclone 文件(配置方法参考网盘类 rclone,配置完后在 /root/.config/rclone/rclone.conf
)和证书(使用 acme.sh,参考关于证书的配置,使用 acme.sh install
安装到相应目录)放 / 安装到 /root/aria-config
中;修改 aria2.conf
的证书配置;修改 script.conf
的 rclone 网盘名和上传目的地文件夹名(和 rclone 原命令不同,目的地文件夹中有中文也不要加单引号);配置好 aria2NG 前端(因为我想配合 cf 使用,且我现在使用的 caddy 能自动帮我加证书,但 aria2NG 这边用 caddy 反代开启 https 后要求 aria2 本身也开启 ssl,开启 aria2NG ssl 后 aria2NG 协议下拉菜单 http 选项是禁用不能选的,所以上文我给 aria2 也上了 ssl),运行官方命令:
1 | docker run -d \ |
即可。
参考文章:Aria2 Pro - 更好用的 Aria2 Docker 容器镜像
官方命令:
1 | docker run -d \ |
和 aria2 一键脚本相比,添加了 PUID 和 PGID 两个参数,方便以指定的身份下载文件,不过实现的方法和通用方法 -u 参数(参见 filemanager docker)不同,用了 -e 参数(实测,-e 和 -u 不可混用,需要配合具体容器使用)。两个 -v 对应的目录一个是配置目录一个是下载,这里还可以开一个 -v,链接破解过线程的 aria2 二进制文件,注意该文件需要提前加够 755 权限。另外,这里的 TOKEN 是密码,也需要进行定义。
根据非 docker aria2 的默认设置,下载文件放置于 /home/zbttl/download/aria2
,程序放置于 /usr/local/bin
,docker 内 aria2 同样放置于 /usr/local/bin/
,配置文件 aria2.conf
由于和原来有一些出入(不过大概只有目标目录那里需要验证,默认的 /root/Downloads
不知道能不能改),所以首次使用不建议修改映射,但可以部署完后进行修改保存,下次放入 /root/aria2-config/
继续用。
1 | docker run -d \ |
另外,这里有一个不算啥问题的问题。。。如果和 aria2 一键脚本混用且 aria2 一键脚本已安装并启动,同时打开该容器(在端口经过修改没有冲突程序打开成功的情况下),此时停止 aria2 脚本安装的 aria2 程序,然后再次运行启动脚本,会提示该脚本启动的 aria2 仍在开启。不过也不会有人无聊到混用的吧。
amule(docker)
参考文章:tchabaud/amule
不是官方的,不能保证更新,不过官方都几百年不更新了,无所谓了。
官方示例:
1 | docker run -p 4712:4712 -p 4662:4662 -p 4672:4672/udp \ |
其实经过前几个 docker 的搭建这些参数我都差不多熟悉了。。。不过这里有个小坑。 -v 这里有三个目录,按理来说,我们需要修改的 conf 参数在 docker 命令中已经包括了,所以实际上 -v 只需要映射 /incoming
目录就好了。然而我这么做了以后,发现下载速度比原版 amule 慢了不少。。。试了两三次,只有最后一次,放置了两三个小时后,amule 的 kad 正确的连接了,速度才正常了起来,而当正确的映射三个目录的时候,运行正常。所以看来还是得乖乖映射两个没啥用的目录。。。
1 | mkdir /home/zbttl/download/amule&&cd /home/zbttl/download/amule |
当然,不要和通常版 amule 一起使用,即使端口错开,后开那个也只能得到 low id。
mldonkey(docker)
mldonkey 普通版的配置真是一顶一的麻烦。。。而 docker 版版本旧一些(只到 3.1.5),不过作者加了一些源,而且把限速解开了无需配置,推荐使用。
官方示例:
1 | docker create --name=mldonkey \ |
这次去掉不必要的映射就没啥副作用了。
1 | docker run --name=mldonkey \ |
vscoder
新建了一个 coder 用户,用户文件夹为 /home/coder
,id coder
查询结果为 1003。
docker-compose.yml:
1 | version: "2.1" |
另外还有一种 cdr/code-server 我试了半天都没办法用非 root 用户映射本地目录,算了。
bitwarden
参考文章:
- 通过 Bitwarden 管理你的密码 - 少数派
- Home · dani-garcia/vaultwarden Wiki
- 自建 vaultwarden / bitwarden_rs 密码管理器 - atpX
- How to install and configure fail2ban with Bitwarden standard Docker install - Ask the Community / Password Manager - Bitwarden Community Forums
官方版 bitwarden 需要 获取 application id 和 application secret。第三方版本则不用,所以我选择部署第三方版本。另外由于应用的重要性,https 部署是很有必要的。下列的命令,映射了 20080 端口作为前端页面(不过只能通过 nginx 反代),3012 据说是通知走的端口,admin_token 是 https://ip/admin
也就是管理界面的密码,关闭了新用户注册,开起来 ws 通知,固定了域名。
1 | docker run -d --name bitwarden -v /bw-data/:/data/ -p 127.0.0.1:20080:80 -p 3012:3012 -e TZ="Asia/Shanghai" -e ADMIN_TOKEN=xxxx_admin_backend -e SIGNUPS_ALLOWED=false -e WEBSOCKET_ENABLED=true -e LOG_FILE=/data/vaultwarden.log -e DOMAIN=https://[ip地址或域名] vaultwarden/server:latest |
nginx 配置参考:
1 | server { |
最好再使用 fail2ban 进行加固。
1 | apt install fail2ban -y |
主页面:
新建/etc/fail2ban/jail.d/vaultwarden.local
1 | [vaultwarden] |
新建 /etc/fail2ban/filter.d/vaultwarden.local
1 | # path_f2b/filter.d/vaultwarden.local |
管理页面:
新建/etc/fail2ban/jail.d/vaultwarden.local-admin
1 | # path_f2b/jail.d/vaultwarden-admin.local |
新建 /etc/fail2ban/filter.d/vaultwarden.local-admin
1 | # path_f2b/filter.d/vaultwarden-admin.local |
重启 fail2ban
生效
1 | systemctl restart fail2ban |
访问首页三次密码/账号错误的话 ip 就会锁死,并在 /var/log/fail2ban.log
和 /bw-data/vaultwarden.log
处留下记录。如要解锁,运行:
1 | fail2ban-client set vaultwarden unbanip [被锁的ip地址] |
解封所有 ip (可能要多运行几次,可能失败):
1 | fail2ban-client unban --all |
查看 fail2ban 限制情况
1 | fail2ban-client status vaultwarden |
transmission
4.0 版本之后需要自己放第三方 gui 到目录下。参考:Transmission 4.0.1 不再支持捆绑第三方UI界面? - Chinese / 简体中文 - Unraid
docker-compose.yml(和 alist 混合使用):
1 | version: '3.3' |
然后
下载想要的webui,如 https://github.com/ronggang/transmission-web-control
将压缩包里的src目录及其下文件解压至”config”映射的服务器文件夹 ,然后将文件夹更名为 transmission-web-control 即可
rsshub
参考文章:
1 | mkdir -p /root/docker-compose/rsshub&&cd /root/docker-compose/rsshub |
创建 volume 持久化 Redis 缓存
1 | docker volume create redis-data |
启动
1 | docker-compose up -d |
然后就能通过 url ip:1200/参数
进行订阅了。参数看这里:社交媒体
当然你也可以直接白嫖默认的域名参数来用,我 pixiv 就是这么订阅的,否则要翻墙(
注意事项
如果遭遇 rss 订阅错误,可以将完整 url 放入浏览器中,会弹出相应的错误提示。
如果墙内 vps 要订阅支持 pixiv,需要在 compose 文件
service.rsshub
的enviroment
下指明自己的 pixiv 帐号密码(即使只是为了订阅日榜周榜):1
2PIXIV_USERNAME: 'xxx'
PIXIV_PASSWORD: 'xxx'同时还要写下代理配置,同样是写在
service.rsshub
的enviroment
下:1
2
3PROXY_PROTOCOL: 'socks'
PROXY_HOST: '127.0.0.1'
PROXY_PORT: 3080不过,因为 docker 实际上和本机的端口是不互通的,所以想要连上本机的代理,无非两种方法:
本机代理监听的地址从 localhost(127.0.0.1)改为 0.0.0.0(不推荐,没上密码就可能被人盗用)
该 docker 模块使用 host 模式启动(参考文章)。在
service.rsshub
下写入:1
network_mode: "host"
不正确的卸载 rsshub / 贴吧一键签到可能会遭遇
network has active endpoints
问题,解决方法参考这篇文章:docker 解决network has active endpoints使用
docker network disconnect -f {network} {endpoint-name}
,其中的 {endpoint-name} 可以使用命令docker network inspect {network}
获得而 network 通过
docker network ls
获得最后运行
docker-compose up -d
即可
tinytiny rss
参考文章:找不到满意的 RSS 服务?你可以自己搭建一个 - 少数派
docker-compose.yml:
1 | version: "3" |
要改 postgres 的密码,还有 SELF_URL_PATH,如果你要用 ip 访问这里就不要填域名,填错进不去,会提示。还有 PUID 和 PGID 这两个就不再复述。
FreshRSS
参考文章:再次折腾 RSS 之搭建 FreshRSS 服务 - 少数派
1 | docker network create freshrss-network |
tinytiny rss 和 freshrss 选一个就行了。安卓推荐使用 feedme 对接,这两个都能接过来。需要开启 api 权限。
tinyrss 在偏好设置 -> 通用 -> 启用 api 处;
freshrss 不仅要在管理 -> 认证处勾选「允许 api 访问」后,还需要在配置 -> 用户账户处输入 api 密码,这个密码才是要填到 feedme 中的。
另外注意在 feedme 处,域名需要加 http:// 或者 https://,然后跟上 url 即可,不需要像 freshrss 中写的还要加上 /api
/。
目前看来,tinyrss 在订阅兼容性上比 freshrss 差。但 freshrss 的批量管理功能比较差劲。
memos
记事本。但对旧设备兼容不好,比如 firefox 85 就无法登录。
docker-compose.yml:
1 | version: '3.3' |
minimalist-web-notepad
更简陋的记事本,可能只能叫做草稿本。无需登录,兼容性良好。只需要登录到同一个 url 就可以共同编辑(比如 xxx.baobaobao.io/1
),会自动建立自 url,无需建好草稿本后再手动建立。另外,看文档pereorga/minimalist-web-notepad: 极简网络记事本还支持 site_url,可以不用多搞个三级域名。因为同样是草稿本,和上面的 memos 两个只需要用其中一个就行,所以我直接也开在了 10091 端口。
docker-compose.yml:
1 | version: '3.3' |
离线下载类
aria2(19.11.18 更新)
因为 aria2 有线程限制,所以建议自己下载源码修改以后进行编译。不过编译过后的二进制文件好像会大很多的样子。。。
如果不需要解除线程限制的话,推荐脚本一步到位(当然也可以运行完脚本以后再把编译好的已破解限制的二进制扔进去):Aria2 一键安装管理脚本(有权限问题,如果不在乎可以继续用,现在更推荐 docker 版,介绍在 docker 类中。)
1 | wget -N https://git.io/aria2.sh && chmod +x aria2.sh && bash aria2.sh |
参考资料
之前:
- linux编译安装aria2,远程下载设置
- BT/种子/磁力链接/HTTP/FTP 离线下载工具 —— Aria2 新 手动安装教程
10240 线程暴力膜改版 Aria2c- (systemd 相关)Debian 如何搭建使用 aria2c 作为下载工具 原
编译相关:
- 官方编译指南
- 解决编译时的 deprecated 问题 编译安装aria2
- 为什么自己编译的 aria2 体积很大
文件修改:
- Windows 下载工具aria2 1.34.0 解除单服务器线程数限制编译版
- aria2-build-msys2 上一个参考资料的 github 库
- Aria2 魔改解除线程数限制
- aria2-patch 上一个参考资料的 github 库
- 修改源码突破aria2线程限制
环境和下载
环境:虽然我们一开始装了一堆 gcc 编译相关环境了,但毕竟官方给了环境列表,我就一起整理列出来了
1
apt install libssh2-1-dev libc-ares-dev libxml2-dev zlib1g-dev libsqlite3-dev pkg-config libcppunit-dev autoconf automake autotools-dev autopoint libtool libssl-dev -y
到
https://github.com/aria2/aria2/releases/
找最新的 release,我写这篇文章的时候在1.34.01.35.0,所以输入1
2aria2_new_ver="1.35.0"
wget https://github.com/aria2/aria2/releases/download/release-${aria2_new_ver}/aria2-${aria2_new_ver}.tar.bz2当然你也可以吧 tar.bz2 结尾的文件下载到电脑上再做处理。或者,用 git(那就可以跳过第三步了)
1
git clone https://github.com/aria2/aria2.git
解压
1
tar jxvf "aria2-${aria2_new_ver}.tar.bz2"
上权限
1
tar jxvf "aria2-${aria2_new_ver}.tar.bz2"
编译源文件修改
需要修改的是那些以 cc 为后缀的编译源文件,具体是哪几个文件可以去看参考资料 2 里面的 .patch 文件。但因为我们最主要的是修改服务器最大连接数和服务器最小分割尺寸,所以只需要修改其中的 OptionHandlerFactory.cc。
寻找 OptionHandlerFactory.cc 文件,一般在 aria2 的 src 目录里面,可以通过 find 命令来寻找
1
find / -name OptionHandlerFactory.cc
假设在 aria2 目录下的
/src/OptionHandlerFactory.cc
内,那么输入1
vim /root/aria2-${aria2_new_ver}/src/OptionHandlerFactory.cc
文件里代码密密麻麻,有用的是类似这样的代码块:
1
2
3OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
TEXT_MAX_CONNECTION_PER_SERVER,
"1", 1, 16, 'x'));其中的跟在 TEXT 后面的
MAX_CONNECTION_PER_SERVER
就是 aria.conf 中的max-connection-per-server
,也就是单服务器最大连接数,没错,就是把小写换大写,横杠换斜杠,前面加 TEXT 而已。。。所以,其他所要修改的参数名可以通过 conf 文件获取,也可以去看参考资料 1、3 里面的 patch 文件,github 已经很贴心的帮我们标了颜色进行标记了,可以按参考资料 1、3 修改过的地方,直接照抄。当然我觉得那两个改的是有点过头,比如参考资料 1 的- 默认同时下载数改为 128
- 默认同服务器连接数改为 64,解除了之前 16 的限制
其实,注意到那
MAX_CONNECTION_PER_SERVER
后面到括号前的那几个参数了吗1
2"1", 1, 16, 'x'
默认值,最小值,最大值,单位限制了最小值和最大值的,其实就只有单服务器最大连接数和最小分块大小而已。 w网上最多的,是类似于参考文章 5 那样的修改,其中对默认值的修改,我认为见仁见智,其实最后直接修改配置文件也行。
然后输入/TEXT_MAX_CONNECTION_PER_SERVER
搜索这个字符串,利用方向键切换到后面的 16 ,按下 i 改成任意整数(这里改成 10240,注意避免整型溢出),像下面这样解除单服务器连接限制,取消最大 16 的限制,默认连接设为 32
1
2
3OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
TEXT_MAX_CONNECTION_PER_SERVER,
"1", 1, 16, 'x'));修改为
1
2
3OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
TEXT_MAX_CONNECTION_PER_SERVER,
"32", 1, -1, 'x'));最小文件分片大小,取消最小 1m 的限制,默认设为 1m
1
PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "20M", 1_m, 1_g, 'k'));
修改为
1
PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "1M", 1_k, 1_g, 'k'));
最大分片数,默认设为 48。分片数和前两项也有关,比如在 http 下载环境下(必定是单服务器)如果单服务器连接限制 < 最大分片数,或是剩余文件大小 / 最小文件分片大小 < 最大分片数,就会取其中的最小值做当前分片数。分片做的多速度可能就快(多线程原理),但最后拼接的时候可能消耗的算力就大,连接过多也可能遭到远程服务器的限制。
1
new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "5", 1, -1, 's'));
修改为
1
new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "48", 1, -1, 's'));
片段长度,取消最小 1m 的限制,默认不变。和最小文件分片大小的区别是,片段长度适用于 http 下载,将媒体文件进行分片,下好的分片部分即可进行播放。这是完成度上的参数而不是下载线程上的参数,所以该参数优先级也会小于最小文件分段长度。一般来说,这个参数比最小文件分段长度就行了。
1
PREF_PIECE_LENGTH, TEXT_PIECE_LENGTH, "1M", 1_m, 1_g));
修改为
1
PREF_PIECE_LENGTH, TEXT_PIECE_LENGTH, "1M", 1_k, 1_g));
(可选)连接超时时间,缩短为 30s
1
PREF_CONNECT_TIMEOUT, TEXT_CONNECT_TIMEOUT, "60", 1, 600));
修改为
1
PREF_CONNECT_TIMEOUT, TEXT_CONNECT_TIMEOUT, "30", 1, 600));
(可选)连接重试次数,增加到 2 次。应该能看出来,5 和 6 是配合使用的,效果就是缩短超时,快速重试
1
new NumberOptionHandler(PREF_RETRY_WAIT, TEXT_RETRY_WAIT, "0", 0, 600));
修改为
1
new NumberOptionHandler(PREF_RETRY_WAIT, TEXT_RETRY_WAIT, "2", 0, 600));
然后按 ESC,输入
:wq
保存
编译和安装
编译(512m 机子需要开虚拟内存了)
1
2cd&&cd aria2-${aria2_new_ver}
autoreconf -i这里可能会遇到两个坑:
运行
autoreconf -i
后提示./ltmain.sh no found
。输入libtoolize
解决。提示
1
configure.ac:731: warning: The 'AM_PROG_MKDIR_P' macro is deprecated, and its use is discouraged.
找到
configure.ac
文件的AM_GNU_GETTEXT_VERSION([0.18])
并修改为AM_GNU_GETTEXT_VERSION([0.19])
,重新执行1
autoreconf -i --force
然后
1
./configure
当然这么编译出来的二进制文件只有本机能用,开启静态编译后就可以在 amd64 机子上通用了。
1
./configure ARIA2_STATIC=yes
另外,默认不加参数的情况下用了 libxml2 这个库,这个库有个毛病,静态编译出来的二进制体积不小,通过 without 禁止调用该库系统就会自动换用 libexpat 这个库,有效降低体积。
1
./configure ARIA2_STATIC=yes --without-libxml2
最后
1
make
耐心等待。
安装
1
2cd src #编译好的aria2在这里
cp aria2c /usr/local/bin另外说一句,这里使用
make install
也可以,区别在于 make install 会把使用文档也一起拷过去,另外用 make unistall 也就可以快速卸载(不过也就只是删两个文件而已)。此时你也可以将编译好的 aria2c 文件留档保存,开新的 vps 的时候拷过去就是了。如果是使用一键脚本安装的想用编译好的无限制的二进制替换原来的 aria2c,需要先找到原来的 aria2c 放哪了
which aria2c
文章开头的这个脚本会放在
/usr/bin
里面,就将第二条指令改为1
cp aria2c /usr/bin
另外,编译好的文件大小相当感人(1.34.0 77m,1.35.0 100m,静态 1.35.0 145m),是因为里面带了无用的 symbol
默认是动态链接生成的可执行文件,同时也包含了许多调试信息,可执行文件比较大
可以通过指令去除
1
strip -s aria2c
最后大小测量出来是 2m 左右。不过如果是静态编译的话,就会达到 37m,解决方法就是上面说的换库,更换完以后大小约为 9.77m,不过官方静态编译出来的只有 7.99m,通过
aria2c -v
命令进行比对,官方使用的库中 sqlite3 和 c-ares 的版本较新(但 openssl 和 libssh2 的版本较旧),通过 sid 源更新了版本再次编译,emmm,缩小了到 9.55m,还是没有官方小。然后我尝试过降级,把库降级到官方静态版编译时用的版本1
2
3# Libraries: zlib/1.2.11 expat/2.2.6 sqlite3/3.30.1 OpenSSL/1.1.1d c-ares/1.15.0 libssh2/1.8.0
Libraries: zlib/1.2.11 expat/2.2.6 sqlite3/3.30.0 OpenSSL/1.0.2t c-ares/1.15.0 libssh2/1.7.0
# 上面那个是我编译出的 aria2 使用的库结果发现坑巨大。。。apt 本身不收录历史版本,所以只得用手动编译的方法。一共编译三个东西:
下载配置建立
接下来需要创建两个相关文件,分别是 aria2.conf(配置文件),aria2.session(下载任务暂存)
aria2.conf
主要需要修改的地方是文件保存路径,进度相关路径,rpc 端口和令牌;
另外还建议修改以下内容(下面已经基本修改好了)
- aria2 配置的
split
和max-connection-per-server
最好设置成相同的值,这样能够最大化利用每个线程来下载; - 把
max-tries
设为 0,retry-wait
设为 5(大于零整数,不要太小),这样当线程太多而被服务器返回 50X 时能自动重连,保持总线程数不下降; max-file-not-found
设为 0 (此项默认就是 0),无限等待服务器发送数据直到完成下载。
- aria2 配置的
(如果要和 transmission 混用下载 bt 的话,我个人觉得没有必要,bt 全部交给 tm 就好)
listen-port
改成其他数字,51413 和 tm 有冲突。某些老古董(比如 tx 云)还在使用 ext3,那么就需要修改
file-allocation
,除了falloc
以外都可以。还有一个要手工添加的 bt-tracker,需要在最末尾添加
bt-tracker=
,等号后面跟上 tracker 网址。tracker 网址可以从这里找,然后复制到有正则功能的编辑器里面(比如 notepad++,注意 vscode 不行),将(?<=\r\n)\r\n
替换为空,将\r\n
替换为逗号,即可。例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114## '#'开头为注释内容, 选项都有相应的注释说明, 根据需要修改 ##
## 被注释的选项填写的是默认值, 建议在需要修改时再取消注释 ##
## 文件保存相关 ##
# 文件的保存路径(可使用绝对路径或相对路径), 默认: 当前启动位置
dir=/home/zbttl/download/aria2
# 启用磁盘缓存, 0为禁用缓存, 需1.16以上版本, 默认:16M
#disk-cache=32M
# 文件预分配方式, 能有效降低磁盘碎片, 默认:prealloc
# 预分配所需时间: none < falloc ? trunc < prealloc
# falloc和trunc则需要文件系统和内核支持
# NTFS建议使用falloc, EXT3/4建议trunc, MAC 下需要注释此项
# file-allocation=none
# 断点续传
continue=true
## 下载连接相关 ##
# 最大同时下载任务数, 运行时可修改, 默认:5
max-concurrent-downloads=10
# 同一服务器连接数, 添加时可指定, 默认:1
max-connection-per-server=32
# 最小文件分片大小, 添加时可指定, 取值范围1M -1024M, 默认:20M
# 假定size=10M, 文件为20MiB 则使用两个来源下载; 文件为15MiB 则使用一个来源下载
min-split-size=1M
# 单个任务最大线程数, 添加时可指定, 默认:5
split=32
# 整体下载速度限制, 运行时可修改, 默认:0
#max-overall-download-limit=0
# 单个任务下载速度限制, 默认:0
#max-download-limit=0
# 整体上传速度限制, 运行时可修改, 默认:0
max-overall-upload-limit=1M
# 单个任务上传速度限制, 默认:0
#max-upload-limit=1000
# 禁用IPv6, 默认:false
disable-ipv6=false
## 进度保存相关 ##
# 从会话文件中读取下载任务
input-file=/root/aria2/aria2.session
# 在Aria2退出时保存`错误/未完成`的下载任务到会话文件
save-session=/root/aria2/aria2.session
# 定时保存会话, 0为退出时才保存, 需1.16.1以上版本, 默认:0
save-session-interval=60
## RPC相关设置 ##
# 启用RPC, 默认:false
enable-rpc=true
# 允许所有来源, 默认:false
rpc-allow-origin-all=true
# 允许非外部访问, 默认:false
rpc-listen-all=true
# 事件轮询方式, 取值:[epoll, kqueue, port, poll, select], 不同系统默认值不同
#event-poll=select
# RPC监听端口, 端口被占用时可以修改, 默认:6800
rpc-listen-port=6800
# 设置的RPC授权令牌, v1.18.4新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
rpc-secret=[登录密码]
# 设置的RPC访问用户名, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-user=<USER>
# 设置的RPC访问密码, 此选项新版已废弃, 建议改用 --rpc-secret 选项
#rpc-passwd=<PASSWD>
# 是否启用 RPC 服务的 SSL/TLS 加密,
# 启用加密后 RPC 服务需要使用 https 或者 wss 协议连接
#rpc-secure=true
# 在 RPC 服务中启用 SSL/TLS 加密时的证书文件(.pem/.crt)
#rpc-certificate=/root/xxx.pem
# 在 RPC 服务中启用 SSL/TLS 加密时的私钥文件(.key)
#rpc-private-key=/root/xxx.key
## BT/PT下载相关 ##
# 当下载的是一个种子(以.torrent结尾)时, 自动开始BT任务, 默认:true
follow-torrent=true
# BT监听端口, 当端口被屏蔽时使用, 默认:6881-6999
listen-port=51414
# 单个种子最大连接数, 默认:55
#bt-max-peers=55
# 打开DHT功能, PT需要禁用, 默认:true
enable-dht=true
# 打开IPv6 DHT功能, PT需要禁用
#enable-dht6=false
# DHT网络监听端口, 默认:6881-6999
#dht-listen-port=6881-6999
# 本地节点查找, PT需要禁用, 默认:false
#bt-enable-lpd=true
# 种子交换, PT需要禁用, 默认:true
enable-peer-exchange=true
# 每个种子限速, 对少种的PT很有用, 默认:50K
#bt-request-peer-speed-limit=50K
# 客户端伪装, PT需要
peer-id-prefix=-TR2770-
user-agent=Transmission/2.77
# 当种子的分享率达到这个数时, 自动停止做种, 0为一直做种, 默认:1.0
seed-ratio=0.1
# 强制保存会话, 即使任务已经完成, 默认:false
# 较新的版本开启后会在任务完成后依然保留.aria2文件
force-save=true
# BT校验相关, 默认:true
#bt-hash-check-seed=true
# 继续之前的BT任务时, 无需再次校验, 默认:false
bt-seed-unverified=true
# 保存磁力链接元数据为种子文件(.torrent文件), 默认:false
#bt-save-metadata=true
#把 max-tries 设为 0,retry-wait 设为 5(大于零整数,不要太小),这样当线程太多而被服务器返回 50X 时能自动重连,保持总线程数不下降;
max-tries=0
retry-wait=5
#max-file-not-found 设为 0 (此项默认就是 0),无限等待服务器发送数据直到完成下载。
max-file-not-found=0
aria2.session
只要建立在 conf 内写的相应目录处就可以了
配置自启动
1
nano /etc/supervisor/conf.d/aria2
然后输入(注意 conf 路径)
1
2
3
4[program:aria2]
command=aria2c --conf-path=/root/aria2/aria2.conf -D
autorestart=true
user=root通过 supervisorctl reload 进行重启
或者也可以使用 systemd 来配置自启,输入
nano /usr/lib/systemd/system/aria2c.service
1
2
3
4
5
6
7
8
9
10
11
12
13[Unit]
Description=Aria2c
[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target保存后启动服务
1
2systemctl enable aria2c.service
systemctl restart aria2c.service
配置前端
从这里下载 AriaNG 最新版。
然后放到上传到一个文件夹里面,我选择/home/ariaNG/
然后再 nginx 配置文件中的某一个站点写入
1 | location /aria2 { |
即可通过网址/aria2
打开前端,输入密码即可使用。
transmission(选用)
一般而言,http 下载我偏爱 aria2,而挂 pt 我就喜欢用 transmission 了。
参考文章:
- 在 Linux 下安装与更新
- Transmission
- Ngxin HTTPS代理Transmission Web UI
- CHANGE USER OF TRANSMISSION-DAEMON UNDER DEBIAN AND RASPBIAN
- Failed to set receive buffer UDP in Debian Solution?
安装 transmission
1
2apt install transmission
apt install transmission-daemon建立下载文件夹
1
2mkdir -p /home/zbttl/download/transmission
chmod 777 /home/zbttl/download/transmission修改配置
先停止服务
1
service transmission-daemon stop
注意一定要停止后再修改,而不能修改完再重启。
修改
/etc/init.d/transmission-daemon
,将其中的 user 等号后面的名字改成 zbttl。修改
/lib/systemd/system/transmission-daemon.service
,同样是将 Service 中的 user 改成 zbttl。然后使用systemctl daemon-reload
刷新配置。寻找配置文件。这里注意一件事,未修改用户之前 transmission 的默认用户为 www-data,通过
cat /etc/passwd
可以看到默认目录在/var/lib/transmission-daemon/
,所以配置文件就为其目录下的.config/transmission-daemon/settings.json
。当然为了配置方便,该文件其实是连接到/etc/transmission-daemon/settings.json
里的,直接去改这玩意也行。不过,更换了用户以后,配置文件就跑到用户目录下.config/transmission-daemon/settings.json
,可以通过带连接的 cp 命令把 /etc/transmission-daemon/ 整个考过来,也可以等其生成后再停下来改。不过卸载的时候这三者都不会被删除,但是如果你手动删掉 /etc 下的这个快捷方式文件夹,重新安装之后不会自动生成。而另外两个文件夹内文件会自动在运行时生成。我们这里选择自动生成。不过上面说的这些实际执行起来还有各种诡异的变化,表现在两点:
/etc/transmission-daemon/
里面的配置文件和.config/transmission-daemon/settings.json
里面的配置文件部分不同步,注意是部分,在我这里反映出就是目录用户密码都同步了,但rpc-whitelist-enabled
用户文件那边变成true
了,然后就弹出 403 错误;- 权限不一致。
/etc/transmission-daemon/
里面的数据库文件莫名其妙拥有者变成了默认用户,导致原来种子的资料读不出来。
对症下药把,也没摸出什么规律来。
回到正题。
先切换用户
su zbttl
测试前台开启命令
transmission-daemon -f
此时会看见日志里面有自带创建文件的提示。同时非 root 下还会出现 udp failed 的提示,这里我们先不管,下面解决。
打开生成的文件
nano /home/zbttl/.config/transmission-daemon/settings.json
修改配置文件:
我打算修改一下
"download-dir": "/var/lib/transmission-daemon/downloads"
修改到/home/zbttl/download/transmission
里面,另外还有rpc-password
和rpc-username
要设置,rpc-whitelist-enabled
更改为false,默认 rpc 端口 9091,如果有冲突也需要修改一下。port-forwarding-enabled
改成 false,rpc-authentication-required
改成 true,允许使用域名代替 ip 访问。设置完后经过前台开始命令,并通过浏览器查看是否能够访问。
切换回来
su
针对 udp failed 问题,修改
/etc/sysctl.conf
,新增下面两行1
2net.core.rmem_max = 4194304
net.core.wmem_max = 1048576应用
1
sysctl -p
最后重新启动
1
service transmission-daemon start
安装美化
1
wget https://github.com/ronggang/transmission-web-control/raw/master/release/install-tr-control-cn.sh|bash
按下「1」即可。
此时输入
ip:9091
,之后输入rpc-password
和rpc-username
就能顺利登录了。如果不能正常加载美化界面,请使用硬性重新加载。和 nginx 配合使用
如果需要通过网址访问,则需要在nginx 配置文件中的某一个站点写入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43location ^~ /transmission {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass_header X-Transmission-Session-Id;
add_header Front-End-Https on;
location /transmission/rpc {
proxy_pass http://127.0.0.1:9091;
}
location /transmission/web/ {
proxy_pass http://127.0.0.1:9091;
}
location /transmission/upload {
proxy_pass http://127.0.0.1:9091;
}
location /transmission/web/style/ {
alias /usr/share/transmission/web/style/;
}
location /transmission/web/javascript/ {
alias /usr/share/transmission/web/javascript/;
}
location /transmission/web/images/ {
alias /usr/share/transmission/web/images/;
}
location /transmission/ {
return 301 http://$server_name/transmission/web;
#如果是使用 https 请换成这句
#return 301 https://$server_name/transmission/web;
}
}
#另外,我想要访问网址的 /download 后缀也能进入 transmission
location /download {
return 301 http://$server_name/transmission/web;
}即可使用。
关于 transmission 如何通过 vps 做种的方法把种子下载到本地
这是一种除了 通过 rclone 以外的把种子下载到本地的方法,无需梯子,速度大概在 1m/s 左右。
另外,如果直接用远程下载到 vps 的种子在本地的 qbittorrent 里面跑一遍,或者通过转换成 magnet 的方法把种子转换成链接,会发现都没有速度,只能通过再次做种的方法才有速度,原因未知。
通过 transmission-create 命令把下好的文件进行做种
1
transmission-create -s 2048 -t http://1337.abcvg.info:80/announce -t http://bt.okmp3.ru:2710/announce -t http://bz.tracker.bz:80/announce -t http://fxtt.ru:80/announce -t http://nyaa.tracker.wf:7777/announce -t http://open.acgnxtracker.com:80/announce -t http://p2p.0g.cx:6969/announce -t udp://v1046920.hosted-by-vdsina.ru:6969/announce -t udp://v2.iperson.xyz:6969/announce -t udp://vibe.sleepyinternetfun.xyz:1738/announce -t udp://www.torrent.eu.org:451/announce -t http://frp.v2fy.com:8000/announce -o xxxx.torrent [文件或者文件夹]
稍等片刻,将做好的种子拖到本地。
在 transmission 中点击添加做好的种子,选择本地的哪个种子,如果没有意外的话,会多出来一个下好的任务(不需要把原来的任务删掉)。
在本地的 qbittorrent 中添加做好的种子即可。
关于 padding_file
transmssion 并不会自动忽略 padding_file
开头的文件,但可以确认这些文件是没有用并且可以删掉的。听说会在 v4.0.2 版本做出改进。如果通过 qbittorrent 拖到本地,倒是会自动忽略 padding_file
开头的文件。只不过这些文件远程下载的时候也会一并下载下来,挺占地方的,如果发现远程 transmission 和本地 qbittorrent 下载下来的文件夹大小不一样,多半就是 padding_file
开头文件的锅。
Simple Torrent(选做)
参考文章:Simple Torrent:一个支持边下边播、无版权限制和自动上传的BT离线下载程序
相比 aria2 和 transmission,这玩意能开 obfs 混淆一定程度防止 bt 追查。
这玩意有 docker,但不支持指定用户,只能硬着头皮上通常版了。
一键脚本安装
1
bash <(wget -qO- https://raw.githubusercontent.com/boypt/simple-torrent/master/scripts/quickinstall.sh)
修改
/etc/systemd/system/multi-user.target.wants/cloud-torrent.service
修改以下项目
1
2
3User=zbttl #运行用户
WorkingDirectory=/home/zbttl #运行用户的主目录
ExecStart=/usr/local/bin/cloud-torrent -c /home/zbttl/download/cloudtorrent/cloud-torrent.json --host 0.0.0.0 --disable-log-time #cloud-torrent 最好改成绝对路径改
/root/cloud-torrent.json
修改以下项目
1
2
3
4"downloaddirectory": "/home/zbttl/download/cloudtorrent/downloads", #待会用的下载文件夹
"obfsrequirepreferred": true, #obfs 加密优先
"trackerlisturl": "https://trackerslist.com/all.txt", #想要tracker全一点
"watchdirectory": "/home/zbttl/download/cloudtorrent/torrents" #待会用的种子文件夹复制到第二部写的 cloud-torrent 路径里面,修改所有者
1
2cp /root/cloud-torrent.json/home/zbttl/download/cloudtorrent/cloud-torrent.json
chown zbttl/home/zbttl/download/cloudtorrent/cloud-torrent.json新建下载和种子文件夹
1
2
3mkdir -p /home/zbttl/download/cloudtorrent/downloads
mkdir -p /home/zbttl/download/cloudtorrent/torrents
chown zbttl /home/zbttl/download/cloudtorrent/downloads /home/zbttl/download/cloudtorrent/torrents重启服务
1
2systemctl daemon-reload
systemctl restart cloud-torrent通过 ip:3000 访问
filebrowser(普通)
不依赖 caddy 和 docker 的普通版 filebrowser。
参考资料:
安装
1
curl -fsSL https://filebrowser.xyz/get.sh | bash
配置。filebrowser 支持两种方法的配置:数据库配置和文件配置。数据库配置不能直接编辑,可以通过数条命令进行编辑。而文件配置方法可以先用命令导出编辑后再导入,但是貌似没有什么例子来说明如何修改导出的文件。。。于是我们选用数据库方案。配置文件法参考
新建一个数据库,建立在
/etc/filebrowser
1
filebrowser -d /etc/filebrowser.db config init
设置监听地址,这里可以写实机外部 ip,也可以写 0.0.0.0,但是不能写 127.0.0.1
1
filebrowser -d /etc/filebrowser.db config set --address 0.0.0.0
设置端口
1
filebrowser -d /etc/filebrowser.db config set --port 100
设置语言环境
1
filebrowser -d /etc/filebrowser.db config set --locale zh-cn
设置日志位置
1
filebrowser -d /etc/filebrowser.db config set --log /var/log/filebrowser.log
添加用户
1
filebrowser -d /etc/filebrowser.db users add root password --perm.admin
启动
1
filebrowser -d /etc/filebrowser.db
此时即可通过 ip 进行访问。
确定可使用后,中段程序,设置自启:
1
nano /etc/supervisor/conf.d/filebrowser
打入代码
1
2
3
4[program:filebrowser]
command=filebrowser -d /etc/filebrowser.db
autorestart=true
user=root重启 supervisor
supervisorctl restart
amule(选用)
还有某些 ed2k 链接 tr 和 aria2 是搞不掂的。得用专用的电驴下载工具(其实比较著名的 ed2k 也就是 msdn 了)。不过其实 amule 协议由于某种原因在和 bt 的竞争中已经落于下风濒临死亡,目前常用的两个工具都许久没有更新,都有比较要命的 bug,所以我两个都说一下,任选其一安装。
参考文章:
- aMule
- [How to setup AMule and control it via web interface on a Raspberry Pi](How to setup AMule and control it via web interface on a Raspberry Pi)
- Debian系统如何安装aMule ?
安装 amule-daemon(没错,只要装这个就好了,其他都不用)
1
apt install amule-daemon
修改 amule 的启动用户和启动文件夹
1
vim /etc/default/amule-daemon
这里我的 user 设置为 zbttl,文件夹设置为
/home/zbttl/download/amule
1
2AMULED_USER="zbttl"
AMULED_HOME="/home/zbttl/download/amule"设置完以后重启一遍服务
1
service amule-daemon start
接下来才会在刚刚设置的文件夹里面放置程序文件
然后停止进程(也许不需要)
1
service amule-daemon stop
运行一边 amuled 命令
1
amuled
在刚刚设置的文件夹里就会出现关键配置文件 amule.conf
修改其中的几个参数 `
1
2
3
4ECPassword=[处理过的密码]
[WebServer]
Enabled=1
Password=[处理过的密码]其中的两个密码需要通过命令处理生成
1
echo -n [密码] | md5sum | cut -d ' ' -f 1
两个密码可以填一样的,实际上登录的时候只有后一个密码有用,前一个密码填啥都行
上面的配置方法其实是抄了近路,正经的配置方法是只配置
ECPassword
,保存后用命令生成并配置 webserver 的密码
1
amuleweb --write-config --host=localhost --password=[未处理过的Password] --admin-pass=[未处理过的 ECPassword]
重启,即可使用,通过
ip:4711
访问1
service amule-daemon start
不进行调试的情况下,普遍 amule 下载速度貌似比下面这个快。但缺点是有时候会出现奇怪的错误,需要手动重启进程,这个错误在官方 github 上面可以找到类似的(还是两个,下面这是其中一个):../../src/CFile.cpp(370): assert “Assert failure” failed in doSeek(): ((IsOpened()))。
opened 了很久,无人解决,上一次更新在 2015 年,估计凉了。
mldonkey(选用)
mldonkey 相对比较稳定,但部署上确实比较麻烦。。。
参考文章:
- Ubuntu自带的mldonkey-server启动脚本详解
- Ubuntu:MLDonkey安装步骤和一些注意事项(改配置文件法,不成功)
- Quickstart guide(官方安装文档)
- MLdonkeyOptionsExplained(官方文档,全配置参数)
- MultiUser(官方文档,用户管理)
安装 mldonkey 和 telnet
1
2apt install mldonkey-server
apt install telnet停止程序运行
1
sudo /etc/init.d/mldonkey-server stop
运行一遍程序
1
mlnet
开启另一个 ssh 窗口,尝试使用 telnet 登录配置端
1
telnet 127.0.0.1 4000
成功的话输入
exit
退出。修改用户和下载目录配置文件
/etc/default/mldonkey-server
,修改以下部分1
2
3MLDONKEY_DIR=/home/zbttl/download/mldonkey #mldonkey 程序配置文件目录
MLDONKEY_USER=zbttl #运行用户
MLDONKEY_GROUP=zbttl拷贝原来的 mldonkey 配置文件到新的程序配置文件目录,默认在
/root/.mldonkey
1
cp -r /root/.mldonkey/* /home/zbttl/download/mldonkey/
修改运行配置文件
/etc/init.d/mldonkey-server
,修改以下部分1
2
3PIDDIR=/home/zbttl/download/mldonkey #配置程序文件目录
LOGFILE=/home/zbttl/download/mldonkey/mldonkey-server.log #日志目录1
SERVERLOG=/home/zbttl/download/mldonkey/mlnet.log #日志目录2修改配置文件/日志目录的用户,像我一样把所有文件放一块的,对一个文件夹配置就好了
1
chown -R zbttl /home/zbttl/download/mldonkey
重启服务
1
2systemctl daemon-reload
sudo /etc/init.d/mldonkey-server restart再次登录 telnet
1
telnet 127.0.0.1 4000
初始用户 admin,进入 telnet 时未重置过密码即使用该用户,通过 passwd 命令设置密码
1
passwd [密码]
密码在 telnet 和 web 下通用。
下次登录 telnet 时需要输入密码才可相应各个命令
1
auth admin [密码]
还可通过 useradd 添加新用户
1
useradd zbttl [密码]
关闭 ip 限制
1
set allowed_ips 0.0.0.0/0
此时就可以通过
ip:4080
登录 web 界面。剩下的参数,可以查询官方文档参数名,然后通过 set 指令调整,如果想知道当前参数默认值,可以通过 grep -r 查询,比如:
1
grep -r allowed_ips
另外在 gui 里面大部分参数亦可以调节,不过 gui 要找到参数的文件可能更麻烦。。。
web 内参数较 amule 多很多,但最重要的是 settings 里面的 max_hard_download_rate,初始限速 50kb。往高了调吧。
另外,第六部有的教程里是通过直接调节 download.ini 文件内容,我之前尝试了一下,姿势不对,调节完 mldonkey 进程的启动不起来了,甚至需要重启来解决,重启后配置又还原了。。。
远程控制类
vnc
有时候,下载某些不可描述的东西会碰到一些下的慢又限制重复 ip 的网盘,用自己的电脑下的话,又久,一断电又前功尽弃了。这时不如远程操作 vps,使用上面的远程桌面来下载,在 vps 上下完再下到自己的电脑上。linux 的远程桌面,一般我们使用 vnc。
参考资料:
安装 tightvnc
1
apt install tightvncserver
安装语言包
1
apt-get install ttf-wqy-zenhei
启动
vncserver
,会提示让你输入密码,最多 8 位,多于 8 位会警告并被截断。输入完密码后会提醒你是否创建 view-only 密码,选择否。之后查看 ssh 内输出,应该是主机名:1
,这里的「:1」的意思是 「5900+1」,也就是 vnc 运行在 5901 端口。下载 windows 端 vnc viewer,新建一个远程主机,地址为
ip:5901
,然后输入密码,便能够看到图形界面了。如果发现连不上,有可能是你开着代理,或者是 vnc viewer 自动识别了你的代理地址,左上角file->preferences->proxy
,选择第一项。我们看到这里实际上只有一个命令行窗口在工作,是因为系统里面还没有图形化桌面。图形化桌面有名的有 kde,ghome,xfce,由于我们的 vps 内存较小,我们就选择占用最小的 xfce 来安装。
安装 xfce
1
apt install xfce4 xfce4-goodies
然后重启 vnc
1
2vncserver -kill :1
vncserver即可在 windows 端查看效果(不需要像其他教程那样修改 xstartup 文件)。
安装浏览器
firefox 是最容易安装的,不过资源占用可能有点大
1
apt install firefox-esr
安装完后,vnc 内的浏览器图标才能够正常打开。
tiny-remote-desktops (20.12.23 更新)
来自:Linux VPS一键搭建远程桌面(包含Chrome和Firefox)教程
一个 rdp + vnc + noVNC 的 docker。
1 | sudo docker run -d --name rdpvnc -v /home/zbttl/rdp_download:/root -p 3389:3389 -p 5901:5901 -p 6901:6901 soff/tiny-remote-desktop |
下载的文件会被放在 /home/zbttl/rdp_download/Downloads
。但没有办法用非 root 方式运行,试过 -u
运行不起来,-e
没用。
如果要用密码连接的话:
1 | sudo docker run -d --name rdpvnc -v /home/zbttl/rdp_download:/root -p 5901:5901 -p 6901:6901 -e VNC_PASSWORD="vncpassword" soff/tiny-remote-desktop |
但这样就不能开 rdp 了。
内网穿透
frp
参考文章:
- 内网穿透工具frp服务器端frps一键安装教程
- 内网穿透工具frp Windows客户端frpc安装及使用教程
- 利用vps+frp实现访问公司内网windows远程桌面
- 推荐一款很好用的内网穿透工具 FRP
- 创建windows计划任务使FRP开机启动
最重要的用途是拿来穿透到主机上做远程控制,部分代替 teamviewer。
在服务器端使用一键脚本安装
服务端
1 | wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh |
回车后,需要设置参数,有几个参数要注意:
第一第二个的 frp 通信端口和 dashboard 端口如果不是端口冲突的话建议默认,dashboard 密码自己设,要记牢;
后面三个需要修改,
1 | Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80): |
后面的基本全部设置为默认就行了,除了特殊情况:mux 打开后如果觉得卡顿断流需要关掉;kcp 如果恰逢家中宽带被运营商 qos 的话也建议关掉。
如果设置错误的话,可以使用 frps config
命令修改。
配置好后使用 frps status
确认是否正确运行。
客户端(windows)
下载 windows 命令行客户端,解压到任意目录,并在解压目录下地址栏输入 cmd 进入命令行界面。
修改 frpc.ini(这里只配置了远程控制)
1 | [common] |
其中,server_addr 是服务器地址,sever_port 是 frp 通信端口,token 则是通信密码;rdp 中前三项不用改,第四项决定着你接下来要用的远程地址后跟端口号是多少。注意 ini 配置文件不能放注释。
然后在 cmd 下面敲入
1 | frpc -c frpc.ini |
如果出现下面界面证明启动成功
此时使用 rdp 客户端访问 ip:5200
即可远程访问该电脑。因为我们域名指向了该 ip,也可以用域名:5200
访问该电脑。当然也可以通过 nginx/caddy 反向代理,无需域名,这里不再赘述。
此时使用域名:6443
(dashboard 默认端口)就应该能够进入到 frp 的管理页面,可以看到 tcp 项里面远程桌面端口在线。
另外,如果发现某些时候重启后 frp.exe 并没有启动,可以到服务界面中将其自启模式改为「自动(延迟)」。
快速运行
新建一个 bat,假设 frp 文件夹放在 E:\network tools\frp
下
1 | @echo off |
双击打开,运行正常。
配置自启
建议配合 winsw 实现自启。根据系统环境下载 net2 或 net4 版本的可执行文件,下载后放入 frp 文件夹中,改名为 winsw.exe。并在相同目录创建一个 winsw.xml,输入以下文字
1 | <service> |
然后 frp 文件夹地址栏敲入 cmd,输入winsw install
,没有错误的话证明配置成功,输入winsw start
立即启动。
另外,有可能还要到 services.msc 处将服务自启类型调为自动(延迟)
,避免因为刚开机网络服务没有启动导致连接失败并无法自动重新启动。
stcp 和 xtcp
参考文章:frp中文文档
虽然一个单词只差。。。但这俩区别很大,前者是将 tcp 进行加密,而后者是 nat 打孔,之后流量不经过 vps 而是服务端和客户端直连。
配置方法倒是差不多。
服务端需要加一个 udp 端口
1 | bind_udp_port = 7001 |
然后客户端,删去 common 内的 protocol = kcp
加入一个节点
1 | [rdp-stcp] |
另外,在另一段,连接过去的机子上也要做一个客户端,因为两边都有客户端了,就不需要 remote_port 了。
1 | # frpc.ini |
此时同样通过 ip:5200 连接。
使用 xtcp 的话,只要把上面的 stcp 改成 xtcp 就行。
不过,sftp 经过我实验没问题,xtcp 尽管我家已经调整为 fullcone nat 但还是连不上,挺见鬼。
nps
参考文章:nps 配置
frp 有个大问题,就是安全性。开了 frp 结果发现电脑日志中一大堆扫描的痕迹,毕竟有了 ip 和端口就可以无限扫描这个开在公网的电脑。。。
虽然有 xftp 这玩意,但 xftp 在手机上其实不太好使用(要用 termux 之类的终端模拟器运行 frpc)。其他的方案,就是使用 nps。
服务端
下载地址,下载后解压修改 conf
文件夹下的 nps.conf
。参考配置
1 | appname = nps |
主要修改 web_username
、web_password
和 web_port
,以及 http_proxy_port
和 https_proxy_port
端口不可以重复。然后直接运行
1 | ./nps |
或者安装后运行
1 | ./nps install |
前者在前台运行,有日志。后者安装时会把刚刚修改好的 nps.conf
考到 /etc/nps.conf
中,到时有要改的修改那个就好。
然后在浏览器中打开 [vps ip]:web_port
,输入上面我说要主要修改的账户和密码。
到客户端处点击加号新增配置
basic 那两项可以不填,但为了安全最好填上,这两项是 socks 的账户和密码(一般 socks 代理我们都是用在本地 v2ray/ss 和浏览器之间的链接,一般都不设密码。现在是和远程服务器链接,所以需要密码保护安全)
验证密钥记清楚。待会客户端要用到。
保存后列表中会显示刚刚我们新增配置的 id,也记住。
切换到 socks 代理,新增一个配置,填入上一句我说要记住的的配置 id,端口任填一个,也记住,待会也是客户端用到。
客户端
在上面的下载地址中下载客户端。解压后修改 conf/npc.conf
,将大部分配置删除(不要注释,注释没用,照样报错),留下下面这些
1 | [common] |
运行 ./npc
启动。如果成功的话会显示如下:
手机这边,用有 socks 代理的工具,比如 v2ray。ip 填 vps ip,端口填服务端时填的端口。账户和密码是服务端的 basic_username
和 basic_password
。连接后,不需要像 frp 一样填 vps 的 ip 和穿透使用的另一个端口,而是用原来在内网连接的 ip 和端口即可。另外,只要在内网任意一台设备中开启一个客户端,内网中的所有设备和服务都可以透穿 —— 比如在虚拟机中开启了客户端,在 rdp 中输入局域网中虚拟机原机子的 ip 照样可以链接(虽然我又感觉有点不太安全了)。
网盘类
cloudreve(选做)
参考文章:
用这玩意的话,aria2 前端面板就不用搭了,另外还附赠一些其他服务器的外挂和中转功能可以用来扩充 vps 本身不大的硬盘(不过我手上的 onedrive 只能拿来中转,其实没什么用,无法下载比 ssd 硬盘最大容量还大的资源),另外其本身也是一个 filemanager,不过嘛。。。只能管理站内内容,站外文件夹摸不到,所以其实没什么用(能管理站外内容的话就可以和上面几个工具联合管理一个文件夹了)。主要是搭建上其实很麻烦。。。
有两种安装方法,一种是靠 composer 进行快速部署,另一种是直接下载压缩包然后释放到网站文件夹里面,官方github给的安装方法是用前者。但我试过 composer 的方法,有些功能会出错(比如 cron 进程守护,还有图片集功能),所以还是建议直接用下载压缩包的方法进行部署。先进
https://cloudreve.org/download.php
,下载安装包后传到 vps 的/root
下,然后解压到站点。先新建一个站点,lnmp 一键包新建的时候注意这个站点的 rewrite 规则需要配置,使用thinkphp,宝塔可以建了再设置。假设我的站点位于
/home/cloudreve
1
unzip xxxx.zip -d /home/Cloudreve/
然后进入站点目录
1
cd /home/Cloudreve/
设置权限(文件夹用户必须是 www 否则打不开,runtime 和 public 不开写入权限就下不了东西),宝塔在站点根目录那里点一下,就可以进到 ui 界面里面调了
1
2chown -R www:www *
chmod -R 755 runtime public之后导入目录里面的 mysql.sql 文件,需要先创建一个数据库,建议先新建一个叫 Cloudreve 的用户来创建数据库
然后导入
1
mysql -u zbttl -p Cloudreve < /home/Cloudreve/mysql.sql
输入密码即可导入成功。如果是宝塔面板,从 ui 界面新建数据库,然后按下管理,将 mysql.php 下到本地再拖到网页中即可自动导入。
编辑
/home/Cloudreve/application/database_sample.php
文件1
nano /home/Cloudreve/application/database_sample.php
更改数据名,用户名和密码。然后更改名字为
database.php
1
mv ./database_sample.php ./database.php
最后访问站点,初始用户名:
admin@cloudreve.org
,初始密码:admin
,后台URl:http://你的域名/Admin
,即可使用。输入你的域名/Cron
,若是显示几行代码,说明自启可配置1
2nano /etc/crontab
#或者是 nano /var/spool/cron/root在最后一行输入
1
* * * * * curl http://你的域名/Cron
如果是宝塔面板,在计划任务处添加任务即可。
另外注意几个坑:
- 进去记得改帐号和密码
- 要离线下载需要先装 aria2 后端,前端 AriaNG 可以不装了。而且默认的目录也是错的,需要你自己去改。另外就算是管理员,一开始也只有 1g 空间也不能够离线下载,需要在后端增大空间,开放离线下载权限。
rclone
参考文章:
- Rclone 安装配置教程 - 连接 OneDrive 和 Google Drive
- Rclone 使用教程 - 挂载 OneDrive、Google Drive 等网盘(Linux)
- Rclone 进阶使用教程 - 常用命令参数详解
详细过程不谈,这三篇文章讲的相对清楚了。
先按第一篇文章的方法在 windows 上获取一长串密钥通过密钥在 linux 上完成链接。
然后第二篇重点讲的是 rclone mount。
第三篇讲的是 rclone 的其他指令,比如 rclone copy,rclone move。
有一些小贴士:
rclone mount 需要事先安装 fuse,往 mount 网盘的文件夹使用 copy、move 等指令其实和 rclone copy、move 的效果(起码速度是)差不多,不过 rclone 类指令可以在后台运行,后台运行时也可以通过
-v
参数获取当前速度和最后所用时间,比单纯的 copy 好用一些但指令也复杂。不过使用 rclone move 要注意,文件是搬过去了,但是搬移的文件夹里面的子文件夹并不会自动删除,需要多带一个参数
--delete-empty-src-dirs
。-v 是显示进度,嫌显示的不够多可以换成 -vv。默认 4 线程,经常断,可能是内存原因,保险一点,单线程,虽然慢,不会断。最后出来的参数类似:1
rclone copy -v /home/zbttl/aria2 zbttltest:pan --transfers=1 --delete-empty-src-dirs
不知道自己网盘里有啥?
1
rclone lsd [网盘名称]:/
不知道自己网盘设置为啥名字了?
1
rclone config
久不用了可能还要重新获取 token,用上面这个命令,选择 edit 响应的网盘,先是提示是否更改 client_id 和 client_secret,选择否(自建 api 的话才需要检查和修改),然后会弹出一次提示,选择「That’s OK」;然后就会提示「Already have a token - refresh?」,重新获取粘贴就好。
尽管挂载了,用 filebrowser 开进去看挂载网盘的文件夹还是空的;下载工具下载地址直接指向挂载文件夹会报错,因为缓存没那么大。还是老老实实下到其他地方再用命令转过去,或者用自动调用 rclone 的下载工具吧。
另外,想加速的话,还能通过Rclone 使用自建 API 连接 OneDrive(Office 365 E5 自动续订)自建 api 加速(虽然我实验了感觉效果不太好,也有可能是我之前用的是共用接口,后来改用私有接口的时候配置没更新好,总之我不太想再折腾了),以及加缓存(
--onedrive-chunk-size
,大部分加 100m 也就是 102400,但吃内存太大容易被杀)和加线程(--transfers
,建议为 4 不稳定)。copy 到 onedrive 的中文文件夹,需要给文件夹打单引号,比如 `zbttl:’下载文件集合’。