🇹🇷 Türkçe | 🇬🇧 English
Kurumsal B2B sistemleri için tasarlanmış, event‑driven, ölçeklenebilir ve observability‑first bir Kubernetes tabanlı mikroservis platformu.
Bu repo özellikle:
- Gerçek hayata yakın production‑grade K8s manifestleri
- CQRS + Event‑Driven mimari
- ELK, Prometheus, Grafana, Jaeger ile tam gözlemlenebilirlik
- .NET tabanlı API & Worker servisleri
sunmayı amaçlar.
- Hızlı Başlangıç
- Mimari Genel Bakış
- Çalışan Servisler
- Erişim URL’leri
- API & Kimlik Doğrulama
- Dizin Yapısı
- Observability
- Scaling & Health Checks
- Troubleshooting
- Prerequisites
cd k8s
.\run.ps1veya:
start.batBu script otomatik olarak:
- Kubernetes namespace’lerini oluşturur
- Tüm servisleri deploy eder
- MSSQL, MongoDB, Redis, RabbitMQ başlatır
- Veritabanlarını oluşturur (B2BWriteDb, HangfireDb)
- API & Worker servislerini ayağa kaldırır
- ELK, Prometheus, Grafana, Jaeger stack’ini kurar
- Gerekli port‑forward işlemlerini başlatır
Get-Process kubectl | Stop-ProcessCLIENT (Swagger / API Consumer)
│
▼
┌─────────────────────────────┐
│ B2B API (3x) │
│ CQRS + JWT + Redis │
└───────────┬─────────────────┘
│
┌────────┼────────┐
▼ ▼ ▼
MSSQL MongoDB Redis
Write Read Cache
│
▼
RabbitMQ (Event Bus)
│
▼
B2B Worker (2x)
Hangfire + Consumers
Temel prensipler:
- Write: MSSQL
- Read: MongoDB
- Cache / Session: Redis
- Async Communication: RabbitMQ
- Background Jobs: Hangfire
| Servis | Replika | Amaç |
|---|---|---|
| B2B API | 3 | REST API + Swagger |
| B2B Worker | 2 | Hangfire & Event Consumer |
| MSSQL | 1 | Write DB |
| MongoDB | 1 | Read DB |
| Redis | 3 | Cache / Token Store |
| RabbitMQ | 3 | Event Bus |
| Elasticsearch | 3 | Log Storage |
| Logstash | 2 | Log Processing |
| Kibana | 1 | Log UI |
| Prometheus | 1 | Metrics |
| Grafana | 1 | Dashboards |
| Jaeger | 1 | Distributed Tracing |
| Servis | URL | Kullanıcı / Şifre |
|---|---|---|
| Swagger | http://localhost:8080/swagger | - |
| RabbitMQ | http://localhost:15672 | b2b_user / **** |
| Jaeger | http://localhost:16686 | - |
| Kibana | http://localhost:5601 | - |
| Prometheus | http://localhost:9090 | - |
| Grafana | http://localhost:3000 | admin / admin |
| Şifre | Rol | |
|---|---|---|
| admin@demo.com | Admin123! | Admin |
| user@demo.com | Admin123! | User |
curl -X POST http://localhost:8080/api/v1/Auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@demo.com","password":"Admin123!"}'Swagger’da Authorize → Bearer kullanılır.
k8s/
├── namespaces/
├── config/
├── api/
├── worker/
├── data/
├── messaging/
├── ingress/
├── observability/
├── run.ps1
├── start.bat
└── kustomization.yaml
- Elasticsearch (3 replica, StatefulSet)
- Logstash (B2B pipeline)
- Kibana UI
- HPA uyumlu metrikler
- Hazır dashboard’lar
- OpenTelemetry (OTLP)
- API → Worker → DB izleme
- HPA: CPU %70 / Memory %80
- Liveness:
/health/live - Readiness:
/health/ready
kubectl describe pod <pod> -n <ns>
kubectl logs <pod> -n <ns>- Token süresi dolmuş olabilir
- Redis temizlenmiş olabilir
- JWT secret uyumsuz olabilir
- Docker Desktop (Kubernetes enabled)
- kubectl
- PowerShell 5.1+