A while ago I had ventured on a journey to explore the world of setting up my own home sever (or home lab). Since this was my first foray into it and what i mostly wanted was a NAS while also trying to do it for as little money as possible, I put together a reasonably good system using a Raspberry Pi 4, 4TB NAS HDD and a 1TB Backup drive. The details of why i chose this setup is outside the scope of this post and can be found here: Setting up my home NAS. This post mostly just focusses on:
- My current setup (Yes is changed a bit from what it was in the original article)
- What i like about it
- What i don’t like about it
- What i really don’t like about it
- The future…
I reference a lot from the older article, so taking a quick look at it will help make more sense of this post. I also plan on documenting my research for homelab V2 (Yes this gets addictive after a while), but for now ill just focus on the topics i mentioned earlier.
My current setup
This is my current homelab hardware setup
The Raspberry Pi 4
This is my main node in my homelab. It serves as the NAS and the node with all the main services running on it. It is flashed with an Open media Vault (OMV) image on the boot drive and configured with:
- Samba: For accessing the storage over the network
- Rsync: To mirror important data from the 4TB HDD to 1TB HDD
- Docker: To run all the the self hosted services
- Portainer: To manage the docker containers
- Access management
The Pi 4 has been setup as a rudimentary NAS. It consists of 3 drives:
- 4TB HDD: This serves as the main Network accessed storage drive. It contains all the files that can be accessed over the network.
- 1TB External HDD: This is a backup HDD that I already had during the build and is used to mirror some of the more important files from the main drive. Since the Pi cannot do raid well, this was a stop gap solution for redundancy.
- 32GB Boot drive: The OMV OS and other OMV related config resides here. Some config also resides in the main drive. The location depends on which service needs that data.
Alongside the NAS features, the OMV image also allows docker to be run in a very intuitive manner with portainer. With this feature, i have quite a lot more services running on the node:
- PiGallery2: Provides an easy way to view photos and videos on the server.
- Apache Server: To locally host static sites that should only be accessible internally.
- Plex: To serve the Movie and other media library on the internal network.
- CodeServer: To provide an remote development environment using just the browser on the local network
This is another Raspberry pi node i have lying around that runs an instance of Octopi to remotely control my Prusa Mini. This was hosted on a separate node since I was already running into the power limits for the single pi 4 instance and putting all my eggs in one not so sturdy basket seemed risky. I also happened to already have a pi3 lying around so the choice was an easy one.
This section is interesting because it is well known that every good backup should follow the 3:2:1 methodology, where the 1 means 1 offsite backup incase the location is compromised. This is an especially tricky one because this means that you need to have an offsite location that is accessible remotely and has the storage capacity you need. Since this was a hard thing to come by during my initial setup, i opted for a simple solution of just manually backing up the crucial data to my personal laptop and portable SSD respectively, hence “pseudo“.
This is simply my shared hosting provider. Ive put it in the list because this is actually where i host most of my own services that i need access to both inside and outside my local network. Unfortunately, since this only supports static suites and PHP, its functionality is quite limited. That being said, i have more than a dozen services that i host on it and it is my way to get the benefit of self hosting without the need to open up my network just yet (although i will most likely have to do that anyways soon).
What I like about it
While i am actively thinking about upgrading the system, there are actually a lot of things i like about this setup. It is quite a powerful system and with a few tweaks, would actually be able to serve very well for a beginner homelab in production. so what do i like about it:
- Super quiet: I have retrofitted this Pi with a very good case and case fan since the latest Pi’s can get a lil toasty, but I have never once heard the fan spin up during use. The HDD platter noise is actually the bigger of the two noises.
- Very low power: Running on an ARM CPU and with such a low clock speed and form factor, the Pi is able to run off a simple USB C PD power supply.
- Super compact: for what i have running on the node, its physical footprint is miniscule. Its just the two drives connected over USB and the Pi itself. Even when i recently moved apartments, the whole thing came apart, was put into a backpack with my laptop and was moved effortlessly.
- Still has headroom to do more: Even with all the things its being asked to do right now, the Pi is still yet to struggle with any of the tasks. The CPU rarely ever spikes and the memory is well within the limits.
What I don’t like about it
With all the positives, there are some downsides to the setup too:
- Architectural limitation: While the CPU and RAM are more than enough for most of the services that i want to host, some of them are architecturally limited to the x86 platform making some projects impossible.
- Power: The Pi being a Single board computer is not well equipped for certain heavy IO workloads and configurations. e.g. Hardware raid is notoriously difficult and all HDDs have to be attached using the 4 USB ports available.
- Gigabit ethernet: This is not as big of an issue, but now that we have 10Gig ethernet, this is a big bottle neck in the NAS speed.
- Attaching storage: When i had just two drives, attaching them using the 2 USB 3.0 ports was sufficient. But to have real data redundancy or some sort of RAID configuration, the IO on the PI is very limited.
- Scaling: While we can horizontally scale the Pi cluster, what i missed was the raw power needed to all my essential services and then some more not so memory conscious services on top without worrying about hardware limitations.
What I really don’t like about it
To be honest, this is very subjective and i’m sure i’m making some assumptions here, but overall, the thing i really don’t like about the setup is how i don’t feel confident in the setup. Most of that can be attributed to how i set it up, ignoring good devops practices and instead opting for manual steps and sometimes bad design choices. e.g. Manually setting up each docker container instead of relying on docker compose (Ive fixed this now). I am not sure that if something goes terribly wrong, i will be able to recover my data. I did have one such scare when i moved. Upon reassembling the server, the OMV installation had corrupted and to this day i have not been able to fix the issue.
With this said, will i suggest other to not follow my setup? hell no! It did everything i expected it to do and more. For most people, this will be more than enough if implemented correctly and not as haphazardly as i did. With some effort, I am sure that i can get this system to be as reliable as I need it to be. (Its not that hard, it just takes time)
Then why am i thinking of upgrading my system? The answer is quite simple. Since i got into self hosting, the number of things i want to host and run has grown to a point where the current node limits me. Given that I already need to fix some of the reliability issues with my current setup, this is as good of an opportunity as any to start with a clean slate and use all my learnings to build the next system without any of these issues.
Its still quite early in the process and i will have anouther post outlining how i made those decisions and set it up. for now, this is just my rant/documentation for my current setup. A quick reference for future me to reference when all this tribal knowledge has withered away.