以下几个软件比较好用且不用安装，就是没图形界面，作为一个复制粘贴怪又懒得每次执行任务手动输入命令，于是就给它写了bat批处理命令快速启动或提示命令。新建文本文档将命令复制进去，保存后重命名为相应的bat或cmd格式文件，将批处理命令文件放在主程序同级目录。然后稍微美化下：为批处理命令文件创建快捷方式，更换快捷方式的icon图标以提高辨识度，将快捷方式放在开始菜单点击即可快速启动。本文主要是记录快捷命令，软件具体用法去查阅原项目或百度教程。一、annieannie是一款跨平台的视频下载器，支持下载多个主流网站的视频，无论源站视频是什么格式，下载后用ffmpeg合并为mp4格式。我使用的是本地安装包，所以不用安装Scoop了，也不必配置环境变量，写好命令直接用。以cmd加空格开头，后面放程序命令，这样在启动命令后就不会自动执行，而是显示在cmd里面，方便复制粘贴用。cmd annie -o D:\Edge命令解释：将视频下载到D盘的Edge文件夹中。二、BBdownBBdown是一款专门批量下载B站视频的工具，一次性下载所有分P视频，虽然annie很强大但如果要批量下载就有没办法了。依然是以cmd加空格开头不自动执行命令，下载后依然用ffmpeg合并为mp4格式。cmd BBDown.exe命令解释：貌似不能设置下载路径，那就直接启动主程序，将视频下载到同级目录。三、 rclonerclone是一个用于和同步云平台同步文件和目录命令行工具,可以在本地挂载各个网盘。我试了挂载OneDrive之后感觉很鸡肋，大文件传输简直要命，又没有传输进度rclone挂载OneDrive挂载好OneDrive后，下次以这样的命令启动：rclone mount OneDrive:/ O: --cache-dir D:\OneDrive --vfs-cache-mode writes命令解释：将OneDrive挂载到D盘的OneDrive文件夹。rclone获取微软应用refresh token其实还是研究自动续期office365保留下来的东西，我经常经常获取微软应用的token搞各种东西，一条命令自动获取token：.\rclone.exe authorize "onedrive" "你的机密" "你的秘钥"&pause命令解释：授权应用获取OneDrive的token，如果结尾不加上&pause，获取到token后cmd窗口会自动关闭，就没法复制token了。四、拓展以下是一些好玩的bat命令：1、删除系统休眠文件powercfg -h off2、查看系统激活状态slmgr.vbs -xpr3、导出设备电池状态报告powercfg /batteryreport /output "C:\battery_report.html命令解释：将html报告导出到C盘根目录，导出位置可以自己改。4、制作图种copy/b 1.jpg+2.exe 3.jpg命令解释：将同目录下的图片1和软件2合成到图片3，图片3打开后和图片1一样，图片3重命名为压缩包格式并解压后可恢复图片1和软件2。5、保留存储为确保系统更新并顺畅运行，win10保留一部分存储空间以供临时文件、缓存和其他文件使用。当设备空间不足时，win10将清除保留的存储空间，以便将其用于其他进程，如 Windows 更新。该功能自1903版开始可用，并且在全新安装后或在新制造的电脑上默认启用。从2004版开始，可用DISM命令控制该功能。查询保留存储状态：dism /Online /Get-ReservedStorageState关闭保留存储：dism /Online /Set-ReservedStorageState /State:Disabled开启保留存储：dism /Online /Set-ReservedStorageState /State:Enabled6、adb命令在手机未root的情况下，使用adb命令卸载系统预装软件。准备工作：电脑上先安装好adb工具包，在手机开发者选项中开启USB Debugging。进入adb环境同时允许手机提示的USB开发者模式：adb shell查看应用列表：pm list package查看当前界面应用：dumpsys window | grep mCurrentFocus卸载命令：pm uninstall -k --user 0 包名7、onedrive升25T命令下载SharePoint Online Management Shell，按Win+S搜索出SharePoint Online Management Shell。检查是否安装成功：Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version修改为自己的管理员邮箱和组织名：$adminUPN="office@chirmyram.top" $orgName="ChirmyRam"登陆账户：$userCredential = Get-Credential -UserName $adminUPN -Message "Type the password." Connect-SPOService -Url https://$orgName-admin.sharepoint.com -Credential $userCredential改为自己的OneDrive地址并设置为25T：Set-SPOSite -Identity https://chirmyram-my.sharepoint.com/personal/office_chirmyram_top -StorageQuota 26214400
一、需求背景UWP是什么？UWP即Windows 10中的Universal Windows Platform简称，uwp不同于传统pc上的exe应用，它并不是为某一个终端而设计，而是可以在所有Windows10设备上运行。说人话就是win10自带的Microsoft Store中的软件，Microsoft Store又称微软商店或win10商店，现阶段半死不活的，偶尔有那么几款稍微趁手的软件。UWP有什么特性？UWP应用主要从微软商店安装，微软商店有一套自己的审核标准，应用有较为统一的UI风格即Metro 或者其升级版Fluent Design，应用数据存放在指定位置不会产生太多垃圾，卸载时也能完全卸载干净，应用权限受系统严格控制。但又因为权限被限制得很死，导致大多软件的开发难以进行，开发者不积极。因此又导致了另外一种软件的诞生：32位转制版，即把32位exe版软件转制为UWP然后上架微软商店，其UI界面与exe版完全一致，而权限被大幅削弱，比如微软商店的office全家桶、QQ桌面版、网易云音乐等都是这种转制版，我们可以叫它UWP版32位转制版，依然属于UWP软件。安装条件：win10修改版、win10企业版、LTSC/LTSB及其他没有微软商店的系统是无法安装的，需先使用LTSB-Add-MicrosoftStore这款工具恢复微软商店后才能安装，微软商店恢复不了就安装不了。我电脑C盘拮据，当初安装exe版office2016时找了很久更改安装位置的方法，发现总是逃不过改注册表，而相对于改注册表，Win10商店的office更改安装位置的方法非常简单，而且可以自由安装单个组件，下文安装部分将会介绍到。现在讲一下UWP版office的情况：总体框架和10个单部分组件共11个安装包，10个单部分组件为：Word、PowerPoint、Excel、OneNote、Outlook、Access、Project、Publisher、Skype、Visio。安装单个组件之前必需安装总体框架，统一在微软商店自动更新，因其权限严格受限，所以部分高级功能无法使用，就我个人接触到的情况而言，office计算机二级考试所涉操作应该没什么问题。我比较在意的一点是另存为其他部分格式会报错失败，如PPT无法导出为mp4视频，Excel内容稍微多点无法另存为单个html文件，这些奇葩需求应该很少有人会有吧~二、提取方式提取原理：将UWP应用的网页链接复制到解析网站，获得安装包下载链接。UWP软件安装包格式有appx、appxbundle、Msixbundle。现在我们来提取office：复制Word在网页版微软商店的链接，打开rg-adguard这个网站将链接粘贴到输入框，点击末尾的√即可提取到office全家桶的11个软件安装包链接。这是国外网站所以需要速度快一点的代理工具，不然解析、下载会很慢。每个组件的安装包有多条下载链接，以appxbundle结尾的链接就是安装包链接，单个组件的安装包名字由四部分组成，均以Microsoft.Office.Desktop开头，然后为单个组件的名字，接着是版本号，最后是产品ID。UWP版office全家桶在国区在下架了，如果你好奇想打开上面的Word链接，会弹窗提示继续留在美国英文或者跳转到中国中文，如果跳转到中国中文就会提示页面找不到了~我们首先翻到最下面，看到一个安装包的名字只有三部分，没有单个组件的名字，而且体积是最大的，这是所有组件运行所需的总体框架，只有先下载安装它，其他的单个组件才能安装使用。为保证版本统一，我们下载总框架及单个组件的最后一条appxbundle安装包链接。同时要注意，UWP软件是在不断更新的，同一条链接在不同时间解析的安装包版本可能不同，与旧版混合安装会失败。当然只有office这种成套软件软件提取起来会很麻烦，其他的单个小软件只需在微软商店网页版搜索到并复制链接提取安装包，直接下一个安装包安装就行。但是，我又要说但是了，部分小软件所需要的依赖、运行库比较特殊，无法直接安装，而所需运行库会一并解析出来，出现这种情况就把解析出来的运行库都下载安装。三、安装软件首先更改安装位置：依次打开电脑设置→系统→左侧栏的存储→更改新内容的保存位置，选择新的应用将保存到：，设为其他磁盘，即可将安装位置更改到相应磁盘。现在安装软件，先安装总体框架，直接双击安装包执行安装，然后按需安装其他单个组件。安装完成后在开始菜单启动，或者右键新建office文档启动，有时候右键菜单可能无法调出新建office文档的选项，需要重复几次。安装后也可以在系统的应用列表中找到它，总体名字叫做Microsoft Office Desktop Apps，执行重置、更改安装位置等操作。除office外，部分UWP应用不支持更改安装位置，即使改了安装位置仍然强制安装到C盘，如WSL Ubuntu。四、激活状态此安装包本身并不附带激活，一些激活工具也不能检测到它并激活，但其激活状态与exe版一样。简单的介绍一下exe版的激活规则：2016版及以上（其他版本未测试）在卸载后win10会保留激活信息，重新安装后会自动激活，同理电脑预装正版office2016及以上版本卸载重装后也可直装激活。而且就算没有预装正版，仍然有大量的激活工具及方式。所以想要激活UWP版，需先激活exe版，听起来好像很折腾很麻烦，但我们并不需要安装exe版全家桶，只需要安装单个组件如Word，可以使用Office Tool Plus这个工具安装单个组件并激活，完事后就删掉，现在直接安装UWP版就直接激活了。另外由于Visio是单独授权的，需要单独激活。这里再介绍一种很直接的激活方式，那就是可以用office365账号直接激活exe版和UWP版，而我之前刚好通过AutoApiS这个项目免费得到一个office365 E5全局管理员账户，没什么经济成本，除此之外可能没几个人闲到买个office365之后再来用这种残缺的UWP客户端~UWP版激活为365有个小坑，例如exe版2016曾经激活过那么即使在UWP版上登录office365账号也仍然是2016版，无法获得365的功能。我电脑预装的是office2016，为此我专门去装了exe版单个组件并用激活工具消除了激活状态（论激活工具的正确使用方式），然后再安装UWP版用office365账号激活。五、题外话微软商店也是存在WPS2019的，或者叫国际版，同样可以复制它在网页版微软商店的链接提取到安装包。国内微软商店无法直接搜到，只有将系统地区改为美国后才能搜索出来，藏得非常深。软件非常干净，文档编辑功能一应俱全，账号高级订阅用于pdf文字识别及编辑等功能，账号数据与国内不互通，但是界面只有英文，实力劝退。
将手机内网穿透当作服务器并运行了几个项目
几个月没发新文章了，主要是因为我将大量精力投入了《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目录的路径就是：/home/centos/centos-fs/root即启动termux后所在的路径为termux的home文件夹，在termux中启动Centos后的路径就是Centos的root文件夹。赋予termux读取手机储存权限：手动在手机应用管理界面开启，或执行以下命令后允许提示：termux-setup-storage直接cd在文件管理器中复制的路径就可以读取手机储存种的文件。首次打开termux后的界面、或直接执行cd命令，使用pwd命令查看当前目录结构：/data/data/com.termux/files/home对于整个安卓环境而言，/data/data/com.termux为termux安装路径，对于termux而言，/home为其根目录，首次打开termux并创建的文件存放于此处，相当于Linux的/root/文件夹。执行cd $PREFIX，使用pwd命令查看当前目录结构：/data/data/com.termux/files/usr即为termux的/usr目录，相当于Linux的/usr/目录。执行ls命令显示当前目录存在的文件及文件夹，执行ls -lh显示文件及文件夹的详细信息。四、配置网站环境1、换源非必要步骤，将软件源换为国内能提高软件安装速度，但可能存在兼容性问题。执行以下命令换为清华源：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命令安装：pkg install nginx -y && pkg install mariadb -y && pkg install php -y && pkg install php-fpm -y && pkg install vim -y && pkg install openssh -y3、配置nginx进入nginx配置文件存放目录：cd $PREFIX/etc/nginx/备份nginx配置文件，复制并重命名：cp nginx.conf bnginx.conf为了方便编辑将整个配置转移到手机储存且可道云可以读取的目录，用txt文件作为配置文件而不再使用conf文件，这样使用可道云或文件管理器都可以编辑。在mix文件管理器中创建相应文件夹及nginx.txt文件后，根据备份的bnginx.conf填写配置： nginx配置文件 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编辑：rm nginx.conf touch nginx.conf vim nginx.conf调出输入法键盘按i进入编辑模式，利用include读取手机储存配置文件，输入include和空格后粘贴刚刚复制的nginx.txt路径，注意最后输入英文分号结尾：include /storage/3461-3833/htdocs/kod/files/nginx.txt;按ESC退出编辑模式，执行:wq保存更改内容并退出。重载nginx配置：nginx -s reload4、配置mariadb登录mariadb：mysql -u $(whoami)修改root用户的密码：use mysql; set password for 'root'@'localhost' = password('你的密码');刷新权限并退出：flush privileges; quit;5、配置nginx解析php进入php-fpm配置目录修改配置文件：cd $PREFIX/etc/php-fpm.d vim www.conf在第36行，不同版本可能不同，将listen后面的路径改为本地9000端口：listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock to: listen = 127.0.0.1:90006、启动三件套执行以下命令：nginx php-fpm nohup mysqld >/dev/null 2>&1 &至此搭建网站的环境配置完毕。五、配置Linuxtermux虽然能模拟Linux终端，却并不兼容所有Linux软件，所以想要以更好的兼容性运行Linux软件还是得安装Linux子系统，但由于手机性能原因，安装的Linux依然是精简的。刚安装linux子系统后软件源中的软件可能很少，update和upgrade之后就会有丰富的软件源。避免文件散乱难以整理，使用mkdir命令新建一个名为centos的文件夹：mkdir centos1、安装Centos选择AnLinux这款软件提供的脚本安装，因为启动很简单。AnLinux软件下载：F-Droid.选择系统后复制脚本命令到termux执行：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：./start-centos.shCentos默认时区的时间比北京时间晚8小时，试了很多方法改时区但重启后都会失效，不得已只能在启动命令后再加上更改时区的命令：export TZ='Asia/Shanghai'安装自己所需组件：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仓库：yum install epel-release -y yum install supervisor为方便管理将所有客户端及配置文件放到home目录，在home目录建立super文件夹并生成配置文件：mkdir /home/super echo_supervisord_conf > /home/super/supervisord.conf直接运行echo_supervisord_conf会在/etc目录中生成配置文件。编辑配置文件一度让我头大，运行的客户端命令不是./而是文件路径，蒙了好久，看了有关cloudereve设置宝塔进程守护的教程才明白该怎么设置。zfile和JTimer为脚本启动，一次启动就好，重试次数设置多了就会一直尝试启动，完全没必要。编辑好的配置文件： supervisor配置文件 [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：supervisord -c /home/super/supervisord.confsupervisor有web管理界面，默认端口为9001，设置登入账户及密码，配置nginx反向代理就可以用个域名实现网页端图形可视化管理。2、内网穿透为方便以后远程操作首先映射ssh,使用pkg install openssh安装ssh后，用whoami查看用户名，使用passwd设置密码，使用sshd启动ssh，默认端口为8022。在SakuraFrp上建立TCP隧道进行穿透。对于centos子系统，为避免文件混乱，依然用mkdir为每个网站的frp客户端新建一个文件夹，下载SakuraFrp的客户端并赋予执行权限，为方便启动将客户端重命名为frpc，最后启动。下好第一个赋予执行权限后复制到其他文件夹不再需要赋予执行权限。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脚本 # -*- 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(" 1调用成功"+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/me/drive',headers=headers).status_code == 200: num1+=1 print(" 2调用成功"+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/drive/root',headers=headers).status_code == 200: num1+=1 print(' 3调用成功'+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/users ',headers=headers).status_code == 200: num1+=1 print(' 4调用成功'+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/me/messages',headers=headers).status_code == 200: num1+=1 print(' 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(' 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(' 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(' 8调用成功'+str(num1)+'次') if req.get(r'https://api.powerbi.com/v1.0/myorg/apps',headers=headers).status_code == 200: num1+=1 print(' 8调用成功'+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/me/mailFolders',headers=headers).status_code == 200: num1+=1 print(' 9调用成功'+str(num1)+'次') if req.get(r'https://graph.microsoft.com/v1.0/me/outlook/masterCategories',headers=headers).status_code == 200: num1+=1 print(' 10调用成功'+str(num1)+'次') print(' 结束时间为 : '+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) except: print(" pass") pass for _ in range(3): main() 由于原脚本中调用的库在python3中已改名，而且在现在的环境中执行不能输出执行时间，我稍微改了后面的时间输出，另外我用sharelist挂载本地文件为了保留格式方便预览，就使用md文件，输出日志加了换行符。找了很久找到一款有图形界面的计划任务工具：JTimer。我用的Java版本，整体下载之后配置文件中的数据库地址改为127.0.0.1，含pom.xml的目录打包为jar：yum install maven mvn clean package -Dmaven.test.skip=true创建start.sh脚本并赋予执行权限：#!/bin/sh java -jar jt.jar最后写入进程守护就可以了。记录一下之前设置计划任务的方式：新建一个名为1.cron的文件（当然cron这个格式是我自定义的）填入定时任务配置： crontab定时任务 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定时任务：crontab /home/1/1.croncronie有以下常用命令：crontab -l #查看当前已有定时任务 crontab -r #删除已有定时任务回到Centos根目录，启动计划任务：crond start4、综合启动先启动安卓代理软件，不然tg机器人无法连接到tg服务器导致启动失败。我将以下命令存放于QQ输入法云剪贴板中，每次需要启动时只需要粘贴进去执行就行，算是比较方便。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的伪静态为：location / { try_files $uri $uri/ /index.php?args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent;可道云伪静态：if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; }可道云不开启伪静态无法安装webdav插件。cloudreve下载cloudereve解压，赋予执行权限并启动：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配置文件 [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 4、GoneList类似于OneIndex的一款OneDrive目录程序，由Go语言编写而成响应速度极快，美中不足的是拉取OneDrive文件较慢且文件一旦过多就容易失败，解决办法是先建一个空的公开子文件夹，搭建成功后再将文件移进去。配置文件config.json：{ "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单程序、赋权、按照指定的端口不输出日志启动即可：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：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环境部署起来略微麻烦,好在过程顺利。安装官方配置文件进行部署：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和其它组件：yum install nodejs git -y然后下载源码并赋予执行权限：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包，为方便后续配置再重命名为短名：wget http://file.nginxwebui.cn/nginxWebUI-2.4.7.jar mv nginxWebUI-2.4.7.jar ng.jar选择mysql(mariadb)数据库，编写启动脚本start.sh：#!/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的根目录开始：/data/data/com.termux/files/home/centos/centos-fs...否则会从termux的usr开始读取证书导致读取不到证书文件报错，即/data/data/com.termux/files/usr/...最后nginx -s reload重载配置无报错的话，就大功告成了。9、RcloneRclone可在不同网盘中转移文件，但由于termux的特殊性，无法将网盘挂载到本地文件。在无图形界面的linux系统环境中，它让我方便上传文件到OneDrive的行为变得可能，所以我用它来备份nginx webui生成的ssl证书。centos自带的软件源安装rclone有些问题，如上文所述安装epel仓库后即可安装成功：yum install epel-release -y yum install rclone -y配置文件路径：/root/.config/rclone/rclone.conf可以直接复制里面的配置拿来用。由于手机用了代理导致配置的OneDrive直接上传文件可能失败，可以设置自定义代理规则绕过域名：https://graph.microsoft.com或者配置rclone连接cloudreve的webdav实现间接上传到OneDrive：rclone copy /home/ng/ngcert cd:/ssl添加到计划任务即可定时上传。10、离线下载刚开始踩了一个坑，使用的一键安装脚本：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架构还启动失败，装了半天还装不上，空间占用还贼大，欲哭无泪。然而脚本还不带卸载安装环境的命令，不过通过查看脚本源码可以发现这些命令：yum install nano -y yum install crond -y yum -y groupinstall "Development Tools"特别是"Development Tools"这玩意儿，安装下来三四百兆接近半个G，我们可以反其道而行之卸载就干净不少：yum remove nano yum -y groupremove "Development Tools"我这里发现crond并没有安装成功就不列出来了。然后转而使用centos官方源的aria2：yum install aria2 -y一条命令就能搞定，然后把之前用脚本安装的aria2的配置文件复制过来稍微改改就能用，并在同目录手动建立会话文件：/root/.aria2/aria2.conf touch /root/.aria2/aria2.session启动命令为aria2c，有时候离线任务弄多了重启服务器后会自动下载，拦都拦不住，先杀掉aria2进程，再删除临时下载目录所有文件，最后清空配置文件同目录的会话文件：true > /root/.aria2/aria2.session清空命令true是个好命令，免去了先删除文件再创建文件的麻烦。将aria2写入supervisor配置文件实现进程守护，就可以减少一条启动命令。七、挂载webdav1、可道云的webdavcloudreve与可道云都支持webdav，手机端支持webdav挂载的文件管理器，mix是我现在用的很顺手的文件管理器。如文章开头所说，挂载可道云的webdav可以很方便的编辑termux目录下的文件。可道云可读取termux安装目录下所有文件，即相对于安卓环境而言，可以读取到：/data/data/com.termux点击可道云左下角用户头像进入后台管理，在储存中新增要挂载的储存位置。储存目录填手机储存的某个文件夹路径，可管理当前路径下的所有文件。若要读取Centos文件，填写：/data/data/com.termux/files/home/centos/centos-fs/root/路径中的centos文件夹是我自己新建的，直接安装的没有这个文件夹。进入可道云文件管理界面，将左侧栏二级侧栏中的网络挂载添加到收藏夹中。进入插件管理中开启webdav服务，在个人中心可找到webdav链接。在webdav挂载软件中输入以上链接及安装可道云时配置的账号密码即可成功连接。2、cloudreve的webdav在侧栏菜单WebDAV中创建新的账号，webdav登录账号为cloudreve登录账号，密码为生成的密码。3、Windows挂载webdavWindows资源管理器自带的映射功能可用来挂载webdav，在点击侧栏此电脑，顶栏横排菜单中的“映射网络驱动器”和“添加一个网络位置”就是挂载功能，但体验贼差劲，重启电脑后就失效了，得重新挂一遍。所以我用第三方软件RaiDrive挂载。打开RaiDrive添加onedrive和webdav，挂载webdav功能在NAS选项中，勾选地址后面的方框启用ssl，即443端口，地址栏第一栏输入域名，下面一栏输入webdav链接剩余部分，直到方框描边由红变白。RaiDrive不能通过可道云和cloudreve的webdav读取实际容量，显示的容量有点离谱。八、ksweb及frp安卓端虽然现在不用ksweb了，还是稍微记录一下关键配置部分。想要建立多个网站，就在ksweb中添加多个主机，lighttpd和nginx可以配置ssl证书，但国内安卓端浏览器会报不安全。frp安卓端无法使用新版SakuraFrp的配置文件，需要从新版配置文件中提取信息按以下配置填写，中文内容都是要改的： frp安卓端配置文件 [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=ODYwYjJlODgxNzIzNWY2YzljZDIAutoApi-普通版https://github.com/wangziyingwen/AutoApiOffice 365 E5 账号申请及永久续期教程https://logi.im/script/permanently-keeping-an-office-e5-account.htmlcloudreve配置文件https://docs.cloudreve.org/getting-started/configLinux crontab 命令https://www.runoob.com/linux/linux-comm-crontab.htmllinux进程守护工具supervisor使用概述https://blog.csdn.net/qingquanyingyue/article/details/104155897
入宅作，有生之年系列。 高考失败的那个暑假百无聊赖，想起之前听说过很多遍的《刀剑神域》，于是找到资源来看。在这之前我是没看过这种短篇动画的（我自定义的短篇为这种一季一二十话的）。在那个炎热的暑假中我补完了已出的整部动画——第一季、第二季、番外回忆篇。大呼过瘾。 黑暗中一堆气泡随着OP的响起冒出，金色字符流动形成“sword art online”，令我我印象深刻，时至今日看到仍然十分感动。在某盘看的时候，看不到弹幕、评论以及其他相关的话题。当时，其中的日式英语让我念念不忘，比如“SAO”全称读成“嗦多啊托昂奈”，“the seed”读作“ðæ西得”。 在某盘继续看了几部后，嫌某盘看番不方便，想在线看，找来找去找到了bilibili，却发现这里没有，但是有大量关于刀剑的视频、话题。第一次看到其他空耳：“林肯死大头”，魔性至极，原来还可以这么玩，逐渐中二。 说起来有些滑稽，当初就是到这里来看番的，结果番没看几部，倒是先一头扎进鬼畜区，到现在也没看多少（点击“追番”→“退出”），我只是一个莫得感情的囤积狂魔。 想想现在的第三季真是猛男落泪，无语凝噎，但有什么办法呢？“自己追的番就要好好看完哟\^o^/”，嗯，流着泪也要看完，看完了才知道效果。
所谓“好用”，莫过于免费、无水印这两大特点。那么现在根据自己的经验，再略微详细讲一下这一套基础剪辑功能工具。一、剪辑1、DaVinci·达芬奇软件官网：http://www.blackmagicdesign.com/cn/products/davinciresolve这是一款专业剪辑软件，特点有：个人版免费、无水印、无广告、难上手、功能丰富，调色是强项，对电脑配置有不低的要求。进入官网拉到页面底端即可下载。关于这款软件的视频教程在网上也有很多。二、字幕1、网易见外工作台工具官网： https://jianwai.netease.com 这是一款生成字幕的网页工具。导入视频或音频可自动识别音频生成srt字幕并且支持修改后下载，字幕生成需要的时间与文件时长成正比。每日2小时免费体验，对于一般用户来说也足够。2、Arctime软件官网： https://arctime.org这是一款将字幕压制到视频的软件，也可生成字幕导入PR使用。进入官网下载自己需要的版本，官网有视频教程，很容易就上手了。其实推荐工具最大的理由就是免费。对于一般人来说，很多专业剪辑工具都是很贵的，搞到免费的版本对于一些人来说很难很复杂的样子，当然资金足够也可以为所欲为。学习一门剪辑工具就像是学会一门语言，学会之后再换另一个就会各种不顺手，唯有多加练习可以解决这个问题。