利用旧手机改造为超低功率服务器——以聊天机器人搭建为例(本体+服务端)

前言

我的电脑功率很高,待机都超过100W,一个月用电超过100度,光是为这台电脑都要交五六十块电费,比某些云服务器都贵了,之所以会这么贵,是我挂了一些服务导致了,这些服务本身对系统需求并不高,很多轻量化服务器都能运行。

刚好,我有两台旧手机,一台骁龙845的小米mix3、一台骁龙855+的红米k20pro,性能都还行,就算是到现在,如果不玩游戏的话,仍然可以当作主力机用。倘若能够将其改造成服务器,能同时满足低功率、可移动、长时间UPS等需求。

声明:本教程仅提供技术实现思路,仅供娱乐与学习,包括但不限于文章中提到的软件、工具、代码,使用者使用时必须要遵守当地法律法规,严禁用于黑灰产。

实现思路

先进行基础扫盲

服务器系统

目前主流的服务器操作系统只有linux和windows两种,其他虽然能配置服务端,但并不适合做服务器;

服务器架构

绝大多数安卓手机,系统支持的架构都是arm64,对于这种架构的支持,linux是走在windows的前面的,很久之前就有arm64版本的发行版了,但windows却支持的很晚,早先甚至只有x86架构,慢慢升级为x64,再适配了arm64,现在windows软件能在arm64系统中运行的很少,尤其是非开源软件;

原生系统适配

从原理上来说既然都支持arm64架构,那安卓手机就能支持原生/发行版linux,实际上也行,但硬件协议并不是通用的,如果没有专门进行驱动适配,就算能给机器成功刷上linux系统,也会出现无法开机、无法进系统、无法控制等情况;另外,现在的安卓手机,也能刷入原生win11系统,一般称为WOA,只是性能堪忧,而且由于用户量极少,软件适配一言难尽;

虚拟机系统搭载

安卓手机上有成熟的linux虚拟方案,主要分为两种。一是以termux为代表的,linux模拟系统;二是以linux deploy为主的镜像挂载方案。两种方案各有优劣,前者更像是一个具备基础linux环境的虚拟机,你可以在里面安装各种linux发行版,debian、ubuntu、kail……等;后者则是给手机挂载一个linux镜像,严格来说这个镜像的运行和安卓系统接近平级,镜像挂载之后,就算把linux deploy卸载,这个挂载的镜像也还正常运行着。值得一提的是,前者不需要root,后者必须要root。

再进行技术栈梳理

首先,要明确一个观点,得益于信息化技术的快速发展,很多骚操作,其实是不需要多强的技术实力,看起来厉害,但可能也就只会两招,遇到问题后还是只有到处找资料。

所以,即使你现在完全没有开发能力、没有系统维护经验,也能在极短的时间搭建出一个跨平台机器人。

机器人平台

目前是有不少开源或不开源的开放性机器人平台的,如koishi、nonebot,你可以使用符合要求的接口协议进行数据的接入,然后使用其上的插件完成机器人构建。

这篇文章搭建的机器人平台为koishi,其开源且生态相对强大。

协议接入

目前国内用的比较多的聊天类社交平台有两个,QQ和微信,网上的多数聊天机器人也是以这两个平台为主的,本次教程选QQ平台。

QQ平台实际是有官方的机器人QQ的,且可以申请,只是那是面向企业的,个人不行。

为了方便,我们采用natcap,其支持最新的ntqq协议,且可以实现人机一体,不容易出现封号的情况。

服务端软件配置

linux环境(容器)

首先,明确一点,安卓系统本身并不适合做服务端,其对后台以及权限限制得非常严重,就算要做,也得专门定制,费力不讨好。

所以,我们可以在不影响原有安卓系统的情况下在安卓系统上配置一个linux系统,主流的配置方案有两种。

需要root

一种需要root后获取最高权限,使用linux deploy安装一个定制的linux发行版镜像,以实现linux系统的访问,权限很高,且和安卓系统可以做到平级运行,这个linux镜像我们可以直接当作一个独立的系统来看待,可以安装各种arm64的软件,多数情况下不会有兼容性问题;

不需要root

