Pi-hole
DNS + DHCP for LAN
Minecraft
Paper + Geyser/Floodgate
RomM
ROM manager + EmulatorJS
Cloudflare Tunnel
Outbound-only, no open ports
Samba
ROM library share
Monitoring
Health checks + Slack alerts + heartbeat
Internet Cloudflare Tunnel RomM (Docker stack) LAN Pi-hole, Minecraft, Samba
Primary — Ethernet
Static IP · Auto-restore via NetworkManager dispatcher
Failover — WiFi
Static IP · Activates on ethernet loss, deactivates on restore

On-box health check every 60s via systemd timer. Slack alerts on state changes. External dead man's switch via healthchecks.io.

Ethernet state
WiFi failover
Pi-hole
Cloudflare Tunnel
Minecraft
Samba
RomM HTTP
Docker containers
Disk thresholds
Heartbeat (external)
Power outage
Auto power-on via chipset register
Ethernet loss
WiFi failover via dispatcher
Service crash
systemd auto-restart
Container crash
Docker restart policy
Reboot
All services enabled, auto-start