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 |