# 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: - 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.