O obejtivo deste laboratório é a configuração de um ambiente para execução do aplicativo "desafio-infra-pleno-2". O ambiente consiste em três containers:
mongo-server
: Container executando banco de dados MongoDBapp_server
: Container executando imagem NodeJS + aplicação "desafio-infra-pleno-2"proxy_server
: Container executando imagem NGINX configurado para receber as requisições da porta 80 dos host e redirecionar para a porta 3000 doapp-server
Instaler os programas abaixo de acordo com a arquitetura e sistema operacional de seu equipamento.
- Git https://github.com/git-guides/install-git
- Docker https://docs.docker.com/engine/install/
- Docker compose https://docs.docker.com/compose/install/
- Realizar um clone deste repositório
git clone https://github.com/carloshvsilva/desafio-infra-pleno-2.git
- Acessar a rais do repositório onde contém o arquivo
docker-compose.yml
e executar o Docker Composedocker compose up -d
-
docker-compose.yml
: contém as informações para a criação dos containers necessários para o funcionamento do ambiente de execução da aplicação:- Criação de rede
weinnovate-net
em modobridge
networks: weinnovate-net: driver: bridge
- Execução de container
mongo-server
, variáveis necessárias para execução, acesso do banco de dados, atribuição de redemongo_server: image: mongo:6.0.8 container_name: mongo-server environment: - MONGO_INITDB_ROOT_USERNAME=weinnovate - MONGO_INITDB_ROOT_PASSWORD=weinnovate networks: - weinnovate-net
- Execução de container ´app_server´, utilizando o arquivo de criação da imagem do NodeJS + aplicação, atribuição de rede e dependência do container
mongo-server
.- A aplicação faz a conexão para a porta 27017 do container
mongo-server
app_server: build: context: . dockerfile: Dockerfile container_name: app_server networks: - weinnovate-net depends_on: - mongo_server
- A aplicação faz a conexão para a porta 27017 do container
- Execução de container
proxy_server
, port bind de porta 80 do host para porta 80 do container, volume para compartilhar arquivo de configuração do NGINX, atribuição de rede e depêdencia do containerapp_server
proxy_server: image: nginx:1.25.1 container_name: proxy_server ports: - 80:80 volumes: - ./nginx/:/etc/nginx/conf.d/ networks: - weinnovate-net depends_on: - app_server
- Criação de rede
-
Dockerfile
: contém arquivo de criação de imagem da aplicação contendo, utilização da imagem NodeJS, instalação de dependências do aplicativo, cópia dos arquivos de desenvolvimento do aplicativo, exposição da porta 3000 e execução do NodeJSFROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build EXPOSE 3000 CMD ["node", "dist/main.js"]
-
nginx
: Pasta que contém o arquivodefault.conf
referente a configuração do NGINX para modo proxy- Realiza proxy das requisições recebidas pela porta 80 do container
proxy_server
e envia para a porta 3000 do containerapp_server
upstream appserver { server app_server:3000; } server { listen 80; server_name localhost; location / { proxy_pass http://appserver; } }
- Realiza proxy das requisições recebidas pela porta 80 do container
-
Demais arquivos são referente a aplicação