把旧手机变成一台服务器

我桌上有一台淘汰的 Android 手机。屏幕碎了,电池也不太行,但它有 16 核的 CPU、 32 GB 内存和 221 GB 存储。这个配置,比很多入门级云服务器高出一个数量级。

于是就有了这个站——它没有跑在机房里,而是跑在这台手机里。

先泼一盆冷水

手机不是服务器,差距不在性能,在三个地方:

  • 没有公网 IP。移动网络在运营商 NAT 后面,外部连不进来,这是硬伤。
  • 后台会被杀。Android 的 Doze 机制会主动冻结后台进程,各家定制系统更激进。
  • 数据不可靠。UFS 闪存坏了不可恢复,而且随时可能因为一次进水全部消失。

所以定位要摆正:当练习机、内网服务、临时演示,非常合适;当正式服务器,不合适。

装 Termux

必须从 F-Droid 装,不要用 Play 商店那个版本——它 2022 年就停更了,包源是坏的。

pkg update && pkg upgrade -y
pkg install -y openssh git python3 proot-distro

passwd          # 设登录密码
sshd            # 启动 SSH,默认 8022 端口
termux-wake-lock

termux-wake-lock 是关键。它让 CPU 在锁屏后不休眠,否则你合上屏幕, sshd 十分钟后就没了。

让它在重启后自己活过来

还需要装一个 Termux:Boot,它会在开机后执行 ~/.termux/boot/ 目录下的脚本:

mkdir -p ~/.termux/boot
cat > ~/.termux/boot/start.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/sh
sleep 10
termux-wake-lock
sshd
EOF
chmod +x ~/.termux/boot/start.sh

注意两个细节:一是 sleep 10,开机瞬间网络和存储还没准备好; 二是脚本必须可执行,否则会被静默跳过。

三个必须做的系统设置

光装软件不够,系统层面不做这些,服务照样会死:

  1. 电池优化设为「不限制」
  2. 允许 Termux 自启动(国产 ROM 路径各不相同,搜「自启动」)
  3. 把 Termux 加进 Doze 白名单:cmd deviceidle whitelist +com.termux

结果

现在这台手机跑着 sshd、nginx 和一个 Python 接口,开机自动拉起, 锁屏不掉线。功耗大约 5 瓦——比一个路由器高不了多少。

代价是:它随时可能因为一块电池而报废。所以这台机器上只放能重来的东西。

← 返回文章列表