design

Laravel’de Multi-Tenant Uygulama Geliştirme

March 25, 2025

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’ı domainsubdomain 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) 📦


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 🚀

1 + 4 =