第二种是安装termux,构建一个模拟制台,这个控制台有点像是linux系统,但其严格来说既不是安卓系统也不是linux系统,但他可以做到两个系统的事情,他有专门的软件包,支持很多linux的软件,一些linux上的内容甚至可以直接运行,不能运行的,只要有源码,多数情况也能自己编译后运行。当然,其最重要的是,可以安装其他的linux发行版,不管是debian、ubuntu还是kali都行,termux不能直接运行的软件,我们可以直接安装linux发行版后再运行。

工具链构建(可选)

用linux deploy构建的linux系统,虽然有单独的镜像,比较好管理,但其也有缺点,就是,目前开发者已经没有进行新版本的维护了,支持的镜像版本都比较低,debian只到10,ubuntu只到18,当然,其也不是一无是处的,他可以装docker。

为了拓展能力和减少折腾(linux deploy需要root),我们还是用termux吧。

在进行软件安装前和添加了软件源后,最好都更新下软件包目录,以确保能够安装到新版本的软件。

termux软件包目录更新指令:

apt update

基础编辑器(推荐)

如果控制台至少要有一个文本编辑工具,那就是vi/vim,尽量安装,不然改配置很麻烦

termux安装vim指令:

pkg install vim

远程工具

直接在手机上敲屏幕很慢,也很不优雅,其屏幕太小了,就算外接键盘,直接操作起来也很印象效率,所以我们要部署远程软件,让我们的开发可以转移到pc上来。

安装open ssh实现远程控制台(推荐)

对于稍微懂点代码的人来说,只要有控制台就可以完成绝大多数操作了,安装ssh可以远程控制台,使用方式自己网上搜索,这里不占笔墨,安装命令:

pkg install openssh
安装xfce4实现可视化

会有些开发者不习惯用ssh来开发,或者对可视化界面有着些许执着,喜欢在可视化界面的基础上开发,虽然最终也还是在可视化界面上打开控制台……

源码构建工具

termux本身很像linux,所以我们可以安装各种linux上用的软件,比如各种源码编译工具,python、gcc、go、git等都不在话下,当然,由于其环境并不算是完整的linux,所以有部分软件还是没法直接用的,需要安装linux发行版。

这些都可以直接pkg安装,按需安装,不安装也不影响使用,我这里就不放命令行代码了。

无人值守(可选)

既然是服务端,那肯定需要不定期的维护才行,不能出现必须要回家或者去公司才能维护的情况,所以需要实现无人值守。由于是使用的手机直接做服务端,没有独立id,想要实现无人值守还是有些麻烦的,但本身并不困难。

云服务器内网穿透

如果你有一台云服务器(😀),可以使用这台服务器搭建一个内网穿透服务,如使用frp,使用方法见官网,几分钟就可完成配置:frp内网穿透软件

内网穿透服务

原理实际和云服务器内网穿透一样,只是是使用的第三方服务平台,不需要自己有云服务器,如使用natapp:natapp官网

远程平台

上面的两种服务严格来说只是让你手机某个或多个端口可以被外网访问了,但要实现完全控制是做不到的,要实现完全控制,还得使用桌面级的远程控制,如向日葵、todesk这种,不过目前实现手机控制的软件基本都要收费,而且还不便宜。

当然,目前也是有开源方案的,如rustdesk,但使用的时候也最后带上一台云服务器,官方提供的免费通道很慢。参考:rustdesk官网

当然,咋们也能曲线救国,把手机连接到电脑上,使用adb对手机进行完全托管,再远程电脑(免费方案很多),就能实现远程对手机的访问了,但这个其实功率又上去了,服务还不如直接搭建在电脑上呢。参考:QtScrcpy安卓实时投屏

服务端实战

为了维护方便,主要以开源且有一定更新频率的为主,这里以我最近入坑的一款机器人平台为切入点。

软件的安装

Termux安装

谷歌应用商店/Github/F-Droid下载后安装。

官网地址:termux官网

koishi安装

koishi没有linux arm64 版本,不想找机器编译的话,需要以模板的方式运行,termux配置好node.js环境后(推荐同时配置git环境,以方便克隆项目,当然,你也可以curl下载项目后自己解压),可以直接运行,参考:koishi以模板运行

