将闲置的旧 Android 手机转化为 headless web 服务器,是低成本、环保的系统实践方案。相较树莓派,手机内置电池管理、传感器和无线模块,适合媒体文件分发场景。通过 Termux 环境部署 Caddy 或 Nginx,可实现静态资源服务,同时借助 USB 共享和 wakelock 机制,确保稳定联网与低功耗运行。本文聚焦工程化参数:从环境搭建到监控阈值,提供可复制清单,避免常见坑点如进程休眠和电池过耗。
Termux 环境初始化与服务器安装
首先,从 F-Droid 或 GitHub 下载最新 Termux APK(Google Play 版已弃更),安装后执行基础配置:
pkg update && pkg upgrade -y
termux-change-repo # 选中国镜像,提升下载速度
pkg install vim wget git curl -y
termux-setup-storage # 授权访问 /storage/shared
安装 Caddy(推荐,轻量自动 HTTPS)或 Nginx(静态优化强):
- Caddy:
pkg install caddy,二进制即用,支持 WebDAV。 - Nginx:
pkg install nginx,默认监听 8080 端口。
Caddy 优势在于单文件配置,低内存(实测闲置 50MB),适合手机沙箱。创建 Caddyfile:
{
admin off
}
:8080 {
root * /data/data/com.termux/files/home/public
file_server browse
encode gzip
}
启动:caddy run --config Caddyfile。自定义网页放入 ~/public,如媒体目录 ~/public/media。Nginx 配置 /data/data/com.termux/files/usr/etc/nginx/nginx.conf,修改 listen 8080; 和 root /data/data/com.termux/files/home/public;。
验证:手机浏览器访问 http://localhost:8080,局域网用 ifconfig 查 IP(如 192.168.x.x:8080)。
USB 联网与端口转发
手机无公网 IP 时,用 USB 共享主机网络(tethering)。连接 PC(Linux/Mac/Windows),启用 USB 共享:
- Android 设置 > 网络 > 热点与共享 > USB 共享。
- PC 端:手机获
192.168.42.xIP(主机 192.168.42.129)。
端口转发暴露服务,避免 NAT 限制:
- ADB 方式(推荐,无 root):
adb reverse tcp:8080 tcp:8080,PC 浏览器访问localhost:8080即代理手机服务。持久化:脚本循环while true; do adb reverse ...; sleep 5; done。 - Termux 内置:安装
pkg install termux-api,用termux-usb监听,但 ADB 更稳。 - Socat 转发(高级):
pkg install socat,socat TCP-LISTEN:8080,fork TCP:192.168.42.129:8080。
参数阈值:转发延迟 <50ms,并发限 10(手机 CPU 单核),超时 30s。媒体服务场景:挂载 ~/storage/shared/DCIM 照片,Caddy file_server 支持范围请求,低带宽优化。
Wakelock 与 24/7 保活
Android 电池优化易杀后台进程。核心:wakelock 保持 CPU 唤醒。
pkg install termux-api
termux-wake-lock # 获取唤醒锁,通知栏图标显示
termux-notification --id 1 --title "Server Running" --content "Caddy on 8080"
后台运行:nohup caddy run --config Caddyfile > server.log 2>&1 &。服务管理:pkg install termux-services,创建 /data/data/com.termux/files/usr/var/service/caddy/run:
#!/data/data/com.termux/files/usr/bin/sh
exec caddy run --config /data/data/com.termux/files/home/Caddyfile
启用:sv-enable caddy; sv up caddy。
低功耗参数:
- CPU 限 20%:
echo 0 > /sys/module/cpu_boost/parameters/input_boost_ms(需 root,或用renice 10 $(pgrep caddy))。 - 屏幕常灭:
termux-brightness 0。 - 电池阈值:监控
dumpsys battery,脚本警报 <20%:if [ $(dumpsys battery | grep level | cut -d' ' -f2) -lt 20 ]; then termux-notification --content "Low Battery"; fi。 - 实测:Fairphone 2 闲置 CPU 5%、RAM 280MB/1.8GB,服务 24h 耗电 5-8%(插电最佳)。
媒体服务优化与监控清单
静态媒体(如照片 / 视频)适合手机:Caddy encode gzip,Nginx sendfile on。配置范围请求:
Caddy:
handle /media/* {
@range {
header Range *
}
respond @range 206
file_server
}
参数清单:
- 并发限:Caddy
max_concurrent 5,Nginxworker_connections 20。 - 缓存:
@stale-if-error 1h,浏览器预取。 - 日志监控:
tail -f server.log | grep "500\|404",htop 观 CPU<30%、RAM<500MB。 - 回滚:服务崩
sv restart caddy,ADB 重连。 - 安全:
basicauth或 Nginxallow 192.168.42.0/24;。
风险控制:无 root 避 SELinux 坑;旧机型(如 Android 7+)Termux 兼容好;热插拔 USB 断网脚本重连。
此方案落地门槛低,旧手机即服务器,优于 RPi 热管理和 NTP 精度。扩展:rclone 挂载云盘,frp 内网穿透公网。
资料来源:
- far.computer 示例:Fairphone 2 postmarketos 托管网页,资源占用低。1
- Termux Nginx/Caddy 教程:pkg 安装与 socat 转发实践。[2]
[2]: Termux 社区文档与 CSDN 案例(2025)。
(正文字数:约 1050 字)