48小时用 TRAE 把闲置小米手机改造成全能家庭服务器

48小时用 TRAE 把闲置小米手机改造成全能家庭服务器

一句话总结:一台吃灰的小米 12,被我改造成了搭载博客、AI 助手、监控面板的 7×24 小时在线家庭服务器——硬件是闲置的,总花费 0 元。


为什么要做这个项目?

相信每个人手里都有一两台淘汰的旧手机——卖不了几个钱,扔了又可惜。我的小米 12 也在抽屉里躺了大半年。

但有一天我突然想到:安卓手机本质上就是一台 Linux 电脑,它有 8 核 CPU、8GB+ 内存、256GB 存储,比我大学时候的笔记本配置都高!能不能把它当成一台服务器来用?

于是,一个"疯狂"的想法诞生了:把小米 12 改造成我的个人家庭服务器,跑博客、AI 聊天、系统监控……让这台吃灰的设备重新发光发热。


最终实现了什么?

经过一番折腾,这台小米 12 上现在同时运行着 7 个服务

服务 技术栈 功能
:house: Halo 博客 Java 21 + MariaDB 个人博客系统,支持 Markdown、主题切换
:robot: AI 聊天助手 Vue 3 + Koa 2 + Socket.IO 全功能 AI Agent,集成 DeepSeek 大模型,支持实时流式对话
:bar_chart: 系统监控面板 Flask + Gunicorn 自研 Dashboard,CPU/内存/磁盘/电池/温度/服务状态
:magnifying_glass_tilted_left: Glances 监控 Python 实时进程、网络、磁盘 I/O 详情
:link: 内网穿透 frp 通过云 VPS 将手机服务暴露到公网
:speech_balloon: 多平台机器人 Hermes Gateway 钉钉、微信、飞书等多平台 AI 机器人
:locked_with_key: SSH 远程管理 OpenSSH 随时随地从外网 SSH 登录手机,远程运维

技术架构:四层模型

外网用户 → 云 VPS ────frp隧道────→ 小米 12
                │                        │
        ┌───────┴────────┐      ┌───────┴──────────┐
        │  Layer 1: VPS  │      │  Layer 2: Termux  │
        │  frps :7000    │      │  frpc 客户端      │
        │  Nginx :80     │      │  SSHD :8022       │
        └────────────────┘      └───────┬───────────┘
                                        │
                          ┌─────────────┴───────────┐
                          │  Layer 3: proot Ubuntu  │
                          │  MariaDB :3306          │
                          │  Redis :6379            │
                          │  Nginx :8080            │
                          │  Flask :5000            │
                          │  Halo :8090             │
                          │  Glances :61208         │
                          │  Hermes Web UI :8648    │
                          └─────────────────────────┘

关键在于三层嵌套的虚拟化

  1. Android 系统 → 提供硬件基础(Root + Magisk 实现开机自启)
  2. Termux → 在安卓上运行 Linux 终端,安装 frp、SSH
  3. proot-distro Ubuntu → 在 Termux 内运行完整 Ubuntu 用户态,部署数据库、Web 服务

流量路径

  • 外网请求 → VPS Nginx:80 → frp 隧道 → 手机 proot Ubuntu 内对应服务
  • / → Halo 博客
  • /web/ → Flask 监控面板
  • /monitor/ → Glances 系统监控

TRAE Vibe Coding:一个人搞定全栈的秘诀

说实话,如果纯手写,光 Flask 监控面板那 803 行代码就够我写两天的。但有了 TRAE 的 Vibe Coding,整个开发效率提升了至少 5 倍

什么是 Vibe Coding?

Vibe Coding 是一种开发方式——你描述需求,AI 帮你写代码,你负责把控方向和调优。不是简单的代码补全,而是深度的结对编程。

1. Flask 监控面板 —— 从零到上线,2 小时

传统方式下,我需要:

  • 研究 /proc 文件系统格式
  • 手写 CPU 使用率计算逻辑
  • 调试 psutil 在 ARM 上的兼容性问题
  • 设计前端 HTML + CSS 布局

