A full-stack application platform deployed on AWS using Docker, Terraform, Kubernetes, and GitHub Actions CI/CD pipeline.
- Frontend β React.js (Dockerized, served via Nginx)
- Backend β Node.js REST API (Dockerized)
- Database β PostgreSQL (Kubernetes StatefulSet)
- Infrastructure β AWS EKS via Terraform
- CI/CD β GitHub Actions
| Technology | Purpose |
|---|---|
| React.js | Frontend UI |
| Node.js + Express | Backend API |
| PostgreSQL | Database |
| Docker | Containerization |
| Terraform | Infrastructure as Code |
| AWS EKS | Kubernetes Cluster |
| AWS VPC | Networking |
| GitHub Actions | CI/CD Pipeline |
| Kubernetes | Container Orchestration |
project/
βββ .github/
β βββ workflows/
β βββ deploy.yml # CI/CD Pipeline
βββ frontend/
β βββ Dockerfile
β βββ package.json
β βββ src/
βββ backend/
β βββ Dockerfile
β βββ package.json
β βββ server.js
βββ k8s/
β βββ namespace.yaml
β βββ frontend-deployment.yaml
β βββ backend-deployment.yaml
β βββ postgres-statefulset.yaml
β βββ persistent-volume.yaml
β βββ ingress.yaml
βββ terraform/
βββ main.tf
βββ vpc.tf
βββ eks.tf
βββ iam.tf
βββ variables.tf
Pipeline runs automatically on every push to main branch:
Push to main
β
Job 1: Build & Push Docker Images
β
Job 2: Terraform Apply (AWS Infrastructure)
β
Job 3: Deploy to Kubernetes
- VPC with 2 public subnets in different AZs
- EKS Cluster with worker nodes
- Security Groups for network access
- IAM Roles for EKS permissions
Multi-stage builds for both frontend and backend:
- Frontend β Node builder + Nginx server
- Backend β Node.js production image
| Resource | Description |
|---|---|
| Namespace | app-prod |
| Deployments | Frontend + Backend |
| StatefulSet | PostgreSQL |
| Services | ClusterIP for all apps |
| Ingress | NGINX routing |
| PersistentVolume | PostgreSQL storage |
| Secret | Description |
|---|---|
DOCKER_USERNAME |
Docker Hub username |
DOCKER_PASSWORD |
Docker Hub access token |
DOCKER_REGISTRY |
Docker Hub registry URL |
AWS_ACCESS_KEY_ID |
AWS access key |
AWS_SECRET_ACCESS_KEY |
AWS secret key |