01 / BACKGROUND

让一台手机,拥有新的用途。

这次实验以 vivo X100 Ultra 为运行设备,在 Android 的 Termux 环境中搭建 Node.js 中继服务。SQLite 保存需要持久化的数据,Cloudflare Tunnel 为服务提供公网访问链路。

记录关注的不只是「服务启动了」,还有后台运行、开机自启、数据持久化,以及实际故障发生时如何逐层定位。

02 / ARCHITECTURE

一条清晰的请求链路。

ClientCloudflareAndroid · TermuxNode.js ↔ SQLite
Architecture sketch · 后续可替换为完整架构图

应用、数据存储与隧道分别承担不同职责。应用健康检查正常,并不代表公网隧道一定正常;排障时需要分别验证。

03 / DEPLOYMENT

从启动,到持续运行。

  1. 运行环境

    在 Termux 中运行 Node.js 服务,并使用 SQLite 持久化数据。

  2. 后台服务

    通过服务管理保持应用和隧道运行,同时设置开机自启。

  3. 公网连接

    使用远程管理的 Cloudflare Tunnel 连接本地应用。

  4. 分别验收

    先检查本地 /health,再验证公网健康检查与存储状态。

04 / TROUBLESHOOTING

一次隧道连接故障。

公网访问出现 Cloudflare 1033,而本地 Node.js 健康检查正常。隧道日志出现 QUIC timeout: no recent network activity,将问题范围缩小到了隧道连接层。

CHANGE / 切换传输协议
TUNNEL_TRANSPORT_PROTOCOL=http2

强制使用 HTTP/2 后,启动日志显示 Initial protocol http2。已有实践记录报告公网健康检查恢复为 HTTP 200。

这次恢复支持了「QUIC 链路不稳定」的判断;长期稳定性仍需要继续观察,不能用一次成功检查代替持续运行验证。

05 / RESULT

一个可工作的起点。

截至 2026 年 10 月 6 日的实践记录,中继链路已恢复可用,健康检查返回:

{"ok":true,"store":"sqlite","version":"1.0.0"}
HTTP=200

接下来继续观察 HTTP/2 隧道的运行情况,并把部署过程与故障证据整理成可复用的技术记录。

A small experiment. A useful beginning.