{"id":37013827,"url":"https://github.com/aristidesneto/multitenancy","last_synced_at":"2026-01-14T01:22:36.260Z","repository":{"id":62487002,"uuid":"326457464","full_name":"aristidesneto/multitenancy","owner":"aristidesneto","description":"Em desenvolvimento","archived":false,"fork":false,"pushed_at":"2021-03-11T02:04:13.000Z","size":290,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-21T08:16:59.535Z","etag":null,"topics":["laravel","multidatabase","multitenancy"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aristidesneto.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-03T17:02:01.000Z","updated_at":"2021-08-31T09:43:33.000Z","dependencies_parsed_at":"2022-11-02T10:02:42.759Z","dependency_job_id":null,"html_url":"https://github.com/aristidesneto/multitenancy","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/aristidesneto/multitenancy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aristidesneto%2Fmultitenancy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aristidesneto%2Fmultitenancy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aristidesneto%2Fmultitenancy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aristidesneto%2Fmultitenancy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aristidesneto","download_url":"https://codeload.github.com/aristidesneto/multitenancy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aristidesneto%2Fmultitenancy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28407687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T00:40:43.272Z","status":"ssl_error","status_checked_at":"2026-01-14T00:40:42.636Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["laravel","multidatabase","multitenancy"],"created_at":"2026-01-14T01:22:33.993Z","updated_at":"2026-01-14T01:22:36.244Z","avatar_url":"https://github.com/aristidesneto.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multitenancy\n\nPainel de gerenciamento de sistemas multitenancy e multidatabase. Faça todo o gerenciamento desde a criação do banco de dados e monitoramento.\n\nEsse pacote foi desenvolvido para ser um starter kit de um projeto Multitenancy e Multidatabase. Não utilize em um projeto em andamento.\n\n\u003e Pacote em desenvolvimento.\n\n## Requisitos\n\nPara que funcione corretamente, será necessário configurar 3 domínios para nossa aplicação, são eles:\n\n1. master.tenancy.test (dmonínio utilizado para gerenciar os tenants)\n2. client1.tenancy.test\n3. client2.tenancy.test\n\nPara isso, edite seu arquivo `hosts` localizado em `/etc/hosts` no caso do Linux. Adicione as seguintes linhas no final do arquivo:\n\n```\n127.0.0.1   master.tenancy.test\n127.0.0.1   client1.tenancy.test\n127.0.0.1   client2.tenancy.test\n```\n\nAgora quando você acessar pelo seu navegador a url `master.tenancy.test` será redirecionado para a porta 80 da sua máquina local, onde estará executando sua aplicação Laravel.\n\n## Instalando o Laravel\n\nInstale o laravel.\n\n```bash\ncomposer create-project laravel/laravel multitenancy\n```\n\nO Laravel 8 vem com o pacote Laravel Sail já instalado, sendo necessário apenas executar um comando para publicar o `docker-compose.yml` na raiz do projeto. Execute o seguinte comando para isso:\n\n```\nphp artisan sail:install\n\naristides ~/Projetos/multitenancy $ php artisan sail:install\n\n Which services would you like to install? [mysql]:\n  [0] mysql\n  [1] pgsql\n  [2] redis\n  [3] selenium\n  [4] mailhog\n  [5] meilisearch\n\u003e 0\n```\n\nEscolha o banco de Dados Mysql [0].\n\nSerá gerado o arquivo `docker-compose.yml` na raiz do projeto, substitue o mesmo pelo conteúdo abaixo:\n\n```yml\n# For more information: https://laravel.com/docs/sail\nversion: '3'\nservices:\n  app:\n    build:\n      context: ./vendor/laravel/sail/runtimes/8.0\n      dockerfile: Dockerfile\n      args:\n        WWWGROUP: '1000'\n    image: sail-8.0/app\n    ports:\n      - '${APP_PORT:-80}:80'\n    environment:\n      WWWUSER: '1000'\n      LARAVEL_SAIL: 1\n    volumes:\n      - '.:/var/www/html'\n    networks:\n      - tenancy\n    depends_on:\n      - mysql\n\n  mysql:\n    image: 'mysql:5.7'\n    ports:\n      - '${FORWARD_DB_PORT:-3307}:3306'\n    environment:\n      MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n      MYSQL_DATABASE: '${DB_DATABASE}'\n      MYSQL_USER: '${DB_USERNAME}'\n      MYSQL_PASSWORD: '${DB_PASSWORD}'\n    volumes:\n      - 'tenancydb:/var/lib/mysql'\n    networks:\n      - tenancy\n\nnetworks:\n  tenancy:\n    driver: bridge\n\nvolumes:\n  tenancydb:\n    driver: local\n```\n\nAltere no arquivo `.env` a conexão com o banco de dados e deixe da seguinte forma.\n\n```yml\nDB_CONNECTION=mysql\nDB_HOST=mysql\nDB_PORT=3306\nDB_DATABASE=laravel\nDB_USERNAME=root\nDB_PASSWORD=root\n```\n\nExecute o docker compose e aguarde a criação dos containers:\n\n```\n./vendor/bin/sail up -d\n```\n\nAcesse seu container da aplicação:\n\n```\ndocker-compose exec app bash\nsu - sail \ncd /var/www/html\n```\n\n## Instalando o pacote Multitenancy\n\nDentro do container app, instale o pacote Multitenancy via composer:\n\n```bash\ncomposer require aristidesneto/multitenancy\n```\n\n### Configuração Tenant\n\nÉ necessário criar uma nova conexão que será utilizada pelos tenants. Para isso abra o arquivo `config/database.php` e copie a conexão abaixo e cole logo apó a conexão atual `mysql`.\n\n```php\n  'tenant' =\u003e [\n      'driver' =\u003e 'mysql',\n      'url' =\u003e env('DATABASE_URL'),\n      'host' =\u003e env('DB_HOST', '127.0.0.1'),\n      'port' =\u003e env('DB_PORT', '3306'),\n      'database' =\u003e env('DB_DATABASE', 'forge'),\n      'username' =\u003e env('DB_USERNAME', 'forge'),\n      'password' =\u003e env('DB_PASSWORD', ''),\n      'unix_socket' =\u003e env('DB_SOCKET', ''),\n      'charset' =\u003e 'utf8mb4',\n      'collation' =\u003e 'utf8mb4_unicode_ci',\n      'prefix' =\u003e '',\n      'prefix_indexes' =\u003e true,\n      'strict' =\u003e true,\n      'engine' =\u003e null,\n      'options' =\u003e extension_loaded('pdo_mysql') ? array_filter([\n          PDO::MYSQL_ATTR_SSL_CA =\u003e env('MYSQL_ATTR_SSL_CA'),\n      ]) : [],\n  ],\n```\n\n### Comando Install\n\nPara finalizar a instalação é necessário executar o comando:\n\n```bash\nphp artisan multitenancy:install\n```\n\n### Requisitos do pacote\n\nUm dos requisitos do pacote é o Laravel Breeze. Ao executar o comando acima será instalado o Laravel Breeze e todo seus arquivos referentes a autenticação.\n\n\n## Uso\n\nApós a instalação finalizar com sucesso acesse `http://master.tenancy.test` e clique no menu para fazer login. Utilize os dados de acesso abaixo:\n\n```bash\nE-mail: admin@admin.com\nSenha: password\n```\n\n### Configurações para antes de cadastrar um Tenant\n\nQuando um Tenant é cadastrado, suas informações como dados de login ao banco de dados é armazenado na tabela `tenants` da aplicação, nesse exemplo no banco `laravel`.\n\nPor segurança, a senha dos usuários Tenants do banco Mysql pode ser salva no arquivo `.env` seguindo a nomeclatura:\n\n```\nCLIENT1_PASSWORD=password_client1\nCLIENT2_PASSWORD=password_client2\n```\n\nOnde o `CLIENT1` é o nome do banco de dados que será utilizado para o Tenant, em seguida use `_PASSWORD`.\n\nCaso essas informações não seja informada no `.env`, o sistema irá buscar na tabela `tenants` os dados de login e senha do banco referente ao Tenant.\n\n## Cadastrando Tenants\n\nApós o login, você poderá gerenciar os tenants. É possível cadastrar e se necessário zerar o banco de dados do tenant, opção essa que somente enquanto estiver em desenvolvimento.\n\nTela de Gerenciamento de Tenants:\n\n![Listagens de Tenants](./docs/imgs/listagens-tenants.png)\n\nTela de Cadastro de Tenant:\n\n![Listagens de Tenants](./docs/imgs/cadastro-tenants.png)\n\n### Como cadastrar um Tenant\n\nVeja como você deverá cadastrar um Tenant:\n\n1. Subdomínio: Informe uma url válida de subdomínio, para ambiente de desenvolvimento crie entrada para o seu arquivo hosts.\n2. Nome do Tenant: Um nome de identificação do tenant, usado apenas para uso de gerenciamento.\n3. Hostname: Informe o endereço IP do servidor de banco de dados ou se preferir insira o domínio do mesmo. Caso esteja executando o serviço em Docker, informe o nome do container criado.\n4. Database: Informe o nome do banco de dados. O mesmo será criado caso não exista. \n5. Usuário: Informe o usuário do banco de dados, esse usuário será criado se a opção de criar database estiver marcado.\n6. Senha: Por motivos de segurança, armazena a senha no arquivo `.env` como explicado mais acima. Caso queira salvar no banco de dados, basta informar a senha (será salva em texto puro).\n\nApós cadastrar um tenant, na listagem clique sobre a URL disponível. Irá abrir uma nova aba com a URL criada, utilize os dados abaixo para realizar login:\n\n```bash\nE-mail: admin@tenant.com\nSenha: password\n```\n\n\n## Teste\n\n```bash\ncomposer test\n```\n\n\n## Contribuição\n\nPor favor veja CONTRIBUINDO para mais detalhes.\n\n\n## Créditos\n\n- [Arisides Neto](https://github.com/aristidesneto)\n- [Todos](../../contributors)\n\n## Licença\n\n\nMIT License (MIT). Por favor veja Licença para mais informações.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faristidesneto%2Fmultitenancy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faristidesneto%2Fmultitenancy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faristidesneto%2Fmultitenancy/lists"}