> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diyanet.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Sık Kullanılan Komutlar

> Docker, dotnet ef, template, npm ve script referansı

Günlük geliştirme ve operasyonda en sık kullanılan komutlar. Tümü gerçek proje yapısına göredir.

## Docker Compose

```bash theme={null}
# Dev — override otomatik yüklenir
docker compose up -d --build
docker compose ps                       # servis durumu
docker compose logs -f diyanet-api      # tek servis log (takip)
docker compose restart diyanet-api      # tek servis restart
docker compose up -d --build diyanet-admin   # tek servis yeniden derle
docker compose down                     # durdur (volume korunur)
docker compose down -v                  # durdur + volume'leri sil (TEMİZ başlangıç)
```

Stage / Prod:

```bash theme={null}
# Stage
docker compose --env-file .env.stage \
  -f docker-compose.yml -f docker-compose.stage.yml up -d --build

# Prod
docker compose --env-file .env.prod \
  -f docker-compose.yml -f docker-compose.prod.yml up -d --build
```

<Warning>
  `docker compose down -v` tüm verileri (Postgres, Redis, RabbitMQ, Keycloak, Seq) siler. Yalnızca dev'de temiz başlangıç için kullanın.
</Warning>

## EF Core migration

Migration'lar `DiyanetCleanArchitecture.Infrastructure.EFCore` projesinde tutulur; startup projesi API'dir.

```bash theme={null}
# Yeni migration ekle
dotnet ef migrations add MigrationAdi \
  --project src/DiyanetCleanArchitecture.Infrastructure.EFCore \
  --startup-project src/DiyanetCleanArchitecture.API

# Veritabanını güncelle
dotnet ef database update \
  --project src/DiyanetCleanArchitecture.Infrastructure.EFCore \
  --startup-project src/DiyanetCleanArchitecture.API
```

Container içindeki API'den:

```bash theme={null}
docker exec diyanet-api dotnet ef database update \
  --project src/DiyanetCleanArchitecture.Infrastructure.EFCore
```

<Note>
  Dev'de `Services:Migration:AutoDeploy = true` olduğu için migration'lar API başlarken otomatik uygulanır — manuel `database update` genelde gerekmez.
</Note>

## Template (dotnet new)

Proje bir `dotnet new` şablonudur (`.template.config/template.json`):

```bash theme={null}
# Şablonu yükle (repo kökünden)
dotnet new install .

# Yeni proje üret
dotnet new diyanet-ca -n MyProject
```

`sourceName` `DiyanetCleanArchitecture`'dır; `-n MyProject` tüm namespace/dosya adlarını yeniden yazar. `ProjectKeycloakId` (default `my-project`) ve `Framework` (default `net10.0`) sembolleri ile özelleştirilebilir.

## npm (SPA'lar)

Her iki SPA klasöründe (`src/DiyanetCleanArchitecture.Presentation.{Admin,Website}`):

```bash theme={null}
npm install
npm run dev            # Vite dev server (Admin 3001 / Website 3000)
npm run build          # tsc -b && vite build → dist/
npm run preview        # build çıktısını serve et
npm run generate-api   # NSwag ile typed Axios client üret (API çalışırken)
```

## PowerShell — Keycloak script'leri (dev)

```powershell theme={null}
# Dev test kullanıcılarını oluştur
./scripts/create-keycloak-dev-users.ps1

# Test kullanıcı attribute'larını (permissions, organization_id) set et
./scripts/set-keycloak-test-user-attributes.ps1

# Kurumsal CA sertifikasını export et (on-prem TLS için)
./scripts/export-ca-cert.ps1
```

## Hetzner script'leri (bash)

```bash theme={null}
bash scripts/hetzner-bootstrap.sh         # Docker + UFW + log-rotate + deploy user
bash scripts/hetzner-env-init.sh          # env dosyaları + secret üretimi
bash scripts/hetzner-platform.sh up       # platform (nginx-proxy + acme)
bash scripts/hetzner-deploy.sh infra      # paylaşımlı infra
bash scripts/hetzner-deploy.sh app diyanet   # app stack (diyanet | kurban | bagis)
```

Hetzner log/operasyon:

```bash theme={null}
docker compose -p infra-prod   -f docker-compose.shared-infra.yml logs -f
docker compose -p diyanet-prod -f docker-compose.app.yml logs -f
docker compose -p kurban-prod  -f docker-compose.app.yml down    # tek projeyi durdur
docker exec -it infra-prod-postgres-1 psql -U diyanet_root -d diyanet
```

## Health & doğrulama

```bash theme={null}
curl http://localhost:5005/health/ready          # readiness (DB/cache/broker)
curl http://localhost:5005/health/live           # liveness (her zaman 200)
curl -I https://${PUBLIC_DOMAIN}/api/health/ready # prod, nginx-proxy arkası
docker logs diyanet-acme-companion --tail 30      # sertifika log'u
```

## Sonraki adımlar

<CardGroup cols={2}>
  <Card title="Dev Docker" href="/operations/docker-dev">
    Local stack ve servis erişimi.
  </Card>

  <Card title="Migration'lar" href="/data/migrations">
    EF Core migration akışı.
  </Card>

  <Card title="Template kullanımı" href="/getting-started/template-usage">
    dotnet new diyanet-ca detayları.
  </Card>

  <Card title="Gözlemlenebilirlik" href="/operations/observability">
    Health ve log kontrolü.
  </Card>
</CardGroup>
