MENU

将手机内网穿透当作服务器并运行了几个项目

September 24, 2020 • Read: 13870 • 杂谈

几个月没发新文章了,主要是因为我将大量精力投入了《Edge 使用文档》的维护之中,修改了大概几百次了吧。与此同时我也玩了很多新的项目,积累了很多新的东西,现在可以发出来了。

一、背景介绍展开目录

这篇文章记录了我折腾这些项目的过程及经验,主要是为了方便自己阅读,属于实际应用层面,需要对 Linux 和 termux 有基础了解。所以对大佬来说过于基础,对于小白来说又可能看不懂。
我并非一口气就能折腾这么多东西的,而是发现一个东西捣鼓一段时间后,又发现新的东西,而新的又与旧的有联系,新旧滚雪球似的联系到了一起。
现在来记一笔流水账:

  • 最初的起源是捣鼓租的云服务器搭博客网站;
  • 然后发现了在手机上利用 ksweb 和 SakuraFrp 进行内网穿透搭网站的教程;
  • 接着发现了白嫖 office365 E5 全局管理员账号及利用 github actions 自动执行 python 续期脚本的教程;
  • 又接着尝试了一些自建网盘程序,比如 Oneindex、OneManager、PyOne、cloudreve、可道云…… 等等;
  • 然后又发现了在安卓手机上利用 termux 安装 Linux 及搭建网站的教程;

…………

所以本文的内容庞杂无比,没有接触过相关项目可能一头雾水。
由于 ksweb 经常被杀后台,即使赋予全部权限、忽略电池优化、加入手机管家白名单、允许自启,仍然动不动就挂了,甚至在亮屏状态都能被杀掉,而 termux 在后台运行稳定,我忍无可忍,尽可能的把这些东西往 termux 上搬,目前已经实现了以下项目:

  • 1、Centos 子系统,用来启动每个网站的内网穿透客户端及 cloudreve 客户端;
  • 2、具有 webui 的计划任务机制及进程崩溃后自动重启的进程守护机制;
  • 3、WordPress 博客网站,不过变成了导航站,挂了手机上搭的一些小工具网站,这些小网站放在 WordPress 安装目录因此通过同一个域名就可以进入;
  • 4、可道云网盘,专门用来读取 termux 安装目录下的文件,可视化修改配置很方便;
  • 5、cloudreve 网盘程序,用来挂载 onedrive,稍微鸡肋了点,只能读取经过它上传到 onedrive 的文件,即在它的数据库中有记录的文件,也看中它的 webdav 功能,目前用来同步纯纯写作的文章,数据在本地和 onedrive 都有备份,不太容易丢失;
  • 6、定时执行用来玄学续期 office365 E5 的 python 脚本;
  • 7、OneDrive 文件目录程序 GoneList,加载速度很流畅,然而部署的时候困难重重;
  • 8、用于 office E5 玄学续期的 Telegram 机器人 E5subBot,每五分钟执行一次;
  • 9、将 ssh 映射到公网方便用其他设备远程管理;
  • 10、网盘目录程序 zfile,java 环境部署非常顺利;
  • 11、sharelist 多网盘挂载程序,挂载本地 E5 脚本日志方便随时观察运行状态,nodejs 环境的部署也很顺利;
  • 12、nginx webui,有图形界面的 nginx 配置工具,当然对我来说最大的作用就是自动续签域名证书。(深刻的体现杀鸡用牛刀)
  • 13、Rclone 同步网盘,虽然没法挂载到本地,但可以上传文件。
  • 14、aria2 离线下载功能,对接到 cloudreve 的离线下载功能。

实现的项目

