Digital Ocean - Droplet com Multi Container
Olá.
O curso foi para deploy de uma aplicação laravel, porém, como podemos fazer o deploy de multi containers e gerenciar isso?
Tipo o curso de microsserviços: Micro-Gateway, Micro-Auth, Micro-Email, Micro-01 e Micro-02
E também necessitaria saber, como redirecionar HTTP para HTTPS os request para o Micro-Gateway?
- Instalo o Nginx no droplet e uso como proxy reverse?
- Como ficaria a questão de certificados SSL para HTTPS? Até aprendi a gerar via Lets Encrypt e tal.
Olá, Flavio!
Tudo bem?
Mesmo para múltiplos microservices não é recomendado acoplar vários em um droplet.
Precisa pensar um droplet como algo descartável, a qualquer momento ele pode deixar de existir (e sim, qualquer hora ele pode parar de funcionar sem aviso prévio rs), e vc precisa subir rapidamente outro e tudo continua como estava.
Para conseguir esse nível de liberdade, primeiro sua aplicação não pode armazenar estado, que é salvar arquivos e imagens dentro de storage/app/, mas sim armazenar em algum serviço, como na S3 da Amazon ou na Google Cloud Storage.
--
Ainda que pense em microservices, pense em cada um com sua própria infraestrutura, rodando de forma independente, se um cair, outros continuam up.
Se quer uma infra realmente mais alto nível, neste caso já recomendo ir para Kubernetes, aqui vc entra em outro nível, porque você pode gerenciar um cluster de maquinas, e rodar os seus microservices em cima deste cluster (com pods). Kubernetes vai te atender em todos os aspectos, o grande porém que é uma ferramenta complexa, e vai elevar os seus gastos.
Ok, entendi.
Mas o que você sugeri então para colocar no ar tipo o que aprendemos com os microsserviços: micro-gateway, micro-auth, micro-email, micro-01 e micro-02, em localhost dentro do docker eles se comunicam e tal.
Como levar isto para o ambiente de produção?
Eu subi na DO no mesmo droplet os microsserviços: micro-gateway e micro-auth.
Porém, com a configuração: MICRO_AUTH_URL=http://host.docker.internal:8090
Pego erro de resolução, ou seja, eles não se comunicam.
Acho que não só para mim mas para mais alunos não ficou claro como faremos estes deploys em produção, poderia ter uma ou mais aulas sobre isso para que assim tenhamos ideia de qual Cloud usar.
No caso temos estes microservices: micro-gateway, micro-auth, micro-email, micro-01 e micro-02
Eles não se comunicam via Docker, a comunicação foi feita através de http (que poderia ser feita tb com GRPC). Por isso temos um micro-gateway, ele direciona as requests de um micro para o outro, e quando precisam fazer uma comunicação assíncrona, usamos o RabbitMQ.
---
No curso usamos http://host.docker.internal:8090 porque estamos trabalhando local, em produção vai ser:
http://micro01.seudominio.com.br
Ficou mais claro amigo? Qualquer dúvida, pode me questionar, estou aqui para te ajudar.
Na verdade aprendemos a montar e configurar os microsserviços em containers, mas precisamos entender qual a melhor estratégia de se fazer o deployment desta arquitetura de microservices?
- Usar droplets para cada microsserviço?
- Ou um único droplet para controlar todos microsserviços com Nginx por exemplo?
- Ou partir diretamente para o deploy em Kubernetes?
- Qual custo/benefício?
- Como cuidar da segurança?
Na arquetetura atual hoje temos uma api gateway e mais 4 microsserviços (auth, micro-01, micro-02 e email), sendo que, alguns se comunicam via rabbitmq para disparos de mensagens, porém, no projeto que estou desenvolvendo eu tenho mais microsserviços, como: meio de pagto, comunicaçao com o ERP, disparos de SMS e notificações.
Aqui na EspecializaTI temos algum curso que explique para os alunos como definir e implantar em produção sua arquitetura de microsserviços?
Ou se vocês indicam algum conteúdo para isso?
Por que fiquei com a impressão de que não sei exatemente o que fazer agora que consegui desenvolver todos microsserviços do curso, poque aprendi somente a fazer deploy de um via GITHUB no droplet da DO, faltou exemplicar colocar toda a orquestração que temos em localhost (desenvolvimento) em produção, essa é minha grande dúvida.
Vou te passar um estrutura simples, tá bom?
Uma estrutura mais complexa, já recomendo o Kubernetes.
Considerando que vai usar a Digital Ocean, vamos as respostas:
Usar um droplet para cada microsserviço?
SIM. Cada microservice vai rodar em seu próprio droplet, com sua própria estrutura (usando o setup Docker que já está no projeto mesmo).
Ou um único droplet para controlar todos microsserviços com Nginx por exemplo?
Não, mas o micro-gateway também precisa ter sua própria estrutura.
Ou partir diretamente para o deploy em Kubernetes?
Kubernetes é mais complexo, porém é para aplicações que não tem limite de crescimento. Quer ter uma infra capaz de suportar milhões de requests? Vai de Kubernetes.
Qual custo/benefício?
Se subir um droplet para cada microservice, você terá um controle maior de gastos, e também pode fazer o upgrade do droplet conforme a demanda sobre aquele serviço em especial está crescendo.
Como cuidar da segurança?
Aqui passo dicas super valiosas de segurança (firewall, ssh, e etc): https://academy.especializati.com/curso/ambiente-docker-na-digital-ocean
Sobre o RabbitMQ para a comunicação assíncrona dos microservices, você pode subir um outro droplet para rodar este serviço (mas com muitos cuidados de segurança), ou usar um serviço que faz esse trabalho para você, como o Cloud AMQP ou o SQS da Amazon.
---
Se tiver novas dúvidas, pode perguntar como você fez que vou te respondendo até ficar mais claro. Beleza?
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!