El desarrollo moderno nos ha vendido una mentira cómoda: que para poner una aplicación en producción necesitamos una arquitectura serverless compleja, pipelines de CI/CD ultra-abstraídos y una constelación de servicios en AWS que cobran por cada milisegundo de ejecución.
Nos hemos convertido en siervos de un tecnofeudalismo funcional. Pagamos renta por la tierra (el cómputo) y por las herramientas que bien podríamos gestionar nosotros mismos.
Cuando las caídas de GitHub o los cobros sorpresa de los microservicios en la nube empiezan a dictar el ritmo y costo de tus proyectos, es momento de dar un paso atrás, ensuciarse las manos y construir tu propio harness de desarrollo personal. Un entorno diseñado para que el código perdure, aproveche los recursos reales del hardware y explote la tecnología a tu propio beneficio.
Aquí explico cómo tomé el control de mi infraestructura usando Bun, Nginx UI y Cloudflare.
La Anatomía del Escape: Menos Capas, Más Control
La meta era simple: una arquitectura limpia, rápida y soberana. Nada de intermediarios mágicos que añaden latencia y costos invisibles.
-
El Motor: Bun como JS Runtime
Node.js es genial, pero Bun es ridículamente rápido y viene con todo incluido (bundler, test runner, package manager). Ejecutar mis servicios directamente sobre Bun en una instancia Linux propia me permite exprimir cada ciclo del procesador sin pagar el "impuesto de abstracción" de los microservicios en la nube. -
La Inteligencia Local: RAG e ICL (In-Context Learning)
Aquí es donde el harness se vuelve realmente inteligente. En lugar de depender de pipelines de entrenamiento costosos o de ceder mis datos privados a las nubes de terceros para personalizar la IA, uso RAG e In-Context Learning (ICL). Al inyectar el contexto dinámico al vuelo (como mis notas locales, el historial de este chat o bases de datos propias), mi agente opera de forma ultra-personalizada y soberana, explotando modelos potentes directamente sobre mis datos sin que mi conocimiento quede cautivo en sus feudos. -
El Panel de Control: Nginx UI
Gestionar Nginx a mano editando archivos de configuración en/etc/nginx/sites-availablepuede ser tedioso y propenso a errores de sintaxis que tiran el servidor. Nginx UI resuelve esto dándonos una interfaz visual limpia para gestionar hosts virtuales, proxies inversos y certificados SSL (Let's Encrypt) en segundos, manteniendo la ligereza de Nginx sin el peso de paneles masivos como cPanel. -
El Escudo y Enrutador: Cloudflare
Apuntar el DNS directamente a nuestra IP pública (en modo DNS-only para certificar, y proxy naranja después) nos da la protección de Cloudflare y la flexibilidad de enrutar el tráfico de forma segura hacia nuestra infraestructura soberana.
Implementación Paso a Paso
1. Correr el servicio en Bun
En lugar de depender de despliegues serverless que tardan minutos, mi app de Bun corre directamente como un proceso nativo en el puerto 3000 (o el que decidas):
bun run src/index.ts
Esto arranca en milisegundos y consume una fracción de la memoria que requeriría un contenedor Docker pesado o una función Lambda fría.
2. Levantar Nginx UI de forma limpia
Para no ensuciar la instancia, levantar Nginx UI mediante Docker (o su instalador nativo) es la vía más rápida para tener el panel listo:
docker run -d \
--name nginx-ui \
-p 80:80 -p 443:443 -p 9000:9000 \
-v /etc/nginx:/etc/nginx \
-v /etc/ssl:/etc/ssl \
-v /var/www:/var/www \
-v /var/run/nginx.pid:/var/run/nginx.pid \
-v /var/log/nginx:/var/log/nginx \
--restart always \
uozi/nginx-ui:latest
Una vez arriba, accedemos al puerto 9000 para configurar los proxies inversos apuntando al puerto local de nuestra app de Bun (http://127.0.0.1:3000).
3. Configurar Cloudflare
En la configuración DNS de Cloudflare, creamos un registro A apuntando a la IP pública de la instancia. Durante la configuración inicial de Let's Encrypt en Nginx UI, lo dejamos como "DNS Only" (nube gris) para que el reto HTTP se valide correctamente, y una vez activo el certificado, encendemos el Proxy (nube naranja).
El "Aha Moment": Hacer que el código perdure
El mayor aprendizaje de este proceso no es técnico, es de mentalidad.
Cuando delegas todo tu flujo a la nube administrada, tu código está diseñado para expirar. Está atado a las APIs específicas de un proveedor, a sus límites de rate-limit y a sus esquemas de cobro. Si ellos cambian las reglas del juego, tu proyecto muere o se encarece.
Al construir este harness personal, redescubrí el placer de la soberanía. El código corre en hardware real, se ejecuta al instante y responde solo ante ti. No hay "cold starts", no hay cuotas sorpresa a fin de mes por llamadas de API, y sobre todo, no dependes de que un gigante tecnológico tenga un buen día para que tu aplicación siga funcionando.
La tecnología debe explotarse para beneficio propio, no para alimentar monopolios. La soberanía se construye bit a bit.