Личный сервер на Hetzner VPS работал, но платить за него не хотелось. Дешёвые общие машины не тянули Chrome в сервисе Surf, отдельный CPU обходился дорого, а собирать новый ПК не хотелось на фоне взлетевших цен на DRAM. В ящике уже лежал CMF Phone 1: восемь ARM-ядер, 8 ГБ RAM, 128 ГБ flash, Wi-Fi 6, 5G-модем и батарея как бесперебойник. Из него и сделали сервер.
Первая попытка заменить Android обычным Linux провалилась. postmarketOS загружался, но Wi-Fi, Bluetooth и графика не работали, экран гас, а восстановление Nothing OS через Windows-утилиту прошивки едва не превратило телефон в кирпич. Урок: Android уже умеет работать со всем железом, а для запуска Linux-приложений не обязательно выбрасывать драйверы.
Вторая попытка оставила Android и сделала Termux хостом. Termux дал OpenSSH, runit, Caddy, Cloudflared и нормальный Unix. Termux:Boot поднимает всё после перезагрузки, Tailscale даёт стабильный адрес. Ansible-профиль отключает агрессивную экономию батареи, wake lock и always-on VPN держат телефон в строю. Цепочка восстановления: Android → Tailscale → Termux:Boot → runit → сервисы → health checks.
Приложения приходят как ARM64 OCI-образы. Сначала их запускали через PRoot, но Chrome в Surf упирался в накладные расходы userspace-трансляции. Тогда телефон зарутовали и перешли на настоящий chroot с тем же Debian. Разница оказалась огромной, поэтому так же перевели остальные сервисы. Docker и компилятор на телефоне не нужны. Правда, chroot — не защитная граница: ядро и сетевой стек общие.
Конфигурация живёт в Ansible-репозитории. Версии и digest зафиксированы, деплой идёт по SSH, файлы ставятся за атомарным symlink current, откат — это смена пина. Секреты в Ansible Vault, пароль от vault получают через 1Password SSH-агента.
Для HTTP-трафика используется Cloudflare Tunnel: Cloudflared держит одно исходящее соединение, Caddy раздаёт hostname по loopback-сервисам. Порта в роутере не нужны. Для Surf такой путь не подходил: соединение чувствительно к задержке, TLS-соединение привязано к серверу, а подключается старый iPad. Поэтому дома работает Cloudflare DDNS и проброс одного порта, а для роуминга TLS-поток Surf заворачивают в WebSocket. Cloudflare проксирует его, но сквозное шифрование сохраняется. Это добавляет лишний round trip, зато работает через туннель с любым интернетом.
Сейчас на телефоне два слоя. Android и Termux отвечают за железо, сеть, входящий трафик и супервизию: runit, Tailscale, Caddy, Cloudflared, DDNS, панель. В rooted-окружениях — Surf с Chrome, финансовый трекер, screen sharing и мелочи. Данные финансового трекера в SQLite, есть бэкапы. Для мониторинга сервис собирает CPU, память, диск, uptime, батарею, температуру и доступность, показывает Vue-панель на https://dash.cmf через LAN или tailnet.
Итог: если есть rootable ARM64-телефон, это рабочий вариант вместо вечной аренды VPS. Тихо, экономно, с батареей как UPS. Но ценные данные — только с бэкапами, а chroot не для защиты от враждебных нагрузок. Android остаётся странным сервером, но зато он уже лежит дома.