From 21d601c135ae399c32ffc067ade6ac335f71836a Mon Sep 17 00:00:00 2001 From: Marco Blessing Date: Fri, 28 Jan 2022 11:26:16 +0100 Subject: [PATCH] Adds pihole post (#11) * simplify npm scripts * adds post * update post * add imgs --- .../black-hole.jpg | Bin 0 -> 35786 bytes .../pi-hole-as-docker-swarm-stack/index.md | 129 ++++++++++++++++++ .../settings.png | Bin 0 -> 9522 bytes package.json | 4 +- 4 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 content/posts/pi-hole-as-docker-swarm-stack/black-hole.jpg create mode 100644 content/posts/pi-hole-as-docker-swarm-stack/index.md create mode 100644 content/posts/pi-hole-as-docker-swarm-stack/settings.png diff --git a/content/posts/pi-hole-as-docker-swarm-stack/black-hole.jpg b/content/posts/pi-hole-as-docker-swarm-stack/black-hole.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c66bc71fa2d307956b3d1e72e0ca55a270ebbae GIT binary patch literal 35786 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 literal 0 HcmV?d00001 diff --git a/content/posts/pi-hole-as-docker-swarm-stack/index.md b/content/posts/pi-hole-as-docker-swarm-stack/index.md new file mode 100644 index 0000000..7353b07 --- /dev/null +++ b/content/posts/pi-hole-as-docker-swarm-stack/index.md @@ -0,0 +1,129 @@ +--- +title: 'Run Pi-Hole as Docker Swarm Stack' +date: 2022-01-28T08:54:43+01:00 +draft: false +categories: ['Docker'] +tags: ['pihole', 'swarm', 'stack'] +# lastmod: 2022-01-28T08:54:43+01:00 +# showDateUpdated: true + +# custom overrides for pages +# showDate: false +# showAuthor: false +# showWordCount: false +# showReadingTime: false +# showEdit: false +# sharingLinks: [null] +--- + +{{< figure src="black-hole.jpg" width="600" height="800" caption="Photo by Kamesh Vedula on Unsplash." >}} + +## Intro + +Many of you already know [Pi-Hole](https://pi-hole.net/) as a trusted DNS firewall solution in your home labs. But +what if your home lab should just provide containerized services? - I know, running Pi-Hole as a container isn't +new. In fact, the developer community already provides [official images](https://hub.docker.com/r/pihole/pihole). + +In this post I want to show you why you should run Pi-Hole (or even every container) in a docker swarm configuration +as a defined stack. + +So let's begin with some worts about the Docker Swarm Mode. + +### What's Docker Swarm Mode ? + +[Docker Swarm Mode](https://docs.docker.com/engine/swarm/) takes simply multiple Docker engines and creates a +cluster. On these docker nodes you can then run containers defined in a stack files. These stacks are written in the +same format as `docker-compose.yml` files. After deploying the stack the engine takes care about the deployment +on suitable nodes. + +I think the best feature is that you can update your stacks and its container services. This makes updating your +containers much easier whenever there is a new image version available. Without this feature you needed to stop and +restart your containers with docker-compose. + +{{< alert >}} +Don't expect to get a fully featured cluster management for container environments like +[Kubernetes](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/) with Docker Swarm +Mode. You still need to take care about key element by yourself. For example how to and how to sync volumes and +make them available on all nodes. +On the other hand, Kubernetes isn't always needed and comes not only with mor features - It also requires ab better +knowledge about the underlying techniques and faces you with much more challenges. +{{< /alert >}} + +### Pi-Hole Stack + +I use [traefik](https://traefik.io/traefik/) on my docker swarm clusters as reverse proxy. Like every reverse proxy +traefik handles the request and routes it to to the target service. It terminates the https traffic and manages the +certificates. You could also use something else like [Nginx Proxy Manager](https://nginxproxymanager.com/). +Just keep in mind, that the listed service labels are required for traefik to perform its dynamic config. + +```yaml +version: '3.8' + +# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/ +services: + pihole: + image: pihole/pihole:2022.01.1 + ports: + - target: 53 + published: 53 + protocol: tcp + mode: host + - target: 53 + published: 53 + protocol: udp + mode: host + - target: 67 + published: 67 + protocol: udp + mode: host + environment: + TZ: 'Europe/Berlin' + WEBPASSWORD: 'foobar2000' + # Volumes store your data between container upgrades + volumes: + - /nfs-share/pihole/volumes/pihole-data:/etc/pihole/ + - /nfs-share/pihole/volumes/pihole-dnsmasq:/etc/dnsmasq.d/ + + # Recommended but not required (DHCP needs NET_ADMIN) + # https://github.com/pi-hole/docker-pi-hole#note-on-capabilities + #cap_add: + # - NET_ADMIN + networks: + - pihole + - traefik-public + deploy: + replicas: 1 + labels: + - 'traefik.enable=true' + - 'traefik.docker.network=traefik-public' + - 'traefik.http.routers.pihole.rule=Host(`pihole.mydomain.io`)' + - 'traefik.http.routers.pihole.tls=true' + - 'traefik.http.routers.pihole.tls.certresolver=myresolver' + - 'traefik.http.services.pihole-srv.loadbalancer.server.port=80' + +networks: + pihole: + traefik-public: + external: true +``` + +The special part here is the port config. Normally you would use this syntax to publish ports: + +```yaml +ports: + - '53:53/tcp' + - '53:53/udp' + - '67:67/udp' + - '8080:80/tcp' +``` + +But this publishes the ports on the ingress / overlay network and causes pihole to show only the service ip on the +connected clients list. So we have to use the long format with the `mode` set to `host`. This of cause does only work +if there is no other process already using the listed ports. + +{{< figure src="settings.png" width="450" height="800" >}} + +Additionally you have to set `Permit all origins` option under `Settings` -> `DNS tab` -> `Interface settings`. + +That's it. Now you're running Pi-Hole as a docker swarm service as DNS Server. You can now start defining your +Pi-Hole groups and filter the clients. diff --git a/content/posts/pi-hole-as-docker-swarm-stack/settings.png b/content/posts/pi-hole-as-docker-swarm-stack/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e3327088df2cf78bf5558b055ef206d2ca7f06 GIT binary patch literal 9522 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
    rBFRk~O&6<9S`A>@84H0Iv8)Ot+G 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