Multi Tenancy Dúvida
Bom dia, Carlos!
Tenho uma aplicação em Laravel, este sistema foi desenvolvido em 2018 e venho atualizando ela desde então, atualmente já atualizei para a versão 8.40 do Laravel e entrei em contato com você pelo instagram.
Hoje, minha dúvida é a seguinte, qual seria a melhor abordagem para transformar esta minha app em multi tenancy, levando em consideração de já ser uma aplicação desenvolvida.
Seguindo os cursos aqui, qual seria o melhor pra eu aplicar, pois preciso atualizar urgente para multi tenancy.
Olá, Antonio!
Tudo bem?
Para que eu consiga te ajudar a identificar qual o melhor modelo vai se aplicar ao seu sistema, preciso de mais detalhes, como quais funcionalidades o sistema possui, tipos de clientes e etc.
De qualquer forma vou resumir aqui:
Tem um sistema com clientes desproporcionais? Tipo Magalu (gigante) e seu Zé? Vai de multi-database, porque a quantidade de tráfego da Magalu é desproporcional ao seu Zé.
O seu sistema vai ter milhares de clientes, mas, esses clientes não terão uma disparidade tão grande de registros e utilização? Vai de single database.
Seus clientes do projeto se encaixa nos dois modelos acima?
Combina os dois modelos, multi e single database.
---------
Enfim, me resuma um pouco dos seus clientes e modelo de negócio que indico um caminho mais preciso, e mais te digo os passos iniciais para conseguir implementar o modelo adequado.
Fala Carlos,
Então meu sistema é um ERP que entrega uma plataforma de Ecommerce ou Delivery online para meus clientes.
Já estou implementando aqui pelo curso o singledatabase, justamente pq eu quero trabalhar com subdomínio.
Mas ficou claro esta questão da proporção do meu cliente, acredito que ao finalizar aqui o curso eu tbm posso mudar pra ser multidatabase sem muito problema né?
Mas os clientes são de médio e pequeno porte, acho que single vai atender.
Sim, creio que o modelo single database vai te atender.
Sim, o multi-database você pode implementar depois.
----
Está conseguindo incluir as novas colunas de tenant_id nas tabelas através de novos arquivos de migrations?
(https://blog.especializati.com.br/alterar-tabela-migrations-laravel-sem-perder-dados/)
Já consegui incluir o tenant id em todas as migrações, não me preocupei com os dados por que fiz um fork do projeto, agora já estou na parte pra lidar com o tenant principal e quero automatizar ao máximo o processo de contratação do sistema.
Você conhece alguma ferramenta boa de onboarding?
Reparei agora que ao tentar criar um middleware ou rodar qlq comando do artisan estou tomando um erro aqui no managertenant:
php artisan make:middleware Tenant\\CheckSubDomainMainMiddleware
ErrorException
Trying to get property 'id' of non-object
at app/Tenant/ManageTenant.php:25
21▕
22▕ public function identify()
23▕ {
24▕ $tenant = $this->tenant();
➜ 25▕ return $tenant->id;
26▕ }
27▕ }
1 app/Tenant/ManageTenant.php:25
Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Trying to get property 'id' of non-object", "/Users/antonioricardo/Desktop/Dev/pedlix_app/app/Tenant/ManageTenant.php", [])
2 app/Tenant/Scopes/TenantScope.php:15
App\Tenant\ManageTenant::identify()
Ele vai tentar acessar o escopo?
Uma outra dúvida que tive é, como poderia fazer pra, ter a aplicação central ou seja landing page, criação de tenant ficar sem subdomínio e os tenants usarem subdomínio.
Ex:
Aplicação central rodar no https://meusistema.com.br
tenant1.meusistema.com.br
tenant2.meusistema.com.br
Aqui na validação no middleware você fez como o central utilizando subdomínio né, eu até poderia fazer pro www.
Mas se tivesse outra alternativa.
Olá, Antonio!
Tem o projeto no GitHub? Preciso ver o código com detalhes para conseguir te ajudar a identificar onde está errando.
Mas, para evitar esse erro no método identify pode verificar se está rodando algum comando em CLI:
if ($this->app->runningInConsole()) return;
------
Sobre a sua última pergunta, o ideial seria controlar no middleware mesmo, e usar o www. para identificar a home (landing).
Tenho no Github mas está privado.
Você dá alguma consultoria?
Tinha mais algumas coisas que eu precisava de uma luz aqui que acho que em uma consultoria rápida eu conseguiria alinhar.
Consultoria mesmo é complicado, por conta do tempo mesmo.
Faz o seguinte amigo, envia os detalhes da sua dúvida (+ número do suporte 1847), se tiver dentro do escopo dos cursos te ajudo sem custos: [email protected]
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!