|
|
||
|---|---|---|
| .. | ||
| README.md | ||
| adlists.txt | ||
| bootstrap.sh | ||
| cname-records.txt | ||
| docker-compose.yml | ||
| local-dns-records.txt | ||
| seed-uptime-kuma.js | ||
| static-dhcp-hosts.txt | ||
| uptime-kuma-monitors.json | ||
README.md
RPi Services
This stack runs lightweight always-on services on the Raspberry Pi outside the Kubernetes cluster:
- Pi-hole on DNS port
53and web port8081 - Unbound as Pi-hole's first upstream resolver
- Uptime Kuma on port
3001 - Uptime Kuma monitor seeds for public edge, Gitea, Traefik, RPi DNS, Pi-hole, and Debian-host ARR services
Pi-hole also keeps public fallback upstreams in its config, so DNS can continue
to resolve through 1.1.1.1 and 9.9.9.9 if the Unbound container stops.
For Pi-hole v6, the stack sets FTLCONF_dns_interface=ALL and
FTLCONF_dns_listeningMode=ALL through PIHOLE_DNS_INTERFACE and
PIHOLE_DNS_LISTENING_MODE so LAN clients such as the Debian control host are
not rejected as non-local networks.
The bootstrap script prefers Docker data under /nvme-storage/docker only when
that path is an active mount point and writable. If the NVMe is missing or
reset, it rewrites Docker's data-root to /var/lib/docker and restarts
Docker, allowing the services to come up from the SD/root filesystem instead.
Service config lives under /opt/homelab-rpi-services/data by default. Backup
storage is intentionally not placed on the NVMe until the disk has proven
stable.
Deploy from the Debian homelab server:
./jeannie rpi-services
Useful overrides:
LAB_RPI_HOST=192.168.100.89 ./jeannie rpi-services
PIHOLE_WEBPASSWORD='<password>' ./jeannie rpi-services
PIHOLE_DNS_INTERFACE=ALL PIHOLE_DNS_LISTENING_MODE=ALL ./jeannie rpi-services
PIHOLE_WEB_PORT=8081 UPTIME_KUMA_PORT=3001 ./jeannie rpi-services
LAB_RPI_STOP_LEGACY_PIHOLE=false ./jeannie rpi-services
If PIHOLE_WEBPASSWORD is not provided, the bootstrap generates one and keeps
it in /opt/homelab-rpi-services/.env for future runs.
Managed Pi-hole state is stored in:
adlists.txtlocal-dns-records.txtcname-records.txtstatic-dhcp-hosts.txt
The bootstrap inserts adlists without deleting existing manual Pi-hole lists. It
renders local DNS, CNAME, and optional static DHCP entries into
/etc/dnsmasq.d/02-homelab-managed-dns.conf inside the Pi-hole container, then
reloads DNS.
Managed Uptime Kuma monitors are stored in uptime-kuma-monitors.json. The
bootstrap seeds them after the Uptime Kuma database exists. If Uptime Kuma has
not completed initial admin setup yet, the seed step skips cleanly; rerun
./jeannie rpi-services after creating the first user.