Handleidingen

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 latest of stable voor 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: