Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Bir çok firma var ve sadece database isimleri farklı diğer herşey ortak. Böyle bir durumda kullanıcı login olduğunda kendi database indeki bilgilere erişsin istiyorum. Böyle bir senaryo mümkün mü? Mümkünse nasıl bir yol izlemeliyim.

  • dgner Genel olarak doğru.

    Öncelikle alt alan adlarının dinamik oluşmasını sağlamanız lazım. Bunun için sunucuda DNS ayarlarında tüm subdomain'ler için bir wildcard A kaydı eklemeniz lazım:

    +----------------+-------+----+------+---------------+
    |     Domain     |  TTL  |    | Type |      IP       |
    +================+=======+====+======+===============+
    | *.example.com. | 14400 | IN | A    | 78.224.75.112 |
    +----------------+-------+----+------+---------------+

    Böylece tüm subdomainler ana domainin gittiği yere, yeni public'e istek atmış olacak. Laravel'de bu alt alan adlarını (üstteki gibi A kaydını eklediğiniz taktirde) rotada yakalayabiliyorsunuz:

    Route::domain('{restaurant}.example.com')->group(function () {
        // Burada artık kullanabileceğiniz bir $restaurant değişkeniniz var. Örneğin 
        // res1.example.com ile gelinirse $restaurant değeri res1 olacak.
    });

    Diğer bir yol ise URL segment kullanarak tenantları ayırmak. Mesela Paraşüt o şekilde çalışıyor. Aşağıdaki linklerde 123456 şu an işlem yapan firmanın id'si:
    https://uygulama.parasut.com/123456/
    https://uygulama.parasut.com/123456/satislar
    https://uygulama.parasut.com/123456/kasa-ve-bankalar/654321

    Geri kalanı için artık Laravel biliyor olmanız lazım. Verdiğim linkin dokümanlarını ve kaynak kodunu incelemeniz lazım:
    https://tenancy.dev/docs/tenancy/1.x
    https://github.com/tenancy/tenancy

Bunu inceleyeceğim teşekkürler, Yapmak istediğimi örneklendirmek gerekirse. Örneğin bir restoran uygulaması. Bir tane uygulama olacak herkes için ancak veri tabanları farklı olacak.
Ben şöyle düşündüm. Bir tane master_db ve ve herbir restoran için db1, db2, db3 ... gibi
alan adlarıda res1.example.com, res2.example.com şeklinde buradan res1 ve res2 yi çekip master_db üzerinden nasıl yönlendirebilirim. Ayrıca bu düşündüğüm doğru bir yol olur mu?

    • mgsmus

      Seviye 1389
    • Düzenlendi
    • En İyi Yanıtdgner tarafından

    dgner Genel olarak doğru.

    Öncelikle alt alan adlarının dinamik oluşmasını sağlamanız lazım. Bunun için sunucuda DNS ayarlarında tüm subdomain'ler için bir wildcard A kaydı eklemeniz lazım:

    +----------------+-------+----+------+---------------+
    |     Domain     |  TTL  |    | Type |      IP       |
    +================+=======+====+======+===============+
    | *.example.com. | 14400 | IN | A    | 78.224.75.112 |
    +----------------+-------+----+------+---------------+

    Böylece tüm subdomainler ana domainin gittiği yere, yeni public'e istek atmış olacak. Laravel'de bu alt alan adlarını (üstteki gibi A kaydını eklediğiniz taktirde) rotada yakalayabiliyorsunuz:

    Route::domain('{restaurant}.example.com')->group(function () {
        // Burada artık kullanabileceğiniz bir $restaurant değişkeniniz var. Örneğin 
        // res1.example.com ile gelinirse $restaurant değeri res1 olacak.
    });

    Diğer bir yol ise URL segment kullanarak tenantları ayırmak. Mesela Paraşüt o şekilde çalışıyor. Aşağıdaki linklerde 123456 şu an işlem yapan firmanın id'si:
    https://uygulama.parasut.com/123456/
    https://uygulama.parasut.com/123456/satislar
    https://uygulama.parasut.com/123456/kasa-ve-bankalar/654321

    Geri kalanı için artık Laravel biliyor olmanız lazım. Verdiğim linkin dokümanlarını ve kaynak kodunu incelemeniz lazım:
    https://tenancy.dev/docs/tenancy/1.x
    https://github.com/tenancy/tenancy

    multi-tenancy methodları şu an için ikiye ayrılmaktadır mimari seni nereye yönlendirecekse ona göre ilerlemen lazım tenancy bölgesini veritabanında bir sütun ile tutmak istersen bu dbless tenancy olur, database per tenant ise tüm verileri ayırmak için bu işe yarıyor tenancy kendi başına yapabileceğin bir şey değil direk olarak paketlerle bunu çözmen gerekecek.
    https://github.com/romegadigital/Multitenancy dbless tenancy paketleri arasında hiç sıkıntı yaşamadan kullanıp 3-5 saas proje çıkarmamı zamanında sağlayan bir multi-tenancy projesi ama https://tenancy.samuelstancl.me/ bu zımbırtı ise db per tenant olayında bildiğim kadarıyla başarılı hyn'ın tenancy paketleri zamanında çok başımı yaktı o yüzden kesinlikle önermiyorum.

    Böyle bir şeye ihtiyacım olmuştu, sadece login olurken main.db ile login işlemini gerçekleştirip eğer login başarılı olduysa Db:connection() ile bağlantılarını main.db de ki kayıtlı veritabanı adı ile değiştiriyordum.
    Burada daha önce böyle bir konu açmıştım işine yarayabilir.