This project is a learning / educational implementation of modern microservices using .NET 8, RabbitMQ, Redis, PostgreSQL and Kubernetes.
Originally this project started as Docker Compose based — but now the primary deployment model is Helm + Kubernetes.
| Area | Technology |
|---|---|
| Backend | .NET 8 Microservices, gRPC, MassTransit |
| Databases | PostgreSQL (all services), Redis |
| Messaging | RabbitMQ |
| API Composition | YARP API Gateway |
| Web App | Razor Pages (Shopping.Web) |
| Deployment | Kubernetes + Helm |
| Path | Purpose |
|---|---|
deploy/helm/eshop |
Umbrella Helm chart |
deploy/helm/eshop/charts/* |
Individual microservice Helm sub-charts |
k8s/databases/postgres |
raw DB manifests (legacy) |
k8s/services |
raw deployments before Helm (legacy) |
k8s/infra |
legacy infra manifests (redis, rabbitmq, etc) before Helm conversion |
namespace: ecommerce
helm release name: eshop
Prerequisite: You must have an ingress controller running (recommended: ingress-nginx)
kubectl create namespace ecommercehelm upgrade --install eshop deploy/helm/eshop -n ecommercekubectl get pods -n ecommerceAdd to /etc/hosts if needed:
127.0.0.1 shop.ecommerce.local
127.0.0.1 api.ecommerce.local
| UI | URL |
|---|---|
| Shopping Web | http://shop.ecommerce.local |
| API Gateway | http://api.ecommerce.local |
docker compose up -d| Service | URL |
|---|---|
| Shopping.Web | http://localhost:5100 |
| API Gateway | http://localhost:5005 |
| RabbitMQ UI | http://localhost:15672 (guest / guest) |
The project uses GitHub Actions to automate deployments to a production EKS cluster in AWS us-east-1.
Workflow: .github/workflows/cd-eks.yml
- Trigger: Manual dispatch via GitHub Actions UI (
workflow_dispatch) or automatically after successful image builds - Authentication: Uses AWS credentials stored in GitHub Secrets:
AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYDOCKERHUB_USERNAME(for image registry prefix)
- Cluster Access: Configures
kubectlto target theeshop-ekscluster inus-east-1 - Helm Deployment:
- Updates Helm dependencies
- Deploys/upgrades the
eshoprelease to theecommercenamespace - Uses
--atomicand--waitflags to ensure zero-downtime deployments - 10-minute timeout for complete rollout verification
- Verification: Post-deployment health checks via
kubectl get podsandkubectl get svc
| Secret | Purpose |
|---|---|
AWS_ACCESS_KEY_ID |
AWS IAM access key for EKS authentication |
AWS_SECRET_ACCESS_KEY |
AWS IAM secret key |
DOCKERHUB_USERNAME |
Docker Hub username for image registry |
Navigate to Actions → Deploy to EKS → Run workflow and click "Run workflow" button.
| Phase | Status |
|---|---|
| Multi-Arch docker images | ✅ Complete |
| Convert all services to Helm charts | ✅ Complete |
| CI/CD Pipeline to Amazon EKS | ✅ Complete |
| Infrastructure as Code (Terraform) | 🔜 Planned |
| Observability Stack (Prometheus/Grafana) | 🔜 Planned |