aristidesneto/multitenancy

多租户多数据库管理器

dev-main 2021-03-02 01:29 UTC

This package is auto-updated.

Last update: 2024-09-11 18:25:57 UTC


README

多租户和多云数据库管理面板。从数据库创建和监控进行所有管理。

本包旨在作为多租户和多云数据库项目的入门套件。不要在正在进行的项目中使用。

正在开发中的包。

要求

为了正常运行,将需要为我们的应用程序配置3个域名,它们是

  1. master.tenancy.test (用于管理租户的域名)
  2. client1.tenancy.test
  3. client2.tenancy.test

为此,编辑Linux中位于/etc/hosts的本地hosts文件。在文件末尾添加以下行

127.0.0.1   master.tenancy.test
127.0.0.1   client1.tenancy.test
127.0.0.1   client2.tenancy.test

现在,当您通过浏览器访问master.tenancy.test时,将被重定向到您的本地机器的80端口,您的Laravel应用程序将在此处运行。

安装Laravel

安装Laravel。

composer create-project laravel/laravel multitenancy

Laravel 8自带安装了Laravel Sail,因此只需执行一个命令即可在项目根目录中发布docker-compose.yml。执行以下命令进行操作

php artisan sail:install

aristides ~/Projetos/multitenancy $ php artisan sail:install

 Which services would you like to install? [mysql]:
  [0] mysql
  [1] pgsql
  [2] redis
  [3] selenium
  [4] mailhog
  [5] meilisearch
> 0

选择数据库Mysql [0]。

将在项目根目录生成docker-compose.yml文件,将其替换为以下内容

# For more information: https://laravel.net.cn/docs/sail
version: '3'
services:
  app:
    build:
      context: ./vendor/laravel/sail/runtimes/8.0
      dockerfile: Dockerfile
      args:
        WWWGROUP: '1000'
    image: sail-8.0/app
    ports:
      - '${APP_PORT:-80}:80'
    environment:
      WWWUSER: '1000'
      LARAVEL_SAIL: 1
    volumes:
      - '.:/var/www/html'
    networks:
      - tenancy
    depends_on:
      - mysql

  mysql:
    image: 'mysql:5.7'
    ports:
      - '${FORWARD_DB_PORT:-3307}:3306'
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - 'tenancydb:/var/lib/mysql'
    networks:
      - tenancy

networks:
  tenancy:
    driver: bridge

volumes:
  tenancydb:
    driver: local

.env文件中更改数据库连接,并按以下方式设置。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

执行docker compose并等待容器创建

./vendor/bin/sail up -d

访问您的应用程序容器

docker-compose exec app bash
su - sail 
cd /var/www/html

安装多租户包

在容器app内,通过composer安装多租户包

composer require aristidesneto/multitenancy

租户配置

需要创建一个新的连接,该连接将被租户使用。为此,打开config/database.php文件,复制以下连接并粘贴到当前mysql连接之后。

  'tenant' => [
      'driver' => 'mysql',
      'url' => env('DATABASE_URL'),
      'host' => env('DB_HOST', '127.0.0.1'),
      'port' => env('DB_PORT', '3306'),
      'database' => env('DB_DATABASE', 'forge'),
      'username' => env('DB_USERNAME', 'forge'),
      'password' => env('DB_PASSWORD', ''),
      'unix_socket' => env('DB_SOCKET', ''),
      'charset' => 'utf8mb4',
      'collation' => 'utf8mb4_unicode_ci',
      'prefix' => '',
      'prefix_indexes' => true,
      'strict' => true,
      'engine' => null,
      'options' => extension_loaded('pdo_mysql') ? array_filter([
          PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
      ]) : [],
  ],

安装命令

为了完成安装,需要执行以下命令

php artisan multitenancy:install

包要求

包的一个要求是Laravel Breeze。执行上述命令将安装Laravel Breeze及其所有与身份验证相关的文件。

使用方法

安装成功完成后,请访问http://master.tenancy.test并点击菜单进行登录。请使用以下访问数据

E-mail: admin@admin.com
Senha: password

注册租户前的配置

当租户被注册时,其信息(如数据库登录信息)将存储在应用中的tenants表中,在这个例子中是在laravel数据库中。

出于安全考虑,Mysql数据库中租户用户的密码可以按照以下命名约定保存到.env文件中

CLIENT1_PASSWORD=password_client1
CLIENT2_PASSWORD=password_client2

其中CLIENT1是用于租户的数据库名称,然后使用_PASSWORD

如果这些信息未在.env中提供,系统将在tenants表中查找与租户相关的数据库的登录和密码数据。

注册租户

登录后,您将能够管理租户。您可以注册租户,如果需要的话,还可以重置租户的数据库,这项选项仅限开发时使用。

租户管理界面

Listagens de Tenants

租户注册界面

Listagens de Tenants

如何注册租户

请查看如何注册租户

  1. 子域名:请输入有效的子域名URL,对于开发环境,创建hosts文件中的条目。
  2. 租户名称:租户的标识名称,仅用于管理用途。
  3. 主机名:请输入数据库服务器的IP地址或域名。如果正在Docker中运行服务,请输入创建的容器名称。
  4. 数据库:请输入数据库名称。如果不存在,则会创建该数据库。
  5. 用户:请输入数据库用户名。如果选中创建数据库选项,则会创建此用户。
  6. 密码:出于安全考虑,请将密码存储在.env文件中,如上文所述。如果想在数据库中保存密码,只需输入密码(将直接以纯文本形式保存)。

注册租户后,在列表中点击可用的URL。将打开一个新标签页,显示创建的URL,请使用以下数据登录。

E-mail: admin@tenant.com
Senha: password

测试

composer test

贡献

请参阅“CONTRIBUINDO”获取更多详细信息。

致谢

许可

MIT许可证(MIT)。请参阅“许可”获取更多信息。