22/09/2026
From CentOS 7 to Rocky 9, from Ruby on Rails 3 to 8, from Redis stand-alone to Redis Sentinel.
All in one night, thanks to weeks of meticulous planning.
A few nights ago, our Research & Development and IT & Systems teams stayed late at the office to upgrade something that lies at the very heart of Qboxmail: our Control Panel and APIs.
Originally built in 2015 as a monolith with few dependencies, it has evolved into a complex system that communicates with MySQL, Redis and MongoDB, reads from NFS, writes to S3, calls internal and external APIs, and does so much more besides.
During the upgrade, one of the final blocks of the codebase was migrated in real time, without interrupting the normal flow of API calls:
• from CentOS 7 to Rocky Linux 9
• from Ruby 3 to Ruby 4
• from Rails 3 to Rails 8
• from a manual release process to an automated one based on Ansible and Woodpecker
Today, what we lovingly refer to as “the Panel” has become a complex architecture made up of multiple servers, which in turn host Podman-based containers. We chose Podman over Docker because of its integration with systems through Podman Quadlet. It starts with an Nginx cluster and Keepalived load balancers.
Configuration and deployment are automated through Ansible and Woodpecker, making updates as transparent as possible for users thanks to a zero-downtime architecture. In fact, over the past week, more than 50 updates have been deployed through the new CI/CD architecture, with 0 HTTP requests lost.
Of course, there were a few unexpected twists: at times, we were holding our breath and, at one point, the office’s night-time alarm went off, setting off the siren.
In the end, though, the mission was accomplished: the work had been completed with no service disruptions for our customers.
Curious about the new stack behind our Control Panel and API?
Let us know in the comments. Our colleagues will be happy to answer your questions :-)