⚠️ ÖNEMLİ: Bu proje, Türk Telekom Bulut Bilişim Kampı Final Projesi kapsamında geliştirilmiş bir DEMO uygulamasıdır. Eğitim ve öğrenme amaçlıdır.
- Proje Hakkında
- Mimari
- Kullanılan Teknolojiler
- Dosya Yapısı
- Önkoşullar
- Kurulum ve Çalıştırma
- Servisler ve Portlar
- Özellikler
- Ekran Görüntüleri
- CI/CD Pipeline
- Geliştirme
- Katkıda Bulunanlar
Atlas, Türkiye'nin en çok kullanılan e-ticaret platformlarından biri olarak milyonlarca aktif kullanıcıya sahip. Platform, yıllar önce monolitik bir mimari ile geliştirilmiş ve o dönemlerde kullanıcı sayısı düşük olduğu için sistem ihtiyaçları karşılayabiliyordu. Ancak son yıllarda artan trafik, yoğun kampanya dönemleri ve genişleyen ürün kataloğu, mevcut altyapının sınırlarını zorlamaya başladı.
-
Performans Sorunları
- Kampanya saatlerinde sistem yükü kaldıramıyor, kullanıcılar hata sayfalarıyla karşılaşıyor
- Bazı istekler 5-7 saniye içinde yanıtlanıyor
- Özellikle ödeme adımlarında yaşanan yavaşlık, sepet terk oranlarını ciddi şekilde artırıyor
-
Güvenlik Riskleri
- Zaman zaman bot login girişleri tespit ediliyor
- Bu saldırılar hem performans hem de güvenlik açısından tehdit oluşturuyor
-
Operasyonel Zorluklar
- Deployment süreçleri çok uzun sürüyor (küçük bir değişiklik bile saatler alıyor)
- Sorun çıktığında uygulamayı yeniden başlatmak uzun zaman alıyor
- Legacy ortam nedeniyle kaynak artırımı hızlı yapılamıyor
- Sistemin performansını anlık olarak izlemek mümkün değil
-
Uyumluluk ve Regülasyon
- KVKK ve GDPR gibi regülasyonlara uyum sağlanması gerekiyor
- Eski yapı bu gereksinimleri karşılamakta yetersiz kalıyor
-
Geliştirme Süreçleri
- Farklı geliştirme ekipleri (UI/UX, frontend, backend) kendi lokal ortamlarında bağımsız çalıştığı için versiyon karmaşası yaşanıyor
- Test süreçleri verimsiz ilerliyor
- Uygulama yapıları arasında yedeklilik eksikliği büyük bir risk oluşturuyor
Bu proje, monolitik Atlas uygulamasının modern bulut tabanlı mikroservis mimarisine dönüşümünü simüle etmektedir.
Bu projede Operasyon ve Geliştirici şapkaları takınılarak:
-
🔧 Operasyon Rolü: Sistemin altyapı ve platform operasyon işlemlerini gerçekleştirdim
- Docker containerization
- CI/CD pipeline kurulumu (GitLab CI)
- Monitoring ve logging altyapısı (OpenSearch, Jaeger)
- Güvenlik katmanları (ModSecurity WAF, Rate Limiting)
-
💻 Geliştirici Rolü: Mikroservis mimarisini tasarlayıp geliştirdim
- RESTful API servisleri
- Event-driven architecture (RabbitMQ)
- Distributed caching (Redis)
- API Gateway pattern
- Frontend uygulaması
- NGINX + ModSecurity WAF: Kullanıcı isteklerini karşılayan, güvenlik duvarı özelliklerine sahip yük dengeleyici
- Frontend MVC (.NET 8): ASP.NET Core Razor Pages ile geliştirilmiş kullanıcı arayüzü
- API Gateway (YARP): Tüm mikroservislere tek giriş noktası, routing ve load balancing
- Kullanıcı kayıt, giriş ve profil yönetimi
- JWT tabanlı authentication
- PostgreSQL veritabanı
- Redis cache
- Ürün kataloğu ve kategori yönetimi
- MongoDB veritabanı
- MinIO object storage (ürün görselleri)
- OpenSearch ile arama
- Sepet ve sipariş işlemleri
- PostgreSQL veritabanı
- Event-driven sipariş akışı
- Email ve SMS bildirimleri
- PostgreSQL veritabanı
- Event consumer (RabbitMQ)
- PostgreSQL (3 Instance): User, Order ve Notification servisleri için
- MongoDB: Product servisi için (NoSQL, esnek şema)
- Redis: Distributed cache ve session yönetimi
- RabbitMQ: Event-driven architecture, asenkron iletişim
- MinIO: S3-compatible object storage, ürün görselleri
- OpenSearch + Dashboards: Merkezi log toplama ve analiz
- Jaeger: Distributed tracing
- Prometheus + Grafana: (Planlanan) Metrics ve monitoring
- GitLab CI: Otomatik build, test, docker build ve push
- ArgoCD: (Planlanan) GitOps deployment
- K3s Cluster: Kubernetes ortamı (2 node, 8 vCPU + 16GB RAM)
| Özellik | Monolitik (Eski) | Mikroservis (Yeni) |
|---|---|---|
| Deployment | Tüm sistem birlikte deploy | Servisler bağımsız deploy |
| Ölçeklenebilirlik | Tüm sistem birlikte scale | Her servis bağımsız scale |
| Teknoloji Stack | Tek teknoloji | Her servis farklı DB kullanabilir |
| Hata İzolasyonu | Bir hata tüm sistemi etkiler | Hatalar servise özel |
| Geliştirme Hızı | Yavaş (bağımlılıklar) | Hızlı (bağımsız ekipler) |
| Database | Tek DB | Her servis kendi DB'si |
| API Response Time | 5-7 saniye | <500ms (hedef) |
- .NET 8.0 - Mikroservis framework'ü
- C# 12 - Programlama dili
- ASP.NET Core Web API - RESTful API'ler
- Entity Framework Core - ORM (PostgreSQL için)
- MongoDB.Driver - MongoDB client
- YARP (Yet Another Reverse Proxy) - API Gateway
- RabbitMQ.Client - Message broker client
- StackExchange.Redis - Redis client
- Jaeger .NET Client - Distributed tracing
- Serilog - Structured logging
- ASP.NET Core MVC / Razor Pages - Web UI
- Bootstrap 5 - CSS framework
- JavaScript / jQuery - Client-side scripting
- PostgreSQL 15 - Relational database (User, Order, Notification)
- MongoDB 7 - Document database (Product)
- Redis 7 - In-memory cache
- Docker & Docker Compose - Containerization
- NGINX + ModSecurity - Web server + WAF
- RabbitMQ - Message broker
- MinIO - Object storage
- OpenSearch 2.11 - Search and analytics
- OpenSearch Dashboards - Log visualization
- Jaeger - Distributed tracing
- GitLab CI - Continuous Integration
- Docker Registry - Container registry
- K3s - Lightweight Kubernetes
Atlas_Project/
│
├── src/ # Kaynak kod klasörü
│ ├── ApiGateway/ # YARP API Gateway
│ │ ├── Program.cs
│ │ ├── appsettings.json # Gateway routing config
│ │ └── Dockerfile
│ │
│ ├── UserService/ # Kullanıcı mikroservisi
│ │ ├── Controllers/
│ │ │ ├── AuthController.cs # Login, Register
│ │ │ └── UserController.cs # Profile operations
│ │ ├── Data/
│ │ │ ├── ApplicationDbContext.cs
│ │ │ └── Entities/
│ │ ├── Services/
│ │ ├── Program.cs
│ │ └── Dockerfile
│ │
│ ├── ProductService/ # Ürün mikroservisi
│ │ ├── Controllers/
│ │ │ ├── CategoryController.cs
│ │ │ └── ProductController.cs
│ │ ├── Data/
│ │ │ ├── MongoDbContext.cs
│ │ │ └── Models/
│ │ ├── Services/
│ │ │ ├── IMinioService.cs # Object storage
│ │ │ └── ISearchService.cs # OpenSearch
│ │ ├── Program.cs
│ │ └── Dockerfile
│ │
│ ├── OrderService/ # Sipariş mikroservisi
│ │ ├── Controllers/
│ │ │ ├── CartController.cs
│ │ │ └── OrderController.cs
│ │ ├── Data/
│ │ │ ├── OrderDbContext.cs
│ │ │ └── Entities/
│ │ ├── Services/
│ │ │ └── IEventPublisher.cs # RabbitMQ publisher
│ │ ├── Program.cs
│ │ └── Dockerfile
│ │
│ ├── NotificationService/ # Bildirim mikroservisi
│ │ ├── Consumers/ # RabbitMQ consumers
│ │ │ ├── OrderCreatedConsumer.cs
│ │ │ └── UserRegisteredConsumer.cs
│ │ ├── Services/
│ │ │ ├── IEmailService.cs
│ │ │ └── ISmsService.cs
│ │ ├── Program.cs
│ │ └── Dockerfile
│ │
│ ├── Frontend/ # Web arayüzü
│ │ ├── Controllers/
│ │ │ ├── HomeController.cs
│ │ │ ├── AccountController.cs
│ │ │ ├── ProductController.cs
│ │ │ ├── CartController.cs
│ │ │ └── OrderController.cs
│ │ ├── Views/
│ │ │ ├── Home/
│ │ │ ├── Account/
│ │ │ ├── Product/
│ │ │ ├── Cart/
│ │ │ ├── Order/
│ │ │ └── Shared/
│ │ ├── wwwroot/ # Static files
│ │ ├── Program.cs
│ │ └── Dockerfile
│ │
│ ├── Common/ # Shared libraries
│ │ ├── Atlas.Common/
│ │ │ ├── Events/ # Event models
│ │ │ ├── DTOs/ # Data transfer objects
│ │ │ ├── Middleware/
│ │ │ │ ├── ExceptionMiddleware.cs
│ │ │ │ └── RateLimitMiddleware.cs
│ │ │ └── Extensions/
│ │ └── Atlas.Tracing/ # Jaeger tracing
│ │
│ └── UserService.Tests/ # Unit tests
│ └── ...
│
├── nginx/ # NGINX configuration
│ └── atlas-lb.conf # Load balancer + WAF config
│
├── scripts/ # Initialization scripts
│ └── mongo-init.js # MongoDB init script
│
├── k8s/ # (Opsiyonel) Kubernetes manifests
│ ├── infrastructure/
│ ├── services/
│ └── ingress/
│
├── docker-compose.yml # Ana compose file
├── .gitlab-ci.yml # CI/CD pipeline
├── Atlas.sln # Solution file
├── Atlas_Project_Architecture.png # Mimari diyagram
├── Atlas_DEMO.jpeg # UI screenshot
├── .gitignore
└── README.md # Bu dosya
Projeyi çalıştırmak için sisteminizde aşağıdaki yazılımlar kurulu olmalıdır:
- Docker Desktop: 4.25+ (Windows/Mac) veya Docker Engine 24+ (Linux)
- Docker Compose: 2.20+
- Git: 2.40+
- .NET SDK 8.0+ (Opsiyonel - sadece local development için)
- En az 8GB RAM (16GB önerilir)
- En az 20GB disk alanı
CPU: 4 core (8 core önerilir)
RAM: 8 GB minimum (16 GB önerilir)
Disk: 20 GB boş alan
OS: Windows 10/11, macOS 11+, Linux (Ubuntu 20.04+)
git clone https://github.com/username/atlas-project.git
cd atlas-projectdocker-compose.yml dosyasında aşağıdaki değerleri kendi bilgilerinizle değiştirin:
- Twilio SMS Ayarları (notification-service bölümünde):
Sms__AccountSid: Twilio hesap SID'nizi girinSms__AuthToken: Twilio auth token'ınızı girinSms__FromPhoneNumber: Twilio telefon numaranızı girin- Not: SMS özelliğini kullanmak istemiyorsanız
Sms__Enabled=falseyapabilirsiniz
- Veritabanı şifreleri
- JWT secret key
- RabbitMQ credentials
- MinIO access keys
- SMTP ayarları (email gönderimleri için)
docker-compose up -dBu komut şunları yapacaktır:
- Tüm container image'larını indirir (ilk çalıştırmada ~5-10 dakika sürer)
- .NET servislerini build eder
- Veritabanlarını başlatır ve initialize eder
- Tüm mikroservisleri başlatır
- Health check'lerin geçmesini bekler
Tüm servislerin loglarını görmek için:
docker-compose logs -fBelirli bir servisin logunu görmek için:
docker-compose logs -f user-service
docker-compose logs -f product-service
docker-compose logs -f order-servicedocker-compose psÇıktı şu şekilde olmalıdır (tüm servisler Up (healthy) durumda):
NAME STATUS
atlas-postgres-user Up (healthy)
atlas-postgres-order Up (healthy)
atlas-postgres-notification Up (healthy)
atlas-mongodb Up (healthy)
atlas-redis Up (healthy)
atlas-opensearch Up (healthy)
atlas-opensearch-dashboards Up (healthy)
atlas-rabbitmq Up (healthy)
atlas-jaeger Up (healthy)
atlas-minio Up (healthy)
atlas-user-service Up
atlas-product-service Up
atlas-order-service Up
atlas-notification-service Up
atlas-apigateway Up
atlas-frontend Up
atlas-nginx Up (healthy)
- 🌐 Ana Web Sitesi: http://localhost
- 🔧 Admin Dashboard: http://localhost:8080
docker-compose downVerileri de silmek için (dikkatli kullanın!):
docker-compose down -v| Servis | Port | Açıklama | URL |
|---|---|---|---|
| NGINX (WAF) | 80, 8080 | Load balancer + ModSecurity | http://localhost |
| Frontend | 5004 | Web UI (internal) | http://localhost:5004 |
| API Gateway | 5000 | API Gateway (internal) | http://localhost:5000 |
| Servis | Port | Açıklama | Health Check |
|---|---|---|---|
| User Service | 5001 | Kullanıcı yönetimi | http://localhost:5001/health |
| Product Service | 5002 | Ürün kataloğu | http://localhost:5002/health |
| Order Service | 5003 | Sipariş işlemleri | http://localhost:5003/health |
| Notification Service | 5005 | Bildirim gönderimi | http://localhost:5005/health |
| Servis | Port | Credentials | Connection |
|---|---|---|---|
| PostgreSQL (User) | 5432 | atlasuser / ChangeThisPassword123! | Host=localhost;Port=5432;Database=atlas_user |
| PostgreSQL (Order) | 5433 | atlasorder / ChangeThisPassword123! | Host=localhost;Port=5433;Database=atlas_order |
| PostgreSQL (Notification) | 5434 | atlasnotification / ChangeThisPassword123! | Host=localhost;Port=5434;Database=atlas_notification |
| MongoDB | 27017 | atlasadmin / ChangeThisPassword123! | mongodb://localhost:27017 |
| Redis | 6379 | (no password) | localhost:6379 |
| Servis | Port | Credentials | URL |
|---|---|---|---|
| RabbitMQ Management | 15672 | atlasuser / ChangeThisPassword123! | http://localhost:15672 |
| MinIO Console | 9001 | atlasadmin / ChangeThisPassword123! | http://localhost:9001 |
| OpenSearch | 9200 | - | http://localhost:9200 |
| OpenSearch Dashboards | 5601 | - | http://localhost:5601 |
| Jaeger UI | 16686 | - | http://localhost:16686 |
Sisteme giriş yapmak için kullanabileceğiniz test kullanıcıları:
Email: demo@atlas.local
Password: Demo123!
Email: admin@atlas.local
Password: Admin123!
- ✅ Kullanıcı kayıt ve giriş (JWT authentication)
- ✅ Şifre sıfırlama (email ile)
- ✅ Profil yönetimi
- ✅ Ürün arama ve filtreleme (OpenSearch)
- ✅ Kategori bazlı ürün listeleme
- ✅ Ürün detay sayfası
- ✅ Sepete ekleme / çıkarma
- ✅ Sipariş oluşturma
- ✅ Sipariş geçmişi
- ✅ Email/SMS bildirimleri
- ModSecurity WAF: OWASP Core Rule Set ile güvenlik
- JWT Authentication: Stateless auth
- Rate Limiting: Brute force koruması
- Input Validation: XSS, SQL Injection koruması
- CORS Policy: Cross-origin güvenliği
- Redis Caching: Response time optimizasyonu
- OpenSearch: Hızlı ürün araması (full-text search)
- Connection Pooling: Database connection yönetimi
- Async/Await: Non-blocking I/O operations
- Load Balancing: NGINX upstream load balancing
- Structured Logging: Serilog + OpenSearch
- Distributed Tracing: Jaeger ile request tracking
- Health Checks: Kubernetes-style health endpoints
- Metrics: (Planlanan) Prometheus + Grafana
- Event-Driven Architecture: RabbitMQ ile loose coupling
- Circuit Breaker: (Planlanan) Polly ile fault tolerance
- Retry Policies: Transient error handling
- Database Migrations: Automatic schema management
- Containerization: Tüm servisler Docker container'da
- CI/CD Pipeline: GitLab CI ile otomatik build/test/deploy
- Infrastructure as Code: Docker Compose + K8s manifests
- GitOps: (Planlanan) ArgoCD ile deployment
Mimari Açıklaması:
- Kullanıcılar → İstek gönderir
- NGINX + ModSecurity WAF → Güvenlik kontrolü yapar, zararlı trafiği engeller
- Frontend MVC → Kullanıcı arayüzünü render eder
- API Gateway (YARP) → İstekleri uygun mikroservise yönlendirir
- Mikroservisler → İş mantığını çalıştırır, event publish eder
- Veritabanları → Her servis kendi veritabanını kullanır (database per service pattern)
- RabbitMQ → Servisler arası asenkron iletişim
- Redis → Performans için caching
- MinIO → Ürün görselleri için object storage
- Monitoring → OpenSearch (logs), Jaeger (traces), Prometheus+Grafana (metrics)
Özellikler:
- Responsive tasarım (Bootstrap 5)
- Kategori bazlı ürün gösterimi
- Arama fonksiyonu
- Sepet yönetimi
- Kullanıcı girişi ve kayıt
Projede GitLab CI/CD kullanılarak otomatik build, test ve deployment pipeline'ı kurulmuştur.
graph LR
A[Code Push] --> B[Build]
B --> C[Test]
C --> D[Docker Build]
D --> E[Docker Push]
E --> F[Deploy to K3s]
- dotnet restore
- dotnet build --configuration ReleaseTüm mikroservisleri build eder, artifact olarak saklar.
- dotnet test --configuration ReleaseUnit testleri çalıştırır, test sonuçlarını raporlar.
Her mikroservis için paralel olarak Docker image'ları build edilir:
atlas/user-serviceatlas/product-serviceatlas/order-serviceatlas/apigatewayatlas/frontend
Build edilen image'lar GitLab Container Registry'e push edilir.
K3s cluster'a deployment yapılır:
kubectl apply -f k8s/infrastructure/
kubectl apply -f k8s/services/
kubectl apply -f k8s/ingress/mainbranch'e push → Tüm pipeline çalışırdevelopbranch'e push → Build ve test çalışır- Feature branch'ler → Manuel trigger
docker-compose up -d postgres-user postgres-order postgres-notification mongodb redis rabbitmqVisual Studio veya Rider'da:
Atlas.slnsolution'ını açınUserService,ProductService,OrderServiceveApiGatewayprojelerini "Multiple Startup Projects" olarak ayarlayın- F5 ile başlatın
VS Code'da:
cd src/UserService && dotnet run
cd src/ProductService && dotnet run
cd src/OrderService && dotnet run
cd src/ApiGateway && dotnet run- Proje Oluşturma
dotnet new webapi -n NewService
cd NewService
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package StackExchange.Redis- Docker Compose'a Ekleme
new-service:
build:
context: .
dockerfile: src/NewService/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5010:80"
networks:
- atlas-network- API Gateway'e Route Ekleme
src/ApiGateway/appsettings.json:
{
"ReverseProxy": {
"Routes": {
"new-route": {
"ClusterId": "new-cluster",
"Match": {
"Path": "/api/new/{**catch-all}"
}
}
},
"Clusters": {
"new-cluster": {
"Destinations": {
"destination1": {
"Address": "http://new-service:80"
}
}
}
}
}
}# User Service
cd src/UserService
dotnet ef migrations add InitialCreate
dotnet ef database update
# Order Service
cd src/OrderService
dotnet ef migrations add InitialCreate
dotnet ef database updateMongoDB için migration'lar scripts/mongo-init.js dosyasında tanımlanır ve container başlangıcında otomatik çalışır.
- Burak Arslan - GitHub
- 🔧 Operasyon: Docker containerization, CI/CD, monitoring setup
- 💻 Geliştirici: Mikroservis development, API design, frontend
Bu proje, Türk Telekom Gelişim Üssü ve Bulut Bilişim Kampı kapsamında geliştirilmiştir.
Bu proje bir demo/eğitim projesidir ve MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakınız.

