The Homelab Series: Part 1 - The Start of It All

Homelab Introduction Self-hosting Docker

It all started when I needed a CI/CD service the most...

Introduction

Welcome to my vault, it is quite fortunate to see a visitor. Let me tell you the root of all this... series, and a bit of me.

I am Thanh, or call me luckydoG_ if you would, I work professionally as a Game Programmer, some time in 2025 I started a personal Unity project with some of my colleagues to create a roguelike game. Things were quite smooth, we worked on the editor, played some previews, did many iterations to improve the gameplay. Then I knew we hit a wall very soon after that.

Our target platform was mobile, as we already have some experience with it. However, playing a game in the editor is much different from playing it on mobile: performance, input gestures, visual appealing,... We needed a way to play the game on our phones to actually know what is happening with it.


The early CI/CD

I built an one-click-one-build option in Unity to build the game. Okay-ish, but every time I wanted to deliver the build to the other guys, I was left with:

  • Sending it via chat.
  • Uploading to a cloud platform, then ask the guys to download it.

Well, manual work, and I was too lazy to wait for the build, then upload it somewhere, and nudge everybody. So I thought life should be better. I digged reddit and found out GNU Make can be the CI too. I was left with a platform to upload a build, so I chose the classic Firebase Distribution.

Makefile.png

A peek of the Makefile I used to automatically build and upload to Firebase.

So, yeah, I was quite happy with that, until I get tired of the command I had to type :)

make android bundleVersion=0.2.1 bundleCode=21

Short? Well in order to upload to Firebase I also had to:

  • Create a release note file under UserSettings/ for the pipeline, so that the pipeline picks it up and sends to Firebase for me.
  • Keep a secret file on my machine. If it is accidentally lost, I have to download a new one, put to the Secrets/ folder.

If another guy wants to build, I would need to introduce him to the CLI, the release notes and giving him the secret file.

I am a lazy guy, I wouldn't go down that path all day.


My first Self-hosted service, ever!

I took a step further, looking at what we usually do at work, and I found Jenkins, a free, open-source software that can be hosted by anyone.

jenkins.webp

You know you can trust this man when it comes to CI/CD.

So I did, I hosted the Jenkins docker container on my PC... and ran a agent on the same machine!

I also created a new branch just to test my Jenkinsfile for the new automated build workflow. If you know you will know, writing a working Jenkinsfile is somewhat an art. It took me a week of side work just to stick the new CI/CD to my project, it wasn't as terrible as it sound, it was very fun, at least for the tinkerer like me.

And the return? Now I have a GUI to input, and everything in one place.

Jenkins_Build.png

How cool is this? A CI/CD pipeline for my own!

Conclusion

It was a personal project and a CI/CD service that changed me. I wanted to automate as much things as possible, from a Makefile to build to a small Jenkins server on my machine.

Achievement unlocked: first self-hosted service.

Reward: a bunch more to come, and two old machines to run them.