DevOps & CI/CD

DevOps & CI/CD

GitHub Actions pipelines, automated deployment to VPS, staging environments, Docker containerisation, server hardening, and zero-downtime release workflows - for CI4, Laravel, WordPress, and Node.js. Stop deploying via FTP. Ship with confidence.

Git push
Triggers deploy
Zero
Downtime deploys
Rollback
In one command
GitHub Actions
Primary pipeline tool
Zero downtime
Blue-green & rolling deploys
Staging first
Test before it reaches users
Fixed price
Scoped before we start
What We Fix

Six signs your deployment workflow is a liability.

Every manual step in your deployment process is a risk. Most platforms we inherit have at least four of these.

Deploying via FTP

Files dragged and dropped into FileZilla. No history. No rollback. One wrong overwrite and the site breaks. You find out from a customer.

No test environment

Every change - plugin update, code fix, config change - goes straight to production. Testing means hoping. Breaking means downtime.

No version control on live code

The code on production does not match what is in your Git repo - or there is no Git repo. You cannot tell what changed, when, or who changed it.

Deploys take 30+ minutes manually

SSH in, git pull, composer install, run migrations, clear cache, restart PHP. Every time. Somebody does this manually while holding their breath.

No rollback plan

A bad deploy goes live. The only option is to manually reverse the changes - which nobody remembers exactly. You are debugging in production under pressure.

Only one person knows how to deploy

Deployment is tribal knowledge. If that person is on leave, sick, or has left - nobody else can safely push a change. The platform is held hostage to one person's memory.

Before & After

What a CI/CD pipeline changes.

Without CI/CD
FTP upload - 25 minutes
Manual migrations on prod
No test before deploy
No record of what changed
Rollback: manually undo files
Requires one specific person
Site down during deploy
With CI/CD (us)
Git push → auto deploy in 60s
Migrations run automatically
Tests run before every deploy
Full audit log in GitHub
Rollback: one git revert + push
Anyone with repo access can deploy
Zero-downtime rolling deploy
The Pipeline

What happens when you push to main.

A typical CI/CD pipeline we build - from code push to production in under 90 seconds.

Push
main branch
Test
PHPUnit / Jest
Build
composer / npm
Staging
auto-deploy
Approve
manual gate
Production
zero downtime
On every push

Tests run automatically. If they fail, the pipeline stops. Nothing broken reaches staging or production.

Staging auto-deploys

Every passing build automatically deploys to staging. Your team reviews before production approval is granted.

Production is gated

Production deploy requires a manual approval step - one click in GitHub Actions. No accidental production pushes.

What We Deliver

Six DevOps capabilities we set up.

GitHub Actions CI/CD Pipeline

Full pipeline setup - test job, build job, staging deploy, manual production approval gate. Environment secrets managed via GitHub Secrets. Workflow tested end-to-end before handover. YAML documented so your team can modify it.

Fixed-price

Staging Environment Setup

Staging subdomain on your VPS with its own database, password-protected, and auto-deployed on every passing build. Mirrors production config exactly. Your team tests on staging - not on your users.

Fixed-price

Docker Containerisation

Dockerfile and docker-compose.yml for your application - local dev environment matches production exactly. No more "works on my machine". PHP, Nginx, MySQL, Redis all in compose. CI pipeline builds and pushes the image on every commit.

Fixed-price

Server Hardening & SSH Setup

SSH key auth only, root login disabled, UFW firewall rules, fail2ban, unattended security upgrades, a dedicated deploy user with limited permissions, and server-level rate limiting. Security baseline before your app goes anywhere near it.

Fixed-price

Monitoring & Alerting

UptimeRobot or Better Uptime for endpoint monitoring. Slack or WhatsApp alerts on downtime. Server resource monitoring via Netdata or similar - CPU, memory, disk alerts before they become incidents. Deploy notifications posted to your team channel.

Fixed-price

Zero-Downtime Deploy Strategy

