My servers setup at home
I run two Raspberry Pi 4Bs as servers currently.
falcon
- ⚡ Raspberry Pi 4B (8GB model)
- Ubuntu Server 22.04 LTS
- Overclocked to 2.0GHz
- 🔌 Powered USB 3.0 hub
- TP-Link TL-UH700
- 📼 Primary storage
- Sandisk Ultra microSD card (8GB, boot)
- Crucial BX500 SSD (480GB, root FS)
- 📀 Secondary storage
- Crucial BX500 SSD (480GB)
- Seagate Barracuda 2.5" 1TB
- Seagate Expansion 4TB
- WD My Passport 1TB
- Sony HD-B1 1TB
- 🌐 Gigabit ethernet
- TP-Link TL-SG1008D
- 🔊 3.5mm out...
- Fenda E200 Plus
Main server that runs the majority of my self-hosted apps, runs the media stack, functions as a NAS and audio server using the likes of librespot
, shairport-sync
, and mpv
.
Runs in Docker containers:
- 💡 Home Assistant
- �📽 Plex Media Server
- 📺 Servarr media stack
- 🧲 qBittorrent
always-on
- ⚡ Raspberry Pi 4 (4GB model)
- Ubuntu Server 22.04 LTS
- 📼 32GB microSD card
- 🌐 Gigabit ethernet
DNS/DHCP server, monitors network latency and speed using tools like Smokeping and Speedtest-tracker, handles the Traefik network proxy over Tailscale. Also runs Portainer, which is used to monitor Docker hosts across all machines, cloud or local.
Since this server runs on a SD card, log2ram
is used to store system logs in memory to reduce writes to disk.
Runs in Docker containers:
- Oracle Cloud
- Google Cloud Platform (
e2-micro
) - Digital Ocean Droplets
AdGuard Home blocks ads and trackers, manages DNS and DHCP in the local network.
For DNS resolution, I use Cloudflare Zero Trust over DoH3, which is similar to 1.1.1.1 but supports EDNS Client Subnet, which enables devices to connect to servers located closer to me and thus makes stuff load faster.
AdGuard has optimistic caching enabled which accelerates web page loading due to low latency lookups.
I use Tailscale to access devices and services. Cloud VMs have their storages securely mounted locally over NFS or FTP.
Some apps are hosted in cloud to balance system resources. I use Traefik to access them as if they're hosted locally, using the format http://<app>.<machine>.nt
.
This requires Traefik and containers on all VMs, with Traefik routers created locally (for each VM) that proxy requests to remote Traefik instances.
Files are stored both in the cloud and locally.
mergerfs is used to pool together local drive mounts so they appear as a single mount that can be bind-mounted to Docker containers.