docs: record today's production infra findings and fixes
This commit is contained in:
+13
-2
@@ -75,6 +75,17 @@ Hedef: Menü fotoğrafını çekip/yükleyip AI ile saniyeler içinde dijitalle
|
|||||||
|
|
||||||
**Kapsam dışı bırakılanlar (bilinçli, sonraki fazlara ertelendi):**
|
**Kapsam dışı bırakılanlar (bilinçli, sonraki fazlara ertelendi):**
|
||||||
- Apple/Google login (V1.5+) — sadece email auth
|
- Apple/Google login (V1.5+) — sadece email auth
|
||||||
- Custom domain (V1.5) — sadece otomatik subdomain
|
|
||||||
- Abonelik/RevenueCat (Faz 5) — bu fazda erişim kısıtı yok
|
- Abonelik/RevenueCat (Faz 5) — bu fazda erişim kısıtı yok
|
||||||
- Logo yükleme (media/storage akışı V1.5)
|
|
||||||
|
## Production altyapı + canlı hata ayıklama (2026-08-20)
|
||||||
|
|
||||||
|
Bu tarihte proje production'a alınmış halde bulundu: `menul.io` (Next.js public web), `api.menul.io` (Fastify API), Coolify (host: Traefik değil **Caddy**), Cloudflare (DNS/proxy), gerçek Supabase Cloud projesi (`fwahdopsyvryvjaqande`), git.ayris.tech (self-hosted Gitea, `main`'e push → Coolify otomatik deploy). Custom domain özelliği (`ad.ayris.tech` → `menul.io`) canlıda kurulup test edildi ve çalışır hale getirildi. Bu süreçte bulunup düzeltilen gerçek prod bug'ları:
|
||||||
|
|
||||||
|
- **API `SUPABASE_SERVICE_ROLE_KEY` placeholder'dı** — `api.menul.io` her auth isteğini 401'liyordu (mobilde sürekli login döngüsüne sokuyordu). Kullanıcı gerçek key'i env'e girdi.
|
||||||
|
- **Fastify default `bodyLimit` 1 MiB** — AI menü fotoğrafı yüklerken "Request body is too large" hatası (model/key ile ilgisiz). `apps/api/src/index.ts`'te 20 MiB'e çıkarıldı.
|
||||||
|
- **`domains.ts` DNS-CNAME doğrulaması proxied domainlerde yapısal olarak asla çalışmaz** — Cloudflare proxy (turuncu bulut) gerçek CNAME hedefini public DNS'ten gizliyor (`ENODATA`). `/verify` her çağrıldığında zaten doğrulanmış bir domain'i "pending"e geri düşürüyordu. Artık zaten verified olan bir domain bir daha downgrade edilmiyor. **Kalıcı çözüm hâlâ eksik:** gerçek doğrulama Cloudflare Custom Hostnames API'sinin `ssl.status`'una bakmalı — bunun için Cloudflare API token + zone ID gerekiyor (henüz alınmadı).
|
||||||
|
- **`apps/web/src/middleware.ts` trailing slash bug'ı** — root path istekleri `/menu/<slug>/` (sonda slash'lı) üretiyordu, `[slug]` route'u eşleştiremiyordu → her custom domain/subdomain kök isteği "Menü Bulunamadı" veriyordu. Düzeltildi.
|
||||||
|
- **`PUT /restaurants/:id/theme` crash'i** — tanımsız `themeData` değişkeni kullanılıyordu (main'de önceden var olan `tsc` hatası, muhtemelen build type-check adımından geçmeden deploy edilmişti). Eksik `themes` sorgusu eklendi.
|
||||||
|
- **Coolify custom domain routing:** her custom domain, ilgili Next.js servisine Coolify panelinden elle eklenmesi + redeploy gerektiriyor (otomasyon yok). Wildcard subdomain (`*.menul.io`) hiç kurulmadı çünkü **gerekmiyor** — restoran menüleri `menul.io/menu/{slug}` path'i üzerinden çalışıyor, alt-domain mimarisi kullanılmıyor.
|
||||||
|
|
||||||
|
**Sonraki adım (otomasyon):** Cloudflare API token + zone ID alınırsa, `POST /restaurants/:id/domains` restoran custom domain eklediğinde otomatik Custom Hostname oluşturup gereken DNS talimatlarını döndürecek, `/verify` de Cloudflare'in kendi SSL durumuna bakacak şekilde güncellenebilir — böylece bugünkü manuel Cloudflare dashboard adımları (Fallback Origin, TXT kayıtları, Coolify domain ekleme) her yeni restoran için tekrarlanmaz.
|
||||||
|
|||||||
Reference in New Issue
Block a user