A PHP application that could not be deployed without downtime, now deployed any afternoon
LAMP / LEMP application cluster
Where they started
A monolithic PHP application ran on six nodes with local file uploads and sticky sessions. Deployments required a maintenance window because nodes held different code versions.
The problem, precisely
Deployment risk meant releases happened monthly in a weekend window, and the business wanted to ship weekly during working hours.
What we did
Moved state out of the application nodes — uploads to object storage, sessions to Redis — which is what actually made rolling deployments possible.
Delivered
- State extracted from application nodes: uploads to object storage, sessions to Redis
- Release-directory deployment with atomic symlink switch and instant rollback
- Health-check-gated rolling deployment, draining nodes before replacement
- Read replicas used for reporting, keeping heavy queries off the primary path
- Deployment runbook with a rollback decision point and a defined abort threshold
Technologies used
Measured result
Every number below was measured and reported to the customer. Where we do not have a measured figure, the entry is a fact rather than a percentage — we would rather be precise than impressive.
- monthly → weekly release cadence in business hours
- 0 maintenance windows required for deployment
- < 5 min measured rollback to the previous release
- 4M monthly visitors served with no session loss in deploys
Rolling deployments are a state problem, not a tooling problem. Until sessions and uploads leave the application node, no deployment tool will make releases safe.