services: minio: image: minio/minio:latest container_name: minio restart: unless-stopped networks: - traefik-public environment: - TZ=Europe/Berlin - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD} command: server /data --console-address ":9001" volumes: - minio-data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 10s retries: 3 start_period: 10s labels: - "traefik.enable=true" # API Router (S3-compatible endpoint) - "traefik.http.routers.minio-api.rule=Host(`${MINIO_API_DOMAIN:-minio-api.michaelschiemer.de}`)" - "traefik.http.routers.minio-api.entrypoints=websecure" - "traefik.http.routers.minio-api.tls=true" - "traefik.http.routers.minio-api.tls.certresolver=letsencrypt" - "traefik.http.routers.minio-api.service=minio-api" - "traefik.http.routers.minio-api.middlewares=default-chain@file" - "traefik.http.services.minio-api.loadbalancer.server.port=9000" # Console Router (Web UI) - "traefik.http.routers.minio-console.rule=Host(`${MINIO_CONSOLE_DOMAIN:-minio.michaelschiemer.de}`)" - "traefik.http.routers.minio-console.entrypoints=websecure" - "traefik.http.routers.minio-console.tls=true" - "traefik.http.routers.minio-console.tls.certresolver=letsencrypt" - "traefik.http.routers.minio-console.service=minio-console" - "traefik.http.routers.minio-console.middlewares=default-chain@file" - "traefik.http.services.minio-console.loadbalancer.server.port=9001" volumes: minio-data: name: minio-data networks: traefik-public: external: true