pi-lab
A self-hosted homelab running 37 Docker Compose services on a Raspberry Pi 5 — DNS ad-blocking, VPN, media, documents, passwords, and intrusion detection behind wildcard TLS.

The constraint
Self-hosting advice is either a single-service tutorial or a rack-mounted enterprise build. There was no honest middle: what can one 8 GB Raspberry Pi actually carry, and what does it cost in complexity to run the services that would otherwise be a dozen subscriptions?
The approach
Thirty-seven services on one Pi 5, each a Docker Compose stack in its own directory, all reachable behind Nginx Proxy Manager with wildcard TLS on a real domain. DNS resolves through Pi-hole to Unbound to DNSCrypt, so there is no upstream resolver watching the queries either.
- 1One stack per directory
Kept each service self-contained so a single broken image can be rebuilt without touching the other thirty-six.
- 2Own the resolver
Chained Pi-hole to a local Unbound recursive resolver rather than a public upstream, so ad-blocking does not just relocate the surveillance.
- 3One front door
Put everything behind Nginx Proxy Manager with wildcard certificates instead of exposing ports per service.
- 4Assume it will be attacked
Added Authelia in front and CrowdSec underneath, on the assumption that anything reachable will eventually be probed.
Outcomes
- 37 services covering DNS, VPN, media, documents, passwords, automation, and monitoring
- Recursive DNS chain — Pi-hole to Unbound to DNSCrypt — with no upstream dependency
- Wildcard TLS on *.lscaturchio.xyz via Nginx Proxy Manager and Let's Encrypt
- Authelia for single sign-on and CrowdSec for intrusion detection across the estate
- Move the compose sprawl to K3s and reuse the Helm work from the homelab repo.
- Add automated restore drills — backups that have never been restored are not backups.
- Publish per-service memory ceilings so the 8 GB budget is legible to anyone copying this.
Deployed and maintain a 37-service self-hosted homelab on a Raspberry Pi 5 (8 GB, aarch64) covering DNS ad-blocking, VPN, media streaming, document management with OCR, password management, workflow automation, and intrusion detection.
Fronted the estate with Nginx Proxy Manager and wildcard Let's Encrypt TLS, with Authelia for SSO and a Pi-hole to Unbound to DNSCrypt resolver chain that removes the upstream DNS dependency.
Related projects
- Read →
Cocoon
A privacy-first Chrome extension that lowers sensory load online: it softens algorithmic feeds, reduces motion, and keeps a grounding exercise one click away. No accounts, no analytics, nothing leaves the device.
- Read →
unlinkd
Get yourself removed from the internet — and keep the proof. A local-first, fully encrypted workspace for data-broker removal requests and the tamper-evident paper trail a GDPR or CCPA escalation actually needs.
- Read →
FraudStream
A production-grade streaming pipeline that scores financial transactions for fraud in milliseconds rather than hours, built on Kafka, Spark Structured Streaming, and a Snowflake medallion warehouse.