natcap安装

得益于社区,natcat可以直接再termux中运行,使用脚本

curl -o napcat.termux.sh https://nclatest.znin.net/NapNeko/NapCat-Installer/main/script/install.termux.sh && bash napcat.termux.sh

参考:napcat脚本安装方式

使用效果

对于软件本身的使用,对应官网都描述得很清楚,我这里就不做多余笔墨的书写了,直接上效果吧:

补充说明

运行环境差异

上面的机器人项目,由于项目本身的特性,只用到了termux自带的环境,没有安装任何发行版,实际使用的时候,termux环境并不一定能满足所有服务端的搭建(即使是安装了linux发行包),尤其是对虚拟环境有要求的,比如docker、onepanel、宝塔等,想要搭建就需要突破虚拟环境了,比如linux deploy或者刷机刷专用包。

浏览器相关插件的使用

koishi平台在win环境下,puppeteer服务很容易启动,随便安装一个主流浏览器即可(最好是chromium内核,如edge、chrome),但在termux中,想要安装chromium或者firefox浏览器,会比较复杂,需要先安装界面环境(如xfce4),参考:https://wenku.csdn.net/answer/74d613ehi3

termux默认软件库中没有chromium浏览器,需要添加额外(Termux User Repository)的库,安装方式:

pkg install tur-repo

但是,尽管如此操作能够实现提供puppeteer服务,不过由于手机本身的限制,浏览器似乎很难正常启动(不一定所有手机都无法正常启动,应该也有能启动的,我这台骁龙855+的手机,连termux的vnc服务连上后都无法进入页面),往往一被调动后就会自动关闭,根本无法提供正常服务,参考以下报错:

2024-10-17 02:22:21 [E] app Error: Protocol error: Connection closed. Most likely the page has been closed.
                            at assert (/data/data/com.termux/files/home/koishi-app/node_modules/puppeteer-core/lib/cjs/puppeteer/util/assert.js:18:15)
                            at CdpPage.close (/data/data/com.termux/files/home/koishi-app/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Page.js:814:36)
                            at async canvas_default.start (/data/data/com.termux/files/home/koishi-app/node_modules/koishi-plugin-puppeteer/lib/index.js:303:7)
                            at async /data/data/com.termux/files/home/koishi-app/node_modules/@cordisjs/core/lib/index.cjs:1213:7
2024-10-17 02:23:45 [W] command status-image ……

所以,现目前还是不推荐在termux上直接使用浏览器,问题不在于能否利用手机的资源,而是兼容性本身就有问题


其他解决方案拓展

原生linux系统

原生linux系统,刷入原生arm linux系统,可以解决各种软件包的兼容问题,包括一些容器的使用(比如docker),但刷原生对机型适配有要求,若不具备极强的开发能力(要改驱动),只能使用对应机型,安卓手机可用的linux原生系统。

直接刷入指定linux发行版本的捣腾:安卓手机原生运行 ARM Ubuntu 24.04

刷入ubuntu touch:小米6刷Ubuntu Touch系统

Arm版win系统(Windows on ARM)

多数手机是芯片arm架构,win10和win11目前是有arm版本系统的,通过一定方式可以直接刷如手机,且实现与原系统共存,但其软件驱动和生态都还比较差(一般称为woa软件),但arm版本的win软件太少,如果是开源的还好,还能自己编译成arm版本,但一是太麻烦,二是没那么多开源代码的软件,真正使用起来,肯定是各种问题不断,而且,由于驱动差异问题,一些手机上原本的功能可能并不能正常工作,甚至会影响充电。

下面是一个目前还在维护的woa软件的网站:Windows ARM software,其组织github页面:windows-arm-apps

支持Docker的安卓系统

docker是包容的,理论上来说只要能安装上docker,其他市面上很大一部分的软件服务我们都能用上,直接在安卓上安装docker非常困难,就算成功安装了也是多层套娃,严重影响性能,不过,还是有开发者成功通过修改内核和部分系统配置实现了docker直接安装,且不影响安卓系统的方式。详见:Docker 加持的 安卓手机

当然,手机root后使用linux deploy也能安装docker。

文章链接:http://www.soloshine.top/index.php/archives/43
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