手机是老掉牙的华为畅享 6,买了近 4 年了,屏幕高频率闪烁大概离坏掉不远了。我对于手机刷机是没什么经验的,到目前为止只是解了 BL 锁,在淘宝问了一圈能不能 root 都说搞不了╮( ̄▽ ̄")╭ ,而手机不能 root 意味着 1024 及以下端口全都用不了,不然我还能搞更多的东西出来。其实我也尝试过装宝塔面板来着,都装上了而且内网穿透之后能远程访问了,而 nginx 启动不了各种报错。

二、前提条件展开目录

这是我目前的情况:

  • 一个高速的代理工具,如果没有代理工具而且系统不换源,那么在线安装 Linux 软件寸步难行,安装国外来源的软件必须得开启代理,当然可以配置 PAC 模式自动代理;
  • SakuraFrp 上注册并实名认证,创建相应的网站隧道。这是目前最实惠的内网穿透服务平台,在用户信息菜单中获取自己的访问秘钥,任何情况下都不能泄露访问秘钥,通过签到获得服务器流量,没有备案的域名只能使用国外节点服务器,速度难顶;
  • 一个域名,并非必须备案,但备案后可以很方便的使用各种云服务,将域名解析到 SakuraFrp 中创建的隧道域名或 ip 上;
  • mix 文件管理器,获取文件路径、编辑配置文件很方便,在文件属性中点击文件路径一键复制文件路径,用代码编辑器编辑文件方便缩进,还可以挂载 onedrive、webdav 等,很多特性足以写一篇很长的说明文章;
  • termux 下载地址:F-Droid。以及了解 termux 的基本操作:Termux 高级终端安装使用配置教程

三、termux 文件体系展开目录

如果在 termux 里面安装了 linux 子系统,那么 termux 文件体系包含三个方面:termux本身文件体系手机储存文件体系linux子系统文件体系
termux本身文件体系也就是 termux 安装目录。按照数学集合关系解释的话,termux本身文件体系手机储存文件体系互相独立,linux子系统文件体系termux本身文件体系的子集。
termux 可以很顺利的读取这三个文件系统,但在手机储存文件体系中执行任务受限,如解压。
linux 子系统无法或者不方便读取 termux本身文件体系中除自己的的文件、手机储存文件体系。就像虚拟机中的系统读取真机的文件,很麻烦。
所以在 termux 中直接安装软件的配置文件放在手机储存中方便处理一些,而在 linux 子系统中安装软件的配置文件最好就放在 linux 子系统 home 目录中。
以 Centos 为例,启动 termux 后新建 centos 文件夹并在这个文件夹中安装 centos,那么在可道云中,从 termux 读取到 Centos 子系统 root 目录的路径就是:

copy
  • /home/centos/centos-fs/root

即启动 termux 后所在的路径为 termux 的 home 文件夹,在 termux 中启动 Centos 后的路径就是 Centos 的 root 文件夹。

赋予 termux 读取手机储存权限:手动在手机应用管理界面开启,或执行以下命令后允许提示:

copy
  • termux-setup-storage

直接 cd 在文件管理器中复制的路径就可以读取手机储存种的文件。
首次打开 termux 后的界面、或直接执行 cd 命令,使用 pwd 命令查看当前目录结构:

copy
  • /data/data/com.termux/files/home

对于整个安卓环境而言,/data/data/com.termux 为 termux 安装路径,
对于 termux 而言,/home 为其根目录,首次打开 termux 并创建的文件存放于此处,相当于 Linux 的 /root/ 文件夹。
执行 cd $PREFIX,使用 pwd 命令查看当前目录结构:

copy
  • /data/data/com.termux/files/usr

即为 termux 的 /usr 目录,相当于 Linux 的 /usr/ 目录。
执行 ls 命令显示当前目录存在的文件及文件夹,执行 ls -lh 显示文件及文件夹的详细信息。

四、配置网站环境展开目录

1、换源展开目录

非必要步骤,将软件源换为国内能提高软件安装速度,但可能存在兼容性问题。执行以下命令换为清华源:

copy
  • sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
  • sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
  • sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
  • pkg update

若换源后出现软件安装报错等情况,那么就是软件或者手机存在兼容性问题,清空软件数据后老老实实的的从内置源安装软件。我的华为畅享 6 就是这种情况,系统为安卓 6,无法安装最新版的 termux 所以从酷安下载的旧版本,而我的另一台 realmeX 换源后可正常安装软件,系统为安卓 10,安装的最新版 termux。

2、安装三件套展开目录

安装 LNMP 三件套及常用组件,执行 pkg install 命令安装:

copy
  • pkg install nginx -y &&
  • pkg install mariadb -y &&
  • pkg install php -y &&
  • pkg install php-fpm -y &&
  • pkg install vim -y &&
  • pkg install openssh -y

3、配置 nginx展开目录

进入 nginx 配置文件存放目录:

copy
  • cd $PREFIX/etc/nginx/

备份 nginx 配置文件,复制并重命名:

copy
  • cp nginx.conf bnginx.conf

为了方便编辑将整个配置转移到手机储存且可道云可以读取的目录,用 txt 文件作为配置文件而不再使用 conf 文件,这样使用可道云或文件管理器都可以编辑。
在 mix 文件管理器中创建相应文件夹及 nginx.txt 文件后,根据备份的 bnginx.conf 填写配置:

nginx 配置文件

copy
  • worker_processes 1;
  • events {
  • worker_connections 100000;
  • }
  • ######http段开始######
  • http {
  • include mime.types;
  • default_type application/octet-stream;
  • sendfile on;
  • keepalive_timeout 65;
  • ######可道云开始######
  • server {
  • listen 8079;
  • server_name kod.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 8080 ssl;
  • server_name kod.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • location / {
  • root /storage/3461-3833/htdocs/kod;
  • index index.html index.htm index.php;
  • ######可道云伪静态
  • if (!-e $request_filename){
  • rewrite ^(.*)$ /index.php?s=$1 last; break;
  • }
  • }
  • location ~ \.php$ {
  • root html;
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_index index.php;
  • fastcgi_param SCRIPT_FILENAME /storage/3461-3833/htdocs/kod$fastcgi_script_name;
  • include fastcgi_params;
  • }
  • }
  • ######可道云结束######
  • ######博客网站开始######
  • server {
  • listen 8089;
  • server_name sj.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 8090 ssl;
  • server_name sj.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • ######原链接重定向
  • rewrite /archives/sitelist https://sj.chirmyram.top/$1 permanent;
  • location / {
  • root /storage/3461-3833/htdocs/sjweb;
  • index index.html index.htm index.php;
  • ######WordPress伪静态
  • try_files $uri $uri/ /index.php?$args;
  • }
  • ######WordPress后台伪静态
  • rewrite /wp-admin$ $scheme://$host$uri/ permanent;
  • location ~ \.php$ {
  • root html;
  • fastcgi_pass 127.0.0.1:9000;
  • fastcgi_index index.php;
  • fastcgi_param SCRIPT_FILENAME /storage/3461-3833/htdocs/sjweb$fastcgi_script_name;
  • include fastcgi_params;
  • }
  • }
  • ######博客网站结束######
  • ######cloudreve网盘开始######
  • server {
  • listen 4999;
  • server_name cd.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 5000 ssl;
  • server_name cd.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:5001;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######cloudreve网盘结束######
  • ######守护进程开始######
  • server {
  • listen 3999;
  • server_name su.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 4000 ssl;
  • server_name su.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:4001;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######进程守护结束######
  • ######gl网盘开始######
  • server {
  • listen 1999;
  • server_name gl.chirmyram.top localhost;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 2001 ssl;
  • server_name gl.chirmyram.top localhost;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:2000;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######gl网盘结束######
  • ######zfile网盘开始######
  • server {
  • listen 2999;
  • server_name zf.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 3001 ssl;
  • server_name zf.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:3000;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######zfile网盘结束######
  • ######jtimer开始######
  • server {
  • listen 5999;
  • server_name jt.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 6001 ssl;
  • server_name jt.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:6000;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######jtimer结束######
  • ######sharelist开始######
  • server {
  • listen 6999;
  • server_name sl.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 7000 ssl;
  • server_name sl.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:33001;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######sharelist结束######
  • ######ngwebui开始######
  • server {
  • listen 7999;
  • server_name ng.chirmyram.top;
  • rewrite ^(.*) https://$server_name$1 permanent;
  • }
  • server {
  • listen 8001 ssl;
  • server_name ng.chirmyram.top;
  • ssl_certificate /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.fullchain.cer;
  • ssl_certificate_key /data/data/com.termux/files/home/centos/centos-fs/home/ng/ngcert/chirmyram.top.key;
  • ssl_session_cache
  • shared:SSL:1m;
  • ssl_session_timeout 5m;
  • ssl_ciphers HIGH:!aNULL:!MD5;
  • ssl_prefer_server_ciphers on;
  • access_log off;
  • location / {
  • proxy_pass http://127.0.0.1:8000;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • }
  • }
  • ######ngwebui结束######
  • }
  • ######http段结束######

配置文件主要包含三部分,http、server、location,依次向下包含,注意花括号 {} 的配对数量一定要对。
查看 nginx.txt 的属性并复制其路径,回到 termux 中,由于 vim 编辑器不方便全选删除,为方便编辑所以利用 rm 命令删除原 nginx 配置文件,利用 touch 命令新建一个,再利用 vim 编辑:

copy
  • rm nginx.conf
  • touch nginx.conf
  • vim nginx.conf

调出输入法键盘按 i 进入编辑模式,利用 include 读取手机储存配置文件,输入 include 和空格后粘贴刚刚复制的 nginx.txt 路径,注意最后输入英文分号结尾:

copy
  • include /storage/3461-3833/htdocs/kod/files/nginx.txt;

ESC 退出编辑模式,执行:wq 保存更改内容并退出。
重载 nginx 配置:

copy
  • nginx -s reload

4、配置 mariadb展开目录

登录 mariadb:

copy
  • mysql -u $(whoami)

修改 root 用户的密码:

copy
  • use mysql;
  • set password for 'root'@'localhost' = password('你的密码');

刷新权限并退出:

copy
  • flush privileges;
  • quit;

5、配置 nginx 解析 php展开目录

进入 php-fpm 配置目录修改配置文件:

copy
  • cd $PREFIX/etc/php-fpm.d
  • vim www.conf

在第 36 行,不同版本可能不同,将 listen 后面的路径改为本地 9000 端口:

copy
  • listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock
  • to:
  • listen = 127.0.0.1:9000

6、启动三件套展开目录

执行以下命令:

copy
  • nginx
  • php-fpm
  • nohup mysqld >/dev/null 2>&1 &

至此搭建网站的环境配置完毕。

五、配置 Linux展开目录

termux 虽然能模拟 Linux 终端,却并不兼容所有 Linux 软件,所以想要以更好的兼容性运行 Linux 软件还是得安装 Linux 子系统,但由于手机性能原因,安装的 Linux 依然是精简的。刚安装 linux 子系统后软件源中的软件可能很少,update 和 upgrade 之后就会有丰富的软件源。
避免文件散乱难以整理,使用 mkdir 命令新建一个名为 centos 的文件夹:

copy
  • mkdir centos

1、安装 Centos展开目录

选择 AnLinux 这款软件提供的脚本安装,因为启动很简单。
AnLinux 软件下载:F-Droid. 选择系统后复制脚本命令到 termux 执行:

copy
  • pkg install wget openssl-tool proot tar -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/CentOS/centos.sh && bash centos.sh

使用./ 命令执行启动脚本,启动 Centos:

copy
  • ./start-centos.sh

Centos 默认时区的时间比北京时间晚 8 小时,试了很多方法改时区但重启后都会失效,不得已只能在启动命令后再加上更改时区的命令:

copy
  • export TZ='Asia/Shanghai'

安装自己所需组件:

copy
  • yum -y install sudo wget vim python3 cronie
  • pip3 install requests

精简的 Centos 连 sudo 命令都没有,这个命令很常用当然得安上,wget 用于下载文件,vim 用于编辑文档,python 用于执行脚本,cronie 最初用于执行定时任务,后面发现了更方便的具有图形化界面的 JTimer 就替换掉它了,不过还是留着方便编写整个计划任务。我想要执行的 python 脚本还需要 requests 库,再安装 requests。
由于 linux 版的 frp 客户端老是自己掉线,掉线了还得手动启动,就很麻烦,被这玩意儿折磨惨了,于是想着加个进程守护让它崩溃后自动重启,而且可以一次性启动多个客户端,不用在 termux 里面开多个会话窗口单独启动各个任务,大幅降低内存占用。稍微瞄了一眼 supervisor 手动配置,看起来好麻烦的样子,想装宝塔面板再装 supervisor,我太依赖图形界面了,但因兼容问题宝塔安装出错,而且过于小题大做了,最后实在没办法了还是硬着头皮还是手动配置 supervisor, 果然强烈的需求才是进步的动力∠(ᐛ 」∠)_。
yum list 命令可以看到精简版 Centos 默认仓库源没有 supervisor,用 yum update 又嫌浪费时间,简便解决办法为安装 epel 仓库:

copy
  • yum install epel-release -y
  • yum install supervisor

为方便管理将所有客户端及配置文件放到 home 目录,在 home 目录建立 super 文件夹并生成配置文件:

copy
  • mkdir /home/super
  • echo_supervisord_conf > /home/super/supervisord.conf

直接运行 echo_supervisord_conf 会在 /etc 目录中生成配置文件。
编辑配置文件一度让我头大,运行的客户端命令不是./ 而是文件路径,蒙了好久,看了有关 cloudereve 设置宝塔进程守护的教程才明白该怎么设置。zfile 和 JTimer 为脚本启动,一次启动就好,重试次数设置多了就会一直尝试启动,完全没必要。
编辑好的配置文件:

supervisor 配置文件

copy
  • [inet_http_server]
  • port=0.0.0.0:4001 ;默认配置只能本地访问,配置成0.0.0.0可以通过外部查看监控界面
  • username=你的名字
  • password=你的密码
  • [supervisord]
  • logfile=/home/super/supervisord.log ; (main log file;default $CWD/supervisord.log)
  • logfile_maxbytes=10KB ; (max main logfile bytes b4 rotation;default 50MB)
  • logfile_backups=10 ; (num of main logfile rotation backups;default 10)
  • loglevel=info ; (log level;default info; others: debug,warn,trace)
  • pidfile=/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
  • nodaemon=false ; (start in foreground if true;default false)
  • minfds=1024 ; (min. avail startup file descriptors;default 1024)
  • minprocs=200 ; (min. avail process descriptors;default 200)
  • [rpcinterface:supervisor]
  • supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  • [supervisorctl]
  • serverurl=unix:///run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
  • serverurl=http://127.0.0.1:4001
  • username=你的名字 ; should be same as http_username if set
  • password=你的密码 ; should be same as http_password if set
  • [program:sjweb] ;进程名
  • command = /home/sjweb/frpc ;运行的命令
  • directory = /home/sjweb/ ;运行命令所在的文件夹
  • stdout_logfile = /home/sjweb/frpc.log ;日志打印文件位置
  • autostart = true ;是否设置启动后自动启进程
  • startsecs = 5 ;设置启动后几秒开始启进程
  • autorestart = true ;是否自动重启
  • startretries = 9999999 ;重启次数
  • stdout_logfile_maxbytes = 10KB ;日志最大容量,达到后新建一个日志文件
  • [program:kod]
  • command = /home/kod/frpc
  • directory = /home/kod/
  • stdout_logfile = /home/kod/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:cd]
  • command = /home/cd/frp/frpc
  • directory = /home/cd/frp/
  • stdout_logfile = /home/cd/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:cloudreve]
  • command = /home/cd/cd/cloudreve
  • directory = /home/cd/cd/
  • stdout_logfile = /home/cd/cd/cloudereve.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:super]
  • command = /home/super/frpc
  • directory = /home/super/
  • stdout_logfile = /home/super/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:gl]
  • command = /home/gl/frp/frpc
  • directory = /home/gl/frp/
  • stdout_logfile = /home/gl/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:gonelist]
  • command = /home/gl/gl/gl
  • directory = /home/gl/gl/
  • stdout_logfile = /home/gl/gl/gonelist.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:bot]
  • command = /home/bot/E5SubBot
  • directory = /home/bot/
  • stdout_logfile = /home/bot/bot.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:ssh]
  • command = /home/ssh/frpc
  • directory = /home/ssh/
  • stdout_logfile = /home/ssh/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:zf]
  • command = /home/zf/frp/frpc
  • directory = /home/zf/frp/
  • stdout_logfile = /home/zf/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:zfile]
  • command = /home/zf/zf/bin/start.sh
  • directory = /home/zf/zf/bin/
  • stdout_logfile = /home/zf/zf/bin/zfile.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 1
  • stdout_logfile_maxbytes = 10KB
  • [program:jt]
  • command = /home/jt/frp/frpc
  • directory = /home/jt/frp/
  • stdout_logfile = /home/jt/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:jtimer]
  • command = /home/jt/jt/start.sh
  • directory = /home/jt/jt/
  • stdout_logfile = /home/jt/jt/jt.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:sl]
  • command = /home/sl/frp/frpc
  • directory = /home/sl/frp/
  • stdout_logfile = /home/sl/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:sharelist]
  • command = /home/sl/sl/app.js
  • directory = /home/sl/sl/
  • stdout_logfile = /home/sl/sl/app.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:ng]
  • command = /home/ng/frp/frpc
  • directory = /home/ng/frp/
  • stdout_logfile = /home/ng/frp/frpc.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:ngwebui]
  • command = /home/ng/ng/start.sh
  • directory = /home/ng/ng/
  • stdout_logfile = /home/ng/ng/ng.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB
  • [program:aria2]
  • command = /bin/aria2c
  • directory = /bin/
  • stdout_logfile = /bin/aria2.log
  • autostart = true
  • startsecs = 5
  • autorestart = true
  • startretries = 9999999
  • stdout_logfile_maxbytes = 10KB

