Bir uygulamayı birden fazla müşteri (tenant) için tek bir kod tabanıyla yönetmek mi istiyorsunuz? Laravel ile multi-tenant mimariyi nasıl kurabileceğinizi adım adım anlatıyoruz!
Multi-Tenancy Nedir? 🤔
Multi-tenancy, tek bir uygulamanın birden fazla kişi/organizasyon tarafından izole şekilde kullanılmasıdır.
- Örnek Kullanımlar:
- SaaS uygulamaları (Örn: Mailchimp, Shopify)
- Farklı şubeler için aynı sistem
- Müşteri bazlı özelleştirilebilir platformlar
Laravel’de Multi-Tenancy Yaklaşımları 🔍
1. Database-Per-Tenant (Her Tenant İçin Ayrı DB) 🗃️
- Avantaj: Tam veri izolasyonu.
- Dezavantaj: Yönetim maliyeti artar.
2. Shared Database, Separate Schemas (Aynı DB, Farklı Şemalar) 🏗️
- Avantaj: Tek bir veritabanı sunucusu kullanılır.
- Dezavantaj: Karmaşık migration süreçleri.
3. Shared Database, Shared Schemas (Tek DB, Aynı Tablolar) ⚠️
- Avantaj: Basit kurulum.
- Dezavantaj: Tenant verileri karışabilir (dikkatli olunmalı).
Laravel’de Multi-Tenant Nasıl Yapılır? 🛠️
Adım 1: Tenant Bilgisini Algılama
Tenant’ı domain, subdomain veya kullanıcı girişine göre belirleyebilirsiniz.
// Middleware ile tenant'ı tespit etme
public function handle($request, Closure $next)
{
$tenant = Tenant::where('domain', $request->getHost())->first();
if (!$tenant) {
abort(404);
}
// Tenant'ı global bir helper'a atayabiliriz
app()->instance('currentTenant', $tenant);
return $next($request);
}
Adım 2: Tenant’a Özel Database Bağlantısı
config/database.php’de dinamik bağlantı oluşturabilirsiniz:
'connections' => [
'tenant' => [
'driver' => 'mysql',
'url' => null,
'host' => env('DB_TENANT_HOST', '127.0.0.1'),
'port' => env('DB_TENANT_PORT', '3306'),
'database' => 'tenant_' . app('currentTenant')->id, // Dinamik DB adı
'username' => env('DB_TENANT_USERNAME', 'root'),
'password' => env('DB_TENANT_PASSWORD', ''),
],
];
Adım 3: Tenant Switch Mekanizması
Her tenant için farklı storage, cache ve config ayarları yapılabilir.
// Tenant'a geçiş yapma
public function switchTenant(Tenant $tenant)
{
config(['database.default' => 'tenant']);
Config::set('filesystems.disks.tenant.root', storage_path('app/tenants/' . $tenant->id));
// Cache prefix'i tenant'a özel yap
config(['cache.prefix' => 'tenant_' . $tenant->id]);
}
Hazır Paketler Kullanmak (Bonus) 📦
- stancl/tenancy → Otomatik DB ayırma, storage yönetimi.
- spatie/laravel-multitenancy → Kolay tenant yönetimi.
Multi-Tenant Laravel’de Nasıl Kullanılır? 🎯
Multi-tenant mimari, SaaS projeleri için mükemmel bir çözüm! Laravel’in esnek yapısı sayesinde farklı yaklaşımlarla uygulanabilir.
Siz hangi yöntemi tercih ediyorsunuz? Yorumlarda deneyimlerinizi paylaşın! 👇💬
Bir sonraki yazımız: 🚀 [Laravel’de API Documentation: Swagger ile Otomatik Dokümantasyon] – API’nizi kolayca dokümante edin!**
#Laravel #MultiTenancy #SaaS #WebDevelopment #Backend 🚀
+(36).png&w=320&q=50)


