Artikel

Pengenalan Tenancy for Laravel: Apa & Mengapa Menggunakannya?

Diposting oleh I. B. Gd Pramana A. Putra pada 03 Mar 23, diperbarui pada 03 Mar 23

Multi Tenancy in Laravel

Laravel adalah kerangka kerja aplikasi web PHP populer yang banyak digunakan untuk membangun aplikasi web berskala kecil, sedang hingga besar. Namun, ketika waktunya tiba untuk membangun aplikasi multi-tenant, dengan Laravel akan sedikit menantang. Di sinilah package Laravel for Tenancy berperan. Pada artikel ini, kami akan memperkenalkan Anda pada Tenancy for Laravel, apa itu, dan mengapa Anda harus menggunakannya.

Apa itu Tenancy for Laravel?

Tenancy for Laravel adalah paket yang memungkinkan Anda membuat aplikasi Laravel multi-penyewa. Dengan Tenancy, Anda dapat membuat satu aplikasi Laravel yang dapat melayani beberapa penyewa, masing-masing dengan skema database, data, dan konfigurasinya sendiri. Tenancy mencapai ini dengan mencegat permintaan HTTP yang masuk dan secara dinamis mengalihkan koneksi database dan konfigurasi lain berdasarkan penyewa.

Cara kerja tenancy adalah mencegat permintaan HTTP yang masuk dan secara dinamis mengalihkan permintaan kepada koneksi database dan konfigurasi berdasarkan tenant yang dituju.

Contohnya, Anda ingin memiliki website multi-tenancy berupa LMS beralamat di aptreelms.com. Ketika anda mengunjungi pram.aptreelms.com, maka anda sedang menggunakan Aptree LMS yang dimiliki oleh Pram, dimana aplikasi tersebut memiliki database dan konfigurasinya tersendiri, begitu juga tenant lainnya seperti fachtur.aptreelms.com.

Mengapa Menggunakan Tenancy for Laravel?

Mempermudah Pengembangan

Dengan Tenancy, Anda dapat membuat basis kode tunggal untuk aplikasi Laravel multi-penyewa Anda. Ini berarti Anda dapat menggunakan kembali kode yang sama untuk semua penyewa, dan hanya konfigurasi dan data yang akan berbeda. Ini membuat proses pengembangan lebih sederhana dan lebih efisien.

Reduced Costs

Membuat aplikasi Laravel terpisah untuk setiap tenant atau klien bisa lumayan mahal dan memakan waktu. Dengan Tenancy, Anda dapat mengurangi biaya dan waktu yang dihabiskan untuk pengembangan dengan membuat basis kode tunggal dan menggunakan kembali kode yang sama untuk semua tenant.

Kontrol Lebih Mudah

Tenancy memungkinkan Anda untuk mengelola semua tenant Anda dari satu dasbor. Anda dapat dengan mudah membuat, memperbarui, dan menghapus penyewa, serta mengelola konfigurasi dan data mereka.

Tentunya fitur dashbor ini harus anda buat terlebih dahulu sesuai dengan keperluan, namun tentunya, hal ini lebih mudah dibandingkan satu dashbor untuk satu tenant.

Peningkatan Efisiensi

Multi-tenancy dapat meningkatkan efisiensi dengan mengurangi upaya pengembangan dan pemeliharaan, dan dengan menyediakan instans aplikasi tunggal untuk beberapa penyewa. Ini mengurangi duplikasi upaya, yang mengarah pada pengembangan yang lebih cepat dan mengurangi waktu ke pasar.

Contoh Penggunaan Tenancy for Laravel

Untuk menggunakan Tenancy for Laravel pada proyek Anda, pertama-tama install package ini menggunakan Composer dengan menjalankan perintah berikut:

composer require tenancy/tenancy

Maka jalankan perintah tenancy:install:

php artisan tenancy:install

Kemudian perintah di atas akan membuatkan beberapa file, yakni file migrasi, file konfigurasi, file routing, dan file service provider.

