The Ultimate Homelab Setup: Running 50+ Docker Containers on a Raspberry Pi

The Ultimate Homelab Setup: Running 50+ Docker Containers on a Raspberry Pi

Abdiel Martínez

If you prefer to read this article in Spanish, you can find it at: abdiel.dev

It’s been a little over a year since I went down the rabbit hole of self-hosting and building my own homelab. It’s fascinating how popular running your own 24/7 services has become, and honestly, I absolutely love it. There are so many practical use cases for this, and I want to share what I’ve learned along the way.

In a previous article, I mentioned how building my own hitbox arcade controller forced me to get my hands dirty with hardware. Well, this homelab project did pretty much the same thing, but pushed me headfirst into **DevOps, **an area I don’t usually get to touch in my day-to-day job.

**How to Build a DIY Hitbox: GP2040-CE & RP2040-Zero Guid**e *Learn how to build a custom Hitbox controller from scratch.*medium.abdiel.dev

📑 Table of Contents

  • My Setup and Hardware
  • Networking, Proxy, and Security
  • Monitoring and Management
  • Development, AI, and Automation
  • Productivity and Document Management
  • Multimedia and Storage
  • Bonus Utilities
  • Services I Moved Away From

🖥️ My Setup and Hardware

Like many people starting out in the homelab world, I kicked off my journey with the trusty Raspberry Pi 5.

To build the NAS alongside the Raspberry Pi, I paired it with a Radxa Penta SATA hat and 4 x 1TB Kingston SSDs running in RAID 5. I know this isn’t the most optimal configuration for 4 drives (since RAID performance and block alignment usually peak when data drives are powers of 2), but it gives me the best of both worlds: consolidated storage and the peace of mind that a single SSD can fail without losing my data. This setup leaves me with 2.6TB of usable space.

Right now, I run about 50 Docker containers 24/7. This includes databases for the services themselves, caching systems, a DNS server, and other apps I’ll break down below. I know it sounds like a lot, and I’m actually working on streamlining things to decide which ones are essential to keep running 24/7 and which ones I should spin up only on demand.

🛡️ Networking, Proxy, and Security

Pi-hole

Life without ads, or almost without them, is beautiful. This is one of those staple services you will find on literally every self-hosting list. While it won’t block absolutely every ad out there, it gives you some serious breathing room. And it’s not just about ads: if you set up the right DNS exclusion lists, it will even protect you from malicious websites and malware infections.

In my setup, I have nearly 3 million domains on my blocklists. Of course, you have to tread lightly here; if your blocklists are too aggressive, you might end up banning absolutely necessary domains (like banking websites) so keep an eye on that. If you’re wondering which DNS blocklists to add, I highly recommend checking out these:

Nginx Proxy Manager

If you don’t want to memorize the port number for every single service in your homelab, you absolutely need this. It lets you forget about ports altogether, and as a bonus, if you configure it right, you can get SSL certificates for all your local services. It is a massive lifesaver.

Here is another use case that might come in handy if you do mobile development: if you’re running a backend on your local PC, you’ve probably run into situations where you need ngrok or a similar tool. With Nginx Proxy Manager, you can map a domain to your local backend and ditch ngrok entirely. The idea is to use this within your local network, but if you combine it with Tailscale or another local VPN, you don’t even need to be on your home Wi-Fi to access it, and it’s all securely encrypted with SSL.

💡 A Quick Tip on Exposing Your Services

Speaking of domains and access, I should point out that I do not expose most of my services to the open internet. Exposing your entire homelab to the wild can be dangerous and irresponsible if you aren’t careful. Instead, I access all my resources using a VPN, specifically Tailscale. On the rare occasion that I actually need to expose a service to the outside world, I route it through Cloudflare Tunnels running inside a cloudflared Docker container.

NetAlertX

This service is a hidden gem if you want granular control over EVERY single device connected to your local network. It’s incredibly useful for tracking if a smart plug drops offline, or for getting a notification whenever a new device connects to your network. This has brought up some interesting situations; for instance, one day I realized a relative was pulling up near the house just to hop on our Wi-Fi without actually coming in to visit 😅. On a brighter note, I always knew when my dad was home because his devices would automatically check into the network.

The only caveat is that if any of your devices use randomized MAC addresses, notifications can get annoying fast, as every reconnection will look like a brand-new device.

SearXNG

This is a privacy-respecting metasearch engine. This means it doesn’t have its own web crawler; instead, it aggregates results from multiple search engines simultaneously (Bing, Google, DuckDuckGo, etc.) and bundles them together. If you want search results that aren’t biased or censored by a specific tech giant, and you value your privacy, this tool is a must-have.

📊 Monitoring and Management

Beszel

As your homelab grows and you accumulate more services, you’ll want an easy way to see what’s eating up your resources. **Besze**l makes this incredibly simple and seamless. You can even set up alerts to ping you if your server spikes past 80% CPU or RAM usage, or if the average temperature crosses a certain threshold. Best of all, it supports multi-node monitoring, which is perfect if you decide to expand your homelab with extra hardware down the road.

Dockhand

This service lets you manage everything related to your containers, not just on a single device, but across multiple nodes at once, as you can see in the screenshot. On top of that, you can monitor Docker image updates, schedule automated prunes for unused images, view container logs, track resource consumption per service, and more.

It is easily one of my favorite recent additions. If you want to dive deeper, I highly recommend checking out Christian Lempa’s video, where he explains it far better than I ever could.

Homepage

When you start hosting dozens of services, you absolutely need a central dashboard to keep track of them all. That’s where Homepage comes in. It’s incredibly easy to configure using .yaml files and boasts a huge variety of built-in widgets. Personally, I use it to display real-time resource usage for individual services and specific container metrics.

💻 Development, AI, and Automation

Infisical

I already wrote a dedicated article diving deep into this tool. In short, it’s an amazing platform for managing environment variables and secrets across your projects. If you’re into software development, this will make your life a whole lot easier.

**No More Lost Environment Variables: A Self-Hosted Solutio**n Using Infisical for Environment Variable Management: My Experience with Installation, Setup, and JavaScript Projectsmedium.abdiel.dev

n8n

A total classic in self-hosting and open-source lists that you simply have to try. It lets you visually automate almost any workflow you can dream up. If you want to get technical, you can even write custom code blocks directly in Python or JS. For a look at more complex setups, check out my articles on transcribing long audio files using an n8n workflow, or how to generate *PDFs* in n8n

**How To Transcribe Long Audios With N8N And FFmpeg Without Limit**s *Learn to create an N8N subworkflow that segments and transcribes long audio files automatically.*medium.abdiel.dev

**How to Generate PDFs in n8n with Gotenberg: Technical Guid**e Learn how to integrate Gotenberg into your stack and generate PDFs from n8n using Markdown and HTMLmedium.com

LiteLLM

If you’ve ever used OpenRouter, think of this as a self-hosted alternative. LiteLLM centralizes all your API keys from various AI providers. Instead of generating separate keys for every single application, I maintain a single upstream key per provider and use LiteLLM to generate virtual keys. This makes any AI provider instantly compatible with the standard OpenAI SDK. Plus, you can monitor token usage, track spend per key, set budget caps, or restrict specific keys to certain user groups.

A common issue I run into is an app that doesn’t natively support a specific AI model provider but does support OpenAI’s SDK. That is exactly where LiteLLM shines.

Open WebUI

Imagine having your very own ChatGPT, Claude, or Gemini interface. That is precisely what **Open WebU**I delivers. You can link your **AI API keys, **either directly or routed through LiteLLM, and start chatting away.

One of its coolest features is the ability to write a single prompt and have multiple AI models respond side-by-side. If you love playing around with local LLMs, you can also hook it up to an Ollama server. In my case, the Raspberry Pi can’t handle heavy local models, but my desktop PC certainly can. To solve this, I expose Ollama’s API from my PC to the local network and connect it straight to the Open WebUI instance running on the Pi.

Code-server

This is essentially VS Code running entirely in your browser. Why would you want this? Well, maybe you need to access a project environment from a random machine. But for me, the primary use case is quick config edits: if I need to tweak a value in a docker-compose.yml file, I don’t have to SSH into the server and deal with terminal text editors. I can just open **Code-serve**r and make the edit quickly in a full IDE UI.

CloudBeaver

Think of DBeaver but tailored for the web. This is a recent addition to my homelab. If you need to manage databases for work or keep tabs on your server’s backend databases, you can handle it all straight from your web browser.

📚 Productivity and Document Management

Karakeep

I used to be a dedicated user of Pocket (the read-it-later app), but unfortunately, the Mozilla team decided to sun-down the service for good. That meant it was time to find an alternative. If you’re like me and constantly save articles to read later, you should definitely check out **Karakee**p.

It lets you build custom lists, highlight quotes, and sync directly with RSS feeds. It also features an excellent auto-tagging system that you can hook up to your favorite LLM. While I mostly use it for articles, you can also store notes and YouTube links.

Slash

The problem this service solves for me is managing bookmarks for my frequently visited sites without being tied to a specific browser’s sync system or manually importing bookmars everywhere. **Slas**h allows you to tag your bookmarks and map custom shortcuts to launch them instantly.

Paperless-ngx

A robust document management system. If you want to digitize your paperwork and never lose an invoice, contract, or receipt again, go install **Paperles**s. It categorizes documents, applies tags, logs correspondents, and uses machine learning to automate these tasks over time. Thanks to its built-in OCR engine, you can search for text directly inside scanned images and PDFs. It also has a great mobile companion app for uploading files or snapping quick photos of physical documents on the fly.

You can even link it to your email inbox so it automatically pulls and archives attachments like digital receipts, utility bills, or bank statements.

Speakr

This tool has been a massive asset for my professional workflows. You connect it to Whisper for transcription and another LLM for text analysis. You can upload meeting recordings to get clean transcripts, or capture your microphone and system audio in real time. As soon as a meeting wraps up, it processes the audio so you can interrogate the transcript, generate action items, or use a custom prompt to extract executive summaries.

It goes even deeper: if you can’t remember which meeting covered a specific topic, it features a global search connected to a local RAG system containing all your past meetings. It can even extract calendar events mentioned during calls so you can add them to your schedule with a single click.

🎬 Multimedia and Storage

Immich

Think of this as your own self-hosted Google Photos replacement. It features facial recognition, custom albums, an interactive map using image metadata coordinates, and a smooth scrolling timeline. It supports multi-user setups and secure sharing, it’s a phenomenal alternative to mainstream cloud photo platforms.

⚠️ One important caveat: In my testing, the Raspberry Pi 5 is perfectly capable of handling the machine learning workloads for object and facial recognition, but you will notice a massive spike in resource utilization when batch-uploading photos, and especially during video transcoding.

My advice is to avoid uploading massive photo libraries all at once, or at least ensure no other resource-heavy services are running simultaneously. On the plus side, the mobile app supports background auto-upload, keeping your photos safely backed up if anything happens to your phone.

Jellyfin

If you want to stream your music, videos, movies, and TV shows exactly like having your personal Netflix across all your devices, you have to give **Jellyfi**n a spin. It’s incredibly straightforward to set up, open-source, and has fantastic client app support across Smart TVs.

Ryot

If you like tracking the media you consume, like TV shows, movies, anime, or video games, this service handles it effortlessly. It can track wider habits like workouts too, though I mostly use it to catalog the entertainment media I’ve completed or plan to watch.

Duplicati

I highly recommend this service for setting up automated backups of your infrastructure. In my case, it takes an incremental backup every three days containing all my service configs: persistent container volumes, .env files, docker-compose.yml templates, and database dumps.

Right now, my services run on a standalone drive, and Duplicati sends the backups directly to my RAID array, protecting me if the primary storage media fails. Long-term, I plan to transition to a proper 3-2-1 backup strategy by offloading a monthly copy to an offsite cloud option like AWS Glacier for cheap disaster recovery. It’s incredibly versatile, supporting local drives, SSH/SFTP, FTP, Google Drive, Dropbox, and S3-compatible storage endpoints.

🛠️ Bonus Utilities

**Umami**: If you want privacy-focused analytics for your websites without relying on Google Analytics, this is a beautiful option. I use it for my blog to track page views, geographic demographics, traffic referrers, browser profiles, and UTM campaigns. Best of all, it operates on a lightweight footprint of around 250MB of RAM.

