# DLS — Coolify Deploy Rehberi

`lab.kovakcrm.com` adresine production deploy adımları. Tüm adımlar idempotent — bir adımda hata olursa baştan deneyebilirsin.

## Önkoşul

- Coolify panel: <https://admin.kovaksoft.com>
- Coolify host IP: `194.31.52.65` (CLAUDE.md'den)
- Gitea repo: `https://git.kovaksoft.com/kovakmedya/lab` (zaten push edilmiş, main branch)
- Appwrite project: `69f27b51000a5bee46ce` (isletmem ile aynı, lab database eklendi)

## Adım 1 — DNS (Cloudflare veya registrar)

`lab.kovakcrm.com` için **A record**:

| Type | Name | Content | Proxy |
|---|---|---|---|
| A | `lab` | `194.31.52.65` | DNS only (gri bulut) — Coolify Let's Encrypt yapacak |

Cloudflare proxy'yi (turuncu bulut) **kapalı** tut; SSL handshake'i Coolify yapacak. Sonradan istersen Full (strict) ile proxy aktif edebilirsin ama önce DNS-only ile SSL al.

Propagation 1-2 dk: `dig +short lab.kovakcrm.com` ile doğrula.

## Adım 2 — Coolify'da yeni Resource

`admin.kovaksoft.com` > sol menü **Projects** > mevcut bir project seç (örn. KovakSoft) veya **New Project** > **lab**.

Project içinde **+ New Resource** > **Public Repository** (Gitea ayrı bir kaynak değil, public repo URL veriyorsun) > **Continue**.

### Repository ayarları

| Alan | Değer |
|---|---|
| Repository URL | `https://git.kovaksoft.com/kovakmedya/lab` |
| Branch | `main` |
| Build Pack | **Nixpacks** (auto-detect; Next.js + pnpm) |
| Base Directory | `/` |
| Publish Directory | (boş) |

**Continue** > yeni application oluşur.

### Build / Start komutları

Coolify Nixpacks pnpm-lock.yaml'ı görüp otomatik `pnpm install` + `pnpm run build` çalıştırır. Yine de gözden geçir:

| Alan | Değer |
|---|---|
| Install Command | `pnpm install --frozen-lockfile` |
| Build Command | `pnpm build` |
| Start Command | `pnpm start` |
| Port (Exposed) | `3000` |

### Environment Variables

**Environment Variables** sekmesi > şu 5 satırı ekle:

```
NEXT_PUBLIC_APPWRITE_ENDPOINT=https://db.kovaksoft.com/v1
NEXT_PUBLIC_APPWRITE_PROJECT_ID=69f27b51000a5bee46ce
NEXT_PUBLIC_APPWRITE_DATABASE_ID=lab
APPWRITE_API_KEY=<.env.local'deki değerin aynısı>
APP_URL=https://lab.kovakcrm.com
```

`APPWRITE_API_KEY` için lokalde `.env.local`'den kopyala (gitignore'da olduğu için repo'da yok). Coolify'da **Is Build Variable** kapalı, **Is Preview Deployment** kapalı, **Locked** açık olabilir.

`NEXT_PUBLIC_*` değişkenleri Coolify'da **Build-time** olmalı (Nixpacks bunu otomatik yapar, ekstra ayar gerek yok).

### Domain

**General** sekmesi > **Domains** > `https://lab.kovakcrm.com` ekle. Coolify otomatik Let's Encrypt SSL alacak (DNS-only proxy doğru ayarlandıysa).

## Adım 3 — Deploy

Sağ üstte **Deploy** butonuna bas. İlk build ~3-4 dk (pnpm install + next build). Logları **Deployments** sekmesinde takip et.

**Yeşil ışık:** Container running, `https://lab.kovakcrm.com` 200 dönüyor.

## Adım 4 — Gitea webhook (auto-deploy)

Coolify resource > **Webhooks** veya **Sources** sekmesinde **Webhook URL**'i kopyala. Genelde:

```
https://admin.kovaksoft.com/webhooks/source/gitea/events/manual
```

Gitea > kovakmedya/lab repo > **Settings** > **Webhooks** > **Add Webhook** > **Gitea**:

| Alan | Değer |
|---|---|
| Target URL | (Coolify'dan kopyaladığın URL) |
| HTTP Method | POST |
| POST Content Type | application/json |
| Trigger | **Push Events** + **Branch filter:** `main` |
| Active | ✓ |

**Test Delivery** ile dene — Coolify'da otomatik bir deploy tetiklenir. Sonraki her `main` push'ta auto-deploy.

## Adım 5 — Doğrulama

```bash
# DNS
dig +short lab.kovakcrm.com   # → 194.31.52.65

# HTTPS / SSL
curl -sI https://lab.kovakcrm.com/sign-in | head -3   # → HTTP/2 200

# Pill render
curl -s https://lab.kovakcrm.com/sign-in | grep -oE 'Klinik|Laboratuvar|role=.radiogroup'
```

Tarayıcıda `https://lab.kovakcrm.com`:
- Landing açılır (varsayılan `/`).
- `/sign-in` formu — Klinik/Lab pill, email/şifre.
- Mevcut Appwrite hesabınla giriş → tenant'ın yoksa onboarding'e gider (login pill seçimin oraya taşınır) → workspace oluştur → dashboard.

## Sorun çözme

| Belirti | Neden / Çözüm |
|---|---|
| `Bağlantı hatası: invalid onError method` | Node 26 + node-appwrite uyumsuzluğu. Repo'da `patches/node-fetch-native-with-agent@1.7.2.patch` zaten var; Coolify pnpm install sırasında otomatik uygular. Eksikse build log'da `Applied patch` satırını ara. |
| SSL hatası "no certificate" | Cloudflare proxy hâlâ açık olabilir. Gri buluta indir, DNS'i tekrar propagate et, Coolify > Domain > **Regenerate Certificate**. |
| `Missing NEXT_PUBLIC_APPWRITE_ENDPOINT` | ENV'ler **build-time** değil runtime olarak ekli. Nixpacks `.env` ile build yapar, Coolify ENV editor'inde **Is Build Variable** kontrol et. |
| Sign-in çalışıyor ama sayfa yüklenmiyor | Cookie SameSite=strict + farklı domain. Aynı tarayıcıda lokal isletmem ile lab cookie'leri çakışmaz (farklı subdomain). |
| `EADDRINUSE :3000` | Container restart sırasında ölü process kalmış. Coolify > **Restart** veya **Redeploy**. |

## Görsel logo yükleme (opsiyonel)

Coolify > General > **Application Icon** alanına bir favicon yükle (32x32 PNG). Sidebar'da ve tarayıcı tab'ında görünür.

## Sonraki iyileştirmeler

- **Health check endpoint:** `/api/health` route ekle, Coolify Healthcheck Path olarak set et.
- **Backup**: Appwrite'ın volume snapshot'ı zaten kovaksoft-coolify host'unda. DB için ekstra script gerekirse `belgeler/`'e ekle.
- **CI checks (opsiyonel):** Gitea Actions yoksa Coolify'ın "Deploy on failed build → rollback" davranışına güven.