Kemudian jalankan perintah berikut untuk memigrasi database.

php artisan migrate

Daftarkan service provider Tenancy for Laravel pada config/app.php. Dan pastikan posisinya sama seperti contoh kode di atas.

/*
 * Application Service Providers...
 */
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\TenancyServiceProvider::class, // <-- here

Buat sebuah model Laravel untuk Tenant

<?php

namespace App\Models;

use Stancl\Tenancy\Database\Models\Tenant as BaseTenant;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Concerns\HasDatabase;
use Stancl\Tenancy\Database\Concerns\HasDomains;

class Tenant extends BaseTenant implements TenantWithDatabase
{
    use HasDatabase, HasDomains;
}

Pisahkan routing antara website sentral dan website tenant dengan membuat perubahan pada file berikut app/Providers/RouteServiceProvider.php. Terlebih, kita akan membuat rute-rute pada website central hanya tersedia untuk domain sentral atau domain utama.

protected function mapWebRoutes()
{
    foreach ($this->centralDomains() as $domain) {
        Route::middleware('web')
            ->domain($domain)
            ->namespace($this->namespace)
            ->group(base_path('routes/web.php'));
    }
}

protected function mapApiRoutes()
{
    foreach ($this->centralDomains() as $domain) {
        Route::prefix('api')
            ->domain($domain)
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }
}

protected function centralDomains(): array
{
    return config('tenancy.central_domains');
}

Letakkan method-method berikut pada method booth(), gantikan $this->routes()

public function boot()
{
    $this->configureRateLimiting();

    $this->routes(function () {
        $this->mapApiRoutes();
        $this->mapWebRoutes();
    });
}

Atur domain sentral. Domain sentral adalah domain utama yang digunakan untuk website sentral (website utama). Buka config/tenancy.php dan tambahkan kode-kode berikut:

'central_domains' => [
    'saas.test', // Add the ones that you use. I use this one with Laravel Valet.
],

Pada file route tenant.php, harusnya seperti ini:

Route::middleware([
    'web',
    InitializeTenancyByDomain::class,
    PreventAccessFromCentralDomains::class,
])->group(function () {
    Route::get('/', function () {
        return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
    });
});

Route-route tersebut hanya akan dapat diakses pada website tenant (domain selain sentral) — middleware PreventAccessFromCentralDomains merupakan layer yang menerapkan kemampuan ini.

Sekarang Anda dapat menguji apakah website tenant dapat diakses dengan mengunjungi website tenant Anda. Tambahkan kode berikut ini pada tenant.php anda sebagai contoh uji-coba.

Route::get('/', function () {
    dd(\App\Models\User::all());
    return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
});

Kesimpulan

Secara keseluruhan, multi-tenancy dapat memberikan manfaat yang signifikan dibandingkan single-tenancy, terutama untuk aplikasi perangkat lunak yang perlu melayani banyak pelanggan dengan berbagai kebutuhan dan persyaratan. Namun, penting untuk mengevaluasi dengan cermat kebutuhan aplikasi Anda dan kebutuhan pelanggan Anda sebelum memutuskan mengadopsi arsitektur multi-tenancy.

Meskipun multi-tenancy dapat memberikan manfaat yang disebutkan, pendekatan ini juga dapat secara signifikan meningkatkan kompleksitas DevOps.

Lebih lengkapnya terkait Tenancy for Laravel: https://tenancyforlaravel.com/

References

Suka dengan artikel yang saya tulis ini? Traktir saya secangkir kopi susu yah! Saya merupakan Full-Stack Developer yang sangat senang berbagi pengetahuan sembari duduk di warung kopi dan menulis kode aplikasi Kodekativ.co dan berbagi artikel di platform ini:)

Dukung saya dengan · paypal · buymeacoffee · ko-fi · trakteer
Jawaban & Respon
    Belum ada komentar

Login dulu

Kamu harus login terlebih dahulu sebelum memberikan komentar pada pos ini.