Kant-en-klare compose.yaml-bestanden voor je homelab
Een verzameling compose.yaml-bestanden voor programma’s die veel mensen in een homelab draaien. Kopieer een bestand naar een eigen map (bijvoorbeeld ~/adguard/compose.yaml), pas de gemarkeerde stukken aan en start met docker compose up -d. Nieuw bij Docker? Lees eerst onze Docker-handleidingen.
Voordat je begint
- Vaste versies. Veel voorbeelden gebruiken
latestofstablevoor het gemak. Zet voor serieus gebruik een vaste versie in de tag, zodat een update niet ineens iets verandert, en lees de releasenotities voor je bijwerkt. - Controleer de actuele instructies. Programma’s veranderen. Kijk bij twijfel in de documentatie van het project; de bronnen staan onderaan.
- Wachtwoorden niet delen. Zet geheimen liever in een
.env-bestand dan in het compose-bestand zelf. - Poorten kunnen botsen. Staat een poort al in gebruik, kies dan links van de dubbele punt een ander nummer (bijvoorbeeld
8082:80). - Back-ups. Bewaar de map met je gegevens: zie de 3-2-1-regel.
Home Assistant
Home Assistant in een container, voor wie geen Home Assistant OS draait. USB-apparaten (zoals een Zigbee-stick) werken met privileged; zie ook de Zigbee-handleiding.
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
privileged: true
network_mode: host
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
Mosquitto (MQTT)
Een MQTT-broker voor sensoren en Home Assistant. Maak eerst mosquitto/config/mosquitto.conf:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
Maak een gebruiker aan (vervang gebruiker), en herstart de container daarna:
docker run --rm -it -v "$(pwd)/mosquitto/config:/mosquitto/config" eclipse-mosquitto:2 mosquitto_passwd -c /mosquitto/config/passwd gebruiker
Node-RED
services:
nodered:
image: nodered/node-red:latest
container_name: nodered
restart: unless-stopped
ports:
- "1880:1880"
environment:
- TZ=Europe/Amsterdam
volumes:
- ./nodered:/data
Geeft Node-RED een rechtenfout bij het schrijven in ./nodered? Maak de map dan eigendom van gebruiker 1000: sudo chown -R 1000:1000 nodered.
Uptime Kuma
Controleert of je websites en diensten bereikbaar zijn en stuurt een melding. Kijk op de projectpagina welke versie-tag actueel is.
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
Vaultwarden (wachtwoordmanager)
Een lichte, zelfgehoste server die samenwerkt met de Bitwarden-apps. Gebruik hem alleen achter https (zie reverse proxy met https): de webkluis werkt niet goed zonder. Zet na het aanmaken van je account het aanmaken van nieuwe accounts uit.
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
- DOMAIN=https://wachtwoorden.jouwdomein.nl
- SIGNUPS_ALLOWED=true # zet op false nadat je account bestaat
ports:
- "8081:80"
volumes:
- ./data:/data
Portainer
Een webinterface om Docker te beheren. Let op: toegang tot de Docker-socket is vergelijkbaar met beheerdersrechten op de server. Zet de interface niet open naar internet.
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/data
Pi-hole
Reclame blokkeren voor je hele netwerk (zie Pi-hole of AdGuard Home). In recente versies stel je het wachtwoord in met FTLCONF_webserver_api_password. Staat poort 53 al in gebruik (op sommige Ubuntu-systemen door systemd-resolved), dan moet je dat eerst aanpassen.
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "8082:80/tcp"
environment:
TZ: Europe/Amsterdam
FTLCONF_webserver_api_password: "kies-een-wachtwoord"
volumes:
- ./etc-pihole:/etc/pihole
cap_add:
- NET_ADMIN
AdGuard Home
Het alternatief voor Pi-hole. De eerste keer open je http://IP-adres:3000 voor de installatiehulp.
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
ports:
- "53:53/tcp"
- "53:53/udp"
- "3000:3000/tcp"
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
Syncthing
Houdt mappen synchroon tussen apparaten, zonder cloud. Let op: synchroniseren is geen back-up.
services:
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
- "21027:21027/udp"
volumes:
- ./data:/var/syncthing
Homepage (startpagina met je diensten)
Een startpagina voor je homelab. Recente versies willen weten onder welk adres je hem opent: vul dat in bij HOMEPAGE_ALLOWED_HOSTS.
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
ports:
- "3002:3000"
environment:
- HOMEPAGE_ALLOWED_HOSTS=192.168.1.20:3002
volumes:
- ./config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
ESPHome
De ESPHome-builder in een container. Zie de ESPHome-handleiding.
services:
esphome:
image: ghcr.io/esphome/esphome
container_name: esphome
restart: unless-stopped
network_mode: host
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
Staat het er niet bij?
Voor Immich, Jellyfin en Nextcloud, en voor Nginx Proxy Manager en Caddy, vind je voorbeelden in deze handleiding en in die over reverse proxy’s. Gebruik docker compose config om een bestand te controleren voor je het start.
Bronnen en bronvermelding
Dit artikel is in eigen woorden geschreven. De instellingen komen uit de documentatie van de projecten; kijk daar voor de meest actuele versie: