How I Automated a 3-Tier Application CI/CD Pipeline with Docker, Azure & GitHub Actions

I recently completed a hands-on DevOps project where I took FocusFlow, a 3-tier application built with React, Node.js/Express, and PostgreSQL, from raw source code to a live deployment on an Azure Linux VM.

I started by understanding and testing the application locally before touching any infrastructure. I tested the database, backend API endpoints, and health checks, then containerised the backend and frontend with Docker. Using Docker Compose, I connected the three tiers and performed a complete end-to-end test: frontend → backend → database. 😌

Next, I created versioned Docker images using Git commit hashes and pushed them to Docker Hub. I then provisioned an Azure VM, installed Docker, configured the production Compose environment, and deployed the application publicly.

The most important part was automating the deployment with GitHub Actions. Every push to "main" now triggers: