Files
lab/belgeler/coolify-deploy.md
T
kovakmedya 97f397d2dd 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.
2026-05-21 20:19:13 +03:00

136 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.