โ† All projects

Running since 2024

Self-hosted home server

An old laptop turned into a headless server for media, file sync and automation, using Docker so it can be easily rebuilt from scratch.

When
2024 โ€“ present
Hardware
ThinkPad T470, 7 GB RAM, Ubuntu Server
Stack
Docker Compose, Caddy, Tailscale, WireGuard, ufw, systemd, Python, Bash
Code
github.com/fellobello/homeserver (addresses and names replaced)
Docs
Architecture, networking and wiring diagram

What it runs

Several Docker containers: media streaming, file sync, a reverse proxy, a VPN and automation. Each service was added one at a time with a pinned version, and the whole setup lives in git, so a clean install plus one checkout brings it back.

A network with two doors

No ports are open on the router. Housemates can reach only the media server on the local network. Admin tools are reachable only over Tailscale, with real HTTPS certificates through Caddy.

Problems I ran into

Docker bypasses the firewall

Docker writes its own firewall rules, so ports it publishes skip ufw entirely. Instead of relying on ufw, I bound each container's port to a specific network interface and then checked every port by connecting from both the local network and the tailnet.

Keeping the download service on the VPN

The download service runs inside the VPN container's network namespace, so its only route out is the tunnel.

Living in 7 GB of RAM

Every container has a memory cap, so nothing can starve media playback.

Automation