SQLite Gücüyle Tek Dosyada Backend: PocketBase ile Bağımsız ve Hafif Altyapı Çağı
SQLite Gücüyle Tek Dosyada Backend: PocketBase ile Bağımsız ve Hafif Altyapı Çağı
Modern web ve mobil uygulama geliştirme ekosistemi hiç olmadığı kadar karmaşık bir hal aldı. Basit bir fikir için bile Kubernetes kümesi kurmak, Docker konteynerleri arasında kaybolmak, PostgreSQL veya MongoDB yapılandırmalarıyla uğraşmak ve ay sonunda AWS’ten gelen kabarık faturalarla yüzleşmek bir standart haline geldi.
Peki, tüm bu karmaşayı reddedip tek bir dosya ile tüm backend ihtiyacınızı çözebileceğinizi söylesek?
Go diliyle yazılmış, gücünü SQLite’tan alan ve tek bir çalıştırılabilir (executable) dosyadan ibaret olan PocketBase, son dönemin en popüler trendlerinden biri olan "Single VPS" (Tek Sanal Sunucu) ve "Sadelik Devrimi" akımının öncülüğünü yapıyor. Bu yazımızda, PocketBase'in sunduğu olanakları, SQLite'ın gizli gücünü ve karmaşık bulut altyapılarına ihtiyaç duymadan nasıl bağımsız bir altyapı kurabileceğinizi inceliyoruz.
PocketBase Nedir?
PocketBase; gerçek zamanlı (real-time) bir veritabanı, kullanıcı kimlik doğrulama (auth) sistemi, dosya depolama yönetimi ve kullanışlı bir yönetim paneli (Admin UI) sunan, açık kaynaklı ve tek dosyadan oluşan bir backend çözümüdür.
┌─────────────────────────────────────────────────────────┐
│ POCKETBASE │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Go API │ │ Embedded DB │ │ Svelte Admin │ │
│ │ Engine │ │ (SQLite) │ │ Dashboard │ │
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
Tek Bir Çalıştırılabilir Dosya
Go dilinin performansı ve SQLite’ın hafifliği üzerine inşa edilen PocketBase, herhangi bir bağımlılık (dependency) yüklemenizi gerektirmez. Sadece dosyayı indirir, çift tıklar (veya terminalde çalıştırır) ve saniyeler içinde üretime hazır bir backend'e sahip olursunuz.
PocketBase'in Öne Çıkan Güçlü Özellikleri
PocketBase, "hafif" bir araç olmasına rağmen modern bir backend'den bekleyeceğiniz tüm temel özellikleri bünyesinde barındırır:
1. Gerçek Zamanlı (Real-time) SQLite Veritabanı
PocketBase, veritabanı olarak gömülü (embedded) SQLite kullanır. SSE (Server-Sent Events) protokolünü kullanarak veritabanındaki her değişikliği (ekleme, güncelleme, silme) anlık olarak istemcilere (frontend) iletebilir. Bu sayede sohbet uygulamaları veya canlı veri takibi gerektiren projeleri ek bir WebSocket sunucusu kurmadan geliştirebilirsiniz.
2. Hazır Kimlik Doğrulama (Authentication)
Kullanıcı kayıt, giriş, şifre sıfırlama gibi süreçler PocketBase ile saniyeler içinde çözülür. Üstelik sadece e-posta/şifre ile sınırlı değildir; Google, GitHub, GitLab, Apple, Facebook gibi popüler sağlayıcılar üzerinden OAuth2 entegrasyonu kutudan çıktığı gibi desteklenir.
3. Dosya Depolama (File Storage)
Kullanıcı profil resimleri, dökümanlar veya medya dosyaları için ekstra bir dosya sunucusu kurmanıza gerek yoktur. PocketBase, dosyaları yerel diskte saklayabildiği gibi, tek bir arayüz ayarıyla AWS S3, Cloudflare R2 veya MinIO gibi S3 uyumlu bulut depolama servislerine de yönlendirebilir.
4. Muhteşem Yönetim Paneli (Admin UI)
PocketBase’i çalıştırdığınız anda tarayıcınızdan erişebileceğiniz, Svelte ile yazılmış son derece şık ve hızlı bir yönetim paneli sizi karşılar. Bu panel üzerinden veritabanı tablolarını (collections) oluşturabilir, kullanıcıları yönetebilir, API kurallarını (API Rules) tanımlayabilir ve sistem yedeklerini alabilirsiniz.
SQLite Gerçekten Yeterli mi? "Oyuncak Veritabanı" Algısını Yıkmak
PocketBase hakkında en çok sorulan soru şudur: "SQLite sadece test projeleri için değil mi? Üretim (production) ortamında patlamaz mı?"
Bu, uzun yıllar öncesinden kalan eski bir algıdır. Günümüzde SQLite; WAL (Write-Ahead Logging) modu, optimize edilmiş bellek yönetimi ve SSD disklerin sunduğu yüksek okuma/yazma hızları sayesinde inanılmaz derecede güçlüdür.
- Yüksek Okuma Performansı: SQLite, veriyi doğrudan diskten (veya bellek önbelleğinden) okuduğu için ağ üzerinden haberleşen PostgreSQL veya MySQL'e göre çok daha hızlı okuma (read) yanıtları verir.
- WAL Modu: PocketBase, SQLite'ı WAL modunda çalıştırır. Bu mod, eşzamanlı (concurrent) okuma işlemlerinin yazma işlemlerini engellemesini önler. Saniyede binlerce isteği rahatlıkla karşılayabilir.
- Sıfır Ağ Gecikmesi: Veritabanı, uygulamanızla aynı süreç (process) içinde çalıştığı için ağ gecikmesi (network latency) sıfırdır.
Özetle: Eğer saniyede on binlerce yoğun yazma (write) işlemi yapan küresel ölçekte bir Uber veya Netflix klonu yazmıyorsanız; SaaS projelerinizin %95'i, mobil uygulamalarınız ve web siteleriniz için SQLite fazlasıyla yeterlidir.
Karmaşık Bulut Faturalarına Elveda: Tek VPS Devri
Modern bulut sağlayıcılarında (AWS, GCP, Azure) küçük bir projeyi ayağa kaldırmak bile ciddi maliyetler doğurur: * Uygulama sunucusu (EC2) * Yönetilen veritabanı (RDS) * Dosya depolama (S3) * Yük dengeleyici (Load Balancer) * SSL sertifikası ve ağ trafiği ücretleri...
Ay sonunda karşınıza çıkan 100-200 dolarlık faturalar, henüz gelir elde etmeyen projeler için can sıkıcıdır.
PocketBase ile Hetzner, DigitalOcean veya Linode üzerinden alacağınız 5 dolarlık bir VPS (Sanal Sunucu) üzerinde tüm projenizi barındırabilirsiniz. Tek yapmanız gereken PocketBase dosyasını sunucuya atmak, arkasına ücretsiz bir Let's Encrypt SSL sertifikası (veya Caddy/Nginx) kurmaktır. SQLite veritabanı da aynı dosya içinde olduğundan, ek bir veritabanı sunucusu ücreti ödemezsiniz.
PocketBase ile Geliştirmeye Başlamak: Ne Kadar Kolay?
PocketBase ile çalışmaya başlamak kelimenin tam anlamıyla birkaç dakikanızı alır.
1. Sunucuyu Başlatın
PocketBase web sitesinden işletim sisteminize uygun dosyayı indirin ve terminalde şu komutla çalıştırın:
./pocketbase serve
Artık backend'iniz http://127.0.0.1:8090 adresinde çalışıyor! Tarayıcınızdan /_ / yoluna giderek admin panelinize ulaşabilir ve ilk tablonuzu oluşturabilirsiniz.
2. Frontend Entegrasyonu (JavaScript SDK)
PocketBase'in resmi JavaScript/TypeScript SDK'sını projenize dahil edin:
npm install pocketbase
Ardından, veritabanından veri çekmek veya gerçek zamanlı dinlemek işte bu kadar kolay:
import PocketBase from 'pocketbase';
const pb = new PocketBase('http://127.0.0.1:8090');
// 1. Kullanıcı Girişi
const authData = await pb.collection('users').authWithPassword('[email protected]', 'sifre123');
// 2. Veri Çekme (Sayfalı)
const records = await pb.collection('posts').getList(1, 50, {
filter: 'created > "2023-01-01 00:00:00"',
});
// 3. Gerçek Zamanlı Dinleme (Real-time Subscription)
pb.collection('posts').subscribe('*', function (e) {
console.log('Yeni gönderi veya değişiklik:', e.record);
});
PocketBase Hangi Senaryolar İçin Biçilmiş Kaftandır?
PocketBase harika bir araç olsa da her derde deva bir gümüş kurşun değildir. Hangi durumlarda kullanmanız gerektiğini bilmek önemlidir:
En Uygun Olduğu Senaryolar:
- MVP (Minimum Viable Product): Fikirlerinizi hızlıca test etmek ve pazara sunmak istediğinizde.
- SaaS Projeleri: Tek bir geliştirici (Indie Hacker) olarak hızlıca gelir getiren projeler üretmek istediğinizde.
- Mobil Uygulama Backend'i: Flutter veya React Native uygulamalarınız için hızlı ve gerçek zamanlı bir veri tabanına ihtiyaç duyduğunuzda (Resmi Dart/Flutter SDK'sı mevcuttur).
- İç Araçlar (Internal Tools): Şirket içi yönetim panelleri ve veri takip sistemleri.
Uygun Olmadığı Senaryolar:
- Çoklu Bölge (Multi-region) Yazma İhtiyacı: SQLite tek bir dosya olduğu için, dünya genelinde birden fazla sunucudan aynı anda yoğun yazma işlemi yapılması gereken durumlarda senkronizasyon zorlaşır.
- Devasa Veri Analitiği: Milyarlarca satırlık veri analizi ve büyük veri (Big Data) işleme senaryoları.
Sonuç: Sadelik En Yüksek Gelişmişlik Derecesidir
PocketBase, geliştirici dünyasına çok önemli bir gerçeği hatırlatıyor: Her projenin bir kurumsal dev altyapısına ihtiyacı yoktur.
Go’nun hızı ve SQLite’ın pratikliği birleştiğinde, tek bir VPS üzerinde binlerce aktif kullanıcıya hizmet verebilecek güçte, stabil ve bakımı son derece kolay bir altyapı kurmak mümkündür. Aşırı mühendislikten (over-engineering) kaçınmak, geliştirme hızınızı artırmak ve sunucu maliyetlerinizi minimumda tutmak istiyorsanız, bir sonraki projenizde PocketBase’e kesinlikle bir şans vermelisiniz.
Siz de projelerinizde PocketBase veya benzeri tek dosyalık backend çözümlerini kullandınız mı? SQLite tabanlı bir altyapı hakkındaki düşünceleriniz neler? Yorumlarda bizimle paylaşın!