用 TRAE,我直接描述需求:

“帮我写一个 Flask Web 监控面板,深色主题,读取 /proc/stat、/proc/meminfo、/proc/net/dev 获取系统信息,前端用单页 HTML 展示:CPU 使用率进度条、内存饼图、磁盘挂载表、网络流量、电池电量、服务状态检测”

TRAE 直接生成了完整的 app.py,包含:

  • 所有系统信息的采集函数
  • /proc 文件解析逻辑(这个是体力活,AI 写太合适了)
  • Jinja2 模板的完整 HTML 页面
  • Basic Auth 认证
  • GPU 温度、电池状态等安卓特有指标

我只需要微调几个颜色值和布局,就能完美运行。

2. Shell 脚本编写 —— 批量生成运维工具

这个项目最费时间的是写各种启动脚本。手机环境特殊,每个服务都需要特殊处理:

# TRAE 生成的核心启动脚本(节选)
# 一键启动 MariaDB + Redis + Flask + Glances + Halo + Nginx + SSH

echo "🚀 正在启动所有服务..."

# 启动 MariaDB
mysqld_safe --datadir=/var/lib/mysql &
sleep 3

# 启动 Redis
redis-server --daemonize yes

# 启动 Flask (Gunicorn, 2 workers)
cd /opt/python && gunicorn -w 2 -b 0.0.0.0:5000 app:app --daemon

# 启动 Halo (Java 21, 128M 堆, MariaDB 方言)
java -Xms128m -Xmx256m -jar halo.jar \
  --spring.r2dbc.url=r2dbc:pool:mariadb://localhost:3306/halo \
  --spring.r2dbc.migrate.dialect=mariadb &

# 启动 Nginx
nginx -c /etc/nginx/nginx.conf

我把每个脚本的需求描述清楚,TRAE 就生成完整的 bash 代码,包括错误处理、日志输出、后台运行、进程保活等细节。整个项目我攒了 15 个运维脚本,覆盖启动、检查、修复、部署全流程。

3. 钉钉机器人修复 —— AI 排查 ARM 兼容问题

Hermes Gateway 接入钉钉机器人时,在 ARM 架构的 proot 环境下出现了各种诡异报错。我把完整的错误日志贴给 TRAE:

“这个报错是在 ARM64 proot Ubuntu 环境下运行 Python 钉钉 SDK 时出现的,帮我一键排查并修复”

TRAE 分析出是 cryptographypycryptodome 在 ARM 下的预编译包不兼容,生成了一个 454 行的自动化修复脚本,包括:

  • 检测 Python 依赖版本
  • 钉钉凭证验证
  • 适配器补丁注入
  • 一键回滚机制

这种跨平台兼容问题,要是自己排查起码要一个下午,AI 几分钟就搞定了。

4. Nginx 反向代理配置 —— 一句话生成

"帮我写一个 Nginx 配置,把 / 代理到 Halo :8090,/web/ 代理到 Flask :5000,/monitor/ 代理到 Glances :61208"

TRAE 秒出配置:

