Exponer aplicaciones que corren en contenedores Docker dentro de tu homelab o servidor casero puede parecer complicado, especialmente si quieres que estas aplicaciones sean accesibles desde internet de manera segura. Pero no te preocupes, ¡es más fácil de lo que parece! En esta guía te mostraré cómo usar subdominios y Cloudflare para exponer contenedores Docker utilizando Nginx Proxy Manager como proxy inverso. Además, como ejemplo, configuraremos Immich, una alternativa a Google Fotos o iCloud, para sincronizar automáticamente tus fotos y videos desde tu móvil.
¿Qué es un DNS?
Para empezar, es importante entender lo básico: ¿qué es un DNS?
Internet es una red de computadores conectados entre sí, y cada uno tiene una dirección IP, que es como su "número de casa" en la red. Sin embargo, los humanos somos pésimos recordando números, por eso usamos nombres de dominio como www.google.com en lugar de 172.217.16.195
. Aquí es donde entra el DNS (Domain Name System): es como un directorio telefónico que convierte los nombres de dominio en direcciones IP.
Configuración en Cloudflare
El siguiente paso es configurar nuestro dominio en Cloudflare, el servicio que usaremos para gestionar nuestro DNS. Cloudflare no solo es confiable, sino que también ofrece características como protección DDoS y certificados SSL gratuitos.
Pasos para agregar un dominio a Cloudflare:
- Crea una cuenta en Cloudflare.
- Agrega tu dominio: Dentro del panel de control, selecciona "Add a Site" y sigue los pasos para agregar tu dominio.
- Configura los servidores DNS: Cloudflare te proporcionará los servidores DNS que debes configurar en el servicio donde compraste tu dominio.
- Verifica la configuración: Una vez hecho esto, verifica que todo esté funcionando correctamente.
Agregar una entrada DNS personalizada
Una vez que el dominio esté configurado, agrega una entrada A para apuntar tu dominio a la IP de tu servidor, y una entrada CNAME para el subdominio de Immich.
Configuración Nginx Proxy Manager
Nginx Proxy Manager (NPM) es una herramienta muy práctica que permite manejar múltiples servicios detrás de un proxy inverso, gestionar certificados SSL y hacer redirecciones de puertos de manera sencilla.
Instalación de Nginx Proxy Manager con Docker Compose
A continuación, te dejo un ejemplo básico de cómo puedes configurar NPM usando Docker Compose:
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: 'db'
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: 'npm'
DB_MYSQL_PASSWORD: 'npm'
DB_MYSQL_NAME: 'npm'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'mysql:5.7'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
Agregar redirección en el Router
Antes de configurar Immich en Nginx Proxy Manager, debes asegurarte de que los puertos estén correctamente redirigidos a través de tu router para que el tráfico de internet pueda acceder a tu servidor.
Pasos para configurar la redirección en un router Unifi:
- Accede al panel de control de tu router Unifi.
- Ve a "Configuración".
- Selecciona "Seguridad".
- Selecciona "Port Forwarding".
- Crea dos nuevas reglas:
- Regla 1: Redirige el puerto externo 80 al puerto 80 de la IP interna de tu homelab.
- Regla 2: Redirige el puerto externo 443 al puerto 443 de la IP interna.
Agregar Immich a Nginx Proxy Manager
Ahora que NPM está funcionando y está expuesto a través de nuestro router, vamos a agregar Immich como un servicio para que pueda ser accesible desde un subdominio.
-
En el panel de Nginx Proxy Manager, selecciona "Hosts" y luego "Proxy Hosts".
-
Completa los siguientes campos:
- Domain Names: El subdominio que usaremos (por ejemplo,
immich.tudominio.com
). - Scheme: Selecciona
http
ohttps
. - Forward Hostname/IP: La IP de tu servidor (o
localhost
si está en la misma máquina). - Forward Port: El puerto donde corre Immich (por ejemplo,
3000
).
- Domain Names: El subdominio que usaremos (por ejemplo,
-
Habilita SSL: Selecciona la opción de solicitar un nuevo certificado SSL usando Let’s Encrypt para asegurar tus conexiones.
Bonus: Configuración de DDNS
Si no tienes una IP estática, puedes usar DDNS para mantener tu dominio actualizado con tu IP dinámica. Recomiendo usar Cloudflare DDNS para automatizar este proceso.
Con todos estos pasos, ¡tu servicio Immich ya debería estar accesible desde internet, de manera segura y rápida!