Nesse arquivo temos todas as referências externas às bibliotecas e programas utilizados.
Todo o código do sistema está embaixo de /src/
. Cada subdiretório de /src/
é um microsserviço. Para cada microsserviço faz-se o npm init
como se fosse uma aplicação node completamente independente.
Todos os microsserviços serão compilados com o mesmo Dockerfile chamado de MicroService.Dockerfile
. Para isso, todos os microsserviços devem ser aplicações node e funcionar com os comandos node npm start
, npm build --if-present
, npm test
e npm start-dev
. A última opção é para contêineres de desenvolvimento.
Informações globais tais como senha de BD, endereço dos microsserviços e afins DEVEM ser acessadas com o uso de variáveis de ambiente. Vamos definir variáveis de ambiente globais em outro arquivo.
Todos os arquivos relevantes ao docker estarão no diretório /docker/
A aplicação toda é controlada com o uso do docker-compose. Assumindo que o executável docker-compose
é acessível no PATH, scripts de inicialização vão fazer automaticamente todo o processo de levantamento do sistema.
Idealmente teremos três ambientes: O ambiente de desenvolvimento, o ambiente de testes e o ambiente de produção. Cada ambiente tem um script relacionado: /scripts/dev.sh
, /scripts/test.sh
e ./srcipts/prod.sh
. Cada script recebe como argumento e implementa os passos de start
, stop
e logs
.
O ambiente de desenvolvimento fará a construção dos contêiners em modo de desenvolvimento. Nesse modo os contêiners tem seus volumes montados para cada microsserviço e cada contêiner executa o nodemon
para modificação e interação. Todas as portas de todos os microsserviços e contêineres auxiliares ficam abertas para interação.
O ambiente de testes executa todos os microsserviços usando o comando node test
. Assim, cada contêiner faz seus testes unitários e o resultado do teste é retornado assim que o contêiner termina a execução. Validamos todos os microsserviços verificando se esses contêineres terminaram com sucesso, caso contrário será possível analisar os logs.
O ambiente de produção faz a construção dos contêineres utilizando cópias e prepara o sistema para ser executado de forma correta. Assim, apenas o gateway tem acesso via portas. Esse ambiente será utilizado para os testes de integração.
Procure pelos contêineres characters-dev e charactersdb. O primeiro é o ambiente Node e o segundo é o MongoDB. Copie e cole essas linhas e troque o nome delas para o que desejar.
Esses nomes também servem como nome de domínio para os contêineres na rede interna dos contêineres. Por exemplo se de dentro de um contêiner você quer acessar via HTTP o conteiner chamado basededados
na porta 3004, você simplesmente escreve http://basededados:3004
.
Deve-se ter docker e docker-compose instalado. Faça
docker-compose up -d
e após isso faça:
docker-compose run --rm <NOME_DO_CONTEINER_DE_AMBIENTE_NODE_CRIADO>
vai abrir um terminal onde vc pode fazer os comandos que quiser que tenha node ...
e afins. Caso queira rodar um único comando de uma vez pode adiciona-lo após o nome do contêiner
- JSDoc: Documentação
- MongoDB: Integração com MongoDB
- ajv: Validador de JSONSchema
- RabbitMQ: Biblioteca do Broker usado
Tutoriais:
- Troca de mensagens pelo broker
- TDD: Testes para o express
- Conexão com o MongoDB
- Operações CRUD com o MongoDB
- Documentação de projetos de microsserviços
Dúvidas: