Files
EZ-Homelab/docs/Traefik Routing Quick Reference.md
Kelin f141848a10 Add EZ-Homelab Enhanced Setup System
- Complete modular bash-based setup system replacing Python TUI
- Phase 1-4 implementation: Core Infrastructure, Configuration Management, Deployment Engine, Service Orchestration & Management
- 9 production-ready scripts: preflight.sh, setup.sh, pre-deployment-wizard.sh, localize.sh, generalize.sh, validate.sh, deploy.sh, service.sh, monitor.sh, backup.sh, update.sh
- Shared libraries: common.sh (utilities), ui.sh (text interface)
- Template-based configuration system with environment variable substitution
- Comprehensive documentation: PRD, standards, and quick reference guides
- Automated backup, monitoring, and update management capabilities
- Cross-platform compatibility with robust error handling and logging
2026-01-29 19:53:36 -05:00

2.5 KiB

Traefik Routing Quick Reference

Variables (used throughout):

  ${infrastructure}
  ${description}
  ${watchtower_enable}
  ${service}
  ${sso_enable}
  ${sablier_enable}
  ${traefik_enable}
  ${port}

Compose file labels section

Service metadata

- homelab.category=${infrastructure}
- homelab.description=${description}
- com.centurylinklabs.watchtower.enable=${watchtower_enable}

Traefik labels

Traefik labels are used for services on the same machine
They are ignored when the service is on a different machine

- "traefik.enable=${traefik_enable}"
- "traefik.http.routers.${service}.rule=Host(`${service}.${DOMAIN}`)"
- "traefik.http.routers.${service}.entrypoints=websecure"
- "traefik.http.routers.${service}.tls.certresolver=letsencrypt"
- "traefik.http.routers.${service}.middlewares=authelia@docker"
- "traefik.http.services.${service}.loadbalancer.server.port=${port}"

Sablier lazy loading

- sablier.enable=${sablier_enable}
- sablier.group=${SERVER_HOSTNAME}-${service}
- sablier.start-on-demand=true

External Host Yml Files

Recomended: use 1 yml file per host

external-host-production.yml

http:
  # Routes for External Host Services
  routers:
    # External Service Routing Template
    ${service}-${SERVER_HOSTNAME}:
      rule: "Host(`${service}.${DOMAIN}`)"
      entryPoints:
        - websecure
      service: ${service}-${SERVER_HOSTNAME}
      tls:
        certResolver: letsencrypt
      middlewares:
        - sablier-${SERVER_HOSTNAME}-${service}@file
        - authelia@docker

  # Middleware Definitions
  middlewares:


  # Service Definitions
  services:
    ${service}-${SERVER_HOSTNAME}:
      loadBalancer:
        servers:
          - url: "http://${SERVER_IP}:${port}"
        passHostHeader: true

sablier.yml

# Session duration set to 5m for testing. Increase to 30m for production.
http:
  middlewares:
    # Authelia SSO middleware
    authelia:
      forwardauth:
        address: http://authelia:9091/api/verify?rd=https://auth.${DOMAIN}/
        authResponseHeaders:
          - X-Secret
        trustForwardHeader: true

    # Sablier enabled Service Template
    sablier-${SERVER_HOSTNAME}-${service}:
      plugin:
        sablier:
          sablierUrl: http://sablier-service:10000
          group: ${SERVER_HOSTNAME}-${service}
          sessionDuration: 5m
          ignoreUserAgent: curl
          dynamic:
            displayName: ${service}
            theme: ghost
            show-details-by-default: true