Homelab
PROJECT ON HOLD: Recent flooding occurred at my home, taking away the whole server rack. :( Currently replanning the infrastructure, to make it disaster resistant.
Building and managing a homelab to explore enterprise-level IT infrastructure, networking, and service hosting. This project focuses on deploying secure, scalable systems while experimenting with the latest technologies.
This homelab project started as a simple need for universal storage—a centralized location to store my photos, movies, documents, and backups. Initially, I relied on my personal computer, but I wanted persistent access even when my computer was off. To solve this, I repurposed a Raspberry Pi 4 into a Network Attached Storage (NAS).
Building the NAS & Storage Management.
I installed Raspbian Lite (a headless Debian-based OS for Raspberry Pi) and deployed OpenMediaVault (OMV), an open-source NAS solution. OMV provided Samba file sharing, Time Machine support, and a web-based interface for managing storage. Through this process, I became proficient in Linux system administration, particularly with Debian-based distributions, setting up and maintaining a file system entirely through the command line.
To enhance accessibility, I configured an SMTP server for system notifications, allowing OMV to send alerts about system health, disk usage, and potential issues.
Introducing Docker for Service Isolation & Expansion.
Once my NAS was operational, I wanted to introduce media streaming. I chose Plex Media Server, which met my needs but initially conflicted with OMV since it required the same IP and port. This led me to explore containerization as a solution.
After researching Docker, I migrated my services into Docker containers, learning how to deploy, modify, and manage containers via the CLI. To simplify management, I introduced Portainer, a web-based container manager compatible with Docker and Kubernetes, allowing for easier deployment and monitoring.
Expanding Services & Enhancing Network Management.
With Docker and Portainer in place, I deployed various services, including:
-
Pi-hole & AdGuard Home – DNS-based ad-blocking and content filtering.
-
OpenSpeedTest – Network performance testing.
-
Cockpit – Web-based server monitoring and system management.
-
Plex Media Server – Self-hosted media streaming for movies and TV shows.
As my setup grew, I encountered port conflicts since all services shared the same IP with manually assigned ports. To improve service isolation, I implemented macvlan networking, a Docker-native virtual LAN that assigns unique MAC and IP addresses to containers. This allowed each service to function as if it were on a separate physical machine, improving network organization, accessibility, and scalability.
Future Expansions & Continuous Learning.
This homelab is an ongoing project with several planned additions. I intend to set up a VPN server using WireGuard or OpenVPN to enable secure remote access. Additionally, I plan to deploy a qBitTorrent download server for managing torrents and integrate an NVR system such as Kerberos or Shinobi to record RTSP streams from IP cameras.
Throughout this project, I have significantly enhanced my technical expertise. I have deepened my Linux administration skills, including command-line navigation, file management, and system maintenance. I have also expanded my knowledge of network configuration, working with Samba file sharing, port forwarding, and Docker macvlan networking. Moreover, I have gained hands-on experience in containerization and orchestration, deploying and managing Docker containers, configuring environmental variables, and setting up startup behavior and networking. Finally, I have become proficient in managing self-hosted services, including OpenMediaVault, Docker, Portainer, Plex, Pi-hole, AdGuard Home, Cockpit, and OpenSpeedTest.
TL;DR:
I built a homelab to centralize file storage, host self-managed services, and explore enterprise-level IT infrastructure. Starting with a Raspberry Pi NAS, I expanded it by deploying Docker containers for Plex, Pi-hole, AdGuard Home, and more, managing them with Portainer. To improve networking, I implemented macvlan, assigning unique IPs to services. This ongoing project continues to evolve, helping me refine my skills in Linux administration, networking, containerization, and self-hosted infrastructure.