services: {{ service_name }}: image: docker.io/library/traefik:v3.5.4 {% if not swarm_enabled %} container_name: {{ container_name }} {% endif %} {% if ports_enabled %} ports: - "80:80" - "443:443" {% if traefik_dashboard_enabled %} - "8080:8080" # Dashboard (don't use in production) {% endif %} {% endif %} volumes: - /var/run/docker.sock:/var/run/docker.sock:ro {% if not swarm_enabled %} - ./config/:/etc/traefik/:ro - ./certs/:/var/traefik/certs/:rw {% else %} {% if swarm_volume_mode == 'mount' %} - {{ swarm_volume_mount_path }}:/var/traefik/certs/:rw {% elif swarm_volume_mode == 'local' %} - traefik_certs:/var/traefik/certs/:rw {% elif swarm_volume_mode == 'nfs' %} - traefik_certs:/var/traefik/certs/:rw {% endif %} {% endif %} {% if traefik_tls_enabled %} {% if not swarm_enabled %} - ./.env.secret:/.env.secret:ro {% endif %} env_file: - ./.env {% endif %} {% if swarm_enabled %} configs: - source: traefik_config target: /etc/traefik/traefik.yaml - source: traefik_middlewares target: /etc/traefik/files/middlewares.yaml - source: traefik_tls target: /etc/traefik/files/tls.yaml - source: traefik_external_services target: /etc/traefik/files/external-services.yaml {% endif %} environment: - TZ={{ container_timezone }} healthcheck: test: ["CMD", "traefik", "healthcheck", "--ping"] interval: 30s timeout: 5s retries: 3 start_period: 10s {% if network_enabled %} networks: - {{ network_name }} {% endif %} {% if swarm_enabled %} {% if traefik_tls_enabled %} secrets: - source: {{ traefik_tls_acme_secret_name }} target: /.env.secret mode: 0400 {% endif %} deploy: mode: {{ swarm_placement_mode }} {% if swarm_placement_mode == 'replicated' %} replicas: {{ swarm_replicas }} {% endif %} {% if swarm_placement_host %} placement: constraints: - node.hostname == {{ swarm_placement_host }} {% endif %} {% else %} restart: {{ restart_policy }} {% endif %} {% if swarm_enabled %} {% if swarm_volume_mode in ['local', 'nfs'] %} volumes: traefik_certs: {% if swarm_volume_mode == 'nfs' %} driver: local driver_opts: type: nfs o: addr={{ swarm_volume_nfs_server }},{{ swarm_volume_nfs_options }} device: ":{{ swarm_volume_nfs_path }}" {% endif %} {% endif %} configs: traefik_config: file: ./config/traefik.yaml traefik_middlewares: file: ./config/files/middlewares.yaml traefik_tls: file: ./config/files/tls.yaml traefik_external_services: file: ./config/files/external-services.yaml {% if traefik_tls_enabled %} secrets: {{ traefik_tls_acme_secret_name }}: file: ./.env.secret {% endif %} {% endif %} {% if network_enabled %} networks: {{ network_name }}: {% if network_external %} external: true {% else %} {% if swarm_enabled %} driver: overlay attachable: true {% else %} driver: bridge {% endif %} name: {{ network_name }} {% endif %} {% endif %}