From manual deploys to a pipeline in six weeks
The app ran on a single server and was deployed by hand over FTP — usually on a Friday evening. No tested backups, no monitoring; every update was a gamble.
Problem
One person knew the server. A deploy took about 40 minutes and ended with manually checking whether it “works”. Customers were the ones reporting outages.
Solution
Containerised the app (multi-stage, non-root images) and built a GitHub Actions pipeline: tests → build → Trivy scan → GHCR registry → deploy with health check and automatic rollback. Staging and production described in Terraform and Ansible. Prometheus, Grafana and chat alerts. Nightly database backups with a weekly restore test.
Outcome
Deployments became a routine daytime task, and the team got documentation and runbooks to run the environment on their own.
- deploy time
- 40 → 6 min
- deploys per week
- 1 → 15+
- rollback
- < 2 min