docs: record self hosted release audit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
---
|
||||
title: Neta Self-Hosted v3 Release Readiness
|
||||
description: 2026-07-18 Supabase çıkışı, dependency, build, runtime, Docker ve production cutover denetimi.
|
||||
status: release-candidate
|
||||
audited_at: 2026-07-18
|
||||
---
|
||||
|
||||
# Neta Self-Hosted v3 release readiness — 2026-07-18
|
||||
|
||||
## Sonuç
|
||||
|
||||
Repository teknik olarak Supabase'siz self-host release adayıdır.
|
||||
|
||||
- Uygulamanın build veya runtime aşamasında Supabase paketi, client/helper, environment değişkeni, SQL ağacı veya servis bağlantısı yoktur.
|
||||
- İş verisi SQLite + Drizzle, auth Better Auth, dosyalar persistent local data volume üzerinden çalışır.
|
||||
- Supabase environment değişkenleri özellikle unset edilerek production build ve standalone runtime doğrulanmıştır.
|
||||
- Temiz Docker build, startup migration, non-root runtime, healthcheck, persistent volume ve restart smoke başarılıdır.
|
||||
- Lokal geliştirme ve Docker aynı `pnpm@11.5.1` ile tek canonical `pnpm-lock.yaml` kullanır.
|
||||
|
||||
Bu sonuç gerçek production cutover'ın yapıldığı anlamına gelmez. Production verisi ve altyapı yetkisi workspace'te bulunmadığı için son export/import, DNS ve gerçek kullanıcı smoke adımları ortam sahibi tarafından yürütülmelidir.
|
||||
|
||||
## Supabase denetimi
|
||||
|
||||
Kaldırılan aktif release kalıntıları:
|
||||
|
||||
- `supabase/` altındaki PostgreSQL schema, migration, seed ve setup dosyaları
|
||||
- `docs/database/` altındaki eski Supabase/PostgreSQL migration kayıtları
|
||||
- Supabase kurulumunu anlatan çelişkili numaralı v2 belgeleri
|
||||
- takip edilen geçici `.artifacts` logları ve Python bytecode çıktısı
|
||||
|
||||
Doğrulanan sınırlar:
|
||||
|
||||
- `@supabase/ssr` ve `@supabase/supabase-js` dependency/lockfile ağacında yok
|
||||
- `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY` ve `SUPABASE_SERVICE_ROLE_KEY` runtime sözleşmesinde yok
|
||||
- `app`, `components`, `config`, `lib`, `server`, proxy ve Next config içinde Supabase runtime importu yok
|
||||
- `.next` production server/static çıktısında Supabase paket, env veya `supabase.co` referansı yok
|
||||
- release boundary eski `supabase/` ve `docs/database/` ağaçlarının yeniden eklenmesini hata olarak kabul ediyor
|
||||
|
||||
Repository'de kalan `supabase` kelimeleri tarihsel dönüşüm belgeleri, regresyon sınırı testleri ve offline veri import aracıdır. `scripts/import-supabase.mjs` hazırlanmış bir export bundle'ını diskten okur; Supabase SDK kullanmaz, Supabase'e bağlanmaz ve uygulama runtime'ına import edilmez. Mevcut kurulumların verisini korumak için bilinçli olarak tutulmuştur.
|
||||
|
||||
## Bu denetimde düzeltilen release sorunları
|
||||
|
||||
1. Repo genelindeki ESLint hata ve uyarıları giderildi; props-state senkronizasyon effect'leri deterministik override modellerine taşındı, `any` kullanımları tiplendi ve görseller Next Image'a alındı.
|
||||
2. `next/font/google` kaldırıldı. Üretim build'i artık Google Fonts ağına bağlanmadan sistem font stack'iyle deterministik tamamlanır.
|
||||
3. Standalone build'in public ve static asset'leri eksiksiz paketlemesi için `postbuild` hazırlığı eklendi.
|
||||
4. `pnpm start`, `output: standalone` ile uyumsuz `next start` yerine doğrudan standalone server'ı çalıştırır.
|
||||
5. Docker ve lokal geliştirme arasındaki npm/pnpm lockfile ayrışması kaldırıldı. `package-lock.json` silindi; Docker frozen canonical pnpm lockfile kullanır.
|
||||
6. Docker native dependency build scriptleri `pnpm-workspace.yaml` içindeki dar allowlist ile sınırlandı.
|
||||
7. Docker build'deki gereksiz ikinci dependency kurulumu kaldırıldı.
|
||||
|
||||
## Doğrulama kanıtları
|
||||
|
||||
Başarılı kontroller:
|
||||
|
||||
- `pnpm lint`
|
||||
- `pnpm typecheck`
|
||||
- Faz 1 migration, persistence, backup retention, restore ve checksum smoke
|
||||
- Faz 2 auth/domain smoke
|
||||
- Faz 3 storage smoke
|
||||
- Faz 4 UI boundary
|
||||
- Faz 5 freelancer backend boundary/smoke
|
||||
- Faz 6 portal boundary/smoke ve cross-client negatif akışlar
|
||||
- Faz 7 AI/business boundary/smoke
|
||||
- Faz 8 offline import dry-run/apply/idempotency/rollback smoke
|
||||
- Faz 8 source ve build artifact release boundary
|
||||
- Faz 9 API boundary/smoke
|
||||
- Supabase environment değişkenleri olmadan production build
|
||||
- Standalone migration, liveness, readiness, `/register`, public asset ve static CSS smoke
|
||||
- Docker Node 22 build, Next 16.2.10, non-root `nextjs` user, startup migration ve readiness
|
||||
- Aynı persistent volume ile Docker restart sonrası readiness
|
||||
- `git diff --check`
|
||||
|
||||
Readiness yanıtında `dataDirWritable`, `databaseReachable` ve `migrationsApplied` kontrollerinin tamamı `true` dönmüştür.
|
||||
|
||||
## Güvenlik audit'i
|
||||
|
||||
Canonical production ağacında high veya critical advisory yoktur. `pnpm audit --prod` iki moderate bulgu raporlar:
|
||||
|
||||
1. Eski esbuild, Better Auth'ın opsiyonel Drizzle Kit/tooling zinciri üzerinden gelir. Advisory, esbuild development server'ın başka sitelere okunabilir yanıt vermesiyle ilgilidir; Neta production container'ı esbuild development server çalıştırmaz.
|
||||
2. Next'in kendi içinde taşıdığı eski PostCSS sürümü için stringify advisory'si vardır. Neta production'da kullanıcıdan CSS alıp build/stringify etmez; PostCSS yalnızca güvenilen source build'inde çalışır.
|
||||
|
||||
Audit'in önerdiği zorunlu downgrade/force fix framework ve migration tooling'i uyumsuz sürümlere taşıdığı için uygulanmamıştır. Upstream Next ve Drizzle/Better Auth zinciri güncellendiğinde lockfile yenilenip audit tekrar çalıştırılmalıdır.
|
||||
|
||||
## Yayın öncesi kalan zorunlu dış adımlar
|
||||
|
||||
Gerçek production deploy için aşağıdakiler hâlâ ortam sahibinin sorumluluğundadır:
|
||||
|
||||
- güçlü ve benzersiz `BETTER_AUTH_SECRET`
|
||||
- HTTPS reverse proxy ve doğru `APP_URL`, `NEXT_PUBLIC_SITE_URL`, gerekirse `TRUSTED_ORIGINS`
|
||||
- kalıcı `/app/data` volume'u ve host-level şifreli/off-site backup
|
||||
- mevcut kurulum varsa maintenance/read-only, final export, import dry-run/final import
|
||||
- gerçek satır, dosya ve checksum karşılaştırması
|
||||
- owner hesabı ve kritik owner/client akışlarının production smoke'u
|
||||
- DNS geçişi ve tanımlı rollback penceresi
|
||||
|
||||
Ürün seviyesinde Faz 10'un sayfa bazlı responsive, accessibility, light/dark ve kullanıcı kabul checklist'leri master planda açık kalmaktadır. Bu maddeler teknik Supabase çıkışını engellemez; “Neta Self-Hosted v3 tamamen tamamlandı” etiketi için ayrıca kapatılmalıdır.
|
||||
Reference in New Issue
Block a user