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

Etiquetas:

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *