[docker-compose] Traefik et PiHole

Tut's Linux avr. 13, 2020

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.2 "chevrotin"
  • 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: contact@czs.local
#      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.8'
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:

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").

Welcome @ PiHole !

Vous pouvez retrouver les scripts sur GitHub à cette adresse

Mettmett/docker-compose
Some examples used on ComputerZ Solutions... Contribute to Mettmett/docker-compose development by creating an account on GitHub.

Mots clés

Julien HOMMET

Bercé par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.

Super ! Vous vous êtes inscrit avec succès.
Super ! Effectuez le paiement pour obtenir l'accès complet.
Bon retour parmi nous ! Vous vous êtes connecté avec succès.
Parfait ! Votre compte est entièrement activé, vous avez désormais accès à tout le contenu.