Docker facilite l’exécution de plusieurs applications. Mais comment (et pourquoi) courez-vous PiHole dans Docker sur un système Ubuntu avec un proxy inverse Traefik devant? Cela présente plusieurs avantages et il n’ya pas beaucoup d’informations sur la manière de le faire. Par conséquent, dans ce tutoriel, je vais partager Configuration de PiHole Docker instructions et nous le ferons en utilisant docker-compos pour plus de simplicité. Si vous n’utilisez pas Docker Compose, vous consultez cette page pour connaître les commandes de Docker.
Récemment, j’ai publié mon tutoriel complet sur PiHole, qui fournit toutes les informations nécessaires à la configuration d’une instance PiHole sur Raspberry Pi pour le blocage de toutes les annonces résidentielles. Pendant que je travaillais sur ce guide, j’ai également essayé d’installer PiHole sur Docker, ce qui constituera un excellent ajout à mon serveur multimédia Docker. Le problème était que mon serveur multimédia docker se trouvait derrière le proxy inverse Traefik avec les certificats SSL Let Encrypt. Je n’ai trouvé aucune information sur la configuration de PiHole avec le proxy inverse Traefik. Hier, j’ai compris comment faire cela. Voici donc mon guide PiHole Docker pour les systèmes Ubuntu / Debian avec Traefik Reverse Proxy. Notez que nous servons de proxy à la WebUI (port 80) et non à PiHole lui-même, qui utilise le port 53.
Je laisse de nombreuses informations de base abordées dans mon précédent guide. Par conséquent, je vous recommande fortement de le lire, même si tout ce qui s’y trouve ne vous concerne pas, avant de suivre ce guide.
Avantages de l’exécution de PiHole sur Docker
Pi-Hole est une application de blocage de publicités à l’échelle du réseau. Si vous ne savez pas ce que PiHole est, assurez-vous de lire mon précédent guide PiHole. Docker facilite la configuration de plusieurs applications. Au début de cette année, j’ai déplacé toutes mes applications de serveur domestique, y compris Home Assistant, vers Docker avec Traefik Reverse Proxy, et tout s’est déroulé sans heurts avec les certificats SSL automatiques Let Encrypt. Voici quelques avantages de base de l’exécution de PiHole dans Docker:
- Installation et maintenance faciles et sans tracas. Docker Compose rend les choses encore plus faciles.
- Durabilité – Je dis cela parce que, si vous avez activé la fonction de journalisation de requêtes, vous pouvez graver votre carte SD sur Raspberry Pi. Cela signifie que vous devrez tout configurer à nouveau. Les chances pour quelque chose comme ceci est moins sur un serveur.
- Étendez votre serveur domestique existant et éliminez le besoin d’un périphérique distinct (par exemple, Raspberry Pi).
Mais il y a un autre gros avantage. PiHole exige que les ports 80 et 443 soient libres d’utilisation. Cependant, ces ports peuvent être requis par d’autres applications (par exemple, un serveur Web). Et si vous avez suivi le guide Traefik Reverse Proxy pour configurer votre serveur de supports de travail, les ports 80 et 443 sont requis pour Traefik. Il n’est donc pas possible de configurer PiHole directement sur les systèmes Ubuntu ou Linux. Le proxy inverse est la voie à suivre dans ces situations et Docker rend cela beaucoup plus facile. Voyons comment exécuter PiHole dans Docker sur un serveur Ubuntu avec Traefik Reverse Proxy en face.
Exigences
Voici ce dont vous aurez besoin pour suivre ce tutoriel avec Pi Hole Docker:
De plus, vous aurez besoin d’accéder à votre serveur Ubuntu directement ou via SSH.
Guide d’installation de PiHole Docker
Avant de poursuivre, la page PiHole sur Docker Hub est une excellente ressource à lire. Plusieurs variables et paramètres utilisés dans ce guide sont expliqués en détail dans cette page.
Étape 1: Modifier la configuration du réseau Ubuntu
PiHole étant lui-même le serveur DNS et utilisant le port 53, il y aura des conflits avec le réseau du serveur Ubuntu. En fait, c’était le principal problème qui me poussait à ne pas exécuter PiHole dans Docker. PiHole a fonctionné avec succès, mais mon serveur Ubuntu n’a pas pu accéder aux ressources Internet. Voici donc les modifications à apporter à la configuration du réseau sur votre serveur Ubuntu avant de procéder à la configuration du docker PiHole.
Commencez par désactiver et résoudre le résolveur DNS Ubuntu à l’aide des deux commandes suivantes:
sudo systemctl disable systemd-resolution.service sudo systemctl stop systemd-resol.service
Ensuite, ouvrez la configuration du gestionnaire de réseau à l’aide de la commande suivante:
sudo nano /etc/NetworkManager/NetworkManager.conf
Ajouter dns = par défaut sous [main] afin que le contenu du fichier ressemble à ce qui est montré ci-dessous:
[main] plugins = ifupdown, keyfile dns = default ... ... ...
Puis supprimez ou encore mieux renommer /etc/resolv.conf fichier (c’est un lien symbolique) en utilisant la commande suivante:
sudo mv /etc/resolv.conf /etc/resolv.conf.bak
En cas de problème, vous pouvez renommer le fichier en /etc/resolv.conf. Enfin, redémarrez votre gestionnaire de réseau à l’aide de la commande suivante.
sudo service restart network
Maintenant que votre système est préparé, commençons par configurer PiHole sur Docker avec Traefik Reverse Proxy à l’avant.
Guides recommandés:
Étape 2a: Exécuter PiHole dans Docker avec un proxy inverse
Si vous n’êtes pas familier avec Docker et Docker Compose, veuillez lire mon introduction avant de continuer. À ce stade, je suppose que vous avez déjà un fichier de composition de menu fixe en état.
Dans l’exemple de dockeur PiHole, composez le bloc de code ci-dessous, $ {$ USERDIR}
, $ {SERVER_IP}
, $ {TZ}
, $ {DOMAINNAME}
, etc. seront automatiquement renseignés par le fichier de composition à partir du fichier d’environnement (/ etc / environment). Si vous ne l’avez pas encore, consultez ce guide pour créer un fichier d’environnement. Vous pouvez également remplacer les variables d’environnement dans le bloc docker-composition ci-dessous par des valeurs réelles.
Voici le code à ajouter (copier / coller) dans le fichier docker-compose (faites attention aux espaces vides au début de chaque ligne). Notez que certaines des lignes sont commentées avec un # devant. Ces lignes peuvent être activées en supprimant le # devant pour personnaliser la composition du dockeur PiHole. Si vous ne commentez pas, faites attention à l’alignement des lins, ce qui est très important pour YAML.
pihole: name_container: pihole domain name: docker host name: pihole image: pihole / pihole: last ports: - '53: 53 / tcp ' - '53: 53 / udp ' # - '67: 67 / udp ' - 'XXXX: 80' - 'AAAA: 443' restart: unless-stopped volumes: - $ {USERDIR} / docker / pihole / pihole: / etc / pihole # - $ {USERDIR} /docker/pihole/pihole.log:/var/log/pihole.log - $ {USERDIR} /docker/pihole/dnsmasq.d:/etc/dnsmasq.d # cap_add: # - NET_ADMIN environment: - ServerIP = $ {SERVER_IP} - PROXY_LOCATION = pihole - VIRTUAL_HOST = pihole. $ {DOMAINNAME} - VIRTUAL_PORT = 80 - TZ = $ {TZ} - WEBPASSWORD = PIHOLEWEBPASSWORD - DNS1 = 1.1.1.1 - DNS2 = 1.0.0.1 Labels: - "traefik.enable = true" - "traefik.backend = hole" - "traefik.port = 80" - "traefik.frontend.rule = HostRegexp: pihole. $ {DOMAINNAME}, {catchall:. *}" - "traefik.frontend.priority = 1" - traefik.frontend.headers.SSLRedirect = true - traefik.frontend.headers.STSSeconds = 315360000 - traefik.frontend.headers.browserXSSFilter = true - traefik.frontend.headers.contentTypeNosniff = true - traefik.frontend.headers.forceSTSHeader = true - traefik.frontend.headers.SSLHost = $ {DOMAINNAME} - traefik.frontend.headers.STSIncludeSubdomains = true - traefik.frontend.headers.STSPreload = true - traefik.frontend.headers.frameDeny = true
Remplacer / Configurer:
XXXX
– numéro de port sur la machine hôte qui est libre et qui communiquera avec le port 80 du conteneur PiHole. Par exemple, j’utilise 8182.AAAA
– numéro de port sur la machine hôte libre qui communiquera avec le port 443 du conteneur PiHole. Le port 443 doit fournir un gouffre pour les annonces utilisant SSL. Par exemple, j’utilise 8183.67: 67 / udp
– J’ai commenté ceci. Si vous voulez que PiHole agisse comme votre serveur DHCP, vous devrez supprimer le commentaire. Je laisse mon routeur gérer DHCP. Il y a quelques inconvénients mineurs à laisser votre routeur être le serveur DHCP au lieu de PiHole. Cependant, cela n’affecte pas un utilisateur domestique typique.pihole.log
– J’ai commenté ceci. Mais si vous souhaitez que vos journaux PiHole persistent (ne vous perdez pas lorsque les conteneurs Docker sont recréés / mis à jour), vous devez alors supprimer le commentaire. De plus, vous devrez courirtouchez pihole.log
à l’intérieur$ {USERDIR} / docker / pihole /
. Cela crée un fichier journal vide à utiliser avec PiHole.cap_add
– J’ai commenté ceci et la ligne suivante. Pour que PiHole agisse en tant que serveur DHCP, ces deux lignes doivent être décommentées.PIHOLEWEBPASSWORD
– Mot de passe pour PiHole WebUI.DNS1 et DNS2
– Je suis répertorié dans les adresses IP DNS Cloudflare 1.1.1.1 et 1.0.0.1 (Je le recommande pour la confidentialité). Vous pouvez utiliser tout ce qui fonctionne pour vous.
Enregistrez et exécutez le docker-compose.yml
et vérifiez les journaux pour les erreurs:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d; docker-compose logs -tf --tail = "50" pihole
Si vous ne voyez aucun message d’erreur, appuyez sur Ctrl C pour quitter. PiHole admin WebUI devrait être disponible à https://pihole.example.com/admin/.
Étape 2b: PiHole sur Docker sans proxy inverse
Alors que se passe-t-il si vous n’avez pas de proxy inverse et que les ports 80 et 443 sont libres (pas de serveur Web). Vous pouvez toujours utiliser Docker pour configurer PiHole. Dans ce cas, le principal avantage est la simplicité et l’isolation de PiHole de la machine hôte.
Certaines des informations préliminaires fournies à l’étape 2a s’appliquent également ici.
Voici l’extrait de composition du menu fixe pour que PiHole s’exécute sans proxy inverse en face.
pihole: container_name: pihole domain name: docker host name: pihole image: pihole / pihole: last ports: - '53: 53 / tcp ' - '53: 53 / udp ' # - '67: 67 / udp ' - '80: 80 ' - '443: 443' resart: unless-stopped volumes: - $ {USERDIR} / docker / pihole / pihole: / etc / pihole # - $ {USERDIR} /docker/pihole/pihole.log:/var/log/pihole.log - $ {USERDIR} /docker/pihole/dnsmasq.d:/etc/dnsmasq.d # cap_add: # - NET_ADMIN environment: - ServerIP = $ {SERVER_IP} - TZ = $ {TZ} - WEBPASSWORD = PIHOLEWEBPASSWORD - DNS1 = 1.1.1.1 - DNS2 = 1.0.0.1
Remplacer / Configurer:
67: 67 / udp
– J’ai commenté ceci. Si vous voulez que PiHole agisse comme votre serveur DHCP, vous devrez supprimer le commentaire. Je laisse mon routeur gérer DHCP. Il y a quelques inconvénients mineurs à laisser votre routeur être le serveur DHCP au lieu de PiHole. Cependant, cela n’affecte pas un utilisateur domestique typique.pihole.log
– J’ai commenté ceci. Mais si vous souhaitez que vos journaux PiHole persistent (ne vous perdez pas lorsque les conteneurs Docker sont recréés / mis à jour), vous devez alors supprimer le commentaire. De plus, vous devrez courirtouchez pihole.log
à l’intérieur$ {USERDIR} / docker / pihole /
. Cela crée un fichier journal vide à utiliser avec PiHole.cap_add
– J’ai commenté ceci et la ligne suivante. Pour que PiHole agisse en tant que serveur DHCP, ces deux lignes doivent être décommentées.PIHOLEWEBPASSWORD
– Mot de passe pour PiHole WebUI.DNS1 et DNS2
– Je suis répertorié dans les adresses IP DNS Cloudflare 1.1.1.1 et 1.0.0.1 (Je le recommande pour la confidentialité). Vous pouvez utiliser tout ce qui fonctionne pour vous.
Enregistrez et exécutez le docker-compose.yml
et vérifiez les journaux pour les erreurs:
docker-compose -f $ {USERDIR} /docker/docker-compose.yml up -d; docker-compose logs -tf --tail = "50" pihole
Si vous ne voyez aucun message d’erreur, appuyez sur Ctrl C pour quitter. Dans ce cas, sauf si vous configurez la redirection de port sur un routeur, vous ne pourrez pas accéder à l’interface Web d’administration PiHole de l’extérieur de votre réseau domestique. PiHole admin WebUI devrait être disponible à partir de votre réseau domestique. https: // SERVER-IP-ADDRESS / admin /.
Étape 3: Configuration de PiHole et réglages
J’ai déjà couvert la configuration et les réglages de PiHole:
Étape 4: Accéder à PiHole en ligne de commande (si nécessaire)
Il est assez facile d’accéder à PiHole fonctionnant sur un système séparé utilisant SSH. Comment pouvez-vous accéder à PiHole en ligne de commande lorsqu’il s’exécute dans le menu fixe? Vous pouvez le faire en utilisant la commande suivante:
docker exec -ti pihole / bin / bash
Vous devriez être sur le terminal à l’intérieur du conteneur de menu fixe. À partir de là, vous devriez pouvoir exécuter toutes les commandes PiHole listées dans mon précédent guide PiHole.
Réflexions finales sur l’exécution de PiHole dans Docker
Dans ce tutoriel PiHole Docker, je suppose que vous avez votre propre nom de domaine. Vous pouvez également accomplir la même chose en utilisant un DNS dynamique gratuit. Cela a été couvert en détail dans mon précédent tutoriel Traefik.
J’utilisais une seule instance de PiHole sur mon réseau et c’était sur Raspberry Pi. Maintenant, j’ai configuré une seconde instance PiHole sur Docker. Sur mon routeur, j’ai spécifié les adresses IP de mon serveur Raspberry Pi et Ubuntu en tant qu’adresses IP pour les serveurs de noms DNS. Normalement, au moins 2 serveurs DNS sont recommandés. Avec ma configuration Docker PiHole agissant en tant que deuxième serveur PiHole, je suis maintenant en mesure de fournir deux serveurs DNS pour partager la charge.
Si vous souhaitez exécuter PiHole dans Docker, allez-y et faites-le. Vous seriez surpris de voir à quel point c’est facile une fois que vous le faites. Et vous décidez d’intervenir, j’espère que ce guide d’installation de PiHole Docker sera utile.
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in « ./docker-compose.yml », line 5, column 27
root@debian-1:/docker/pihole#