Introducción#
Hace unos meses decidí dejar de usar servicios cloud caros y montar mi propia infraestructura en casa. La solución que encontré fue combinar Docker con Traefik. Funciona bien y ahora tengo varios servicios corriendo bajo HTTPS sin tocar manualmente un certificado. Te cuento cómo lo hice.
Qué necesitas#
Un servidor con Docker instalado (cualquier máquina Linux con 2GB de RAM sobra). Un dominio propio. Un poco de paciencia con DNS. Eso es todo.
El plan#
Voy a usar Traefik como reverse proxy. Maneja automáticamente los certificados Let’s Encrypt, enruta el tráfico a los contenedores correctos y sirve HTTPS sin que tengas que hacer nada una vez configurado. Es limpio y funciona.
Paso 1: Preparar Docker Compose#
Crea una carpeta para tu stack:
mkdir -p ~/docker/traefik
cd ~/docker/traefikEste será tu archivo docker-compose.yml:
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.yml:/traefik.yml
- ./acme.json:/acme.json
networks:
- web
networks:
web:
driver: bridgeCrea el archivo traefik.yml:
api:
insecure: true
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: tu-email@example.com
storage: acme.json
httpChallenge:
entryPoint: web
providers:
docker:
endpoint: unix:///var/run/docker.sock
exposedByDefault: false
file:
filename: traefik.ymlCrea el archivo acme.json con permisos restrictivos:
touch acme.json
chmod 600 acme.jsonPaso 2: Levanta Traefik#
docker-compose up -dVerifica que está corriendo:
docker-compose logs traefikPaso 3: Configura tu dominio#
En tu proveedor DNS, apunta tu dominio (y un wildcard) a la IP pública de tu servidor:
example.com A TU_IP_PUBLICA
*.example.com A TU_IP_PUBLICAEspera a que se propague (15 minutos típicamente).
Paso 4: Añade tu primer servicio#
Voy a añadir un ejemplo simple. Modifica el docker-compose.yml:
services:
traefik:
# ... config anterior
whoami:
image: traefik/whoami
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.example.com`)"
- "traefik.http.routers.whoami.entrypoints=websecure"
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
networks:
- webRedeploy:
docker-compose up -dEspera 30 segundos y entra en https://whoami.example.com. El certificado se genera automáticamente.
Paso 5: Añade más servicios#
Para cada servicio nuevo, solo añade labels similares a los del whoami. Traefik se encarga del resto. Es así de simple.
Consideraciones prácticas#
Backup de acme.json: Es tu archivo de certificados. Hazle backup regularmente o perderás los certificados.
Firewall: Abre puertos 80 y 443 en tu router apuntando al servidor.
IP dinámica: Si tu ISP cambia tu IP (común en residencial), usa un servicio DDNS.
Dashboard: Traefik tiene un dashboard en http://localhost:8080 (solo desde la máquina local por seguridad).
Problemas comunes#
Si los certificados no se generan, revisa los logs: docker-compose logs traefik. Usualmente es un problema de DNS o firewall.
Si un servicio no responde, verifica que el label port coincida con el puerto interno del contenedor.
Conclusión#
Con esta setup he montado blog, wiki, nextcloud y otros servicios en casa sin gastar en SSL o en reverse proxy comercial. Traefik es una bestia en esto. Vale mucho la pena dedicar una hora a configurarlo bien.