Open Source

Mi servidor es un teléfono: convierte un Android de 199$ en un servidor doméstico

Un desarrollador sustituyó su VPS de Hetzner por un CMF Phone 1 rooteado — 8 núcleos ARM, 8GB RAM, batería integrada como UPS, ejecutando el navegador Surf, un rastreador financiero y más vía Termux + chroot + Ansible + Cloudflare Tunnel. Desglose completo de la arquitectura, la lección de rendimiento PRoot vs chroot, y las advertencias honestas antes de intentarlo.

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
Mi servidor es un teléfono: convierte un Android de 199$ en un servidor doméstico

Conclusiones clave

  • Un desarrollador sustituyó su VPS de Hetzner por un CMF Phone 1 rooteado (199$): 8 núcleos ARM, 8GB RAM, 128GB flash, Wi-Fi 6, módem 5G, y una batería que actúa como UPS gratis — hardware que ya estaba guardado en un cajón.
  • La arquitectura ganadora mantiene el Android stock como capa de hardware y trata Termux como el SO host: OpenSSH, runit (supervisión de servicios), Caddy, Cloudflared, con un chroot rooteado para cargas de trabajo de aplicaciones que necesitan rendimiento de syscalls nativos.
  • PRoot vs chroot es la lección clave de rendimiento: la traducción en userspace de PRoot (ptrace) mata las cargas sensibles a latencia como Chrome; un chroot real deja que los procesos lleguen al kernel de Android con syscalls nativos — 'la mejora no fue sutil.'
  • La gestión de batería de Android lucha contra los servidores: debes aplicar un perfil host (wake lock persistente, desactivar estados idle, eximir Termux/Tailscale de restricciones de fondo, desactivar suspensión de Wi-Fi) o los servicios mueren silenciosamente.
  • Ingress sin port forwarding: Cloudflare Tunnel (solo saliente) sirve HTTP público, Tailscale maneja el SSH de administración, y ambos sobreviven al cambio de red del teléfono — el teléfono sigue siendo teléfono, desenchúfalo y llévalo a cualquier sitio.

Respuestas clave

¿De verdad puedes usar un teléfono como servidor doméstico?

Sí — y es cada vez más práctico. Un Android moderno tiene 8+ núcleos ARM, 6-12GB RAM, almacenamiento flash rápido, Wi-Fi 6, datos móviles, y una batería que actúa como UPS integrado. Con el Android stock como capa de hardware, Termux como entorno host (OpenSSH, runit, Caddy, Cloudflared), y un chroot rooteado para cargas Linux, un CMF Phone 1 de 199$ sustituyó con éxito a un VPS de Hetzner ejecutando un navegador remoto, rastreador financiero y varias apps web.

¿Cuál es la diferencia entre PRoot y chroot para ejecutar apps Linux en Android?

PRoot corre completamente en userspace usando ptrace para interceptar y traducir operaciones de filesystem/procesos — sin necesidad de root, pero cada syscall paga un impuesto de traducción que mata las cargas pesadas de CPU y sensibles a latencia (como Chrome). Chroot requiere root pero monta el filesystem Linux nativamente: los procesos ejecutan syscalls reales directamente contra el kernel de Android. Para la carga del navegador del autor, pasar de PRoot a chroot produjo una mejora dramática de rendimiento. Ojo: chroot es una capa de compatibilidad, no un límite de seguridad — comparte kernel, pila de red y UIDs de Android.

¿Cómo llega el tráfico a un teléfono tras el internet doméstico?

Tres vías: (1) Cloudflare Tunnel — cloudflared hace una conexión saliente desde el teléfono, Cloudflare enruta los hostnames públicos a través de ella hasta Caddy en localhost; sin reglas de entrada en el router, y los hostnames siguen al teléfono si cambia de red. (2) Tailscale — VPN always-on para acceso SSH/admin privado con dirección estable. (3) Para apps sensibles a latencia que fijan TLS (como Surf), Cloudflare DDNS + un puerto reenviado en casa, con el flujo TLS envuelto en un WebSocket para roaming a través del túnel.

¿Por qué la gestión de batería de Android es un problema para servidores?

La gestión de energía de Android es excelente en su trabajo normal (matar tareas en segundo plano para ahorrar batería) y terrible para un dispositivo que finge ser servidor — los servicios mueren silenciosamente cada pocas horas. La solución es un perfil host: instalar un wake lock persistente, desactivar estados idle ligero/profundo, eximir Termux/Termux:Boot/Tailscale de restricciones de fondo, desactivar el limitador de procesos hijo y la suspensión de Wi-Fi, y configurar Tailscale como VPN always-on. La cadena de recuperación entonces funciona: Android arranca → VPN conecta → Termux:Boot inicia runit → runit inicia todos los servicios.

¿Qué hace especial al CMF Phone 1 como hardware de servidor?

Por 199$ ofrece 8 núcleos ARM, 8GB RAM, 128GB flash, Wi-Fi 6, 5G, y batería de 5000mAh. A diferencia de los teléfonos de cristal sellado, tiene una tapa trasera desmontable con tornillos (fácil reemplazo de batería cuando se degrada por estar enchufado 24/7) y ranura microSD de hasta 2TB. Los dispositivos MediaTek suelen ser impopulares entre desarrolladores, pero el CMF Phone 1 tiene una comunidad activa de desbloqueo de bootloader con soporte de ROMs Android 14/15.

Mi servidor es un teléfono: convierte un Android de 199$ en un servidor doméstico

El mercado de DRAM se había vuelto “completamente estúpido.” El VPS barato se quedaba sin recursos cada vez que Chrome tenía trabajo real. Y el upgrade de CPU dedicada costaba más al mes de lo que merecía un navegador personal.

Así que el desarrollador de seg6.space hizo algo que suena ridículo y es cada vez más racional: rootearon un CMF Phone 1 que ya poseían y lo convirtieron en su servidor doméstico.

Ocho núcleos ARM. 8 GB de RAM. 128 GB de flash. Wi-Fi 6. Un módem 5G. Y una batería que se comporta como un mini UPS — todo ya pagado, todo guardado en un cajón.

Hoy ese teléfono ejecuta un navegador remoto (Surf + Chrome), un rastreador financiero personal, un servicio de compartir pantalla y varias apps web — sobreviviendo reinicios, desplegando desde Git y manteniéndose accesible cuando se mueve entre redes. El VPS ha desaparecido.

Aquí está la arquitectura completa, las lecciones ganadas a pulso y las advertencias honestas.

La primera mala idea: reemplazar Android

El camino más limpio parecía flashear una distribución Linux real. El CMF Phone 1 tiene un port de postmarketOS — y su página de dispositivo tiene suficientes cajas verdes para volver optimista a una persona imprudente.

El autor fue esa persona. Lo que pasó por alto: todo lo marcado como roto. Wi-Fi, Bluetooth, aceleración de hardware — las cosas que hacen útil a un teléfono como servidor. El resultado fue una pantalla de bienvenida, una pantalla negra, y ni servidor ni teléfono. Recuperar el Nothing OS stock requirió una VM de Windows en QEMU, peleas con drivers MediaTek, y finalmente una máquina Windows física.

Lección aprendida: Android ya tiene drivers funcionales para cada pieza de este hardware — Wi-Fi, gestión de energía, batería, GPU, módem, cada detalle del vendor. Tirar eso por un userspace convencional fue el trade equivocado.

“No necesitaba que el teléfono se volviera una máquina Linux normal. Necesitaba que ejecutara aplicaciones Linux de forma fiable mientras Android seguía haciendo el trabajo específico de hardware que se le da bien.”

Termux es el sistema operativo host

El segundo intento mantuvo el Android stock e hizo de Termux el entorno host. Proporciona OpenSSH, runit (supervisión de servicios), Caddy, Cloudflared, gestión de paquetes y “tooling Unix suficientemente normal.”

La arquitectura tiene dos capas:

CapaResponsabilidadPiezas
Host Android / Termuxhardware, red, ingress, supervisiónrunit, Tailscale, Caddy, Cloudflared, DDNS, dashboard de ops
Residentes Linux rooteadoscompatibilidad de aplicaciones + cargasSurf/Chrome, Finanzas, Screen Share, apps varias

Termux no es una VM — sus procesos corren contra el kernel Linux de Android, pero su userspace basado en Bionic difiere lo suficiente de Debian como para que las imágenes Linux existentes no entren directamente. Esa división resultó ser una ventaja: Termux se queda como el pequeño plano de control mientras cada aplicación trae el filesystem que espera.

Los servicios están supervisados por runit. La cadena de recuperación es lo que importa:

Android arranca → VPN Tailscale always-on → Termux:Boot → runit → servicios residentes → health checks

El teléfono puede reiniciarse sin que nadie lo note.

La segunda mala idea: PRoot

La mayoría de aplicaciones venían como imágenes OCI Linux ARM64, y proot-distro las hizo correr bajo Debian sin modificación. PRoot intercepta operaciones de filesystem y procesos en userspace — sin root, sin kernel especial. Los servicios web ordinarios funcionaron bien.

La carga del navegador Surf fue la excepción. Iniciar procesos, abrir librerías, recorrer paths, leer perfiles, mover datos de captura — todo cruzaba la capa de traducción de PRoot. Había CPU disponible; Chrome simplemente no podía alcanzarla eficientemente.

La solución: rootear el teléfono — no para reemplazar Android, sino para montar el filesystem Debian correctamente y entrar con un chroot real. Mismo ciclo de vida (runit desde Termux), misma config, mismos datos — pero syscalls nativos contra el kernel de Android en lugar del overhead ptrace de PRoot.

“¡La mejora no fue sutil!”

Un helper root crea un mount namespace privado, enlaza los paths necesarios, entra con chroot, baja privilegios e inicia el entrypoint de la imagen. Ni Docker ni un compilador necesitan existir en el teléfono.

Infraestructura, no un montón de historial de shell

Nada de servidor mascota ensamblado con comandos que olvidarías en una semana. Todo el host es estado gestionado por Ansible en un repo privado:

