Skip to main content
Dev ortamı 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

cp .env.example .env     # değerleri doldur (CHANGE_ME)
docker compose up -d --build
İlk 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

ServisImageHost portContainer
APIdiyanetcleanarchitectureapi:dev5005 (→ 8080), 5006 (→ 8081)diyanet-api
Website SPAdiyanet-website:dev3000 (→ 80)diyanet-website
Admin SPAdiyanet-admin:dev3001 (→ 80)diyanet-admin
PostgreSQLpostgres:16-alpine5432diyanet-postgres
Redisredis:7-alpine6379diyanet-redis
RabbitMQrabbitmq:3.13-management-alpine5672, 15672 (UI)diyanet-rabbitmq
Keycloakquay.io/keycloak/keycloak:26.08080diyanet-keycloak
Seqdatalust/seq:latest5341 (ingest), 5342 (UI)diyanet-seq
pgAdmindpage/pgadmin4:latest5050diyanet-pgadmin
RedisInsightredis/redisinsight:latest5540diyanet-redisinsight
Prometheusprom/prometheus:v3.0.19090diyanet-prometheus
Grafanagrafana/grafana:11.4.03030 (→ 3000)diyanet-grafana
Postgres, Redis, RabbitMQ ve Keycloak healthcheck taşır. RabbitMQ, rabbitmq_delayed_message_exchange plugin’i ile gelir (MassTransit delayed redelivery için).

Servis erişim tablosu

AmaçURLGiriş
API (Swagger)http://localhost:5005/swagger
API (Scalar)http://localhost:5005/scalar/v1
Websitehttp://localhost:3000Keycloak
Adminhttp://localhost:3001Keycloak
Keycloak adminhttp://localhost:8080admin / KEYCLOAK_ADMIN_PASSWORD
RabbitMQ UIhttp://localhost:15672RABBITMQ_USER / RABBITMQ_PASSWORD
Seq UIhttp://localhost:5342— (dev’de auth kapalı)
pgAdminhttp://localhost:5050PGADMIN_EMAIL / PGADMIN_PASSWORD
RedisInsighthttp://localhost:5540Host redis, port 6379, REDIS_PASSWORD
Prometheushttp://localhost:9090
Grafanahttp://localhost:3030admin / admin
Hangfirehttp://localhost:5005/jobsadmin / admin

Keycloak — iki realm

Provisioning, API başlarken iki dev realm’i otomatik kurar:
  • diyanet-vatandas-dev-realm → client diyanet-website (public + PKCE, token 2 saat)
  • diyanet-yonetim-dev-realm → client diyanet-admin (public + PKCE, token 5 dakika)
Realm’ler, client’lar, protocol mapper’lar ve test kullanıcıları appsettings.Development.jsonKeycloakProvisioning bölümünden okunur. RunOnce: true olduğu için her başlatmada tekrar tetiklenmez.
Dev compose iki ayrı Keycloak URL değişkeni kullanır: KEYCLOAK_INTERNAL_URL (API container içinden, http://diyanet-keycloak:8080) ve KEYCLOAK_EXTERNAL_URL (tarayıcıdan, http://localhost:8080). SPA bundle’ına external URL gömülür. KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true sayesinde discovery doc’taki jwks_uri istek host’una göre üretilir — aksi halde API IDX10500 No security keys hatası alır.

Tek servisi yeniden derleme

docker compose up -d --build diyanet-admin
docker compose logs -f diyanet-api

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.