|
|
||
|---|---|---|
| .. | ||
| 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.
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_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.