Skip to main content
Tüm sırlar ve ortama özel ayarlar .env dosyalarından gelir. Repoda yalnızca *.example şablonları bulunur; gerçek .env dosyaları .gitignore’dadır.

Örnek dosyalar

ŞablonOrtamKomut
.env.exampleDevcp .env.example .env
.env.stage.exampleStagecp .env.stage.example .env.stage
.env.stage.local.exampleStage (HTTP-only)cp .env.stage.local.example .env.stage.local
.env.prod.exampleProd (tek müşteri)cp .env.prod.example .env.prod
.env.platform.exampleHetzner platformcp .env.platform.example .env.platform
.env.infra.prod.exampleHetzner paylaşımlı infracp .env.infra.prod.example .env.infra.prod
.env.app.{diyanet,kurban,bagis}.prod.exampleHetzner app stack’leriher proje için ayrı
.env* dosyaları (örnekler hariç) .gitignore’dadır. Gerçek secret’lar repoya commit edilmez. Hetzner’da bash scripts/hetzner-env-init.sh secret’ları openssl rand ile otomatik üretir.

Kategoriler

PostgreSQL

DeğişkenAçıklama
POSTGRES_USER / POSTGRES_PASSWORDKullanıcı + şifre
POSTGRES_DBVeritabanı adı (DiyanetCleanArchitecture)
POSTGRES_HOST / POSTGRES_PORTStage/prod — dış sunucu (dev’de default postgres:5432)

Redis & RabbitMQ

DeğişkenAçıklama
REDIS_PASSWORD (+ REDIS_HOST/PORT)Redis
RABBITMQ_USER / RABBITMQ_PASSWORD (+ RABBITMQ_HOST)RabbitMQ

JWT

DeğişkenKural
JWT_BACKOFFICE_SECRETmin 32 karakter — uygulamanın kendi backoffice JWT’si
JWT_OTP_SECRETmin 64 karakter — OTP challenge token’ı

Keycloak

DeğişkenAçıklama
KEYCLOAK_INTERNAL_URLAPI container içinden (dev: http://diyanet-keycloak:8080)
KEYCLOAK_EXTERNAL_URLTarayıcıdan (SPA bundle’a gömülür)
KEYCLOAK_BASE_URLStage/prod — API’nin dış instance’a bağlandığı URL
KEYCLOAK_ADMIN / KEYCLOAK_ADMIN_PASSWORDProvisioning admin
KEYCLOAK_CLIENT_SECRETOAuth Keycloak client secret
WEBSITE_KC_CLIENT_ID / ADMIN_KC_CLIENT_IDClient ID’ler (diyanet-website / diyanet-admin)
ADMIN_ROLESAdmin erişimi izinli roller (Admin,SuperAdmin)

Google IdP (opsiyonel)

DeğişkenAçıklama
GOOGLE_VATANDAS_CLIENT_ID / GOOGLE_VATANDAS_CLIENT_SECRETVatandaş realm Google broker’ı (redirect URI: {KEYCLOAK_EXTERNAL_URL}/realms/diyanet-vatandas-{env}-realm/broker/google/endpoint)

pgAdmin (dev)

PGADMIN_EMAIL / PGADMIN_PASSWORD.

Reverse proxy / TLS (stage/prod)

DeğişkenAçıklama
PUBLIC_DOMAINPublic FQDN — sertifika ve CORS bundan türetilir
LETSENCRYPT_EMAILacme-companion DEFAULT_EMAIL (rate-limit + renewal uyarıları)

Observability

DeğişkenAçıklama
OBSERVABILITY_PROJECTMulti-project Grafana label (a/b/c)
PROMETHEUS_RETENTIONTSDB tutma süresi (dev 15d, prod 30d)
GRAFANA_ADMIN_USER / GRAFANA_ADMIN_PASSWORDGrafana admin (prod’da güçlü şifre zorunlu)

appsettings vs .env ilişkisi

.NET, __ (çift alt çizgi) ile iç içe config bölümlerini override eder. Compose, .env değerlerini bu konvansiyonla container env’ine yazar — appsettings.{Env}.json’daki karşılıklarını ezer:
ConnectionStrings__DiyanetCleanArchitectureDatabaseConnection=Host=...;Database=...;...
Keycloak__Vatandas__BaseUrl=http://diyanet-keycloak:8080
Jwt__Backoffice__Secret=${JWT_BACKOFFICE_SECRET}
KeycloakProvisioning__Realms__0__IdentityProviders__0__ClientId=${GOOGLE_VATANDAS_CLIENT_ID}
Yani appsettings.{Env}.json varsayılanları taşır; ortama özel/sır değerler .env → compose env → __ override zinciriyle gelir.

Sonraki adımlar

Dev Docker

.env.example ile local stack.

Prod Docker

.env.prod ve Hetzner env’leri.

Keycloak ortamları

Realm/client değişkenleri.

Komutlar

—env-file kullanımı.