docs: Coolify deploy guide for lab.kovakcrm.com

Step-by-step instructions for the production deploy that has to happen in
the admin.kovaksoft.com UI (Coolify doesn't expose a clean CLI for creating
resources). Covers DNS A record, Coolify resource setup, ENV mapping,
domain + SSL, Gitea webhook for auto-deploy, and a verification cookbook.
Troubleshooting section includes the Node 26 / node-appwrite patch already
shipped in repo.
This commit is contained in:
kovakmedya
2026-05-21 20:19:13 +03:00
parent 2c6c074a06
commit 97f397d2dd
+135
View File
@@ -0,0 +1,135 @@
# 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.