POV you develop an application, access it at localhost:3000 but are wondering how to serve it over HTTPs to your users. Enter [Traefik](https://traefik.io/traefik/) - The Cloud Native Application Proxy: - Handle HTTP/HTTPS traffic - Provide automatic SSL/TLS certificates via Let's Encrypt - Route requests to services based on domain names `Dockerfile` ```docker services: traefik: image: traefik:v2.10 container_name: traefik command: # Handle HTTP-to-HTTPS redirection and serve apps over HTTPS - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" # Discover Docker containers and expose only containers with explicit labels - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" # Issue certificates using Let's Encrypt HTTP-01 challenge - "--certificatesresolvers.letsencrypt.acme.email=calee.work@proton.me" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" ports: - "80:80" - "443:443" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "letsencrypt:/letsencrypt" networks: - traefik_network restart: unless-stopped volumes: letsencrypt: networks: traefik_network: name: traefik_network driver: bridge ``` Now, in your application Dockerfiles, simply add the labels ```docker labels: - "traefik.enable=true" - "traefik.http.routers.metabase.rule=Host(`<APP_NAME.DOMAIN.COM>`)" - "traefik.http.routers.metabase.entrypoints=websecure" - "traefik.http.routers.metabase.tls.certresolver=letsencrypt" - "traefik.http.services.metabase.loadbalancer.server.port=<PORT>" ``` And in your hosting provider, add an `A record` for your domain pointing to your server's IP address.