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.