Everything running on my Raspberry Pi 5 (and what I removed)
The full map of my home server: which services it runs, which port each uses, how I organise them with Docker and systemd, and what I tried and dropped.
People often ask me what I run on my Raspberry Pi, so here’s the full map. It’s a real home server: I use it every day, it has backups and it pings my phone if anything goes down.
The hardware
- Raspberry Pi 5, 8 GB.
- 256 GB NVMe SSD as the boot drive, on an adapter board. No microSD: cards wear out with the constant writes from databases and logs, and NVMe is far faster.
- Raspberry Pi OS, based on Debian 12.
With everything below running, it uses about 1.7 GB of RAM and 9% of the disk. Plenty of headroom.
How I organise it
I follow a simple rule:
- Docker for self-contained apps with an official image: they install, update and uninstall without leaving a trace.
- systemd for my own Python programs, which are one file and little else. They don’t need a container.
The “home” containers all live in a single docker-compose.yml in ~/servicios/, with one data folder per service next to it. So backing up means copying that folder.
Services in Docker
| Service | What for | Port |
|---|---|---|
| Homepage | Start page with links and the status of everything | 80 |
| Gitea | My own “GitHub” for my projects | 3000 (SSH on 2222) |
| Uptime Kuma | Checks everything responds and alerts me on Telegram | 3001 |
| Vaultwarden | Bitwarden-compatible password manager | local only, published over HTTPS via Tailscale |
| openGym | App to log my workouts | 8081 |
| Portainer | View and manage containers from the browser | 9443 |
A security detail: Vaultwarden doesn’t listen on the network, only on 127.0.0.1. It reaches my devices through Tailscale with a real HTTPS certificate. I explain it in its own article.
systemd services
| Service | What for |
|---|---|
| Command centre | My Python dashboard: live status, last backup and to-dos |
| 3D printer panel | Watches the Elegoo Centauri Carbon 2 over MQTT |
| OctoEverywhere | Remote access to the printer |
| Tailscale | Private network between my devices, plus HTTPS certificates |
| WayVNC | Remote desktop on the Pi, just in case |
And two things that aren’t services but matter just as much:
- A nightly backup to the NAS at 3:30, via cron.
- A small weekly script that analyses my workouts and sends me a summary.
How I get in from outside
I have two routes, each with its own job:
- WireGuard on the router: connects me to the home network as if I were on the sofa.
- Tailscale: besides connecting, it provides names and automatic HTTPS certificates, which the password manager needs.
There are no ports open on the router to the Pi. Everything goes through a VPN.
What I tried and removed
This is the part people rarely talk about. Running a home server also means saying no:
- n8n (automations): I had it for a while and replaced it with an AI agent.
- An AI agent connected to a cloud service: the free plan fell short and the local fallback didn’t work. I uninstalled it. It has its own article.
- A proxy to compress AI requests: it had been installed for weeks with nothing using it. Gone.
- Pi-hole, Nextcloud and Home Assistant: I considered them and didn’t install them. I didn’t need Pi-hole for now, Nextcloud duplicated what the NAS already does and Home Assistant didn’t add anything with the gear I have.
Every service is one more thing to update, watch and secure. If nobody uses it, it goes.
What I’d do differently if I started today
- Alerts from day one. I had three days of failing backups without noticing because monitoring wasn’t alerting anyone.
- Fixed IPs for everything important. The NAS and the printer changed address and broke things.
- Write down every change. I keep a file with what runs, on which port and why. It’s what made this article possible.
Did it stick?
Three quick questions. Each right answer is worth 10 XP.