cat ./projects/homelab
Homelab platform
What it is
The Ubuntu server at home that I use to practice what I'd build for a customer: modular services, one telemetry pipeline, and documentation good enough to rebuild from. This website's back end runs on it.
The platform
- 13 services in modular Docker Compose (each service in its own folder, pulled together with
include:): Prometheus, Loki, Promtail, Grafana, an OpenTelemetry Collector, Node Exporter, cAdvisor, ntopng, an NVIDIA GPU exporter, Portainer, Nginx Proxy Manager, Jellyfin and a landing page. - The OpenTelemetry Collector takes in OTLP, host, Docker and Prometheus telemetry, adds resource attributes, and sends metrics to Prometheus (15-day retention) and logs to Loki (30-day retention).
- Access goes through Nginx Proxy Manager with TLS, and the host firewall only allows SSH, HTTP and HTTPS.
404ambitions on top of it
- Ghost runs headless in Docker with MySQL 8. Authoring happens there; the public site is a static Astro build on Cloudflare Pages that reads the Ghost Content API.
- A cloudflared tunnel makes only outbound connections, so no router ports are open. Cloudflare Access protects the Ghost admin.
- Uploads go to Cloudflare R2 through an S3-compatible storage adapter, so the server keeps nothing but the database.
- The Ghost stack joins the homelab's monitoring network and has its own Grafana dashboard.
Status and next steps
Running and growing. Next: a traces backend (Tempo) so Ghost traces can be turned on, rebuilding the site automatically when content is published, and demo containers for projects on their own subdomains.