A simple but complete Rock–Paper–Scissors web game built with Flask, containerized using Docker, and deployed on Kubernetes (AWS EKS) using a fully automated GitHub Actions CI/CD pipeline.
The backend is a Flask web app handling the game logic in-memory (no database required). This project focuses on cloud deployment, containerization, and CI/CD automation.
This project demonstrates a real-world DevOps workflow: from code → container → registry → cloud → Kubernetes.
- Backend: Python (Flask)
- Frontend: HTML, CSS, JavaScript
- Container: Docker
- Orchestration: Kubernetes
- Cloud: AWS EKS
- CI/CD: GitHub Actions
- Registry: Docker Hub
Developer (Git Push)
↓
GitHub Actions (CI/CD)
↓
Build Docker Image
↓
Push to Docker Hub
↓
Deploy to AWS EKS
↓
Kubernetes Service exposes the App
↓
User accesses via Browser
cd app
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.pyhttp://localhost:5000docker build -t rps .
docker run -p 5000:5000 rpsOpen:
http://localhost:5000You need a working cluster (Minikube, Kind, or AWS EKS):
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yamlCheck:
kubectl get pods
kubectl get svcThis repo includes a fully automated pipeline:
- Push code to main
- GitHub Actions builds Docker image
- Image is pushed to Docker Hub
- Pipeline connects to AWS EKS
- Kubernetes manifests are applied
- App is updated automatically
You must configure these secrets:
| Secret Name |
|---|
| DOCKERHUB_USERNAME |
| DOCKERHUB_TOKEN |
| AWS_ACCESS_KEY_ID |
| AWS_SECRET_ACCESS_KEY |
| AWS_REGION |
| KUBE_CONFIG |
How to get KUBE_CONFIG
aws eks update-kubeconfig --region us-east-1 --name <cluster-name>
cat ~/.kube/config | base64 -w 0Paste output into:
KUBE_CONFIG
| Environment | Works |
|---|---|
| Local Flask | Yes |
| Docker | Yes |
| Minikube / Kind | Yes |
| AWS EKS | Yes |
| CI/CD Deployment | Yes |
This project shows:
- Real containerization
- Real Kubernetes deployment
- Real CI/CD automation
- Real cloud infrastructure
- No fake demos, no simulations
This is the same workflow used in real DevOps teams, demonstrating production-grade practices.
- Add Ingress + custom domain (Kubernetes Networking)
- Add HTTPS (TLS/Cert-Manager)
- Add monitoring (Prometheus + Grafana)
- Add Helm chart (Deployment Automation)
- Horizontal Pod Autoscaling (K8s Scaling)
Muhammad Hammad
DevOps & Cloud Engineer | AWS • Docker • Kubernetes • Terraform • CI/CD
MIT License