**Wallos:** It does one thing and does it perfectly: subscription tracking. You assign categories, billing cycles (annual/monthly), and payment methods, and it notifies you when a renewal is coming up so you can decide if it’s still worth keeping.

**DumbAssets**: A simple asset management tool. My favorite feature is tracking device warranties and maintenance schedules. You simply attach the warranty PDF, and it fires off a notification when expiration dates loom close.

**Mealie**: Think of this as a digital recipe binder. I use it to preserve my mother’s signature recipes along with culinary entries I scrape from the web. It also includes meal-planning features and automated grocery list generation.

**Manyfold**: A must-have if you own a 3D printer. It provides an elegant library to organize your favorite 3D print models, sort them into collections, and track asset iterations rather than letting files clutter random directories.

These are my most heavily utilized services. If I listed every backend container, the list would double, but those don’t have web UIs or are hyper-specific dependencies. Here are a few notable utilities worth mentioning:

  • Evolution api: Bridges my WhatsApp account completely. Linking this into n8n lets me automatically transcribe incoming voice notes, summarize message chains, and trigger auto-replies.
  • Gotenberg: Mentioned in a dedicated article, this handles automated web screenshots along with advanced PDF generation and merging.
  • Hometube: A simple tool to download and archive media smoothly.
  • Uptime kuma: A staple service monitoring tool to track service downtime, though I might phase it out since Dockhand covers similar ground now.
  • Cronmaster: Provides an elegant web UI to schedule and monitor system cronjobs.
  • Speedtest tracker: Schedules recurring speed tests across my network connection and pings me if bandwidth metrics dip below predefined thresholds.

🛑 Services I Moved Away From

Plex

This used to be my absolute favorite media center tool. However, blocking free remote streaming options and aggressively raising the cost of their lifetime passes felt like a massive red flag, ultimately driving me straight to Jellyfin. I will admit Plex still looks a bit more polished out of the box, but for my personal needs, Jellyfin handles everything beautifully.

ByteStash

A self-hosted environment to store code snippets and daily prompts. I ended up decommissioning it because I migrated all my snippet management directly into my Obsidian vaults.

Forgejo

Hosting your own GitHub instance sounds like a fun weekend experiment, and it truly is. Running your code repositories and pipeline orchestration locally (the equivalent of GitHub Actions) is rewarding, but to be completely honest, GitHub’s free tier already perfectly covers my requirements.

Home Assistant

My house features smart lighting arrays, connected switches, and even voice automation to boot up my desktop rig. Yet, during my testing, I just couldn’t quite fall in love with Home Assistant. For my setup, shouting requests at Alexa is more than enough. I also wiped it due to its surprisingly heavy idle RAM consumption.

Portainer & Watchtower

Using Portainer to manage environments paired with Watchtower for overnight container updates served me well for a long time. However, development stagnation from Watchtower’s maintainers led me to evaluate alternatives, which is how I discovered Dockhand.

File Browser

On top of this utility entering a maintenance-only development cycle, I realized it was entirely redundant when I could just map the directories over local Samba shares. I can even browse my server files seamlessly via my phone’s native file explorer app.

CRM Monica

The idea of hosting a personal CRM to document and nurture social relationships sounds incredible on paper. But being realistic, I simply don’t have the discipline to manually log every interaction with everyone I know. If I ever need to, I can just build a linked relationship graph inside Obsidian.

Homarr

A highly modular dashboard utility for your homelab infrastructure. While it’s incredibly capable and lets you customize dashboard grids, its high RAM usage ultimately pushed me to migrate over to Homepage. If memory footprints aren’t an issue on your hardware, it’s definitely worth checking out.

🚀 What’s Next for the Homelab?

To wrap things up, my server architecture is already moving forward. I’ve been expanding my physical infrastructure by adding a ZimaBlade to the rack and testing out cutting-edge tools (I’m currently playing around with Hermes Agent), but that deserves a dedicated write-up of its own down the road.

**What about you? How many services on this list were you already running? Which ones are you itching to spin up on your own hardware? **Let me know down in the comments!

If you enjoyed this tour and love homelab automation, feel free to browse through my other articles. Catch you in the next one!

Comments

Loading comments…