6.1 KiB
title, description, status, audited_at
| title | description | status | audited_at |
|---|---|---|---|
| Neta Self-Hosted v3 Release Readiness | 2026-07-18 Supabase çıkışı, dependency, build, runtime, Docker ve production cutover denetimi. | release-candidate | 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.1ile tek canonicalpnpm-lock.yamlkullanı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
.artifactslogları ve Python bytecode çıktısı
Doğrulanan sınırlar:
@supabase/ssrve@supabase/supabase-jsdependency/lockfile ağacında yokNEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEYveSUPABASE_SERVICE_ROLE_KEYruntime sözleşmesinde yokapp,components,config,lib,server, proxy ve Next config içinde Supabase runtime importu yok.nextproduction server/static çıktısında Supabase paket, env veyasupabase.coreferansı yok- release boundary eski
supabase/vedocs/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ı
- Repo genelindeki ESLint hata ve uyarıları giderildi; props-state senkronizasyon effect'leri deterministik override modellerine taşındı,
anykullanımları tiplendi ve görseller Next Image'a alındı. next/font/googlekaldırıldı. Üretim build'i artık Google Fonts ağına bağlanmadan sistem font stack'iyle deterministik tamamlanır.- Standalone build'in public ve static asset'leri eksiksiz paketlemesi için
postbuildhazırlığı eklendi. pnpm start,output: standaloneile uyumsuznext startyerine doğrudan standalone server'ı çalıştırır.- Docker ve lokal geliştirme arasındaki npm/pnpm lockfile ayrışması kaldırıldı.
package-lock.jsonsilindi; Docker frozen canonical pnpm lockfile kullanır. - Docker native dependency build scriptleri
pnpm-workspace.yamliçindeki dar allowlist ile sınırlandı. - Docker build'deki gereksiz ikinci dependency kurulumu kaldırıldı.
Doğrulama kanıtları
Başarılı kontroller:
pnpm lintpnpm 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
nextjsuser, 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:
- 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.
- 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, gerekirseTRUSTED_ORIGINS - kalıcı
/app/datavolume'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.