{
  "id": 3226198,
  "title": "How I Automated a 3-Tier Application CI/CD Pipeline with Docker, Azure & GitHub Actions",
  "url": "https://urgent.news/2026/08/25/how-i-automated-a-3-tier-application-ci-cd-pipeline-with-docker-azure",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-25T08:20:32.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/henryigwe/how-i-automated-a-3-tier-application-cicd-pipeline-with-docker-azure-github-actions-1cmg"
  },
  "original_language": "en",
  "account": "I recently finished a practical DevOps project that took a 3-tier application, known as FocusFlow, from its initial source code to a fully operational deployment on an Azure Linux virtual machine. The application is composed of React, Node.js/Express, and PostgreSQL technologies.\n\nInitially, I tested the application locally, examining the database, backend API endpoints, and health checks. Following this, I containerized both the backend and frontend components using Docker. Utilizing Docker Compose, I successfully connected these three tiers and conducted a comprehensive end-to-end test, from the frontend through the backend to the database.\n\nNext, I generated versioned Docker images based on Git commit hashes and uploaded them to Docker Hub. I then set up an Azure VM, installed Docker, configured the production Compose environment, and subsequently deployed the application on the internet. The most crucial step involved automating this deployment process using GitHub Actions. Every push to the 'main' branch prompts a series of actions: GitHub initiates the build process, Docker Hub receives the images, the Azure VM is provisioned and configured, the application is deployed, and a health check is performed.\n\nAn essential aspect of this project was automating the deployment procedure with GitHub Actions. Each commit to the 'main' branch triggers the following sequence: GitHub initiates the build process, Docker Hub receives the newly created images, the Azure VM is provisioned and configured, the application is deployed, and a health check is conducted.\n\nI also tested a real-life rollback scenario by intentionally deploying a faulty version and then restoring the previous stable image. This practice was invaluable for understanding how to recover from potential errors in the deployment pipeline.\n\nHowever, this process was not without its challenges. I faced several issues along the way, including Docker build errors, Azure VM availability problems, SSH/SCP mistakes, missing port mappings, issues with handling secrets, and a Docker Hub token permission error. Each of these problems became valuable learning experiences, enhancing my understanding of the CI/CD pipeline and the systems involved.\n\nThe full project, including Dockerfiles, Compose configurations, Azure provisioning scripts, GitHub Actions workflow, the rollback process, and a detailed README explaining each step for beginners, is available in my GitHub repository. The project has now been successfully completed and submitted.",
  "summary": "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…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}