#Infraestructura Reverse Proxy + Docker
Modelo Nexus42 (Producción)
1. Filosofía de arquitectura
- Nginx = Portero principal del servidor
- Traefik = Reverse proxy interno para contenedores
- Docker = Ejecuta servicios aislados
- Una sola red Docker fija
- Ningún servicio expone puertos al exterior
- Un único punto de entrada
2. Flujo de tráfico
Cliente Internet
↓
Nginx (bare metal)
↓
Traefik (docker)
↓
Servicio docker (n8n, bookstack, odoo...)
3. Nginx (host)
Rol
- Escucha en 80/443
- Si existe vhost específico → lo gestiona
- Si NO existe vhost → proxy a Traefik
Default vhost (conceptual)
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Traefik escucha en:
127.0.0.1:8081
4. Docker Network (Base del sistema)
Red única fija
Nombre:
traefik-net
Subnet:
172.19.0.0/16
Creación (si fuera necesario en DR)
docker network create --driver bridge --subnet 172.19.0.0/16 traefik-net
Todos los contenedores accesibles públicamente se conectan a esta red.
5. Postgres (host) y pg_hba.conf
Permitir acceso solo a la red docker:
host all all 172.19.0.0/16 scram-sha-256
Después:
systemctl reload postgresql
6. Traefik (Docker)
Ubicación
/opt/traefik
Red
traefik-net (external)
Puertos publicados
127.0.0.1:8081 -> 8080 (dashboard)
No publica 80 ni 443 directamente.
Providers
- Docker
- File (para dashboard auth)
Función
- Detecta contenedores vía labels
- Rutea por Host()
7. Patrón obligatorio para cada servicio Docker
Estructura
/opt/servicio/
docker-compose.yml
.env
Reglas obligatorias
- name: fijo
- container_name: fijo
- networks: traefik-net
- SIN sección ports:
- labels traefik correctamente definidas
- volumen nombrado explícitamente
8. Plantilla Base de Servicio
name: servicio
services:
servicio:
image: imagen:latest
container_name: servicio
restart: unless-stopped
env_file:
- .env
volumes:
- servicio_data:/ruta
networks:
- traefik-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.servicio.rule=Host(`dominio.tld`)"
- "traefik.http.routers.servicio.entrypoints=web"
- "traefik.http.services.servicio.loadbalancer.server.port=PUERTO_INTERNO"
volumes:
servicio_data:
name: servicio_data
networks:
traefik-net:
external: true
9. Regla crítica
Ningún servicio:
- publica puerto al host
- crea red automática default
- usa IPs dinámicas fuera de traefik-net
10. Procedimiento Disaster Recovery
Orden de restauración:
- Instalar Docker
- Crear red traefik-net
- Restaurar Nginx
- Restaurar Traefik
- Restaurar Postgres + hba
- Restaurar contenedores por carpetas /opt/...
- Verificar DNS
11. Comprobaciones rápidas
Ver red:
docker network inspect traefik-net
Ver contenedor en red:
docker inspect servicio | grep Networks -A 5
Ver routers en Traefik:
docker logs traefik
12. Estado actual del Nexus
Servicios dockerizados detrás de Traefik:
- n8n
- bookstack
- odoo
Acceso unificado vía Nginx → Traefik.
Resumen conceptual
- Nginx = puerta
- Traefik = recepcionista
- Docker = oficinas internas
- Red fija = pasillo común
- Postgres = bóveda
Sin doble proxy.
Sin puertos abiertos.
Sin redes aleatorias.