aristidesneto / multitenancy
多租户多数据库管理器
Requires
- php: ^7.4|^8.0
- illuminate/contracts: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.3
README
多租户和多云数据库管理面板。从数据库创建和监控进行所有管理。
本包旨在作为多租户和多云数据库项目的入门套件。不要在正在进行的项目中使用。
正在开发中的包。
要求
为了正常运行,将需要为我们的应用程序配置3个域名,它们是
- master.tenancy.test (用于管理租户的域名)
- client1.tenancy.test
- 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
表中查找与租户相关的数据库的登录和密码数据。
注册租户
登录后,您将能够管理租户。您可以注册租户,如果需要的话,还可以重置租户的数据库,这项选项仅限开发时使用。
租户管理界面
租户注册界面
如何注册租户
请查看如何注册租户
- 子域名:请输入有效的子域名URL,对于开发环境,创建hosts文件中的条目。
- 租户名称:租户的标识名称,仅用于管理用途。
- 主机名:请输入数据库服务器的IP地址或域名。如果正在Docker中运行服务,请输入创建的容器名称。
- 数据库:请输入数据库名称。如果不存在,则会创建该数据库。
- 用户:请输入数据库用户名。如果选中创建数据库选项,则会创建此用户。
- 密码:出于安全考虑,请将密码存储在
.env
文件中,如上文所述。如果想在数据库中保存密码,只需输入密码(将直接以纯文本形式保存)。
注册租户后,在列表中点击可用的URL。将打开一个新标签页,显示创建的URL,请使用以下数据登录。
E-mail: admin@tenant.com Senha: password
测试
composer test
贡献
请参阅“CONTRIBUINDO”获取更多详细信息。
致谢
许可
MIT许可证(MIT)。请参阅“许可”获取更多信息。