May 27, 2026
What runs on the server in my room
There is a small server in my room with 16 GB of RAM, a 2 TB SSD and Ubuntu. It stores my photos, passwords, music and documents. It also hosts a Minecraft server, monitoring tools and whichever side project I am currently trying not to abandon.
I started the homelab because I wanted more control over the services I used every day. It has since become the machine I learn on, break and occasionally have to rescue late at night.
How it is set up
Everything runs in Docker containers managed with Docker Compose. I originally defined and deployed the stacks through Portainer. It is still installed as a management interface, but the Compose files in my private GitHub repository are now the source of truth.
Remote access goes through a Cloudflare tunnel, so I do not expose the services directly or open ports on my router. Nginx Proxy Manager handles routing on the local network, which means the services remain reachable at home if the tunnel is unavailable.
These are the services that have survived long enough to count as part of the setup:
| Service | What it does |
|---|---|
| Vaultwarden | Self-hosted Bitwarden with all premium features |
| Immich | Photo and video backup, mobile app included |
| Navidrome | Streams my music library to any device |
| Paperless-ngx | Scans and indexes documents |
| Nginx Proxy Manager | Internal reverse proxy and SSL |
| Portainer | Docker management UI |
| Homepage | Dashboard |
| Minecraft | Minecraft server |
| ntfy | Push notifications |
| Beszel | Server monitoring |
| Linkwarden | Bookmark manager |
The services I use most
Vaultwarden is the service I would notice first if the server disappeared. It is compatible with Bitwarden's clients and stores my passwords, TOTP codes and encrypted attachments. Self-hosting it does not make the service free: the server, electricity and backups still cost money. It does mean the marginal cost is small once the machine is already running.
Immich replaced my Ente subscription. Its mobile app backs up my photos and videos automatically, and I use its albums, map and face search often enough that it no longer feels like an experiment. The original files stay on my own storage and are included in the off-site backup.
Navidrome serves my music library to Subsonic-compatible apps on my phone, laptop and desktop. I like having the same library everywhere without depending on a streaming catalogue. There is no recommendation algorithm, but there is also nobody else fixing my metadata.
The Minecraft server is less essential, but it is a good example of why the homelab works for me. Once the machine is running, starting a private server for friends costs almost nothing extra and I can change or replace it whenever we want.
The Cloudflare tunnel makes all of this available away from home without a VPN. It runs as a systemd service and has needed little attention since I configured it. When remote access does fail, however, it is my problem to diagnose.
Backups
The services are replaceable. The data is not.
Backups run via restic to a Hetzner Storage Box, roughly 4 euros a month for 1TB. The backup covers Postgres dumps, Docker volumes, the Vaultwarden data directory, the full photo library, music, Minecraft worlds, and config files. Restic handles deduplication and encryption.
I learned the difference between having a backup and having a working restore during a server rebuild. Restic returned the files without a problem. The PostgreSQL dump for Immich did not restore cleanly because the schema had changed between versions and I had never tested that part of the process. The photos survived; the album metadata did not.
That failure changed the routine. I now treat restoration as part of the backup rather than as something to work out after the server dies.
Why I keep running it
I did not build the homelab because every self-hosted service is cheaper or better. Often it is neither. I built it because I enjoy understanding the systems I depend on and because some data, especially passwords, photos and documents, feels worth keeping under my control.
The trade-off is straightforward. I choose when to update a service and where its data lives, but I also become the support department. A broken database migration, expired certificate or full disk belongs to me.
For now, that bargain still suits me. The server is useful even when nothing is going wrong, and educational whenever something does.