A fully containerized and Kubernetes-ready feedback application consisting of:
- 🖼️ Frontend: React app served via NGINX
- 🧠 Backend: Python Flask REST API
- 🛢️ Database: PostgreSQL 13
- 🔁 CI/CD: Azure DevOps YAML pipelines with self-hosted EC2 agents
Perfect for DevOps demos, Kubernetes practice, and hands-on CI/CD pipelines.
User Browser
↓
[ Frontend Service (React + NGINX) - Port 80 ]
↓ /api/*
[ Backend Service (Flask) - Port 5000 ]
↓
[ PostgreSQL Service - Port 5432 ]
| Layer | Technology |
|---|---|
| Frontend | React, served by NGINX |
| Backend | Python 3.9, Flask API |
| Database | PostgreSQL 13 |
| CI/CD | Azure DevOps Pipelines |
| Containers | Docker |
| Orchestration | Kubernetes (Amazon EKS) |
| Local Dev | Docker Desktop + K8s |
- Submit feedback messages via the React UI
- Retrieve and list feedback from PostgreSQL
- Delete feedback messages through the UI
- Containerized build & deploy pipeline with approvals and gating
Replace
<your-dockerhub-username>with your Docker Hub account name.
cd src/feedback_backend
docker build -t <your-dockerhub-username>/feedback-backend:<tag> .
docker push <your-dockerhub-username>/feedback-backend:<tag>cd src/feedback_frontend
docker build -t <your-dockerhub-username>/feedback-frontend:<tag> .
docker push <your-dockerhub-username>/feedback-frontend:<tag>kubectl apply -f k8s/db-secret.yaml
kubectl apply -f k8s/postgres-init-configmap.yamlkubectl apply -f k8s/This deploys:
- Frontend Deployment + Service
- Backend Deployment + Service
- PostgreSQL Deployment + Service
- Secrets and ConfigMaps
kubectl get nodes -o wide
# Use a node's public IP and port 30080
http://<NODE_PUBLIC_IP>:30080kubectl port-forward svc/frontend-service 8081:80➡️ Open in browser: http://localhost:8081
- Lint and test the backend
- Build and push backend/frontend Docker images
- Replace image tag using token replacement
- Deploy to Kubernetes with conditional production deployment
- Manual validation before production rollout
CI/CD pipeline defined in azure-pipelines.yaml.
.
├── README.md
├── azure-pipelines.yaml
├── k8s/
│ ├── backend-deployment.yaml
│ ├── db-secret.yaml
│ ├── frontend-deployment.yaml
│ ├── postgres-deployment.yaml
│ └── postgres-init-configmap.yaml
│
├── src/
│ ├── feedback_backend/
│ │ ├── app.py
│ │ ├── Dockerfile
│ ├── feedback_frontend/
│ │ ├── public/
│ │ ├── src/
│ │ ├── nginx.conf
│ │ └── Dockerfile
│ └── feedback_db/
│ └── init.sql
│
└── tests/
└── test_app.py
cd src/feedback_backend
pip install -r requirements.txt
python app.pycd src/feedback_frontend
npm install
npm startPull requests and ideas welcome!
Star the repo if you found it useful ⭐