Configuración docker-compose de Headscale para proxy inverso HTTPS de Traefik

Esta configuración está basada en nuestro post anterior Cómo configurar un servidor headscale en 5 minutos usando docker-compose y nuestra configuración de Traefik con certificados wildcard de Cloudflare (ver Configuración simple de docker-compose para Traefik con Lets Encrypt Cloudflare DNS-01 y TLS-ALPN-01 y retos HTTP-01)

headscale-docker-compose.yml
services:
  headscale:
    image: headscale/headscale:latest
    volumes:
      - ./config:/etc/headscale/
      - ./data:/var/lib/headscale
    ports:
      # - 27896:8080
      - 9090:9090
      - 3478:3478/udp
    command: serve
    restart: unless-stopped
    depends_on:
      - postgres
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.headscale.rule=Host(`headscale.mydomain.com`)"
      - "traefik.http.routers.headscale.entrypoints=websecure"
      - "traefik.http.routers.headscale.tls.certresolver=cloudflare"
      - "traefik.http.routers.headscale.tls.domains[0].main=mydomain.com"
      - "traefik.http.routers.headscale.tls.domains[0].sans=*.mydomain.com"
      - "traefik.http.services.headscale.loadbalancer.server.port=8080"

  postgres:
    image: postgres:14
    restart: unless-stopped
    volumes:
      - ./pg_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}

Echa un vistazo a artículos similares por categoría: Headscale Redes VPN