Why NextWhy Next
Volver a la lista
💻 Desarrollo3 min de lectura

Self-hosting en un mini PC con Docker + Cloudflare Tunnel

Cómo publicar varios servicios web de forma segura con un solo mini PC en casa. HTTPS con Cloudflare Tunnel sin abrir puertos, y todo funcionando con Docker Compose.

Lo esencial

Levantas los servicios con Docker Compose en un mini PC y les conectas dominio y HTTPS con Cloudflare Tunnel (cloudflared) sin abrir puertos. No necesitas configurar el router, ni IP fija, ni renovar certificados.

En esta página

Las facturas de la nube pesan más de lo que parece en los proyectos pequeños. Yo tengo este blog y varios servicios más corriendo en un solo mini PC en casa. Aquí comparto cómo.

Por qué un mini PC

  • Está siempre encendido y la electricidad cuesta unas pocas monedas al mes
  • Con Docker, el entorno de despliegue es idéntico al de la nube
  • Si el tráfico crece, ya migrarás entonces

El único problema es este: "¿cómo expongo mi red doméstica al exterior de forma segura?".

No abras puertos

La forma tradicional es port forwarding en el router + DDNS + renovación de certificados. Es engorroso y, además, equivale a abrir tu red doméstica directamente a internet: peligroso.

En su lugar usamos Cloudflare Tunnel. En el mini PC, cloudflared abre una conexión hacia afuera en dirección a Cloudflare, y el tráfico entra por ese túnel. Los puertos de entrada abiertos hacia el exterior son 0.

사용자 → Cloudflare(HTTPS) → 터널 → 미니 PC 의 컨테이너
  • No necesitas IP pública ni port forwarding
  • Cloudflare gestiona automáticamente el certificado HTTPS
  • Da igual que tu IP sea dinámica

Agrupar los servicios con Docker Compose

Cada servicio corre en un contenedor. Si es una app de Next.js, la compilas con output: "standalone" para generar una imagen ligera.

services:
  blog:
    build:
      context: .
      dockerfile: apps/blog/Dockerfile
    container_name: why-next-blog
    restart: unless-stopped
    networks: [api]

networks:
  api:
    external: true   # cloudflared 와 같은 네트워크

La clave es ponerlos en la misma red de Docker que cloudflared. Así el túnel puede encontrar cada servicio por el nombre de su contenedor.

Conectar el dominio

En el dashboard de Cloudflare (o en la configuración del túnel) añades un Public Hostname.

blog.example.com  →  http://why-next-blog:3001

Y eso es todo. Ejecutas docker compose up -d --build y unos minutos después el sitio se abre en tu dominio.

En resumen

  • Mini PC + Docker = despliegue barato e idéntico al de la nube
  • Dominio y HTTPS sin abrir puertos gracias a Cloudflare Tunnel
  • Contenedores en la misma red que cloudflared
  • Mapeo dominio → contenedor:puerto con Public Hostname

Para servicios pequeños, esta combinación aguanta muchísimo tiempo. Yo mismo tengo varias apps corriendo así, y sigo ampliando las cosas que he creado.

Preguntas frecuentes

Mi IP de casa es dinámica, ¿hay problema?

Ninguno. Con Cloudflare Tunnel es el mini PC el que abre la conexión saliente hacia Cloudflare, así que no necesitas IP pública, ni port forwarding, ni DDNS.

¿Tiene algún costo?

Cloudflare Tunnel en sí es gratuito. Solo necesitas pagar el dominio para empezar.

Artículos relacionados