Objectif de l’article – mettre en place Traefik en frontend et PiHole Fichier « traefik.toml ». Pas de discours, du factuel.
J’ai décidé de mettre mon docker-compose dans le dossier « /srv/docker », avec un dossier « conf » pour y stocker les fichiers de configuration.
Mise à jour le 20/07/2020 : suppression des fichiers toml pour Traefik (migration vers des fichiers .yml), mise à jour générale des fichiers, utilisation d’un fichier de variables d’environnement, ajout de commentaires et précisions quant à la mise en place générale des conteneurs.
Vous pouvez être confronté à un problème de démarrage des conteneurs, notamment à cause du service « resolved » de votre Linux qui écoute déjà sur le port 53. Pour se faire, effectuez ces deux commandes :
systemctl stop systemd-resolved.service
systemctl disable systemd-resolved.service
Logiciels exploités :
- Ubuntu 18.04 LTS
- Docker CE = 19.03.8
- Docker-compose = 1.25.4
- Traefik = 2.3 « picodon »
- PiHole = 5.0
Ci-dessous le fichier « traefik.yml » (/srv/docker/conf/traefik.yml)
global:
sendAnonymousUsage: false
checkNewVersion: false
api:
#insecure: true
dashboard: true
#debug: true
log:
filePath: "/etc/traefik/applog.log"
level: INFO
providers:
docker:
endpoint: unix:///var/run/docker.sock
exposedByDefault: false
watch: true
swarmMode: false
file:
directory: /traefikdynamic
watch: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
udpdns:
address: ":53/udp"
certificatesResolvers:
letsencrypt:
acme:
email: [email protected]
# caServer: https://acme-staging-v02.api.letsencrypt.org/directory
caServer: https://acme-v02.api.letsencrypt.org/directory
storage: acme.json
keyType: EC256
httpChallenge:
entryPoint: web
Globalement, rien de particulier hormis l’ajout d’un « entryPoints » pour l’UDP (notez la différence avec un entryPoint « traditionnel »).
Volontairement, l’API de Traefik est toujours active pour afficher le tableau de bord et contrôler le bon fonctionnement.
Pareil pour le fichier docker-compose, rien de particulier, hormis la configuration vis-à-vis de PiHole et les labels relatifs à Traefik.
Ci-dessous le fichier « docker-compose.yml » :
---
version: '3.6'
services:
traefik:
container_name: traefik
image: traefik:${TRAEFIKVERSION}
restart: unless-stopped
ports:
- 53:53/udp
- 53:53
- 80:80
- 443:443
- 8080:8080 # used to have the traefik dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./conf/traefik.yml:/etc/traefik/traefik.yml:ro
- ./logs/traefik.log:/etc/traefik/applog.log
pihole:
container_name: pihole
restart: unless-stopped
image: pihole/pihole:${PIHOLEVERSION}
environment:
TZ: ${TZ}
VIRTUAL_HOST: pihole.czs.local
WEBPASSWORD: ${PIHOLEWEBPWD}
volumes:
- datapihole:/etc/pihole/
- datadnsmasqd:/etc/dnsmasq.d/
dns:
- 127.0.0.1
- 1.1.1.1
labels:
traefik.enable: true
traefik.http.routers.pihole-http.rule: Host(`pihole.czs.local`)
traefik.http.routers.pihole-http.entrypoints: web
traefik.http.services.pihole.loadbalancer.server.port: 80
traefik.tcp.routers.pihole-dns.entrypoints: dns
traefik.tcp.routers.pihole-dns.service: pihole
traefik.udp.routers.pihole-udp.entrypoints: udpdns
traefik.udp.routers.pihole-udp.service: pihole
traefik.udp.services.pihole.loadbalancer.server.port: 53
volumes:
datapihole:
datadnsmasqd:
Fichier .env (utilisé pour les numéros de version et les mots de passe) :
TRAEFIKVERSION=picodon
PIHOLEVERSION=v5.3.4
TZ=Europe/Paris
PIHOLEWEBPWD=pouetpouet
PiHole ne nécessite pas de grosse configuration : quelques lignes d’environnement, les labels Traefik et le tour est joué.
N’oubliez pas de changer « pihole.czs.local » dans le label Traefik-HTTP-Router-Host, les deux variables d’environnement de PiHole (le mot de passe « WEBPASSWORD » et le « VIRTUAL_HOST »).
Vous pouvez retrouver les scripts sur GitHub à cette adresse