docker-compose.yml + docker-compose.override.yml ile çalışır. docker compose up çağrıldığında override otomatik yüklenir — başka flag gerekmez. Tüm altyapı container olarak ayağa kalkar.
Başlatma
up’ta sırasıyla: altyapı (Postgres → Redis → RabbitMQ → Seq → Keycloak) healthcheck’leri geçer, ardından API başlar. API ayağa kalkarken migration’lar otomatik uygulanır (Services:Migration:AutoDeploy = true) ve Keycloak realm/client/user’ları otomatik provision edilir (KeycloakProvisioning:Enabled = true).
API, altyapı servislerinin
condition: service_healthy olmasını bekler (depends_on). Postgres/Redis/RabbitMQ/Keycloak hazır olmadan API başlamaz.Servisler
| Servis | Image | Host port | Container |
|---|---|---|---|
| API | diyanetcleanarchitectureapi:dev | 5005 (→ 8080), 5006 (→ 8081) | diyanet-api |
| Website SPA | diyanet-website:dev | 3000 (→ 80) | diyanet-website |
| Admin SPA | diyanet-admin:dev | 3001 (→ 80) | diyanet-admin |
| PostgreSQL | postgres:16-alpine | 5432 | diyanet-postgres |
| Redis | redis:7-alpine | 6379 | diyanet-redis |
| RabbitMQ | rabbitmq:3.13-management-alpine | 5672, 15672 (UI) | diyanet-rabbitmq |
| Keycloak | quay.io/keycloak/keycloak:26.0 | 8080 | diyanet-keycloak |
| Seq | datalust/seq:latest | 5341 (ingest), 5342 (UI) | diyanet-seq |
| pgAdmin | dpage/pgadmin4:latest | 5050 | diyanet-pgadmin |
| RedisInsight | redis/redisinsight:latest | 5540 | diyanet-redisinsight |
| Prometheus | prom/prometheus:v3.0.1 | 9090 | diyanet-prometheus |
| Grafana | grafana/grafana:11.4.0 | 3030 (→ 3000) | diyanet-grafana |
rabbitmq_delayed_message_exchange plugin’i ile gelir (MassTransit delayed redelivery için).
Servis erişim tablosu
| Amaç | URL | Giriş |
|---|---|---|
| API (Swagger) | http://localhost:5005/swagger | — |
| API (Scalar) | http://localhost:5005/scalar/v1 | — |
| Website | http://localhost:3000 | Keycloak |
| Admin | http://localhost:3001 | Keycloak |
| Keycloak admin | http://localhost:8080 | admin / KEYCLOAK_ADMIN_PASSWORD |
| RabbitMQ UI | http://localhost:15672 | RABBITMQ_USER / RABBITMQ_PASSWORD |
| Seq UI | http://localhost:5342 | — (dev’de auth kapalı) |
| pgAdmin | http://localhost:5050 | PGADMIN_EMAIL / PGADMIN_PASSWORD |
| RedisInsight | http://localhost:5540 | Host redis, port 6379, REDIS_PASSWORD |
| Prometheus | http://localhost:9090 | — |
| Grafana | http://localhost:3030 | admin / admin |
| Hangfire | http://localhost:5005/jobs | admin / admin |
Keycloak — iki realm
Provisioning, API başlarken iki dev realm’i otomatik kurar:diyanet-vatandas-dev-realm→ clientdiyanet-website(public + PKCE, token 2 saat)diyanet-yonetim-dev-realm→ clientdiyanet-admin(public + PKCE, token 5 dakika)
appsettings.Development.json → KeycloakProvisioning bölümünden okunur. RunOnce: true olduğu için her başlatmada tekrar tetiklenmez.
Tek servisi yeniden derleme
Sonraki adımlar
Komutlar
Docker / dotnet ef / npm referansı.
Ortam değişkenleri
.env.example doldurma.
Gözlemlenebilirlik
Seq, Prometheus, Grafana, Hangfire.
Stage Docker
Reverse proxy’li dağıtım.