Hotdry.
systems-engineering

用 Termux 在旧 Android 手机上部署 Caddy/Nginx:USB 联网与无头 24/7 运行

通过 Termux 部署 Caddy 或 Nginx,实现 USB 共享联网、端口转发和 wakelock 保活,支持低功耗媒体文件服务,24/7 无头运行。

将闲置的旧 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.x IP(主机 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 socatsocat 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
}

参数清单:

  1. 并发限:Caddy max_concurrent 5,Nginx worker_connections 20
  2. 缓存@stale-if-error 1h,浏览器预取。
  3. 日志监控tail -f server.log | grep "500\|404",htop 观 CPU<30%、RAM<500MB。
  4. 回滚:服务崩 sv restart caddy,ADB 重连。
  5. 安全basicauth 或 Nginx allow 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 字)

查看归档