Este repositório contém um sistema distribuído configurado para rodar com Docker e Docker Compose. Há dois arquivos principais de configuração do Docker Compose:
docker-compose.dev.yml
: Usado para ambiente de desenvolvimento com portas expostas diretamente.docker-compose.yml
: Usado para ambiente de produção onde todos os serviços ficam isolados e são acessíveis apenas através do proxy reverso Nginx.
Este arquivo é usado para configurar o ambiente de desenvolvimento. Nele, todas as portas dos serviços são expostas diretamente, permitindo fácil acesso e depuração.
- auth-db: Banco de dados para autenticação.
- auth-api: API de autenticação.
- bl-db: Banco de dados para lógica de negócios.
- bl-api: API de lógica de negócios.
- importer: Serviço de importação de dados.
- frontend: Aplicação frontend em React.
docker-compose -f docker-compose.dev.yml up --build
Este arquivo é usado para configurar o ambiente de produção. Nele, os serviços não têm suas portas diretamente expostas, sendo acessíveis apenas através do Nginx, que faz o roteamento das requisições.
- auth-db: Banco de dados para autenticação.
- auth-api: API de autenticação.
- bl-db: Banco de dados para lógica de negócios.
- bl-api: API de lógica de negócios.
- importer: Serviço de importação de dados.
- frontend: Aplicação frontend em React.
- nginx: Servidor Nginx para roteamento de requisições.
docker-compose -f docker-compose.yml up --build
O arquivo .env
contém todas as variáveis de ambiente necessárias para configurar os serviços. Um exemplo de arquivo .env
é fornecido como .env.example
.
USE_DEV_MODE=true #if true, it will allow auto-reload when changes are done to the src files
AUTH_DB_PORT=15432 #port for the auth DB (not used in production)
BL_DB_PORT=25432 #port for the business logic DB (not used in production)
AUTH_API_PORT=18080 #port for the authentication api (not used in production)
ACCESS_TOKEN_SECRET= #secret used for generating and validating JWT
FRONTEND_PORT=80 #port for the react frontend
SWAGGER_PORT=8081 #port for the swagger
BL_API_PORT=8080 #port for the business logic api
Para gerar um secret seguro que será usado para a geração e validação de JSON Web Tokens (JWT), você pode utilizar o OpenSSL. Siga os passos abaixo:
-
Abra o terminal.
-
Execute o comando abaixo para gerar um secret aleatório de 32 bytes codificado em hexadecimal:
openssl rand -hex 32
-
O comando acima retornará um valor hexadecimal. Copie esse valor e insira no arquivo
.env
na variávelACCESS_TOKEN_SECRET
.
$ openssl rand -hex 32
e40a46e64d4ac98e74bc620a68ca9c04ae515182e4ad0f6da1ed97ba5585c2e7
No arquivo .env
, ficará assim:
ACCESS_TOKEN_SECRET=e40a46e64d4ac98e74bc620a68ca9c04ae515182e4ad0f6da1ed97ba5585c2e7
Essa chave será usada pelas APIs para a geração e validação de tokens JWT, garantindo a segurança das operações de autenticação.
Para o ambiente de produção, o Nginx é configurado usando um template que substitui as variáveis de ambiente pelas portas configuradas. Não é necessário nenhuma ação além de configurar o arquivo .env
.
Para rodar o sistema em ambiente de desenvolvimento, use o comando:
docker-compose -f docker-compose.dev.yml up --build
Para rodar o sistema em ambiente de produção, use o comando:
docker-compose -f docker-compose.yml up --build
Para facilitar o teste e a interação com as APIs deste sistema distribuído, um arquivo de collection do Postman está incluído no repositório. Este arquivo contém uma coleção de requisições predefinidas que você pode importar diretamente no Postman para testar os endpoints da API.
O arquivo de collections do Postman está localizado em:
./sistemas_distribuidos.postman_collection.json
- Abra o Postman: Inicie o Postman no seu sistema.
- Importar Collection: Clique no botão
Import
no canto superior esquerdo da interface do Postman. - Selecionar Arquivo: Na janela de importação, selecione a opção
Upload Files
e navegue até o arquivosistemas_distribuidos.postman_collection.json
no diretório raiz do projeto. Selecione o arquivo e clique emOpen
. - Importar: Clique no botão
Import
na janela de importação. A coleção será adicionada ao seu workspace do Postman.
- Certifique-se de copiar o arquivo
.env.example
para.env
e ajustar as variáveis conforme necessário antes de iniciar os contêineres. - No ambiente de produção, o acesso aos serviços é feito exclusivamente através do Nginx nas portas configuradas no arquivo
.env
.