A modern fullβstack web app template (React + Flask) with Docker, CI/CD, and Kubernetes
Browse products in a clean, responsive UI.
Create and update products with simple validation.
RunStack is a productionβready fullβstack template showing modern dev practices: containerization, CI/CD, and cloud deployment. It uses a React frontend and a Flask REST API backend, deploys to Microsoft Azure AKS, and serves a custom domain with HTTPS.
- π FullβStack: React frontend with Flask REST API backend
- π³ Containerized: Docker-ready for any environment
- βοΈ Cloud Native: Deployed on Microsoft Azure with Azure Kubernetes Service (AKS)
- π Custom Domain: Available at https://runstack.pp.ua/
- π SSL Secured: HTTPS enabled with SSL certificate
- π CI/CD: Automated builds and deployments with GitHub Actions
- π± Responsive: Mobile-first design with Bulma CSS framework
- π Production Ready: Includes security, logging, and monitoring
- React 18, React Router 6
- Axios for API calls
- Bulma CSS
- Create React App build tooling
- Flask 2.2 + FlaskβRESTful, FlaskβCORS
- Peewee ORM, SQLite (local)
- Docker, Kubernetes (AKS)
- GitHub Actions CI/CD
- Azure Container Registry (ACR), Docker Hub
- π― Product Management: Full CRUD operations for products
- π Search & Filter: Real-time product search
- π± Responsive Design: Works on all device sizes
- π Real-time Updates: Instant UI updates
- π³ Containerized: Ready for any deployment environment
- π Auto-Deploy: Push to deploy with GitHub Actions
- βοΈ Cloud Ready: Kubernetes manifests included
- π Monitoring: Health checks and logging
- π Secure: CORS enabled and input validation
- Docker (optional)
- Node.js 18+
- Python 3.11+
- Git
git clone https://github.com/roman-zvir/RunStack.git
cd RunStack# Oneβtime: create virtualenv at repo root for Makefile helpers
python3 -m venv .venv
# Install deps (backend + frontend)
make install
# Run dev servers (use 2 terminals)
make dev-backend # http://localhost:5000
make dev-frontend # http://localhost:3000# Backend
cd backend
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python app.py --host 0.0.0.0 --port 5000# Frontend (new terminal)
cd frontend
npm install
npm start# Build images
make docker-build
# Run containers (frontend on :3000, backend on :5000)
make docker-run
# Stop & remove
make docker-stopAccess:
- Frontend: http://localhost:3000
- Backend: http://localhost:5000
RunStack/
βββ π frontend/ # React application
β βββ π src/
β β βββ π components/ # React components
β β βββ π api/ # API service layer
β β βββ π context/ # State management
β βββ π Dockerfile # Frontend container
β βββ π package.json # Dependencies
βββ π backend/ # Flask API
β βββ π app.py # Main application
β βββ π db.py # Database models
β βββ π Dockerfile # Backend container
β βββ π requirements.txt
βββ π k8s/ # Kubernetes manifests
βββ π .github/workflows/ # CI/CD pipelines
- Make your changes in the appropriate directory
- Test locally using the development servers
- Commit your changes following conventional commits
- Push to your branch - CI/CD will automatically build and test
- Create a Pull Request for review
Frontend:
npm start # Start development server
npm run build # Build for production
npm test # Run test suiteBackend:
python app.py # Start Flask development server
python test_app.py # Run backend testsYour application is live with a custom domain.
| Service | URL | Status |
|---|---|---|
| π Frontend | https://runstack.pp.ua/ | β Live |
| π Backend API | https://runstack.pp.ua/api/products | β Live |
The application is deployed using Azure Kubernetes Service (AKS) with a custom domain configuration. The setup includes:
- π Custom Domain:
runstack.pp.ua - π SSL Certificate: Automatic HTTPS with Let's Encrypt
- π Load Balancer: Azure Load Balancer for high availability
- π Monitoring: Azure Monitor and logging enabled
# Build & push images to ACR (branchβaware)
./deploy.sh
# Check status
kubectl get pods,svc,ingress
# Scale
kubectl scale deployment frontend --replicas=3For detailed deployment instructions, see the Kubernetes manifests in the k8s/ directory and refer to Azure AKS documentation for cluster setup and management.
# Start Minikube
minikube start
# Deploy application
chmod +x deploy.sh
./deploy.sh
# Get service URLs
minikube service frontend --url
minikube service backend --urlDeploy the Docker images to:
- AWS EKS - Amazon Elastic Kubernetes Service
- Azure AKS - Azure Kubernetes Service (Recommended)
- DigitalOcean - Kubernetes or Droplets
- Heroku - Container deployment
- Production:
https://runstack.pp.ua/api - Local:
http://localhost:5000/api
| Method | Endpoint | Description |
|---|---|---|
GET |
/products |
Get all products |
POST |
/products |
Create a new product |
GET |
/products/{id} |
Get product by ID |
PUT |
/products/{id} |
Update product |
DELETE |
/products/{id} |
Delete product |
# Get all products
curl -X GET "https://runstack.pp.ua/api/products"
# Create a product
curl -X POST "https://runstack.pp.ua/api/products" \
-H "Content-Type: application/json" \
-d '{"name": "New Product", "price": 29.99}'The app supports dynamic runtime config via public/config.js (window.APP_CONFIG). You can also set a buildβtime env var consumed by the client:
# .env in frontend/
# Correct variable name used by code:
REACT_APP_API_URL=https://runstack.pp.ua/api
# Example for local dev:
# REACT_APP_API_URL=http://localhost:5000/apiNote: If you use Kubernetes ingress with the same host, the runtime config will default to ${window.location.origin}/api, so you often donβt need to set this.
# Flask
FLASK_ENV=development|production
FLASK_DEBUG=false
# CORS (optional)
CORS_ORIGINS=https://runstack.pp.ua,http://localhost:3000Use the Makefile helpers for a consistent workflow:
make test # Backend + frontend tests
make test-backend # PyTest with coverage
make test-frontend # CRA tests with coverage
make lint # Flake8/Black + ESLint
make format # Autoβformat
make security # Bandit + Safety (bestβeffort)Contributions are welcome.
- Fork the repo and create a feature branch
- Keep PRs focused and add tests when possible
- Run make lint test before pushing
Issues and feature requests: https://github.com/roman-zvir/RunStack/issues
This project is licensed under the MIT License β see the LICENSE file.
Roman Zvir β DevOps Engineer
- π Live: https://runstack.pp.ua/
- π GitHub: https://github.com/roman-zvir
- π§ Email: zwirr151@gmail.com
β Star this repo if you found it helpful!
Made with β€οΈ by Roman Zvir

