Setting Up CI/CD with GitHub Actions Self-Hosted Runner (And Everything That Broke Along the Way)

I finally did it. After weeks of manually SSHing into my production server, pulling Docker images, and restarting containers like it’s 2015, I set up a proper CI/CD pipeline for my hobby project. The goal was simple: push to main, and everything deploys automatically. The journey? Not so simple. Here’s everything I learned. The Setup My project Sudden is a monorepo with: Backend: Spring Boot application Frontend: React application Infrastructure: MongoDB, Redis, all orchestrated with Docker Compose Deployment: Single production server running everything Before this, my deployment process looked like: ...

January 17, 2026

Volumes in DevOps: Learning the Hard Way

How I learned to stop losing data and started using persistent storage When you’re new to DevOps, you make mistakes. I made several. The biggest one? Running an application with all its data stored directly on the instance, assuming it would always be there. The Problem: Data Loss I spun up an instance, cloned my hobby project from GitHub, built the application, and opened it to the internet. Everything worked fine. But I didn’t understand one critical thing: where was my data living? ...

December 20, 2025

Automating SSL Renewals: Saving Time and Avoiding Expired Certificates

(Inspired by the automation setup shown in the post shared — 47 SSL certificates renewed automatically, 32 engineer hours saved per year, and zero expired certificates.) https://x.com/brankopetric00/status/1980779147635888396 The Pain We All Know Every 90 days, the same calendar reminder would pop up: “Renew SSL certificates.” That used to mean two hours of tedious work — generating a new CSR, getting it signed, uploading it to our load balancer, and praying we didn’t break anything in production. ...

October 22, 2025