My Multi-Node Cluster
After building and deploying my first web application, I became interested in the deployment aspect. Cloud service providers like AWS and Azure consistently report strong operating margins during earnings calls—I knew something was going on. I started tinkering with deployment, hosting serverless functions on AWS, and deploying a small frontend across different hosting providers.
From there, I realized all roads lead to Linux servers. I dove into the rabbit hole, buying my own hardware and building a private network with my own servers. I consumed a ton of content and had many late-night conversations with LLMs. My goal: host all my projects using open-source services to avoid recurring service costs.
Network Architecture
I use a private Tailscale wire-mesh network to connect all my nodes. For deployment, I use on Docker and Nginx for reverse proxying and load balancing. To keep servers private and accessible remotely, I use Cloudflare Tunnel.
During Docker container creation, I run Tailscale as a sidecar container. This creates its own node in my network, which I then connect to Cloudflare via its private IP.
I also focus on horizontal scaling. Adding mini-PCs across different networks helps mitigate power outages, Wi-Fi issues, and limited upload speeds.
Hardware Overview
Raspberry Pi 5
- CPU: Cortex A7 4C/4T
- RAM: 8 GB @ 2.4 GHz
- Storage: 1 TB T7 External SSD (USB 3.2, 1050 MB/s)
Linux Server
- CPU: AMD Ryzen 6960X 16C/32T
- RAM: 32 GB DDR4 3200 MHz (2x16)
- Storage: 500 GB NVMe M.2 SSD 3500 MB/s
- GPU: RTX 3060 12 GB GDDR6
- Motherboard: MSI B550 Gaming PCIe 3.0
- PSU: 850W
Beelink Mini-PC
- CPU: 4C/4T
- RAM: 16 GB
- Storage: 500 GB SSD
I try to keep the tech stack consistent across all nodes so improvements and iterations can apply to all services.
Node Usage
On my Raspberry Pi, I run analytics for Docker containers using Prometheus, backups, and an n8n server, among other services. The external SSD provides lower-end read write speed, so this node is used for backups, testing among other services. The other two servers are used for deployed services with docker.
Tech Stack
- Networking: Tailscale wire-mesh private network
- Operating System: Ubuntu Server
- Containers & Orchestration: Docker
- Reverse Proxy / Load Balancing: Nginx
- Secure Remote Access: Cloudflare Tunnel
- Database: MongoDB (WiredTiger)
- Backend: FastAPI
- Frontend: Next.js or Vanilla React
- Mobile: React Native with Expo
- Scripting & Automation: Python, Shell scripts
Building a multi-node cluster has allowed me made me a better programmer. From understanding the multiple layers of security, networking, deployment and more.