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.
5.5 KiB
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
# 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-informu — 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/healthroute 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.