Skip to content

Instantly share code, notes, and snippets.

@nemoinho
Last active May 10, 2023 12:43
Show Gist options
  • Select an option

  • Save nemoinho/847078f3685ae7024f930bf94ffba124 to your computer and use it in GitHub Desktop.

Select an option

Save nemoinho/847078f3685ae7024f930bf94ffba124 to your computer and use it in GitHub Desktop.
Traefik mit docker-compose

Traefik via docker-compose

Hier ein Beispiel für Traefik, als selbstständiger Service in einer einzelnen docker-compose Datei und einem Service in einer anderen Datei.

Das externe Netz web wurde vorher einmalig erstellt mit dem Befehl:

docker network create web

Das macht das anschließende Arbeiten etwas leichter, weil der Name einfacher zu merken ist :)

Am besten sollte man die Datei acme.json ebenfalls vorher einmal anlegen, weil Docker sonst gelegentlich durcheinander kommt (Ordner anlegt o.Ä.)

touch acme.json

Bei mir sieht die Ordnerstruktur so aus:

~/docker
|- docker-compose.traefik.yaml
|- traefik.toml
|- acme.json
'- projects/
   |- snappass/
   |  '- docker-compose.snappass.yaml
   '- gitea/
      |- docker-compose.gitea.yaml
      |- data/
      '- mysql/
version: '3'
services:
app:
image: gitea/gitea
networks:
- default
- web
ports:
- "22:22"
labels:
- "traefik.docker.network=web"
- "traefik.frontend.rule=Host:gitea.example.com"
- "traefik.enable=true"
- "traefik.port=3000"
restart: always
environment:
USER_UID: 1000
USER_GID: 1000
volumes:
- ./data:/data
depends_on:
- db
db:
image: mariadb
command: ["--character-set-server=utf8", "--collation-server=utf8_general_ci"]
environment:
MYSQL_ROOT_PASSWORD: gitea
MYSQL_USER: gitea
MYSQL_PASSWORD: gitea
MYSQL_DATABASE: gitea
volumes:
- ./mysql:/var/lib/mysql
networks:
web:
external: true
version: '2.4'
services:
app:
image: nemoinho/snappass
networks:
- web
- default
labels:
- "traefik.docker.network=web"
- "traefik.frontend.rule=Host:snappass.example.com"
- "traefik.enable=true"
- "traefik.port=5000"
restart: always
depends_on:
- redis
redis:
image: redis:alpine
networks:
web:
external: true
version: '2.4'
services:
traefik:
image: traefik
restart: always
ports:
- 80:80
- 443:443
networks:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ./acme.json:/acme.json
container_name: traefik
networks:
web:
external: true
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "example.com"
watch = true
exposedByDefault = false
[acme]
email = "letsencrypt-verificationmail@example.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment