DEVOPS / CLOUD / CI/CD•AUTOMATION PROJECT · 2026

DevOpsHub.

From local development to automated cloud deployment.

A containerized Flask backend and full-stack architecture built to explore multi-job GitHub Actions CI, container registry publishing, AWS Systems Manager remote deployment, health checks, and automated rollback recovery.

# 01 // DEPLOYMENT ARCHITECTURE

01 SOURCE

GitHub Repo

main & ci/** push / PR

02 CI GATES

Actions Runner

pytest · Vite · smoke test

03 REGISTRY

GHCR.io

Commit SHA tag & latest

04 EC2 RUNTIME

SSM Agent

Flask API & Postgres

GitHub Actions tests backend logic with pytest, checks TypeScript/Vite compilation, builds the Docker image with a live smoke test, pushes to GHCR, and executes deployment on EC2 via AWS Systems Manager without exposing public SSH ports.

# 02 // KEY ENGINEERING HIGHLIGHTS

Zero-SSH Cloud Deployment

Eliminated port 22 exposure and SSH key management in CI runners. Deployment commands execute via authenticated IAM credentials using AWS Systems Manager Run Command directly to the EC2 agent.

AWS SSMNo Open Port 22IAM Role Security
Automated Health & Rollback

The on-host deployment script pulls the exact commit SHA image, replaces the container, and polls /api/health and /api/db-health. If verification fails, it restores the previous image reference automatically.

Health PollingAutomated RollbackDB Ping Check
Multi-Job Quality Gate

Runs parallel test suites: installs Python 3.11 for pytest, builds the TypeScript frontend to catch syntax regressions, and starts a test container to execute a health endpoint smoke test before pushing images to GHCR.

pytest SuitesVite Build GateDocker Smoke Test
Deterministic Image Releases

Every build tags images with the triggering git commit SHA (ghcr.io/...:${GITHUB_SHA}) alongside latest. Deployment scripts reference the immutable SHA, guaranteeing reproducible rollbacks.

Commit SHA TagsGHCR PackagesImmutable State

# 03 // CHALLENGES & PRACTICAL LEARNINGS

SSM Script Escaping & Quoting

Deploying multi-line bash scripts through AWS SSM Run Command JSON payloads initially caused escaping errors. Fixed by passing an array of bash command arguments with strict parameter quoting and environment variable sourcing.

Container Sequential Replacement

Learned the real-world trade-off between health-checked container replacement and true zero-downtime blue/green setups: sequential restarts take ~2-3 seconds of cutover time on a single EC2 host, which health checks successfully safeguard.

Project Status & Scope

Implemented & Verified

In Repo: Dockerized Flask + Postgres, automated pytest suites, Vite frontend build verification, GHCR publishing, AWS SSM deployment with automated rollback.
Roadmap: Real-time Prometheus metrics, centralized CloudWatch logging, and Terraform infrastructure as code.