Rolling deploy or blue-green strategy depending on your infrastructure - new code served alongside old until health checks pass, then traffic switches. Database migrations designed to be backward-compatible. Deployment takes 60 seconds; users notice nothing.

Fixed-price
Tools We Use

The DevOps stack we configure.

CI/CD
GHGitHub Actions GLGitLab CI BBBitbucket Pipelines
Containerisation
DKDocker DCDocker Compose CRContainer Registry
Server Stack
UBUbuntu 24.04 NGNginx FPPHP-FPM
Monitoring
URUptimeRobot BUBetter Uptime NDNetdata
Security
CFCloudflare WAF F2fail2ban FWUFW Firewall
App Platforms
CICI4 / Laravel WPWordPress NJNode.js
Pricing

Fixed price. Done once. Works forever.

A CI/CD pipeline is a one-time setup cost. Once it is running, every future deploy is automatic.

Basic Pipeline
Rs 8K – 18K
1–2 days

GitHub Actions pipeline for one app. Test → deploy to production. SSH-based, no Docker.

Most Common
Full DevOps Setup
Rs 20K – 45K
3–5 days

Pipeline + staging environment + server hardening + monitoring + zero-downtime deploy strategy.

Docker + Full CI/CD
Rs 40K – 80K
5–8 days

Full containerisation, Docker Compose local dev, image registry, CI/CD pipeline, staging, monitoring.

All prices exclusive of GST. Scoped individually - complexity varies by app and infrastructure. Get a quote

FAQ

Questions about CI/CD setup.

Not sure if your project needs this? Describe your current deploy process and we will tell you what to fix first.

Set Up My Pipeline
We already use GitHub. How much work is it to add CI/CD?
If you already use GitHub and your app is on a VPS, the basic pipeline is 1–2 days. We add a .github/workflows/deploy.yml, configure SSH deploy keys, set up GitHub Secrets for your server credentials, and test the full flow. For most apps this is a half-day job if the server access is clean and the codebase is already version-controlled.
Does our code need to be on GitHub, or do you support other platforms?
We primarily build GitHub Actions pipelines - it is the most widely supported and free for public and private repos. We also set up GitLab CI and Bitbucket Pipelines if your team is already on those platforms. If your code is currently nowhere (FTP only), we help you set up a proper Git repo and branching strategy first.
What if our tests do not exist yet?
The pipeline can be set up without tests - we simply skip the test job and go straight to deploy. We recommend adding at least a smoke test (does the app respond to a health check endpoint) as a gate. Writing a full test suite is a separate engagement. The pipeline structure is designed so tests can be plugged in later without rebuilding the workflow.
Will this work with our CI4 or Laravel app?
Yes - CI4 and Laravel are our primary targets. The pipeline handles composer install, running migrations (php artisan migrate --force or equivalent), clearing application cache, and reloading PHP-FPM. We have done this on multiple live projects. WordPress pipelines are slightly different - rsync-based rather than git-pull - and also fully supported.
How do we roll back if a bad deploy goes out?
Two options. Fast: git revert the bad commit and push - the pipeline automatically redeploys the reverted code in under 90 seconds. Instant: the deploy script keeps the previous release in a /releases directory - switching to the previous release is one symlink change and a PHP-FPM reload, taking about 5 seconds. We document both rollback procedures in the handover doc.
Do we need Docker, or is a basic pipeline enough?
For most small-to-medium PHP apps (CI4, Laravel, WordPress), Docker is not necessary and adds complexity without much benefit on a single VPS. Docker becomes valuable when you have multiple developers with different local setups, or when you need to run multiple isolated apps on the same server, or when you plan to scale to multiple nodes. We recommend it honestly based on your situation - not to increase scope.

One-time setup. Every future deploy is automatic.

Push to GitHub. Tests run. Staging deploys. You approve. Production updates. All in 60 seconds. No FTP, no SSH, no prayer.