Esta aplicação foi desenvolvida para demonstrar o conceito de standalone, onde cada módulo funciona de forma independente e autossuficiente.
demo.mp4
Uma aplicação standalone, ou aplicação autônoma, é um software que pode executar de forma independente, sem a necessidade de instalação de outros programas. Normalmente, uma aplicação standalone incorpora todos os recursos e bibliotecas necessários para operar sem depender de software adicional. No contexto desta aplicação NestJS, podemos interpretar que os módulos podem funcionar de forma autônoma.
O fluxo da aplicação no contexto do NestJS é estruturado em módulos, e cada módulo é concebido para operar de forma independente, como se fosse uma aplicação separada. Cada módulo possui seu próprio script de inicialização e é contido em seu próprio container.
Ao dividir a aplicação em módulos separados, cada um em seu próprio container, a comunicação entre esses serviços é mantida através de mensageria, utilizando o broker do RabbitMQ. Essa abordagem permite uma arquitetura mais distribuída e escalável, onde cada módulo pode ser dimensionado individualmente conforme necessário.
Essa organização proporciona uma visão clara do ambiente de implantação da aplicação. Por exemplo, se houver a necessidade de escalar a aplicação, basta fazer uma configuração no arquivo docker-compose para especificar quantas instâncias de cada serviço são desejadas.
Essa separação em módulos autônomos facilita não apenas a escalabilidade, mas também a manutenção, o desenvolvimento e a depuração da aplicação, uma vez que cada parte pode ser tratada de forma independente, sem interferir nas outras. Além disso, essa abordagem promove uma arquitetura mais resiliente, onde uma falha em um módulo não afeta necessariamente o funcionamento dos outros.
- Docker e docker-compose instalados
cp ./.env.example ./.env
- Fazer alterações quando necessário
docker-compose up -d
docker logs -f {nome-do-container} --tail 200
docker exec -it {nome-do-container} sh
As seguintes ferramentas foram usadas na construção do projeto:
- Instalar dependências dentro do container
- A documentação não fica disponível caso a variável de ambiente NODE_ENV esteja como production