server {
    listen 8080;
    
    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    location /web/ {
        proxy_pass http://127.0.0.1:5000/;
        proxy_set_header Host $host;
    }
    
    location /monitor/ {
        proxy_pass http://127.0.0.1:61208/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

这个配置一次通过,不用调试。


关键技术挑战与解决

挑战 1:开机自启

安卓默认会杀掉后台进程。解决方案:

  • Magisk service.d:系统级开机脚本,手机重启后自动拉起 Termux → SSHD → frp → proot 内所有服务
  • termux-wake-lock 防止 CPU 休眠
  • 系统设置中锁定 Termux,防止被系统回收

挑战 2:内网穿透

家庭宽带有公网 IP?不存在的。解决方案:

  • 云 VPS 运行 frps(服务端,端口 7000)
  • 手机运行 frpc(客户端),建立多条隧道
  • VPS Nginx 做统一入口反向代理

这样只需要一台最低配的云服务器做中转,手机上的所有服务都能从公网访问。

挑战 3:ARM 兼容性

Java、MariaDB、Redis 在 ARM64 下都能直接用,但 Python 的某些加密库需要特殊处理。TRAE 帮我排查并生成了修复脚本,大大节省了时间。


自研监控面板:手机服务器的"仪表盘"

这是我最得意的模块——用 Flask 从零写了一个系统监控面板(803 行代码)

  • CPU:型号、核心数、频率、每核心使用率(进度条可视化)
  • 内存:总量/已用/可用/缓存/Swap
  • 磁盘:挂载表、读写速率
  • 网络:各接口 IP 地址、实时收发流量(下载/上传)
  • 电池:电量百分比、充电状态、温度(手机才有的特色指标!)
  • 进程:TOP 10 进程排行,内存占用一目了然
  • 服务状态:SSHD / Redis / MariaDB / Nginx / Gunicorn / Glances / frpc 一键检测

深色主题,手机和电脑都能完美浏览。访问 /web/ 就能看到这个仪表盘,所有关键指标一览无余。

# 电池信息采集(手机服务器专属功能)
def get_battery_info():
    """从 Android sysfs 读取电池信息"""
    battery = {"level": 0, "status": "未知", "temperature": 0}
    try:
        with open('/sys/class/power_supply/battery/capacity') as f:
            battery['level'] = int(f.read().strip())
        with open('/sys/class/power_supply/battery/status') as f:
            battery['status'] = f.read().strip()
        with open('/sys/class/power_supply/battery/temp') as f:
            battery['temperature'] = int(f.read().strip()) / 10
    except:
        pass
    return battery

项目文件结构一览

安卓/
├── config/              # frp、Nginx 配置
├── docs/                # 完整文档(948行 README)
├── hermes-web-ui/       # AI 聊天前端+后端 (Vue3+Koa2+Socket.IO)
├── python/              # Flask 监控面板 (app.py, 803行)
├── scripts/             # 15+ 运维 Shell 脚本
├── platform-tools/      # ADB 工具 + 开机自启脚本
└── tools/               # Halo、frp 等二进制包

一个人开发的效率秘诀

1. 让 AI 写"体力活"

CRUD 逻辑、Shell 脚本、Nginx 配置、HTML 模板——这些重复性代码全部交给 TRAE,我专注于架构设计和问题排查。

2. 先跑通,再优化

不要追求完美架构,第一天就要让博客能访问。TRAE 快速出 MVP 的能力让我能持续获得正反馈,保持开发热情。

3. 描述需求,而非写代码

用 TRAE 的核心技巧是说清楚你想要什么,而不是亲自写代码。我的习惯是把需求描述得像产品文档一样清晰,AI 就能一次生成高质量的代码。


写在最后

这个项目从想法到跑通,用了大约 2 个周末(4天)。如果没有 TRAE,我估计至少要花 2-3 周——光是写 Shell 脚本和排查 ARM 兼容问题就要耗掉大半时间。

做这个项目的过程中,我深刻感受到 AI 编程工具带来的生产力革命。以前一个人做全栈项目,前后端来回切换,大量时间花在"写代码"上。现在有了 TRAE,我可以把更多精力放在产品设计、系统架构、运维策略上——这些才是真正创造价值的地方。

闲置手机 ≠ 电子垃圾。只要肯折腾,它完全可以变成一台 0 成本的迷你服务器。如果你也有吃灰的旧手机,不妨试试——配合 TRAE,难度真的没那么大 :grinning_face_with_smiling_eyes:


项目中的凭据信息已在上线后更新替换,文中展示仅为示例。生产环境请务必修改默认密码和 API Key。

1 个赞

我之前是米粉,现在对米的忠诚度有点动摇

1 个赞

是的,还好我这个手机很早之前就root过,现在再想root不太可能这么简单喽

1 个赞

不过米的产品种类确实全,

牛!手机改家庭服务器

1 个赞