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.
çoklu firma çoklu database
Detaylı bir konu. O yüzden şunu incelemekle başlayın:
https://tenancy.dev/
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?
- 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.