Skip to content

Instantly share code, notes, and snippets.

@KrisKnez
Created May 5, 2025 12:38
Show Gist options
  • Save KrisKnez/6eae9de028e6e961e200b8f2a29fe83a to your computer and use it in GitHub Desktop.
Save KrisKnez/6eae9de028e6e961e200b8f2a29fe83a to your computer and use it in GitHub Desktop.
Traefik + Portainer + Virtualmin
services:
traefik:
container_name: traefik
image: "traefik:latest"
restart: always
extra_hosts:
- "host.docker.internal:host-gateway"
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=./acme.json
#- "--api.insecure=true --api.dashboard=true" # For Debugging purposes
ports:
- "80:80"
- "443:443"
#- "8081:8080" # For Debugging purposes
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./acme.json:/acme.json"
- "./traefik-conf:/etc/traefik/conf"
labels:
- "traefik.enable=true"
# Middleware HTTP to HTTPS
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
# HTTP Fallback Router
- "traefik.http.routers.web-fallback.rule=PathPrefix(`/`)"
- "traefik.http.routers.web-fallback.entrypoints=web"
- "traefik.http.routers.web-fallback.priority=1"
- "traefik.http.routers.web-fallback.service=web-fallback-service@file"
# HTTPS Fallback Router
- "traefik.tcp.routers.websecure-fallback.rule=HostSNI(`*`)"
- "traefik.tcp.routers.websecure-fallback.entrypoints=websecure"
- "traefik.tcp.routers.websecure-fallback.service=websecure-fallback-service@file"
- "traefik.tcp.routers.websecure-fallback.tls.passthrough=true"
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.custom-dev-server.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.custom-dev-server.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:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment