services: headscale: image: headscale/headscale:latest restart: unless-stopped container_name: headscale-server command: serve networks: - proxy volumes: - ./config/headscale.yaml:/etc/headscale/config.yaml - data:/var/lib/headscale labels: - "me.tale.headplane.target: headscale" - "traefik.enable=true" - "traefik.docker.network=proxy" - "traefik.http.services.headscale.loadbalancer.server.port=8080" - "traefik.http.services.headscale-metrics.loadbalancer.server.port=9090" ## SERVICE # Prod Router - "traefik.http.routers.headscale.rule=Host(`hs.forust.xyz`)" - "traefik.http.routers.headscale.entrypoints=websecure" - "traefik.http.routers.headscale.service=headscale" - "traefik.http.routers.headscale.tls=true" # Local Router - "traefik.http.routers.headscale-local.rule=Host(`hs.workstation.internal`)" - "traefik.http.routers.headscale-local.entrypoints=websecure" - "traefik.http.routers.headscale-local.service=headscale" - "traefik.http.routers.headscale-local.tls=true" # Dev Router - "traefik.http.routers.headscale-dev.rule=Host(`hs.gigaforust.internal`)" - "traefik.http.routers.headscale-dev.entrypoints=websecure" - "traefik.http.routers.headscale-dev.service=headscale" - "traefik.http.routers.headscale-dev.tls=true" ## METRICS # Prod Router - "traefik.http.routers.headscale-metrics.rule=Host(`hs.forust.xyz`) && PathPrefix(`/metrics`)" - "traefik.http.routers.headscale-metrics.entrypoints=websecure" - "traefik.http.routers.headscale-metrics.service=headscale-metrics" - "traefik.http.routers.headscale-metrics.tls=true" # Local Router - "traefik.http.routers.headscale-metrics-local.rule=Host(`hs.workstation.internal`) && PathPrefix(`/metrics`)" - "traefik.http.routers.headscale-metrics-local.entrypoints=websecure" - "traefik.http.routers.headscale-metrics-local.service=headscale-metrics" - "traefik.http.routers.headscale-metrics-local.tls=true" # Dev Router - "traefik.http.routers.headscale-metrics-dev.rule=Host(`hs.gigaforust.internal`) && PathPrefix(`/metrics`)" - "traefik.http.routers.headscale-metrics-dev.entrypoints=websecure" - "traefik.http.routers.headscale-metrics-dev.service=headscale-metrics" - "traefik.http.routers.headscale-metrics-dev.tls=true" headplane: image: ghcr.io/tale/headplane:latest container_name: headplane restart: unless-stopped ports: - '3000:3000' volumes: - ./config/headplane.yaml:/etc/headplane/config.yaml - ./config/headscale.yaml:/etc/headscale/config.yaml - headplane-data:/var/lib/headplane - /var/run/docker.sock:/var/run/docker.sock:ro networks: - proxy healthcheck: test: [ "CMD", "/bin/hp_healthcheck" ] interval: 30s timeout: 5s start_period: 5s retries: 3 volumes: data: headplane-data: name: headplane_data networks: proxy: external: true