version: "3.8" services: traefik: image: traefik:latest command: - "--api.dashboard=true" - "--providers.docker=true" - "--entrypoints.http.address=:80" - "--entrypoints.https.address=:443" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=http" - "--certificatesresolvers.letsencrypt.acme.email=you@example.com" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "./letsencrypt:/letsencrypt" labels: - "traefik.enable=true" webapp: image: your-image-name:latest expose: - "3000" labels: - "traefik.enable=true" # HTTP Router - "traefik.http.routers.http-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)" - "traefik.http.routers.http-webapp.entrypoints=http" - "traefik.http.routers.http-webapp.middlewares=redirect-to-https" # HTTPS Router - "traefik.http.routers.https-webapp.rule=Host(`planpostai.com`) || Host(`www.planpostai.com`)" - "traefik.http.routers.https-webapp.entrypoints=https" - "traefik.http.routers.https-webapp.tls=true" - "traefik.http.routers.https-webapp.tls.certresolver=letsencrypt" - "traefik.http.routers.https-webapp.middlewares=redirect-to-www,gzip" - "traefik.http.routers.https-webapp.service=webapp-service" # Redirect HTTP → HTTPS - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" # Redirect non-www to www - "traefik.http.middlewares.redirect-to-www.redirectregex.regex=^https?://(?:www\\.)?(.+)" - "traefik.http.middlewares.redirect-to-www.redirectregex.replacement=https://www.$${1}" - "traefik.http.middlewares.redirect-to-www.redirectregex.permanent=true" # Enable GZIP - "traefik.http.middlewares.gzip.compress=true" # Service Definition - "traefik.http.services.webapp-service.loadbalancer.server.port=3000"