From Containerization to Hypervisors: Chronicles of a Developer's Dive into DevOps
In my journey of professional growth, refining my DevOps knowledge became paramount. Initially, my interest in CyberSecurity led me to "Capture the Flag" (CTF) exercises on platforms like HackTheBox and TryHackMe. For those unfamiliar with CTF, the idea is to access a vulnerable server hosting a flag, usually a string like 'FLAG{random string}', hidden within a text file. The objective is to compromise the vulnerability. I quickly recognized the benefits of being acquainted with Linux-based systems in these challenges. While my MacBook experiences provided foundational knowledge, the intricacies of setting up a local environment – a feat I had only accomplished once or twice – seemed daunting.
Compelled to understand more, I delved into TryHackMe's modules on essential Linux commands. The allure of a personal sandbox led to the inception of my 'Homelab'. Starting with an old laptop reconfigured with the Debian OS, I aimed to replicate production environments. Most such environments leverage virtualization, either through Virtual Machines (VMs) or containerization. In simple terms, virtual machines mimic a physical server, allowing multiple operating systems (OS) to run on a single physical server. Containerization, on the other hand, operates without needing a full OS installation; containers run atop the host OS, conserving resources otherwise spent on OS management. This curiosity introduced me to Docker and the universe of containerization. Soon, a containerized NodeJS Discord bot was up and running on my home server. This was followed by integrating vulnerable applications, like OWASP JuiceShop, for pentesting. Direct server IP usage transitioned to domain routing via an NGINX-contained reverse proxy. To mirror a production-like environment further, I embarked on setting up a Continuous Integration and Continuous Deployment (CI/CD) pipeline. The essence of CI/CD lies in the automatic deployment of your application or code to a specific environment whenever new code is pushed to your GitHub repositories. My journey with Jenkins allowed for a seamless CI/CD transition from my repositories to my server, a process both challenging and rewarding.
Still yearning for deeper insights, I turned to Hypervisors. Essential for virtualization, Hypervisors create and manage virtual machines. Type 1 Hypervisors, or bare metal hypervisors, operate directly on server hardware, negating the need for a host OS. My initial foray into this realm was with XCP-ng, hosting VMs such as Ubuntu, Debian, Kali, and Parrot OS. However, its absence of a web console steered me towards Proxmox, an absolute revelation in simplicity. My command repository on GitHub, filled with troubleshooting tips and commands, greatly accelerated these setups. Soon, I repurposed another older PC into a Proxmox node, integrating a TrueNAS VM for network storage and a Debian VM for our multimedia needs via Plex.
Recommended by LinkedIn
With a robust infrastructure at hand, I'm eager to dive into infrastructure-as-code frameworks like Terraform and Ansible. These tools pledge to automate and standardize infrastructure setups, marking the next logical progression in my journey.
While it's possible to experiment using free-tier Cloud hosting, managing local hardware safeguards against unexpected Cloud expenses.
This odyssey has profoundly expanded my grasp on application hosting and system operations, markedly enhancing my debugging abilities. Setting up local environments is now instinctual for me. While many developers depend on specialized DevOps/SRE teams, I am convinced that having these skills is priceless. So, as you refine your coding proficiency, consider broadening your horizons with this skillset. Who knows? It could either fan the flames of a newfound passion or open doors to career advancements.