Complete Beginner's Guide to Blue-Green Deployment with Nginx and Real-Time Alerting

Published: (December 9, 2025 at 09:49 AM EST)
4 min read
Source: Dev.to

Source: Dev.to

Introduction

Welcome to this comprehensive guide on Blue‑Green Deployment – a powerful deployment strategy used by companies like Netflix, Amazon, and Facebook to achieve zero‑downtime deployments. This project demonstrates how to implement a production‑ready blue‑green deployment system with automatic failover and real‑time Slack alerting.

Repository: HNG DevOps on GitHub

What You’ll Learn

  • What blue‑green deployment is and why it matters
  • How to implement automatic failover with Nginx
  • How to build a real‑time monitoring and alerting system
  • How to achieve zero‑downtime deployments
  • How to integrate Slack notifications for DevOps alerts

Prerequisites

  • Basic understanding of Docker
  • Familiarity with the command line
  • Basic knowledge of web servers (helpful but not required)

What is Blue‑Green Deployment?

The Problem: Traditional Deployments

When you deploy a new version of a website you typically:

  1. Stop the old version
  2. Deploy the new version
  3. Start the new version

During these steps the site is DOWN, users see errors, and revenue can be lost.

The Solution: Blue‑Green Deployment

Maintain two identical environments:

  • BLUE (Production) – currently serving users
  • GREEN (Staging) – new version waiting to go live

Deployment workflow:

  1. Deploy the new version to GREEN
  2. Test GREEN thoroughly
  3. Switch traffic from BLUE to GREEN instantly
  4. If something goes wrong, switch back to BLUE instantly

Result: ZERO DOWNTIME

Real‑World Analogy

Think of a concert with two stages:

  • Stage 1 (Blue): Band is performing, audience watches
  • Stage 2 (Green): Next band sets up and sound‑checks

When it’s time to switch, rotate the stage 180°. The audience now sees Stage 2 (Green). If the new band has issues, rotate back to Stage 1 instantly.

Project Overview

This project implements a production‑ready blue‑green deployment system with the following core features.

Core Features

Automatic Failover

  • Nginx detects when the Blue instance fails
  • Automatically routes all traffic to Green
  • Zero failed requests to users

Real‑Time Alerting

  • Python watcher monitors Nginx logs
  • Detects failover events instantly
  • Sends alerts to Slack
  • Monitors error rates

Zero‑Downtime Deployment

  • Deploy new version to the inactive instance
  • Switch traffic instantly
  • Rollback in seconds if needed

Structured Logging

  • Every request logged with metadata (pool, release version, response times)

Understanding the Core Concepts

1. Blue‑Green vs. Load Balancing

Load Balancing distributes traffic across instances:

Request 1 → Blue
Request 2 → Green
Request 3 → Blue
Request 4 → Green

Blue‑Green (this project) routes all traffic to a single primary instance, with the other acting as a hot standby:

All Requests → Blue (Primary)
               Green (Backup, standby)

If Blue fails:
All Requests → Green (Backup becomes active)

2. Nginx Upstream Configuration

Nginx routes traffic to multiple backend servers (upstreams). This project uses:

upstream app {
    server app_blue:3000 max_fails=1 fail_timeout=5s;
    server app_green:3000 backup max_fails=1 fail_timeout=5s;
}

Key Directives

  • server app_blue:3000 – primary server
  • backup – used only if the primary fails
  • max_fails=1 – mark as failed after one error
  • fail_timeout=5s – retry after 5 seconds

3. Failover Mechanism

When a request fails:

  1. Nginx tries the Blue instance
  2. If Blue returns a 5xx error or times out, Nginx marks it as failed
  3. Nginx retries the request on Green (backup)
  4. User receives a successful response from Green
  5. Subsequent requests go to Green

Result: Users never see an error.

Architecture Overview

System Architecture Diagram

                Internet
                   |
                   v
            +--------------+
            |    Nginx     |
            |  (Port 8080) |
            +--------------+
                   |
    +--------------+--------------+
    |                             |
    v                             v
+----------+                +----------+
| App Blue | (Primary)      |App Green | (Backup)
|Port 3000 |                |Port 3000 |
+----------+                +----------+
    |                             |
    +-------------+---------------+
                  |
                  v
          +--------------+
          | Nginx Logs   |
          +--------------+
                  |
                  v
        +------------------+
        | Alert Watcher    |
        | (Python)         |
        +------------------+
                  |
                  v
          +--------------+
          |    Slack     |
          +--------------+

Component Breakdown

1. Nginx Proxy

  • Role: Traffic router and load balancer
  • Responsibilities: Route all incoming requests, detect backend failures, perform automatic failover, log all requests with metadata

2. App Blue (Primary Instance)

  • Environment Variables
    APP_POOL=blue
    RELEASE_ID=blue-release-1.0.0
    PORT=3000

3. App Green (Backup Instance)

  • Environment Variables
    APP_POOL=green
    RELEASE_ID=green-release-1.0.0
    PORT=3000

4. Alert Watcher (Python)

  • Role: Real‑time log monitoring and alerting
  • Responsibilities: Tail Nginx access logs, parse structured log entries, detect failover events, monitor error rates, send Slack alerts

Technology Stack

ComponentTechnologyPurpose
Reverse ProxyNginx (Alpine)Traffic routing & failover
ApplicationPython/FlaskDemo web application
MonitoringPython 3.11Log watcher & alerting
AlertingSlack WebhooksReal‑time notifications
ContainerizationDockerPackage all services
OrchestrationDocker ComposeManage multi‑container setup

Setting Up the Project

Step 1: Clone the Repository

git clone https://github.com/cypher682/hng13-stage-3-devops.git
cd hng13-stage-3-devops

Step 2: Understand the Project Structure

hng13-stage-3-devops/
├── docker-compose.yml       # Container orchestration
├── nginx.conf.template      # Nginx configuration template
├── entrypoint.sh            # Nginx startup script
├── watcher.py               # Python log monitoring script
├── requirements.txt         # Python dependencies
├── .env.example             # Environment variables template
├── test-failover.sh         # Failover testing script
└── public/                  # Static HTML files

Step 3: Configure Environment Variables

Copy the example environment file and edit it:

cp .env.example .env
# Application Configuration
PORT=3000
ACTIVE_POOL=blue

# Docker Images
BLUE_IMAGE=yimikaade/wonderful:latest
GREEN_IMAGE=yimikaade/wonderful:latest

# Release Identifiers
RELEASE_ID_BLUE=blue-release-1.0.0
RELEASE_ID_GREEN=green-release-1.0.0

# Slack Integration
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...

Step 4: Start the Services

docker compose up -d

Step 5: Test Failover

Run the provided script to simulate a failure and observe automatic failover and Slack alerts:

./test-failover.sh

You now have a fully functional blue‑green deployment environment with automatic failover, structured logging, and real‑time Slack alerting. Happy deploying!

Back to Blog

Related posts

Read more »

What is DevOps?

Introduction If you search “What is DevOps?” online, you’ll find many complex definitions. In this article we’ll explain DevOps from the ground up. DevOps = De...