Skip to content
Back to all projects
Personal Project

Cloud Deployment & CI/CD Pipeline for Full-Stack Applications

A containerized deployment pipeline on AWS EC2 with Docker, Nginx, and an automated GitHub Actions CI/CD workflow.

Demo & repo links coming soon
Role
Solo developer — infrastructure & DevOps
Timeline
2025
Status
Completed — personal infrastructure project
Team
Solo project

Tools

AWS EC2AWS S3AWS IAMAWS Route 53AWS CloudWatchDockerGitHub ActionsNginx
Cloud Deployment & CI/CD Pipeline for Full-Stack Applications cover image

Overview

A hands-on infrastructure project to practice production-grade deployment patterns: containerizing a full-stack application with Docker, serving it behind an Nginx reverse proxy on AWS EC2, and automating test-and-deploy on every push to main with GitHub Actions — with CloudWatch wired up for monitoring application health.

The Problem

I'd deployed side projects by SSHing in and running a manual pull more times than I'd like to admit. I wanted a repeatable, automated path from a push to a running container, using the same building blocks — Docker, Nginx, AWS — that show up in real production job descriptions.

Architecture

Build

GitHub Actions workflow builds a Docker image on every push to main and runs the test suite.

Registry

Image is tagged with the commit SHA and pushed to a container registry.

Deploy

A deploy step connects to the EC2 instance, pulls the new image, and restarts the container with a zero-downtime handoff.

Edge

Nginx on the EC2 host reverse-proxies traffic to the container and terminates TLS.

Observability

CloudWatch agents ship container and instance metrics; alarms notify on CPU/memory thresholds.

Key Features & My Role

  • Containerized full-stack application deployed to AWS EC2 with Docker
  • Nginx configured as a reverse proxy in front of the application
  • Static assets served from S3 with least-privilege IAM roles
  • Automated CI/CD pipeline via GitHub Actions — test and deploy on every push to main
  • CloudWatch monitoring wired up for application health

Video Walkthrough

Video walkthrough coming soon

Outcomes & Results

  • Cut manual deploy steps from roughly six commands down to a single push.
  • Deploy time dropped from a few manual minutes to under 90 seconds, fully automated.
  • Gave me a template I've since reused to bootstrap two other side projects' infrastructure.

Reflection

Getting the zero-downtime restart right took more iterations than I expected — my first version had a few seconds of dropped connections during redeploys. Learning to health-check before flipping traffic was the real lesson here, not the AWS console clicking.