My Homelab
September 10, 2024 (1mo ago)
During a recent conversation with a colleague, I mentioned my home server setup, and he suggested I write about it. I thought it would be a great way to kickstart my blog, so here we are.
I got my home server during 2022 at an office clearance sale and ever since I got it, I've been using it as a test bed for all my linux needs, as well as hosting multiple projects of mine and a ton of cool services for my home network.
The Machine
It’s a really old Lenovo ThinkCentre and while it isn't the most powerful machine, considering the price I got it for, it was well worth it. Equipped with a 2nd generation (yes, it is that old) Intel core i5 and 4 GB of RAM, its performance is comparable to that of a Raspberry pi 4.
As for storage, I repurposed a few external hard drives by shucking them and creating an LVM pool providing about 1.7 TB of usable storage.
Connectivity
I’ve installed a Tailscale VPN server to remote access my home network. For the projects that run on the server, I use Cloudflare Zero Trust as a reverse proxy primarily due to its security features, like shielding internal services from direct exposure to the internet. Additionally, I run an Apache Guacamole server, allowing me to remotely access any desktop on my home network through a web interface.
Storage
My server has 1.7TB of usable storage, where I’ve configured a Samba share for internal file sharing within the family. For external sharing, I use Nextcloud, hosted on a public domain as an alternative to Google Drive and iCloud. Nextcloud is installed on both my phone and desktop, automatically syncing photos from my phone, making them easily accessible on my desktop. Since services like iCloud are unavailable on Linux, this setup is a perfect alternative.
Documentation
Proper documentation is critical as my server hosts multiple projects at any given time. This used to be achieved in a single text file that i’d have to manually edit (which i barely did, making it absolutely pointless). To improve this, I developed an SSH application that scans my services directory and provides real-time details about the running projects. Now, I can simply use ssh server-ip -p 1212
to check the status of all services on my server.
Development
All essential development tools are installed on the server, including Portainer, which offers a user-friendly web interface to manage Docker containers. I also host MySQL and Redis locally for project development before deployment.
Additionally, I’ve configured Neovim on the server, ensuring my development environment is always just one SSH session away, no matter where I am.
Conclusion
Ultimately, I've had tons of fun setting this homelab up and it has given me a persistent Linux box to tinker with any time I want. The flexibility to experiment and continuously improve my setup is my favorite aspect of having this homelab.
Thanks for reading, and I hope you find it as enjoyable as I did putting it together!