Ir al contenido

Cómo montar tu propia infraestructura web en casa con Docker y Traefik: desde cero hasta HTTPS automático

Rogelio Guerra Riverón
Autor
Rogelio Guerra Riverón
Construyendo mi propia infraestructura web desde cero. Aquí documento cada paso: servidores, redes, contenedores y lo que vaya surgiendo.

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.

Si no tienes un servidor dedicado, tienes opciones según presupuesto y consumo: una Raspberry Pi 3 B+ (enlace de afiliado) es perfecta para servicios ligeros con un consumo mínimo de energía. Si necesitas más potencia, un portátil como el Lenovo V15 (enlace de afiliado) es una opción muy versátil: además de servidor doméstico, tiene la capacidad para correr software industrial de marcas como Siemens (TIA Portal, SIMATIC) u otros entornos de automatización que exigen recursos reales. Un equipo, dos usos.

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/traefik

Este 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: bridge

Crea 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.yml

Crea el archivo acme.json con permisos restrictivos:

touch acme.json
chmod 600 acme.json

Paso 2: Levanta Traefik
#

docker-compose up -d

Verifica que está corriendo:

docker-compose logs traefik

Paso 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_PUBLICA

Espera 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:
      - web

Redeploy:

docker-compose up -d

Espera 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.


Equipamiento recomendado
#

Enlaces de afiliado. Sin coste extra para ti.