Traefik
Requerimientos previos
- Tener instalado Docker
 
Pasos
- Crear una red para Traefik
 - Crear una contraseña para Tablero de control de Traefik
 - Crear archivos de configuración
- Configuración general de Traefik: traefik.yaml
 - Configuración dinámica: dynamic.yaml
 - Configuración de middlewares
 
 - Levantar contenedor
 - Acceder al tablero de control
 
Configuración previa
Crear una red para Traefik
sudo docker network create traefik
Archivos de configuración
.env
MAIN_DOMAIN=ejemplo.com
VOLUME_PATH=/var/www/dashboard.ejemplo.com
compose.yaml
services:
  traefik:
    image: traefik
    container_name: traefik
    ports:
      - "80:80"
      - "443:443"
      - "8082:8082"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - ./traefik.yaml:/etc/traefik/traefik.yaml:ro
      - ./dynamic.yaml:/etc/traefik/dynamic.yaml:ro
      - traefik-certs:/certs
    networks:
      - traefik
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.middlewares.traefik-auth.basicauth.removeheader=true"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=user:password"
      - "traefik.http.routers.traefik.rule=Host(`dashboard.${MAIN_DOMAIN}`)"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.routers.traefik.tls.certresolver=tls"
      - "traefik.http.routers.traefik.entrypoints=https"
      - "traefik.http.routers.traefik.middlewares=traefik-auth,secHeaders@file,autodetectContenttype@file"
    healthcheck:
      test: ["CMD", "traefik", "healthcheck", "--ping"]
      interval: 60s
      timeout: 5s
      retries: 3
      start_period: 5s
volumes:
  traefik-certs:
    name: traefik-certs
networks:
  traefik:
    external: true
dynamic.yaml
tls:
  options:
    default:
      minVersion: VersionTLS12
      cipherSuites:
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256
      curvePreferences:
        - CurveP521
        - CurveP384
http:
  middlewares:
    # agregar middlewares aquí
Middlewares de ejemplo
Los middlewares se pueden configurar el segundo archivo de configuración, dyamic.yaml, que permite actualizar la configuración en tiempo de ejecución, sin reiniciar el contenedor.
Más información en https://doc.traefik.io/traefik/v2.5/middlewares/http/headers/
Encabezados seguros (secHeaders)
http:
  middlewares:
    secHeaders:
      headers:
        browserXssFilter: true
        contentTypeNosniff: true
        frameDeny: true
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000
        customFrameOptionsValue: "SAMEORIGIN"
        customResponseHeaders:
          server: ""
          x-powered-by: ""    
Política de permisos (permissionsPolicy)
http:
  middlewares:
    permissionsPolicy:
      headers:
        permissionsPolicy: "autoplay=(self), fullscreen=(self), picture-in-picture=(self), screen-wake-lock=(self), sync-xhr=(self), web-share=(self)"
Política de referidos (referrerPolicy)
http:
  middlewares:
    referrerPolicy:
      headers:
        referrerPolicy: "no-referrer-when-downgrade"
Autodetección de content-type (autodetectContenttype)
http:
  middlewares:
    autodetectContenttype:
      contentType: {}