启动 supervisor:

copy
  • supervisord -c /home/super/supervisord.conf

supervisor 有 web 管理界面,默认端口为 9001,设置登入账户及密码,配置 nginx 反向代理就可以用个域名实现网页端图形可视化管理。
supervisor

2、内网穿透展开目录

为方便以后远程操作首先映射 ssh, 使用 pkg install openssh 安装 ssh 后,用 whoami 查看用户名,使用 passwd 设置密码,使用 sshd 启动 ssh,默认端口为 8022。在 SakuraFrp 上建立 TCP 隧道进行穿透。

对于 centos 子系统,为避免文件混乱,依然用 mkdir 为每个网站的 frp 客户端新建一个文件夹,下载 SakuraFrp 的客户端并赋予执行权限,为方便启动将客户端重命名为 frpc,最后启动。下好第一个赋予执行权限后复制到其他文件夹不再需要赋予执行权限。

copy
  • mkdir /home/sjweb
  • cd /home/sjweb
  • wget https://qianqu.me/frp/frpc_linux_arm64 && chmod -R 777 frpc_linux_arm64
  • mv frpc_linux_arm64 frpc
  • ./frpc

启动客户端后显示 UI 界面,点击 Token 后面的输入框,粘贴从 SakuraFrp 用户信息里面获取的访问秘钥,点击 Login 即可显示已经创建的隧道,点击单个隧道选中后字体变为绿色,按 Ctrl+C 启动隧道。如果同一个节点地区有多条隧道,点击地区名可同时选中多条隧道并同时启动。
SakuraFrp 客户端启动后,会自动在当前目录生成名为客户端名.ini 的配置文件,二次启动客户端时会直接读取配置文件启动。若需更换隧道,按 Ctrl+C 终止当前客户端,编辑配置文件重新启动,当然来的更快的就是直接删掉配置文件重新登录客户端。
由于网络环境不稳定等原因,二次启动客户端时可能失败,可多次尝试。

3、计划任务展开目录

按照原项目 AutoApi 的习惯,在 Centos 根目录下创建了一个名为 1 的文件夹,进入 1 文件夹,创建 1.txt 文件将获取的 refresh _token 填进去。
修改 python 脚本 1.py 第 12 行和第 14 行填入自己的应用 ID 和秘钥:

python 脚本

copy
  • # -*- coding: UTF-8 -*-
  • import requests as req
  • import json,sys,time
  • #先注册azure应用,确保应用有以下权限:
  • #files: Files.Read.All、Files.ReadWrite.All、Sites.Read.All、Sites.ReadWrite.All
  • #user: User.Read.All、User.ReadWrite.All、Directory.Read.All、Directory.ReadWrite.All
  • #mail: Mail.Read、Mail.ReadWrite、MailboxSettings.Read、MailboxSettings.ReadWrite
  • #注册后一定要再点代表xxx授予管理员同意,否则outlook api无法调用
  • ###################################################################
  • #把下方单引号内的内容改为你的应用id #
  • id=r'你的id'
  • #把下方单引号内的内容改为你的应用机密 #
  • secret=r'你的机密'
  • ###################################################################
  • path=sys.path[0]+r'/1.txt'
  • num1 = 0
  • def gettoken(refresh_token):
  • headers={'Content-Type':'application/x-www-form-urlencoded'
  • }
  • data={'grant_type': 'refresh_token',
  • 'refresh_token': refresh_token,
  • 'client_id':id,
  • 'client_secret':secret,
  • 'redirect_uri':'http://localhost:53682/'
  • }
  • html = req.post('https://login.microsoftonline.com/common/oauth2/v2.0/token',data=data,headers=headers)
  • jsontxt = json.loads(html.text)
  • refresh_token = jsontxt['refresh_token']
  • access_token = jsontxt['access_token']
  • with open(path, 'w+') as f:
  • f.write(refresh_token)
  • return access_token
  • def main():
  • fo = open(path, "r+")
  • refresh_token = fo.read()
  • fo.close()
  • global num1
  • access_token=gettoken(refresh_token)
  • headers={
  • 'Authorization':access_token,
  • 'Content-Type':'application/json'
  • }
  • try:
  • if req.get(r'https://graph.microsoft.com/v1.0/me/drive/root',headers=headers).status_code == 200:
  • num1+=1
  • print("<br/>1调用成功"+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/drive',headers=headers).status_code == 200:
  • num1+=1
  • print("<br/>2调用成功"+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/drive/root',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>3调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/users ',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>4调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/messages',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>5调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>6调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>7调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/drive/root/children',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>8调用成功'+str(num1)+'次')
  • if req.get(r'https://api.powerbi.com/v1.0/myorg/apps',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>8调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/mailFolders',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>9调用成功'+str(num1)+'次')
  • if req.get(r'https://graph.microsoft.com/v1.0/me/outlook/masterCategories',headers=headers).status_code == 200:
  • num1+=1
  • print('<br/>10调用成功'+str(num1)+'次')
  • print('<br/>结束时间为 : '+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  • except:
  • print("<br/>pass")
  • pass
  • for _ in range(3):
  • main()

由于原脚本中调用的库在 python3 中已改名,而且在现在的环境中执行不能输出执行时间,我稍微改了后面的时间输出,另外我用 sharelist 挂载本地文件为了保留格式方便预览,就使用 md 文件,输出日志加了换行符。

找了很久找到一款有图形界面的计划任务工具:JTimer。我用的 Java 版本,整体下载之后配置文件中的数据库地址改为 127.0.0.1,含 pom.xml 的目录打包为 jar:

copy
  • yum install maven
  • mvn clean package -Dmaven.test.skip=true

创建 start.sh 脚本并赋予执行权限:

copy
  • #!/bin/sh
  • java -jar jt.jar

最后写入进程守护就可以了。

记录一下之前设置计划任务的方式:
新建一个名为 1.cron 的文件(当然 cron 这个格式是我自定义的)填入定时任务配置:

crontab 定时任务

copy
  • 0 */5 * * * * python3 /home/1/1.py >> /home/sl/sl/E5log/1.md 2>&1
  • 0 0 */1 * * * pkill python3
  • 0 0 */1 * * * sudo rm /home/sl/sl/E5log/1.md
  • 0 0 */1 * * * sudo rm /home/super/frpc.log /home/super/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/super/supervisord.log /home/super/supervisord.log.*
  • 0 0 */1 * * * sudo rm /home/sjweb/frpc.log /home/sjweb/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/kod/frpc.log /home/kod/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/cd/frp/frpc.log /home/cd/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/cd/cd/cloudereve.log /home/cd/cd/cloudereve.log.*
  • 0 0 */1 * * * sudo rm /home/gl/frp/frpc.log /home/gl/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/gl/gl/gonelist.log /home/gl/gl/gonelist.log.*
  • 0 0 */1 * * * sudo rm /home/bot/bot.log /home/bot/bot.log.*
  • 0 0 */1 * * * sudo rm -r /home/bot/log
  • 0 0 */1 * * * sudo rm /home/ssh/frpc.log /home/ssh/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/zf/frp/frpc.log /home/zf/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/zf/zf/bin/zfile.log /home/zf/zf/bin/zfile.log.*
  • 0 0 */1 * * * sudo rm /home/jt/frp/frpc.log /home/jt/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/jt/jt/jt.log /home/jt/jt/jt.log.*
  • 0 0 */1 * * * sudo rm /home/sl/frp/frpc.log /home/sl/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/sl/sl/app.log /home/sl/sl/app.log.*
  • 0 0 */1 * * * sudo rm /home/ng/frp/frpc.log /home/ng/frp/frpc.log.*
  • 0 0 */1 * * * sudo rm /home/ng/ng/ng.log /home/ng/ng/ng.log.*
  • 0 0 */1 * * * sudo rm /home/ng/nglog/nginxWebUI.log
  • 0 0 */1 * * * sudo rm /bin/aria2.log /bin/aria2.log.*
  • 0 30 1 * * 1 rclone delete cd:/ssl/ && rclone copy /home/ng/ngcert cd:/ssl

第一行任务为每五分钟执行一次 python 脚本并将日志输出到同目录的 1.log 文件中;
第二行为每小时杀一次 python 的所有进程,因为通过长期观察发现 python 执行脚本后进程仍然存在,然后进程一直累加,两三天之内就耗光了手机运存,最后软件被杀后台导致服务器宕机,造成每隔几天都要重启一次服务器,所以加了这条命令;
接下来的的是每小时清理一次其他进程的日志,不然日志越来越多很麻烦,为了顺眼就把清理同一目录日志文件的命令放到同一行来写,通过观察日志写入情况来监控运行状态。虽然启动 Centos 的同时也改了时区,但 python 日志中记录的时间仍然晚 8 小时,目前还没找到有效解决办法。
最后一行为每周星期一 1 点 30 分通过 rclone 备份 ssl 证书至 Onedrive。
将 1.cron 设为 cronie 定时任务:

copy
  • crontab /home/1/1.cron

cronie 有以下常用命令:

copy
  • crontab -l #查看当前已有定时任务
  • crontab -r #删除已有定时任务

回到 Centos 根目录,启动计划任务:

copy
  • crond start

4、综合启动展开目录

先启动安卓代理软件,不然 tg 机器人无法连接到 tg 服务器导致启动失败。我将以下命令存放于 QQ 输入法云剪贴板中,每次需要启动时只需要粘贴进去执行就行,算是比较方便。

copy
  • nohup sshd >/dev/null 2>&1 &
  • nohup nginx >/dev/null 2>&1 &
  • nohup mysqld >/dev/null 2>&1 &
  • nohup php-fpm >/dev/null 2>&1 &
  • ./centos/start-centos.sh
  • cd /
  • export TZ='Asia/Shanghai'
  • supervisord -c /home/super/supervisord.conf ;
  • ls

先启动 ssh,再以不输出日志文件的方式启动启动 LNMP 三件套,接着启动 Centos,进入根目录启动计划任务及进程守护。启动进程守护即可同时自动启动所有配置好的客户端。启动 cloudreve 之前必须启动三件套,因为 cloudreve 启动时需要读取数据库,而 mariadb 未启动会造成数据库读取失败。最后的 ls 命令纯粹凑数的,是为了整体能流畅的执行下去,因外 QQ 输入法剪贴板不能保存空行。

六、运行项目展开目录

由于这些网站的搭建教程烂大街了,这也不是本篇文章的重点,就只是介绍一些自己遇到的关键点。我本来也想搭一个 Typecho,但目前的正式版在安装时配置数据库存在问题,而测试版又有伪静态问题,反正存在各种问题就放弃转而安装 WordPress。

1、自动跳转 https展开目录

首先要实现的就是 http 自动跳转 https,不然只能通过的带 https 前缀的链接进去网站可太难受了。当然本来搭的网站就是 http 的,那就不用进一步折腾了。
我的解决办法是在 SakuraFrp 上为每个网站创建 http 和 https 两个隧道(注意部分隧道不支持创建 http 隧道),然后配置 nginx 的自动跳转,即本地每个网站俩端口,以解决 80 和 443 用不了的问题,这些在上文中的 nginx 配置文件中都明显的体现出来。

2、phpmyadmin展开目录

以下简称 pma。对于菜鸟来说,有图形界面的数据库管理工具方便的不得了,你可以把 pma 当做一个可以直接读取数据库的网站程序。
pma 官网下载最新版并解压到一个文件夹,可以把它单独当一个网站,为它创建内网穿透隧道、配置单独的域名,专门弄个网站来管理数据库,也可以直接扔到其他网站子目录中,当做这个网站的子站点,省事省心。
pma 在某些时候用 Chromium 系的浏览器上可能登录失败,在 IE 上可完美登陆。

3、伪静态展开目录

  • WordPress 的伪静态为:
copy
  • location / {
  • try_files $uri $uri/ /index.php?args;
  • }
  • rewrite /wp-admin$ $scheme://$host$uri/ permanent;
  • 可道云伪静态:
copy
  • if (!-e $request_filename){
  • rewrite ^(.*)$ /index.php?s=$1 last; break;
  • }

可道云不开启伪静态无法安装 webdav 插件。

  • cloudreve

下载 cloudereve 解压,赋予执行权限并启动:

copy
  • wget https://github.com/cloudreve/Cloudreve/releases/download/3.1.1/cloudreve_3.1.1_linux_arm64.tar.gz
  • tar -zxvf cloudreve_3.1.1_linux_arm64.tar.gz
  • chmod -R 777 cloudreve
  • ./cloudreve

首次启动时,Cloudreve 会在同级目录下创建名为 conf.ini 的配置文件,修改此文件进行一些参数的配置,保存后重启 Cloudreve 生效。配置 nginx 反向代理实现 https。

Cloudreve 配置文件

copy
  • [System]
  • ; 运行模式
  • Mode = master
  • ; 监听端口
  • Listen = :5212
  • ; 是否开启 Debug
  • Debug = false
  • ; Session 密钥, 一般在首次启动时自动生成
  • SessionSecret = IBSUfS8kCKLSeS0i93bbhmxav1OUbw5LQXMQ8oOXJFQ9WCU8PqBmTjY07crdvGkl
  • ; Hash 加盐, 一般在首次启动时自动生成
  • HashIDSalt = SeLBTR3CpkvRw8GpFF90uUmJNtf8G8Ps9V8bDYgyCuC1gCgS2KGANkuA4ZQf3A5f
  • ; 数据库相关,如果你只想使用内置的 SQLite数据库,这一部分直接删去即可
  • [Database]
  • ; 数据库类型,目前支持 sqlite | mysql
  • Type = mysql
  • ; MySQL 端口
  • Port = 3306
  • ; 用户名
  • User = root
  • ; 密码
  • Password = 你的密码
  • ; 数据库地址
  • Host = 127.0.0.1
  • ; 数据库名称
  • Name = cd
  • ; 数据表前缀
  • TablePrefix = cd-
  • ; 从机模式下的配置
  • [Slave]
  • ; 通信密钥
  • Secret = 1234567891234567123456789123456712345678912345671234567891234567
  • ; 回调请求超时时间 (s)
  • CallbackTimeout = 20
  • ; 签名有效期
  • SignatureTTL = 60
  • ; 跨域配置
  • [CORS]
  • AllowOrigins = *
  • AllowMethods = OPTIONS,GET,POST
  • AllowHeaders = *
  • AllowCredentials = false
  • ; 从机模式缩略图
  • [Thumbnail]
  • MaxWidth = 400
  • MaxHeight = 300
  • FileSuffix = ._thumb

可道云和cloudreve

4、GoneList展开目录

类似于 OneIndex 的一款 OneDrive 目录程序,由 Go 语言编写而成响应速度极快,美中不足的是拉取 OneDrive 文件较慢且文件一旦过多就容易失败,解决办法是先建一个空的公开子文件夹,搭建成功后再将文件移进去。
配置文件 config.json

copy
  • {
  • "client_id": "你的id",
  • "client_secret": "你的机密",
  • "redirect_url": "http://localhost:2000/auth",
  • "state": "GoneList",
  • "token_path": "",
  • "download_redirect_prefix": "",
  • "server": {
  • "port": 2000,
  • "refresh_time": 1,
  • "bind_global": true,
  • "dist_path": "./dist/",
  • "site_url": "http://localhost:2000/auth",
  • "folder_sub": "/public"
  • }
  • }

5、E5subBot展开目录

用于调用 Office365 的 api 实现玄学续期的 Telegram 机器人,由 Go 语言编写而成可直接执行。其最大问题就是国内无法直连 tg 的服务器,我尝试了很久 linux 无图形界面挂代理都失败了。比较简便的方法就是在手机上挂一个安卓代理软件,成功实现让 bot 动起来。项目本身也支持 socks5 代理,如果能找到比较稳定的 socks5 代理也可以加进配置文件:socks5: ip:端口
或者自己用 brook 在国外 vps 上搭一个 socks5 代理,这看起来属实多余,直接搭在 vps 上不好吗,搭建很简单,直接下载 brook 单程序、赋权、按照指定的端口不输出日志启动即可:

copy
  • mkdir socks
  • cd socks
  • wget https://github.com/txthinking/brook/releases/download/v20210401/brook_linux_amd64
  • mv brook_linux_amd64 brook
  • chmod -R 777 brook
  • nohup /root/socks/brook socks5 --socks5 0.0.0.0:端口 >/dev/null 2>&1 &

不带 socks5 代理的配置文件 config.yml

copy
  • bot_token: 机器人token
  • admin: 管理员tgid
  • errlimit: 99999999999999999999
  • cron: "*/5 * * * *"
  • bindmax: 3
  • mysql:
  • host: 127.0.0.1
  • port: 3306
  • user: 数据库用户名
  • password: 数据库密码
  • database: 数据库名

每五分钟执行一次,错误上限次数设置到超级大,即使任务执行出错,在有生之年都不会出现自动解绑的情况。

6、zfile展开目录

我觉得应该算是目前体验最好的 OneDrive 目录程序,而且难得支持挂载 SharePoint 文件,只不过 java 环境部署起来略微麻烦,好在过程顺利。
安装官方配置文件进行部署:

copy
  • yum install -y java-1.8.0-openjdk unzip
  • cd ~
  • wget https://c.jun6.net/ZFILE/zfile-release.war
  • mkdir zfile && unzip zfile-release.war -d zfile && rm -rf zfile-release.war
  • chmod +x zfile/bin/*.sh

将启动脚本 start.sh 写入进程守护配置文件即可一并启动。

7、sharelist展开目录

此网盘程序集国内几大网盘于一身,能同时挂载多种网盘,另外特别的地方就在于它是需要 nodejs 环境运行的,虽然安装脚本会自动安装 js,但为了节约时间就先自己安装 js 和其它组件:

copy
  • yum install nodejs git -y

然后下载源码并赋予执行权限:

copy
  • git clone https://github.com/reruin/sharelist.git
  • cd sharelist
  • chmod -R 777 app.js

我这里有点不同的就是不用安装官方文档说明的方式进行启动,安装 nodejs 后就可以直接运行 app.js,如果报错就执行 npm install 补全所需模块。不用使用 nodejs 的 pm2 进程守护方式启动,因为可以直接执行所以就将将 app.js 写入 supervisor 配置文件实现一并启动。

8、nginx webui展开目录

这里深刻的体现出我杀鸡用牛刀,我部署 nginx webui 不是为了方便配置 nginx 而是为了其中一项自动续签泛域名证书的功能,原 acme 续签脚本用起来有些复杂,现在有 webui 了直接填进去就行~
当然也跟我的系统环境有关,我的 nginx 起初就装在 termux 里面而非 linux 子系统 centos,相当于在宿主机外环境中,内环境没法干预到外环境,nginx 迁移到内环境又有点麻烦,就变成这样了。
下载 jar 包,为方便后续配置再重命名为短名:

copy
  • wget http://file.nginxwebui.cn/nginxWebUI-2.4.7.jar
  • mv nginxWebUI-2.4.7.jar ng.jar

选择 mysql (mariadb) 数据库,编写启动脚本 start.sh

copy
  • #!/bin/sh
  • java -jar ng.jar -Xmx64m --server.port=8000 --project.home=/home/ng/ng --spring.database.type=mysql --spring.datasource.url=jdbc:mysql://127.0.0.1:3306/数据库名 --spring.datasource.username=数据库用户名 --spring.datasource.password=数据库密码

jar 包启动过程略慢,需要一两分钟的启动时间,此时访问链接会报错。初次启动会强制安装 nginx,由于我不需要 nginx 了,所以随便点了安装后立即终止进程,再次启动就不会安装了。最为关键的一点是,生成的域名证书在 termux 的 home 目录中,在 nginx 中配置文件中填写证书目录要从 termux 的根目录开始:

copy
  • /data/data/com.termux/files/home/centos/centos-fs...

否则会从 termux 的 usr 开始读取证书导致读取不到证书文件报错,即 /data/data/com.termux/files/usr/...
最后 nginx -s reload 重载配置无报错的话,就大功告成了。

9、Rclone展开目录

Rclone 可在不同网盘中转移文件,但由于 termux 的特殊性,无法将网盘挂载到本地文件。在无图形界面的 linux 系统环境中,它让我方便上传文件到 OneDrive 的行为变得可能,所以我用它来备份 nginx webui 生成的 ssl 证书。
centos 自带的软件源安装 rclone 有些问题,如上文所述安装 epel 仓库后即可安装成功:

copy
  • yum install epel-release -y
  • yum install rclone -y

配置文件路径:

copy
  • /root/.config/rclone/rclone.conf

可以直接复制里面的配置拿来用。
由于手机用了代理导致配置的 OneDrive 直接上传文件可能失败,可以设置自定义代理规则绕过域名:

copy
  • https://graph.microsoft.com

或者配置 rclone 连接 cloudreve 的 webdav 实现间接上传到 OneDrive:

copy
  • rclone copy /home/ng/ngcert cd:/ssl

添加到计划任务即可定时上传。

10、离线下载展开目录

刚开始踩了一个坑,使用的一键安装脚本:

copy
  • wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh
  • #备用地址
  • wget -N --no-check-certificate https://www.moerats.com/usr/shell/Aria2/aria2.sh && chmod +x aria2.sh && bash aria2.sh

因为配置过程是终端交互式的看上去比较方便,结果装 aria2 之前装了一大堆安装环境,装 aria2 的时候因为没有适配 arm 架构还启动失败,装了半天还装不上,空间占用还贼大,欲哭无泪。然而脚本还不带卸载安装环境的命令,不过通过查看脚本源码可以发现这些命令:

copy
  • yum install nano -y
  • yum install crond -y
  • yum -y groupinstall "Development Tools"

特别是 "Development Tools" 这玩意儿,安装下来三四百兆接近半个 G,我们可以反其道而行之卸载就干净不少:

copy
  • yum remove nano
  • yum -y groupremove "Development Tools"

我这里发现 crond 并没有安装成功就不列出来了。然后转而使用 centos 官方源的 aria2:

copy
  • yum install aria2 -y

一条命令就能搞定,然后把之前用脚本安装的 aria2 的配置文件复制过来稍微改改就能用,并在同目录手动建立会话文件:

copy
  • /root/.aria2/aria2.conf
  • touch /root/.aria2/aria2.session

启动命令为 aria2c,有时候离线任务弄多了重启服务器后会自动下载,拦都拦不住,先杀掉 aria2 进程,再删除临时下载目录所有文件,最后清空配置文件同目录的会话文件:

copy
  • true > /root/.aria2/aria2.session

清空命令 true 是个好命令,免去了先删除文件再创建文件的麻烦。将 aria2 写入 supervisor 配置文件实现进程守护,就可以减少一条启动命令。

七、挂载 webdav展开目录

1、可道云的 webdav展开目录

cloudreve 与可道云都支持 webdav,手机端支持 webdav 挂载的文件管理器,mix 是我现在用的很顺手的文件管理器。如文章开头所说,挂载可道云的 webdav 可以很方便的编辑 termux 目录下的文件。
可道云可读取 termux 安装目录下所有文件,即相对于安卓环境而言,可以读取到:

copy
  • /data/data/com.termux

点击可道云左下角用户头像进入后台管理,在储存中新增要挂载的储存位置。
储存目录填手机储存的某个文件夹路径,可管理当前路径下的所有文件。
若要读取 Centos 文件,填写:

copy
  • /data/data/com.termux/files/home/centos/centos-fs/root/

路径中的 centos 文件夹是我自己新建的,直接安装的没有这个文件夹。
进入可道云文件管理界面,将左侧栏二级侧栏中的网络挂载添加到收藏夹中。进入插件管理中开启 webdav 服务,在个人中心可找到 webdav 链接。
在 webdav 挂载软件中输入以上链接及安装可道云时配置的账号密码即可成功连接。

2、cloudreve 的 webdav展开目录

在侧栏菜单 WebDAV 中创建新的账号,webdav 登录账号为 cloudreve 登录账号,密码为生成的密码。

3、Windows 挂载 webdav展开目录

Windows 资源管理器自带的映射功能可用来挂载 webdav,在点击侧栏此电脑,顶栏横排菜单中的 “映射网络驱动器” 和 “添加一个网络位置” 就是挂载功能,但体验贼差劲,重启电脑后就失效了,得重新挂一遍。所以我用第三方软件 RaiDrive 挂载。
打开 RaiDrive 添加 onedrive 和 webdav,挂载 webdav 功能在 NAS 选项中,勾选地址后面的方框启用 ssl,即 443 端口,地址栏第一栏输入域名,下面一栏输入 webdav 链接剩余部分,直到方框描边由红变白。
RaiDrive 不能通过可道云和 cloudreve 的 webdav 读取实际容量,显示的容量有点离谱。
挂载的网盘

八、ksweb 及 frp 安卓端展开目录

虽然现在不用 ksweb 了,还是稍微记录一下关键配置部分。
想要建立多个网站,就在 ksweb 中添加多个主机,lighttpd 和 nginx 可以配置 ssl 证书,但国内安卓端浏览器会报不安全。
frp 安卓端无法使用新版 SakuraFrp 的配置文件,需要从新版配置文件中提取信息按以下配置填写,中文内容都是要改的:

frp 安卓端配置文件

copy
  • [common]
  • server_addr = 服务器地址
  • server_port = 7000
  • tcp_mux = true
  • pool_count = 1
  • protocol = tcp
  • user = 访问秘钥
  • token = SakuraFrpClientToken
  • dns_server = 223.5.5.5
  • [隧道名称]
  • privilege_mode = true
  • type = http或者https
  • local_ip = 127.0.0.1
  • local_port = 本地端口
  • custom_domains = 绑定域名
  • use_encryption = false
  • use_compression = true

配置多个站点,则在其后继续填入以上内容。

参考资料展开目录

Termux 高级终端安装使用配置教程
https://www.sqlsec.com/2018/05/termux.html

旧手机上搭建网站+内网穿透
https://www.coolapk.com/feed/16506805?shareKey=ODYwYjJlODgxNzIzNWY2YzljZDI

AutoApi - 普通版
https://github.com/wangziyingwen/AutoApi

Office 365 E5 账号申请及永久续期教程
https://logi.im/script/permanently-keeping-an-office-e5-account.html

cloudreve 配置文件
https://docs.cloudreve.org/getting-started/config

Linux crontab 命令
https://www.runoob.com/linux/linux-comm-crontab.html

linux 进程守护工具 supervisor 使用概述
https://blog.csdn.net/qingquanyingyue/article/details/104155897

本文作者:七米蓝
本文标题:《将手机内网穿透当作服务器并运行了几个项目》
本文链接:https://www.chirmyram.top/archives/phoneserver
版权声明:本博客文章均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!

Last Modified: April 26, 2023
Archives QR Code Tip
QR Code for this page
Tipping QR Code
Leave a Comment

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 颜文字

22 Comments
  1. Qingxu Qingxu   GNU/Linux x64  Firefox 85.0

    AnLinux 的 CentOS 打包的不太行,建议试试 AnLinux 的 Ubuntu, 使用舒服很多(虽然基础软件包同样不全...)

    樱花穿透让人有点怀念啊... 自从原站长弃坑 + HTTP 穿透要实名后就没用过了。

    既然解了 BL 锁,还是试试刷个 Magisk 吧(也不复杂)。Chroot 的性能不是 Proot 能比的,很多程序 Proot 也跑不起来。

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 90.0.796.0

      @Qingxu 我只是觉得 centos 的安装运行日志整洁一点 ,据说 centos 将被官方放弃,我到时候再看看。
      刷机还是算了,这个老手机本身性能就很差,奄奄一息了,而且之前给 realmx 刷机变砖返厂维修让我有了心理阴影 ,这方面不会再深入涉及了,目前够用了,不会再部署其他什么大项目。

  2. 青菜芋子 青菜芋子   Android 11  Google Chrome 87.0.4280.101

    解了 bl 锁,只要能找到官方的 ROM,用 Magisk 修补 boot.img 应该就能 root 了。

    1. ChirmyRam ChirmyRam   Android 10  WebView 4.0

      @青菜芋子鄙人不擅长在手机上搞机 ,现在手机作为服务器搭的网站基本定型了,没精力折腾了😑

  3. yucho yucho   Android 8.0.0  WebView 4.0

    加友链不,
    https://yucho.wodemo.net
    虽然还没建成

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 89.0.731.0

      @yucho 那得等你网站略有样子再说吧。 而且下次记得在我友链独页留言申请,不要在不相关的文章下面留言。

  4. chiakun chiakun   iOS 14.2  Safari 14.0.1

    还是乖乖弄个 mini-itx 主机吧 省电又不占位置

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 88.0.705.9

      @chiakun 但是不省钱啊 ,主要目的就是让老手机物尽其用,榨干剩余价值

  5. 哈士奇社区 哈士奇社区   Windows 10 x64 Edition  Google Chrome 85.0.4183.83

    这样也可以???

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 88.0.705.9

      @哈士奇社区非常可以

  6. Dark Dark   Android 9  WebView 4.0

    好文章,有心了

  7. 我是XXX 我是 XXX   Windows 10 x64 Edition  Google Chrome 80.0.3987.163

    手机还好吗 xi'xixixi5

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 87.0.658.0

      @我是 XXX 老手机本就行将就木,现在一天 24 小时充着电 OωO

  8. 绿灯岁月 绿灯岁月   Android 10  WebView 4.0

    老大,现在我正在访问的网站,你是用手机搭建做的内网穿透,速度好快

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 87.0.654.0

      @绿灯岁月本篇文章所在的博客网站是搭在金山云服务器上的,手机当服务器搭的网站只适合做实验性的小项目,太不稳定了,隔三差五就挂。

  9. 黑猫云盘 黑猫云盘   Windows 10 x64 Edition  Google Chrome 87.0.4270.0

    稳定性怎么样!

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 87.0.654.0

      @黑猫云盘你是指什么稳定性?

  10. zeruns zeruns   Windows 10 x64 Edition  Google Chrome 78.0.3904.108

    到此一游

  11. 原神博客 原神博客   Windows 10 x64 Edition  Chromium Edge 85.0.564.63

    到此一游

    1. ChirmyRam ChirmyRam   Windows 10 x64 Edition  Chromium Edge 87.0.644.4

      @原神博客