my-homelab-configs/infra/rpi-services/README.md

64 lines
2.4 KiB
Markdown

# RPi Services
This stack runs lightweight always-on services on the Raspberry Pi outside the
Kubernetes cluster:
- Pi-hole on DNS port `53` and web port `8081`
- 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.
Docker data for the Raspberry Pi is expected under `/nvme-storage/docker` when
that path is an active mount point and writable. If the NVMe is missing or
reset, the bootstrap 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:
```bash
./jeannie rpi-services
```
Useful overrides:
```bash
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.txt`
- `local-dns-records.txt`
- `cname-records.txt`
- `static-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.