I’ve been thinking about setting up CI/CD in my home lab for a little while. My setup is not very complicated and it is doesn’t change much. My day job, however, has me setting up CI/CD pipelines for a living. So I figure it might be worth it to experiment with some of the new CI/CD Tools in the open source community.
My current setup
These are the major technologies/software I use in my home lab and how I use them
Proxmox
This is the cornerstone of my setup. I have one Proxmox host that houses a number of VMs and LXC containers. I use Proxmox especially because I have a number of services that I run for friends (Like game servers) that are easier to deploy on VMs than on a shared docker host. It also allows me to give multiple services 80/443 without having to maintain a complicated spreadsheet or series of bookmarks on
Docker
Almost all of my services are deployed on these VMs using docker. I separate the VMs out by major function. I have a “dockerhost” for lightweight services then I separate out heavier stacks like Nextcloud to their own host so that I can better cordon their resource usage on the host.
Dockge
Enter Dockge. This software is awesome. Its a super lightweight container that doesn’t really take hostage of your docker compose files or your .env file. Its been really nice to use to deploy multiple docker compose stacks and you can also aggregate other dockge agents in the same webpage. It has a button for updating and pulling new images but its all still very manual.
What I’m going to experiment with
Proxmox VM templates
I so rarely stand up a new VM that its not a huge effort to mount the Debian ISO and run through the wizard. But, its tedious enough that I’ve started Setting up a Debian Proxmox template.
Terraform
I’ve used Terraform extensively professionally but I’m not sure if there’s a huge value add for me to use it locally. I’m only going to keep track of up to ten virtual machines so if I introduce this into my home lab setup its gotta be worth the hassle of managing state files.
Ansible
Now, this is one I fully intend to add to my setup. I think its still one of the best configuration languages out there. Installing Docker on Debian is a little bit tedious and I’d much rather use a Jeff Geerling role to do this task or even create a my own playbook. This also has a nice potential to automate my host patching and other configuration options like populating trusted keys.
Semaphore
Semaphore seems to be a direct upgrade of Rundeck. I’ve used Rundeck as an Ansible runner in the past and really liked how simple it was to set up tasks. Semaphore also can run Terraform (or Open Tofu) so If i decide to add Terraform to my stack, this is an ideal runner for it. It also allows it allows for a git repository to be the source of the config so it emulates professional CI/CD tools a bit more cleanly.
Komodo
Komodo seems to be all the rage in the home lab setups for docker management. This also allows you deploy docker compose files from a git repository as well as scheduling automatic updates for your containers. It seems really pretty awesome and is also one of the new tools I’m most looking forward to using.