services: traefik: image: traefik:v3.0 container_name: traefik restart: unless-stopped command: - --api.dashboard=true - --api.insecure=false - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --providers.docker=true - --providers.docker.exposedbydefault=false - --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL} - --certificatesresolvers.letsencrypt.acme.storage=/acme.json - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web - --log.level=INFO - --accesslog=true - --entrypoints.web.http.redirections.entrypoint.to=websecure - --entrypoints.web.http.redirections.entrypoint.scheme=https - --entrypoints.web.http.redirections.entrypoint.permanent=true ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik_acme:/acme.json labels: - "traefik.enable=true" - "traefik.http.routers.traefik.rule=Host(`traefik.${DOMAIN}`)" - "traefik.http.routers.traefik.entrypoints=websecure" - "traefik.http.routers.traefik.tls.certresolver=letsencrypt" - "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.traefik.middlewares=auth" # Basic Auth Beispiel (unbedingt Hash anpassen) - "traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$10$$8eO9J8Ef.LswB5K4l1.ZJ.qZBOa6ZXJ3X2y3zCZLCr9zHVJ8vJ2Ga" networks: - traefik-network - rezepte-network backend: labels: - "traefik.enable=true" - "traefik.http.routers.backend.rule=Host(`rezepte.${DOMAIN}`) && PathPrefix(`/api`)" - "traefik.http.routers.backend.entrypoints=websecure" - "traefik.http.routers.backend.tls.certresolver=letsencrypt" - "traefik.http.services.backend.loadbalancer.server.port=3001" - "traefik.http.routers.backend-uploads.rule=Host(`rezepte.${DOMAIN}`) && PathPrefix(`/uploads`)" - "traefik.http.routers.backend-uploads.entrypoints=websecure" - "traefik.http.routers.backend-uploads.tls.certresolver=letsencrypt" - "traefik.http.routers.backend-uploads.service=backend" - "traefik.http.routers.backend.priority=10" - "traefik.http.routers.backend-uploads.priority=10" frontend: labels: - "traefik.enable=true" - "traefik.http.routers.frontend.rule=Host(`rezepte.${DOMAIN}`)" - "traefik.http.routers.frontend.entrypoints=websecure" - "traefik.http.routers.frontend.tls.certresolver=letsencrypt" - "traefik.http.services.frontend.loadbalancer.server.port=80" - "traefik.http.routers.frontend.priority=1" phpmyadmin: labels: - "traefik.enable=true" - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.${DOMAIN}`)" - "traefik.http.routers.phpmyadmin.entrypoints=websecure" - "traefik.http.routers.phpmyadmin.tls.certresolver=letsencrypt" - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80" volumes: traefik_acme: driver: local networks: traefik-network: driver: bridge rezepte-network: external: false