· kaynak dev.to (home feed)
Geliştirici, Docker olmadan tam Supabase yığınını yaklaşık 100 MB RAM ile yerel olarak çalıştırdı
Bir dev.to yazısı, Docker tabanlı yerel Supabase'ın (12 container, 1.6 GB RAM, 45 saniyelik açılış) yerine, aynı endpoint'leri ve SDK uyumluluğunu sunan yaklaşık 58 MB'lık tek bir Tinbase binary'sine geçişi anlatıyor.

Değişimin ardındaki araç
dev.to'da yazan bir geliştirici, resmi Docker tabanlı yerel Supabase yığınını — on iki container, kabaca 1.6 GB RAM ve 45 saniyelik başlangıç süresi — tek bir yaklaşık 58 MB'lık çalıştırılabilir dosyayla değiştirdiğini belgeledi; bu dosya boştayken yaklaşık 98 MB bellek kullanıyor ve kabaca 2.5 saniyede açılıyor; uygulama kodunda ise bağlantı dizesi dışında hiçbir değişiklik yapılmamış.
Yazarın seçtiği araç Tinbase; yazıda tek dosyalık bir binary olarak tanımlanıyor ve gerçek bir Postgres 17 örneğini auth, realtime, edge function'lar, webhook'lar ve cron ile birlikte paketliyor. Barındırılan Supabase ile aynı HTTP ve Postgres endpoint'lerini sunduğu için standart supabase-js istemcisi değiştirilmeden bağlanabiliyor. Yazarın belirttiğine göre uygulama tarafındaki tek değişiklik, SUPABASE_URL'i localhost:54321 yerine localhost:4000'e yönlendirmek olmuş.
Tinbase, Postgres'i 5432 portunda sunuyor ve REST (/rest/v1), auth (/auth/v1), realtime (/realtime/v1) ve storage (/storage/v1) için Supabase'ın URL yapısını yansıtıyor; ayrıca aynı portta kendi admin arayüzü bulunuyor.
Uygulamada geçiş süreci
Yazıya göre geçiş beş adım sürmüş: curl ile pipe edilen bir shell script'iyle kurulum (~/.tinbase/bin içine tek bir binary iniyor), tinbase init ve tinbase start çalıştırma, mevcut Supabase migration'larını projeye kopyalayıp veritabanını sıfırlama, uygulamadaki bağlantı URL'sini güncelleme ve son olarak Docker'ı durdurup yaklaşık 2.3 GB image ve volume'u temizleme.
Veritabanı gerçek Postgres 17 olduğu için, yazarın dediğine göre satır düzeyinde güvenlik (row-level security) politikaları birebir aynı şekilde davranmış ve migration'lar hiçbir değişiklik olmadan çalışmış. Edge function'lar Deno runtime'larını koruyor ve benzer bir komutla deploy ediliyor.
Rakamlar — bir uyarıyla
Tüm benchmark'lar yazarın kendi M1 Air'i üzerinde on dakikalık bir geliştirme iş yüküyle elde edildiği için bağımsız bir test değil, tek bir kişinin kendi bildirdiği bir veri noktası. Yine de farklar büyük:
- Soğuk başlangıç: 45 s'den 2.5 s'ye
- Sıcak başlangıç: 15 s'den 1.2 s'ye
- Sabit durum RAM: 1.626 MB'den 98 MB'ye
- Disk ayak izi: 2.3 GB'dan 58 MB'ye
- Boşta CPU: %4-8'den %0.1-0.4'e
Realtime ve edge function'ların aktif olduğu yük altında RAM'in yaklaşık 250 MB ile zirve yaptığı, Docker yığınındaysa 2 GB'dan fazla yer kapladığı bildiriliyor.
Eksik kaldığı yerler
Yazar kusurları da açıkça anlatıyor. Tinbase'in admin arayüzü, Supabase Studio'dan farklı bir ürün. Daha yeni, yalnızca barındırılan sürümde sunulan bazı özellikler — bazı analytics endpoint'leri ve vektör arama entegrasyonu — yok. Edge function ortamı da bayt bayt aynı değil; yazar, bir durumda SUPABASE_URL ortam değişkeninin Docker runtime'ındakinden farklı bir değer tuttuğuna rastlamış.
Yazı ayrıca net bir sınır çiziyor: bu, yerel geliştirme için bir alternatif ve Supabase'ın yerine geçen bir çözüm değil. Üretim ortamı SLA ve ölçekleme nedeniyle hâlâ barındırılan Supabase'a ait; bu yaklaşım ayrıca çok terabaytlık yerel veri kümelerinde ya da barındırılan her özelliğin birebir eşleşmesini gerektiren uygulamalarda zorlanıyor.
Neden önemli
Yazının ilginç yanı RAM tasarrufundan çok, yazarın Docker ek yüküne bağladığı iş akışı maliyeti: kısa oturumlar için yerel çalıştırmayı atlamak, yerel ortam yavaş olduğu için şema değişikliklerini barındırılan Supabase üzerinde test etmek ve backend dışındaki ekip arkadaşlarının varsayılan olarak staging'e yönelmesi. Geçişten sonra yazar, kurulumun tek bir komut olması sayesinde tasarımcıların uygulamayı ilk kez yerel olarak çalıştırmaya başladığını söylüyor.
Yerel Supabase yığını batarya, bellek ve iterasyon hızı için arka planda bir yük oluşturan herkes için yazı, container soyutlamasının kendisinin — image boyutu değil — kaldırılmaya değer şey olabileceği konusunda somut bir örnek sunuyor. Bu tek bir yazarın tek bir araç hakkındaki anlatımı olduğu için, aynı geçişi düşünen ekipler kendi iş yükleriyle benchmark yapmalı ve bağımlı oldukları Supabase özellikleri için Tinbase'in uyumluluk matrisini kontrol etmeli.
- #supabase
- #docker
- #local-development
- #postgres
- #developer-tools