Self-hosted media and photo stack on commodity hardware
Photos, music broadcasting, remote desktop and dashboards, all served from a home rack with no cloud dependency — including the edge, the identity and the monitoring.
Context
The goal was to replace paid cloud services with a self-hosted equivalent across photos, media, streaming, remote access and monitoring, while keeping the whole estate recoverable by one person.
Constraints
- Commodity hardware with a single hypervisor — no redundancy at the physical layer.
- Storage shared to containers over the network, so mount ordering affects service startup.
- Public access needed without exposing the home IP.
Decisions
Push the edge to the provider, keep the data local
All public hostnames terminate at a hosted tunnel, so no inbound ports are open and the home address is never published. The origin remains entirely local.
Make startup ordering explicit
Remote storage mounts must exist before dependent containers start. Discovering this through failed restarts produced a documented dependency order rather than a hopeful `docker start -a`.
Monitor the whole path, not just the process
A container can be running and still be unusable. Health checks are modelled on the user-visible path so a green process does not mask a broken service.
Outcome
- Photos, broadcast audio, remote desktop, dashboards and monitoring all served from one host.
- No inbound firewall ports; every published service reachable through the tunnel only.
- Full recovery demonstrated after hardware failure, including database repair and re-mounting remote storage.
What it taught me
Self-hosting is an operations discipline, not a hosting choice. The value is in the recovery path, not the uptime chart.
Addresses, hostnames and identifiers in this write-up are abstracted or generalised. If you would like the specific detail, ask — I am happy to walk through it directly.