Skip to main content
Bu sayfa dev ortamını sıfırdan çalıştırmayı anlatır. Stage/Prod için Operasyon › Docker Stage ve Docker Prod sayfalarına bakın.
Dev ortamında her servis kendi host port’unda çalışır; reverse-proxy yoktur. docker-compose.override.yml otomatik yüklenir ve tüm altyapıyı (Postgres, Redis, RabbitMQ, Keycloak, Seq, pgAdmin, …) container’lardan getirir.

Ön koşullar

1

Docker Desktop çalışıyor

docker compose version v2 dönmeli. Windows’ta WSL 2 backend açık.
2

Portlar boş

5005, 3000, 3001, 5432, 6379, 5672, 15672, 8080, 5341, 5342, 5050 boş olmalı.
3

(Opsiyonel) .NET 10 + Node 22

Container dışında geliştirme/debug için. Sadece çalıştıracaksanız gerekmez.
Detay için Ön Gereksinimler.

1. Repoyu klonla

git clone https://github.com/cihandelipinar/diyanet-clean-architecture.git
cd diyanet-clean-architecture

2. .env dosyasını hazırla

Dev compose, repo kökündeki .env dosyasını okur. Örnekten kopyalayın ve CHANGE_ME değerlerini doldurun:
cp .env.example .env
Doldurulması gereken kritik değişkenler:
# PostgreSQL
POSTGRES_USER=postgres
POSTGRES_PASSWORD=guclu_bir_sifre
POSTGRES_DB=DiyanetCleanArchitecture

# Redis
REDIS_PASSWORD=guclu_bir_sifre

# RabbitMQ
RABBITMQ_USER=admin
RABBITMQ_PASSWORD=guclu_bir_sifre

# JWT (uzunluk önemli)
JWT_BACKOFFICE_SECRET=en_az_32_karakter_rastgele
JWT_OTP_SECRET=en_az_64_karakter_rastgele

# Keycloak (dev container)
KEYCLOAK_ADMIN=admin
KEYCLOAK_ADMIN_PASSWORD=admin

# pgAdmin
PGADMIN_EMAIL=admin@example.com
PGADMIN_PASSWORD=admin
JWT_BACKOFFICE_SECRET en az 32, JWT_OTP_SECRET en az 64 karakter olmalıdır; aksi halde token imzalama başlatılırken hata verir. Tüm .env* dosyaları .gitignore’dadır, commit edilmez.
Tüm değişkenlerin tam listesi için Operasyon › Ortam Değişkenleri.

3. Her şeyi başlat

docker compose up -d --build
Bu komut:
  1. docker-compose.yml (base: API + 2 SPA) + docker-compose.override.yml’i (dev altyapı) birleştirir.
  2. API’yi (multi-stage .NET 10 imajı) ve iki SPA’yı (Vite build → nginx) derler.
  3. PostgreSQL, Redis, RabbitMQ, Keycloak, Seq, pgAdmin, RedisInsight, Prometheus, Grafana’yı ayağa kaldırır.
İlk derleme birkaç dakika sürebilir. Durumu izleyin:
docker compose ps
docker compose logs -f diyanetcleanarchitecture-api

4. Veritabanı migration’ları

appsettings.Development.json içinde Services:Migration:AutoDeploy: true olduğundan, API açılışında MigrationService otomatik Database.MigrateAsync() çalıştırır ve şemayı oluşturur. Ayrıca DistrictSeeder 973 ilçeyi, DevDataSeeder bootstrap admin’leri yükler. Migration’ı elle uygulamak isterseniz:
docker exec diyanetcleanarchitecture-api \
  dotnet ef database update \
  --project src/DiyanetCleanArchitecture.Infrastructure.EFCore \
  --startup-project src/DiyanetCleanArchitecture.API
Detay: Veri Katmanı › Migration’lar.

5. Servislere erişim

ServisURLGiriş
Website SPAhttp://localhost:3000Keycloak (vatandaş)
Admin SPAhttp://localhost:3001Keycloak (personel)
APIhttp://localhost:5005
Swagger / Scalarhttp://localhost:5005/swagger
Keycloak Adminhttp://localhost:8080admin / KEYCLOAK_ADMIN_PASSWORD
pgAdminhttp://localhost:5050PGADMIN_EMAIL / PGADMIN_PASSWORD
RabbitMQ UIhttp://localhost:15672RABBITMQ_USER / RABBITMQ_PASSWORD
Seq (loglar)http://localhost:5342— (dev’de auth yok)
Hangfire Dashboardhttp://localhost:5005/jobsadmin / admin
RedisInsighthttp://localhost:5540
Prometheushttp://localhost:9090
Grafanahttp://localhost:3030admin / admin

6. Keycloak provisioning

Dev’de Keycloak otomatik kurulur: KeycloakProvisioning:Enabled: true olduğundan API açılışta diyanet-vatandas-dev-realm ve diyanet-yonetim-dev-realm realm’lerini, client’larını, protokol mapper’larını ve test kullanıcılarını oluşturur (RunOnce). Test kullanıcıları oluşturmak/güncellemek için PowerShell yardımcıları:
./scripts/create-keycloak-dev-users.ps1
./scripts/set-keycloak-test-user-attributes.ps1
Detay: Keycloak › Provisioning.

Faydalı komutlar

# Canlı log
docker compose logs -f diyanetcleanarchitecture-api

# Tek servisi yeniden derle + başlat
docker compose up -d --build diyanetcleanarchitecture-api

# Tek servisi yeniden başlat
docker compose restart rabbitmq

# Durdur (veri korunur)
docker compose down

# Sıfırla (volume'lar dahil — TÜM veri silinir)
docker compose down -v
Tüm komut referansı: Operasyon › Komutlar.

Sorun mu çıktı?

Altyapı container’ları henüz hazır değil olabilir. docker compose ps ile healthy durumu bekleyin; API depends_on ile health bekler ama ilk kalkışta retry görebilirsiniz.
Provisioning birkaç saniye sürer. docker compose logs -f diyanetcleanarchitecture-api içinde [Keycloak Provisioning] satırlarını izleyin. Bkz. Keycloak › Troubleshooting.
İlgili host port’unu kullanan başka bir süreç var. docker compose down sonrası port’u boşaltın veya docker-compose.override.yml’de port eşlemesini değiştirin.