
Trial, Error, and Ethernet: My Homelab Learning Journey
Ashik Eqbal
January 14, 2025
Throughout the process of breaking and rebuilding my system multiple times, I have encountered numerous opportunities to learn and grow in ways I never anticipated. Each failure became a stepping stone to deeper understanding and skill-building, reinforcing the importance of perseverance in the face of challenges
Introduction
I’ve always been curious about server hosting. Back in the day, I used to experiment with hosting WordPress sites and tinkering with basic setups. When I got my first computer, I dove into video games, and like many others, I got hooked on Minecraft. Around 2018 or 2019, I landed a sponsorship deal that allowed me to run my first publicly hosted Minecraft server. That server ran for 3–4 months, giving me my first glimpse into server management and sparking my interest in hosting and infrastructure.
After that, I moved to DigitalOcean, where I started learning more advanced concepts. I explored tools like proxy managers, worked with SSH, and got my first real experience with the Linux environment. These early days laid the foundation for what would later become a deep enthusiasm for self-hosting.
With only one PC at the time, I began my self-hosting journey using VirtualBox on my Windows machine, running Ubuntu 22.04 LTS and Docker. This marked the true beginning of my homelab adventure.
Early Steps: VirtualBox and Docker
My homelab journey started simply, with VirtualBox and Ubuntu 20.04 LTS on my gaming PC. At first, I used Docker to host multiple services, including my first media server. For container management, I relied on Portainer, which was an invaluable learning experience and introduced me to the basics of managing and monitoring containers.
Eventually, I transitioned from Windows to Arch Linux, a move that brought new challenges and opportunities. Along the way, I switched from VirtualBox to Virt-Manager for virtualization. This transition wasn’t without its hiccups—I broke my system multiple times and had to rebuild it from scratch. However, each rebuild taught me something new, deepening my understanding of server management and Linux.
Through this journey, I became proficient in a variety of tools and concepts, including:
- Local DNS Management: Setting up and managing local domain names.
- Docker & Docker Compose: Creating and managing containerized applications.
- Automation: Learning to streamline tasks using scripts and tools.
- Self-Hosting: Hosting services on my own hardware instead of relying on third-party providers.
- Server Management: Gaining practical knowledge about maintaining and optimizing server environments.
These early experiences were not only educational but also laid the groundwork for a more sophisticated homelab setup in the future.
Transitioning to Arch Linux and Virt-Manager
Switching to Arch Linux was a significant milestone in my homelab journey. This transition provided me with daily hands-on experience using Linux tools and the command-line interface (CLI), allowing me to dive deeper into system management. Arch’s flexibility and excellent support for Virt-Manager made it an obvious choice, as it offered greater control over my system and its configurations.
At the time, my setup included a 12-core CPU, and I allocated 6 of those cores specifically for virtualization. Using this system, I installed CasaOS on top of Ubuntu as the base, which made managing applications and services much simpler. On this platform, I ran several Docker containers to host various services, including Cocola Lab, Code Server, Portainer, Plex, Jellyfin, Homarr, Overseerr, Radarr, Sonarr, and Watchtower.
This setup provided a comprehensive media server environment while also allowing me to experiment with containerized applications. The combination of Arch Linux and Virt-Manager offered the perfect balance of control, performance, and learning opportunities, making it an invaluable part of my homelab journey.
Experimenting with New Technologies
Once I got my hands on a new laptop, I transformed my old PC into a full-time server. This marked a new chapter in my homelab journey as I began experimenting with hypervisors. Initially, I tried using TrueNAS as my main system OS. While TrueNAS is an excellent tool for storage management, it didn’t quite fit my needs due to its limited flexibility for non-storage tasks.
Recognizing the need for a more versatile platform, I switched to Proxmox. The transition was seamless, and Proxmox proved to be the perfect solution for my requirements. Its robust virtualization capabilities, combined with a user-friendly interface, have made it my go-to hypervisor ever since. I’ve been using it consistently, and it continues to meet my expectations as I expand my homelab.
My Current System
Today, my homelab setup is a reflection of the knowledge and experience I’ve gained over the years. Here’s an overview of my current system:
Hardware overview:
- CPU: Ryzen 3600
- GPU: 1050ti (overkill for my current use case)
- RAM: 16 GB
- Primary OS: Proxmox VE
- Storage:
- 128 GB NVMe SSD: Used for Proxmox boot drive, as well as VM and container disks.
- 1 TB SATA SSD: Passed through to a TrueNAS VM for storage.
- 1 TB HDD: Passed through to the TrueNAS VM.
Virtual Machines and Containers:
Virtual Machines:
- TrueNAS VM: Manages and shares storage using NFS and SMB protocols.
- Ubuntu VM: Hosts Jellyfin with hardware encoding enabled, utilizing the 1050ti.
Containers (CTs):
- Pi-hole and AdGuard Home: For DNS filtering and ad-blocking.
- Plex: For media streaming.
- Nginx Proxy Manager: Simplifies reverse proxy and SSL management.
- *Various arr Tools: Radarr, Sonarr, and others for automating media downloads.
- Cloudflared: For secure remote access.
- Overseerr: For managing media requests.
- Homepage: A central dashboard for quick access to homelab services.
- Docker: Hosting additional lightweight services and tools.
Network Overview:
My current network setup is designed to ensure efficient communication between all devices and services in my homelab.
Network Interfaces:
- enp4s0 (Physical Network Device):
- Directly connected to my Proxmox host, serving as the main network adapter.
- vmbr0 (Linux Bridge):
- Configured as the primary bridge, linked to enp4s0.
- Handles the main Proxmox network traffic and all VM/container connections.
- IP Address: 192.168.1.10/24
- Gateway: 192.168.1.1
- vmbr1 (Linux Bridge):
- Provides an internal connection between your VM and containers (CTs).
DNS Management:
DNS management is streamlined using Pi-hole and AdGuard Home. This setup ensures efficient ad-blocking and provides internal DNS resolution for *.local.homecave.site domains. Additionally, Nginx Proxy Manager is used to simplify reverse proxying and SSL configuration on all internal services, enhancing security and accessibility within your homelab.
Remote Access:
To facilitate secure and encrypted access to my homelab, I rely on Tailscale, which provides seamless remote connectivity from any location. For hosting a few services publicly, Cloudflare Tunnel (via Cloudflared) is utilized. This ensures both secure and reliable access to the public-facing services in your network.
Breaking and Rebuilding
Throughout the process of breaking and rebuilding my system multiple times, I have encountered numerous opportunities to learn and grow in ways I never anticipated. Each failure became a stepping stone to deeper understanding and skill-building, reinforcing the importance of perseverance in the face of challenges.
Teachable Moments:
Understanding System Dependencies: Early on, I discovered the intricate web of dependencies between various components. The importance of knowing how changes in one part of the system can affect others became clear. A small error in one configuration could cascade into issues elsewhere. This taught me the necessity of careful planning and testing each change in isolation before applying it system-wide.
Backup is Essential: I learned the hard way that it's essential to have reliable backup systems in place. Breaking the system multiple times reinforced the importance of regularly backing up data and configurations, allowing me to quickly recover and avoid unnecessary downtime.
Troubleshooting as a Skill: Initially, troubleshooting felt daunting, but with each error message and failure, I learned to interpret logs and trace issues step by step. The key was developing the ability to remain calm and methodically resolve issues rather than rushing to fix them.
Automation to Avoid Human Error: As I continued breaking and rebuilding, I realized how crucial automation was for reducing manual mistakes. Implementing scripts and tools to handle repetitive tasks saved time and ensured consistency across the system. This led to smoother rebuilds with less risk of human oversight.
The Power of Documentation: Early on, I found myself repeatedly retracing my steps when fixing issues. Creating detailed documentation of configurations, setups, and procedures helped me avoid redundancy and allowed for quicker fixes in the future. It also made collaboration with others much easier.
Patience and Persistence: Rebuilding my system often felt frustrating, especially when things didn’t work as expected. However, this process taught me patience. I learned that failure is just part of the learning process, and persistence is key. Each rebuild made me more comfortable and confident in my ability to tackle complex systems.
Exploring New Technologies: Each iteration led to experimentation with new technologies, tools, and techniques. Whether it was testing a new version of software or exploring a new networking solution, every failure presented an opportunity to explore alternatives and broaden my skillset.
Reflections and Advice
Looking back on my journey of breaking and rebuilding my system, I realize just how much it has shaped my growth as a developer and systems administrator. What started as a frustrating process of constant errors and setbacks has transformed into a valuable learning experience. I now have a better understanding of my systems, and I’ve developed key skills that I can apply in various projects.
Embrace Failure as a Learning Opportunity
The most valuable lesson I’ve learned is that failure is not something to fear, but something to embrace. Each time my system broke, it presented a unique opportunity to explore new solutions and refine my approach. It taught me that problems are not roadblocks but stepping stones toward growth. My advice is to approach failure with curiosity rather than frustration. Ask yourself, “What can I learn from this?” and use that mindset to propel your learning forward.
Start Small and Build Gradually
One of the most important pieces of advice I can give is to start with small, manageable tasks. It’s tempting to jump into ambitious projects, but taking on too much too soon can overwhelm you. I found that by breaking down problems into smaller, more achievable parts, I could learn more effectively and avoid feeling bogged down by the complexity of the entire system. Gradual progress leads to steady growth.
Learn from Each Mistake
With every mistake, there’s a lesson. Whether it’s missing a configuration step or misinterpreting a command, each mistake has the potential to teach you something. The key is to analyze what went wrong and figure out how to prevent it from happening again. Keep track of these lessons and use them to build a stronger foundation for your future work.
Seek Help, Don’t Go It Alone
There were times when I felt stuck or overwhelmed, and I learned that reaching out for help is invaluable. There are countless communities, forums, and resources online that can provide insights, answer questions, and even offer new perspectives. Don’t hesitate to ask for advice or share your struggles with others. Collaborative problem-solving often leads to faster and more creative solutions.
Patience is Key
Throughout this process, I had to develop patience. Rebuilding a system can be slow, especially when you're trying new configurations or troubleshooting persistent issues. The temptation to rush through problems is strong, but I’ve realized that taking your time and thinking critically often leads to better long-term results. Don’t rush the learning process; embrace the journey, even if it feels slow.
Automate Repetitive Tasks
One of the most rewarding improvements I made was automating repetitive tasks. Whether it was backing up data, configuring services, or setting up new environments, automation made a huge difference in reducing errors and saving time. My advice is to invest time in learning how to automate tasks with scripts or tools. It’ll pay off in the long run and make your processes more efficient.
Document Everything
The more I worked, the more I realized how important it was to document my progress. Whether it’s a simple configuration change or a more complex network setup, writing things down helps you track your work and serves as a valuable reference for future troubleshooting. It also makes it easier for others to collaborate with you on the project.
Conclusion
Reflecting on my journey through trial, error, and growth in building my homelab, I’ve come to appreciate the value of persistence, curiosity, and continuous learning. Each challenge, failure, and success has shaped not only my technical skills but also my approach to problem-solving and systems management. From starting with a simple VirtualBox setup to building a comprehensive and robust homelab environment, every step along the way has been a learning experience that pushed me further into the world of self-hosting, automation, and infrastructure management.
Through countless rebuilds, I’ve learned that failure is not the end but a crucial part of the learning process. Each mistake provided an opportunity to refine my skills, explore new technologies, and strengthen my understanding of the intricate connections within a system. With each failure, I became more patient, more organized, and more resilient.
As I look ahead, I know that there will be many more challenges to overcome. However, I now approach them with confidence and a clear mindset, equipped with the tools, skills, and knowledge to adapt and learn. The advice I offer to others on a similar journey is simple: embrace failure, start small, automate, document, and, most importantly, be patient and persistent. Every setback is just a stepping stone to mastering the systems you’re building. The journey may be long, but the rewards, both in knowledge and experience, are well worth it.
In the end, my homelab is more than just a collection of hardware and software; it’s a testament to growth, learning, and the power of perseverance. The lessons I’ve learned along the way are not just about technology but about how to approach life’s challenges with a mindset of continual improvement and a passion for discovery.
Acknowledgements
I want to extend my heartfelt gratitude to several incredible creators and communities whose content, guidance, and inspiration have been pivotal in shaping my homelab journey. Their expertise, dedication, and passion have fueled my growth, providing invaluable insights and helping me overcome the challenges along the way.
Techno Tim – Your videos and tutorials on homelab setups, networking, and server hardware have been an endless source of inspiration. You've made complex topics approachable and exciting for those like me who are just starting out.
Christian Lempa – Your deep dives into homelab technology and server builds have opened my eyes to the possibilities of creating a powerful, personalized system. Your content has helped me explore new configurations and tools that I wouldn't have considered otherwise.
Lawrence Systems – From your detailed product reviews to your expert breakdowns of virtualization and networking, your content has been a cornerstone of my homelab education. Your guidance has given me the confidence to try new technologies and troubleshoot with precision.
Hardware Haven – Your thorough hardware reviews and hands-on testing have given me practical knowledge that helped guide my purchasing decisions for my homelab setup. You've made it clear that hardware selection is crucial to building a robust system.
TechHut – The homelab projects and setup ideas you've shared have inspired me to think outside the box and take on more ambitious challenges. Your projects have often been the spark for new ideas in my own homelab.
Craft Computing – Your focus on server setups and cost-effective solutions has encouraged me to think creatively about how I can build and maintain my systems. You've shown me that it's possible to create powerful setups without breaking the bank.
Raid Owl – Your tutorials on storage, networking, and server management have been indispensable. You’ve made understanding the technical aspects of homelab setups far less intimidating, and your content continues to inspire me to push my own setup further.
ServeTheHome – As a trusted resource for server hardware, networking, and virtualization, your site has been a go-to for me whenever I needed to dive deeper into specific components. Your reviews and articles have guided me in optimizing my hardware for efficiency and reliability.
DB Tech – Your focus on homelab efficiency and automation has motivated me to streamline my own workflows and ensure my systems are running smoothly with minimal effort. Your tutorials have provided me with the tools and confidence to implement new technologies.
Jeff Geerling – Your work with Ansible, automation, and homelab infrastructure has been a game-changer for me. You’ve helped me understand the power of automation and its role in maintaining scalable and efficient systems.
NetworkChuck – Your engaging, fun approach to networking and tech has made learning about homelabs both exciting and enjoyable. Your energy and approachability have made even the most technical topics accessible to people like me who are still learning the ropes.
And special thanks to tteckster, you will be missed. Rest in peace.