services: traefik: image: &traefik-image traefik:${LVS_TRAEFIK_VERSION:-3.7} pull_policy: always labels: - 'traefik.enable=true' - 'traefik.http.routers.traefik.rule=Host(`traefik.${LVS_DOMAIN:-test}`)' - 'traefik.http.routers.traefik.service=api@internal' - 'traefik.http.services.traefik.loadbalancer.server.port=8080' restart: unless-stopped ports: - '80:80' - '443:443' extra_hosts: - 'host.docker.internal:host-gateway' command: - '--api=true' - '--log=true' - '--log.level=${LVS_TRAEFIK_LOG_LEVEL:-ERROR}' - '--accesslog=true' - '--ping=true' - '--ping.entryPoint=http' - '--metrics.prometheus=${LVS_TRAEFIK_PROMETHEUS:-true}' - '--metrics.prometheus.buckets=0.1,0.3,1.2,5.0,10.0' - '--metrics.prometheus.entrypoint=http' - '--providers.docker=true' - '--providers.docker.network=traefik' - '--providers.docker.defaultRule=Host(`{{ coalesce (index .Labels (default "com.docker.compose.project" (index .Labels "traefik.defaultRuleByLabel"))) (normalize .Name) }}.${LVS_DOMAIN:-test}`)' - '--providers.docker.exposedByDefault=false' - '--providers.docker.httpClientTimeout=900' - '--providers.docker.allowEmptyServices=false' - '--providers.file.directory=/etc/traefik/' - '--entrypoints.http.address=:80' - '--entrypoints.http.asDefault=true' - '--entrypoints.https.address=:443' - '--entrypoints.https.asDefault=true' # # Note: If you need https uncomment everything below, # append 'tls' to COMPOSE_PROFILES and setup LVS_DOMAIN=traefik.me - '--entrypoints.http.http.redirections.entrypoint.permanent=false' - '--entrypoints.http.http.redirections.entrypoint.to=https' - '--entrypoints.https.http.tls=true' # - '--entrypoints.vite.address=:5173' - '--entrypoints.vite.http.tls=true' volumes: - '${LVS_DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro' - '${LVS_TRAEFIK_VOLUME:-traefik}:/etc/traefik:ro' networks: - traefik - lvs healthcheck: test: [ "CMD", "wget", "--no-verbose", "--spider", "http://healthcheck.${LVS_DOMAIN:-test}/ping" ] retries: 3 timeout: 5s traefik-tls-helper: image: *traefik-image working_dir: /etc/traefik volumes: - '${LVS_TRAEFIK_VOLUME:-traefik}:/etc/traefik' entrypoint: [ "/bin/sh", "-c" ] profiles: [ tls ] command: - | mkdir -p certs; wget ${LVS_DOMAIN:-test}/cert.pem -O certs/cert.pem; wget ${LVS_DOMAIN:-test}/privkey.pem -O certs/privkey.pem; cat < tls.yml tls: stores: default: defaultCertificate: certFile: /etc/traefik/certs/cert.pem keyFile: /etc/traefik/certs/privkey.pem certificates: - certFile: /etc/traefik/certs/cert.pem keyFile: /etc/traefik/certs/privkey.pem # portainer: image: portainer/portainer-ce:${LVS_PORTAINER_VERSION:-2.19}-alpine labels: - 'traefik.enable=true' - 'traefik.http.routers.portainer.rule=Host(`portainer.${LVS_DOMAIN:-test}`)' - 'traefik.http.services.portainer.loadbalancer.server.port=9000' restart: unless-stopped extra_hosts: - 'host.docker.internal:host-gateway' volumes: - '${LVS_DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro' - '${LVS_PORTAINER_VOLUME:-portainer-data}:/data' networks: - lvs profiles: - all - portainer - management registry: image: registry:${LVS_REGISTRY_VERSION:-2.8} labels: - 'traefik.enable=true' - 'traefik.http.routers.registry.rule=Host(`registry.${LVS_DOMAIN:-test}`)' - 'traefik.http.services.registry.loadbalancer.server.port=5000' restart: unless-stopped volumes: - '${LVS_REGISTRY_VOLUME:-registry-data}:/var/lib/registry' networks: - lvs profiles: - all - registry - management registry-hub: image: konradkleine/docker-registry-frontend:${LVS_REGISTRY_HUB_VERSION:-v2} labels: - 'traefik.enable=true' - 'traefik.http.routers.portainer.rule=Host(`hub.registry.${LVS_DOMAIN:-test}`)' restart: unless-stopped environment: ENV_DOCKER_REGISTRY_HOST: 'registry' ENV_DOCKER_REGISTRY_PORT: 5000 ENV_MODE_BROWSE_ONLY: true networks: - lvs profiles: - all - registry - management # # knowledge: image: gollumwiki/gollum:${LVS_KNOWLEDGE_VERSION:-6.1} labels: - 'traefik.enable=true' - 'traefik.http.routers.knowledge.rule=Host(`knowledge.${LVS_DOMAIN:-test}`)' - 'traefik.http.services.knowledge.loadbalancer.server.port=4567' environment: GOLLUM_AUTHOR_USERNAME: '${LVS_KNOWLEDGE_AUTHOR_NAME:-Knowledge Base}' GOLLUM_AUTHOR_EMAIL: '${LVS_KNOWLEDGE_AUTHOR_EMAIL:-knowledge@example.com}' volumes: - '${LVS_KNOWLEDGE_VOLUME:-knowledge-data}:/wiki' - '${LVS_KNOWLEDGE_CONFIG:-/dev/null}:/etc/gollum/config.rb:ro' command: - '--h1-title' - '-math=mathjax' - '--critic-markup' - '--allow-uploads=page' - '--user-icons=identicon' - '--config=/etc/gollum/config.rb' networks: - traefik profiles: - all - knowledge # buggregator: image: butschster/buggregator:${LVS_BUGGREGATOR_VERSION:-2.3} labels: - 'traefik.enable=true' - 'traefik.http.routers.debug.rule=Host(`${LVS_DEBUG_SUBDOMAIN:-debug}.${LVS_DOMAIN:-test}`)' - 'traefik.http.routers.debug.service=debug' - 'traefik.http.services.debug.loadbalancer.server.port=8000' - 'traefik.http.routers.debug-dumper.rule=Host(`dumper.${LVS_DEBUG_SUBDOMAIN:-debug}.${LVS_DOMAIN:-test}`)' - 'traefik.http.routers.debug-dumper.service=debug-dumper' - 'traefik.http.services.debug-dumper.loadbalancer.server.port=9912' - 'traefik.http.routers.debug-smtp.rule=Host(`smtp.${LVS_DEBUG_SUBDOMAIN:-debug}.${LVS_DOMAIN:-test}`)' - 'traefik.http.routers.debug-smtp.service=debug-smtp' - 'traefik.http.services.debug-smtp.loadbalancer.server.port=1025' - 'traefik.http.routers.debug-monolog.rule=Host(`monolog.${LVS_DEBUG_SUBDOMAIN:-debug}.${LVS_DOMAIN:-test}`)' - 'traefik.http.routers.debug-monolog.service=debug-monolog' - 'traefik.http.services.debug-monolog.loadbalancer.server.port=9913' - 'traefik.docker.network=traefik' networks: traefik: aliases: - ${LVS_DEBUG_SUBDOMAIN:-debug}.lvs - dumper.${LVS_DEBUG_SUBDOMAIN:-debug}.lvs - smtp.${LVS_DEBUG_SUBDOMAIN:-debug}.lvs - monolog.${LVS_DEBUG_SUBDOMAIN:-debug}.lvs profiles: - all - buggregator volumes: knowledge-data: driver: local portainer-data: driver: local registry-data: driver: local traefik: driver: local networks: lvs: driver: bridge traefik: external: true