release/imagen OCI → digest fijado en Git → Ansible vía SSH → archivos versionados → symlink atómico "current" → servicio runit → health checks
  • Releases fijadas por digest/checksum, instaladas tras un symlink atómico current; un checksum o health check fallido detiene el deploy; rollback = revertir el pin.
  • Secretos viven cifrados en Ansible Vault. La contraseña del vault se deriva pidiendo al agente SSH de 1Password del workstation que firme un challenge fijo — la clave privada nunca toca el teléfono. Los valores de runtime se renderizan en el almacenamiento privado de Termux en el deploy.
  • La recuperación ante desastres es la recompensa real: si el teléfono muere, otro ARM64 rootable puede llevarse al mismo estado desde Git — sin reconstruir historial de shell.

Llevando tráfico a un teléfono tras el internet doméstico

Sin IP estática, sin reglas de entrada, y el teléfono debe seguir siendo teléfono — desenchúfalo, llévalo a otro sitio, y el servidor te sigue.

  • Cloudflare Tunnel para apps HTTP: cloudflared hace una conexión saliente; Cloudflare enruta cada hostname a través de ella hasta Caddy en localhost. Sin reglas de router. El túnel se reconecta en cualquier red.
  • Tailscale para administración: dirección privada estable, ssh cmf desde cualquier punto de la tailnet.
  • El caso especial de Surf: es sensible a latencia y fija TLS (cliente iPad antiguo). En casa: Cloudflare DDNS + un puerto reenviado. Para roaming: el flujo TLS completo de Surf va envuelto en un WebSocket ordinario — Cloudflare reenvía el WebSocket mientras la conexión autenticada sigue cifrada extremo a extremo dentro.

La batería del teléfono cubre el traslado. Los servicios públicos no saben qué Wi-Fi hay debajo.

Qué corre realmente

  • Surf — la carga exigente: Chromium moderno en iPhones/iPads antiguos, transmitiendo video/audio H.264 mientras recibe input táctil y de teclado. Por qué al autor le importaba el overhead de syscalls.
  • Rastreador financiero personal — con SQLite, copias de seguridad automatizadas fuera del dispositivo y ruta de restauración probada.
  • Servicio de compartir pantalla + un puñado de apps web pequeñas.
  • Dashboard de observabilidad — un servicio nativo que recoge CPU (los 8 núcleos), memoria, almacenamiento, uptime, batería, temperatura y cada residente de runit, servido como UI Vue embebida accesible solo vía LAN/tailnet. La vista de logs descubre los directorios de servicio en runtime — añadir un residente no requiere enseñar su nombre a la UI.

¿Deberías hacer esto?

El caso honesto a favor: si tienes un teléfono ARM64 moderno y rootable sin usar, esto es mucho menos ridículo de lo que suena. Hardware silencioso, bajo consumo, flash storage, Wi-Fi, pantalla integrada para recuperación, una batería que actúa como mini UPS. El Android stock soporta el hardware; Termux + chroot rooteado ejecuta una cantidad sorprendente de software Linux normal. Cuando la alternativa es pagar indefinidamente por un VPS lento o caro, es una opción genuinamente útil — no solo un truco.

Las advertencias honestas:

  1. Las copias de seguridad automatizadas fuera del dispositivo no son negociables. Nunca confíes datos irreemplazables a un solo teléfono.
  2. Rootear expande el perímetro de confianza. Chroot es un entorno de compatibilidad, no aislamiento de cargas hostiles — los residentes comparten kernel, pila de red y UIDs del sistema de Android.
  3. La trampa del montaje. Aviso de la comunidad: borrar archivos del contenedor (rm -rf) mientras los directorios de Android siguen montados puede borrar las particiones físicas del teléfono. Desmonta antes de limpiar.
  4. Sin aceleración GPU. Los puentes VirGL/Vulkan produjeron páginas corruptas y peor rendimiento — el renderizado por software ganó el día.
  5. Android sigue siendo Android. Periódicamente quiere “optimizar” tu servidor, y una futura actualización puede crear una sorpresa nueva.

Conclusión

“Es silencioso, con respaldo de batería, suficientemente rápido, accesible desde cualquier sitio, reproducible desde Git, y ya está en mi casa. Empecé esto intentando ahorrar en un VPS. Terminé con un teléfono rooteado ejecutando mi infraestructura personal — y de alguna manera es mucho más satisfactorio.”

El patrón teléfono-como-servidor se sitúa en la intersección de varias tendencias de 2026: precios de DRAM que hacen mala idea el hardware nuevo, costes de VPS que no dejan de subir, teléfonos dramáticamente sobreaprovisionados para su trabajo diario, y tooling (Termux, proot-distro, Tailscale, Cloudflare Tunnel) lo bastante maduro para hacerlo funcionar.

Las lecciones de infraestructura se transfieren más allá de los teléfonos: los syscalls nativos vencen a la traducción en userspace, los túneles solo-salientes vencen al port forwarding, y un host gestionado por Git vence a un servidor mascota siempre. El teléfono es solo el lugar más satisfactorio donde aplicarlas.