[docker-compose] Traefik et PiHole

  • par

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *