Skip to content

Instantly share code, notes, and snippets.

@KrisKnez
Created June 11, 2025 23:54
Show Gist options
  • Save KrisKnez/d9bd2a048b3bd8e81e283777ddcbbb73 to your computer and use it in GitHub Desktop.
Save KrisKnez/d9bd2a048b3bd8e81e283777ddcbbb73 to your computer and use it in GitHub Desktop.
Traefik + Portainer + Virtualmin
services:
traefik:
image: "traefik:latest"
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
configs:
- source: traefik
target: /etc/traefik/conf/conf.yml
command:
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --providers.docker
- --providers.file.directory=/etc/traefik/conf
- --log.level=WARN
- --certificatesresolvers.leresolver.acme.tlschallenge=true
- [email protected]
- --certificatesresolvers.leresolver.acme.storage=/letsencrypt/acme.json
# For Debugging purposes
# - --api.insecure=true
# - --api.dashboard=true
ports:
- "80:80"
- "443:443"
# - "8888:8080" # For Debugging purposes
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
labels:
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
portainer:
image: portainer/portainer-ce:lts
command: -H unix:///var/run/docker.sock
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
labels:
- "traefik.enable=true"
# Frontend
- "traefik.http.services.frontend.loadbalancer.server.port=9000"
- "traefik.http.routers.frontend.rule=Host(`portainer.x.com`)"
- "traefik.http.routers.frontend.entrypoints=web,websecure"
- "traefik.http.routers.frontend.service=frontend"
- "traefik.http.routers.frontend.tls.certresolver=leresolver"
# Edge
- "traefik.http.routers.edge.rule=Host(`edge.x.com`)"
- "traefik.http.routers.edge.entrypoints=web,websecure"
- "traefik.http.services.edge.loadbalancer.server.port=8000"
- "traefik.http.routers.edge.service=edge"
- "traefik.http.routers.edge.tls.certresolver=leresolver"
volumes:
portainer_data:
configs:
traefik:
content: |
http:
routers:
virtualmin-web:
entryPoints:
- web
rule: "PathPrefix(`/`)"
priority: -1
service: virtualmin-web
services:
virtualmin-web:
loadBalancer:
servers:
- url: "http://host.docker.internal:8080"
tcp:
routers:
virtualmin-websecure:
entryPoints:
- websecure
rule: "HostSNI(`*`)"
service: virtualmin-websecure
tls:
passthrough: true
services:
virtualmin-websecure:
loadBalancer:
servers:
- address: "host.docker.internal:8443"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment