Run multiple websites using the same Laravel installation while keeping tenant specific data separated for fully independent multi-domain setups.
Branch: 5.x
Clone or download
Pull request Compare This branch is 7 commits ahead, 248 commits behind hyn:5.x.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
.github
assets
src
tests
.codecov.yml
.editorconfig
.gitattributes
.gitignore
changelog.md
ci.phpunit.xml
composer.json
license.md
phpunit.xml
readme.md

readme.md

Packagist build status codecov Packagist Codacy Badge Join our Discord server Mentioned in Awesome Laravel

The unobtrusive Laravel package that makes your app multi tenant. Serving multiple websites, each with one or more hostnames from the same codebase. But with clear separation of assets, database and the ability to override logic per tenant.

Suitable for marketing companies that like to re-use functionality for different clients or start-ups building the next software as a service.


Offers:

  • Integration with all Long Term Support versions of Laravel, which includes 5.5.
  • Event driven, extensible architecture.
  • Close integration into the webserver.
  • The ability to add tenant specific configs, code, routes etc.

Database separation methods:

  • One system database and separated tenant databases (default).
  • Table prefixed in the system database.
  • Or .. manually, the way you want, by listening to an event.

Complete documentation covers more than just the installation and configuration.

Requirements, recommended environment

  • Laravel 5.5.
  • Linux based OS preferred.
  • PHP 7.
  • Apache or Nginx.

Please read the full requirements in the documentation.

Installation

composer require hyn/multi-tenant

Automatic service registration

Using auto discovery, the tenancy package will be auto detected by Laravel automatically.

Manual service registration

In case you want to disable webserver integration or prefer manual integration, set the dont-discover in your application composer.json, like so:

{
    "extra": {
        "laravel": {
            "dont-discover": "hyn/multi-tenant"
        }
    }
}

If you disable auto discovery you are able to configure the providers by yourself.

Register the service provider in your config/app.php:

    'providers' => [
        // [..]
        // Hyn multi tenancy.
        Hyn\Tenancy\Providers\TenancyProvider::class,
        // Hyn multi tenancy webserver integration.
        Hyn\Tenancy\Providers\WebserverProvider::class,
    ],

Deploy configuration

First publish the configuration files so you can modify it to your needs:

php artisan vendor:publish --tag tenancy

Open the config/tenancy.php and config/webserver.php file and modify to your needs.

Make sure your system connection has been configured in database.php. In case you didn't override the system connection name the default connection is used.

Now run:

php artisan tenancy:install

This will run the required system database migrations.

Support development

Maintaining and extending this package is very time consuming. By becoming a patron at patreon.com/tenancy you act as an inspiration and it allows you to become more closely involved.

All of my patrons receive additional benefits!


License and contributing

This package is offered under the MIT license. In case you're interested at contributing, make sure to read the contributing guidelines.

Testing

Run tests using (not recommended when using MySQL database driver):

vendor/bin/phpunit

Please note this will create an enormous number of tenant databases. You can easily remove these by running the bash script to clean the local databases that follow the same naming convention as this package:

bash tests/scripts/clean-local-dbs.sh

Please be warned this will reset your current application completely, dropping tenant and system databases and removing the tenancy.json file inside the Laravel directory.

Changes

All changes are covered in the changelog.

Contact

Get in touch personally using;

Keep informed about news of this package by signing up for the newsletter.