Page cover

Deploy de Web Service NodeJS

Para o deploy de aplicações Web Node.js, é necessário manter o servidor Node.js em execução de forma contínua. Uma maneira eficaz de conseguir isso é através do uso do Docker, que permite encapsular o servidor Node.js e qualquer serviço relacionado, como bancos de dados, em containers isolados. Abaixo, detalhamos o processo de criação de um ambiente Docker com docker-compose, a construção de um Dockerfile para a aplicação Node.js, e a configuração de um servidor Nginx para gerenciar as requisições para a aplicação.

Criação do docker-compose.yml

O uso do docker-compose facilita o gerenciamento de múltiplos containers, permitindo definir e conectar um container Node.js a um banco de dados MySQL em um único arquivo de configuração. Aqui está um exemplo básico de como configurar esses serviços:

version: "3"

services:
  db:
    image: mysql:latest
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    volumes:
      - mysql:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      TZ: America/Sao_Paulo
      MYSQL_DATABASE: App
      MYSQL_USER: mackleaps
      MYSQL_PASSWORD: ****
      MYSQL_ROOT_PASSWORD: *****
      SERVICE_TAGS: dev
      SERVICE_NAME: db
    networks:
      - internalnet

  nodeapp:
    container_name: nodeapp
    build: .
    image: nodeapp:v1
    restart: unless-stopped
    ports:
      - 4447:4447
    depends_on:
      - db
    networks:
      - internalnet

volumes:
  mysql:
    external: true

networks:
  internalnet:
    driver: bridge

Dockerfile para a aplicação Node.js

O Dockerfile define as instruções para construir a imagem Docker do servidor Node.js:

Script docker-entrypoint.sh

Para garantir que o servidor Node.js inicie somente após o banco de dados estar pronto para conexões, utilizamos um script de entrypoint:

Configuração do Nginx

Finalmente, para direcionar as requisições para o servidor Node.js rodando no container, configuramos um bloco location no Nginx:

Aqui está uma explicação detalhada para cada seção e diretiva utilizada no arquivo docker-compose.yml mencionado anteriormente. Esta explicação ajudará a entender como cada componente é configurado e como eles interagem dentro do ambiente Docker.

Docker Compose: Estrutura e Explicações

Versão: Define a versão do Docker Compose usada. A versão "3" é compatível com as versões mais recentes do Docker Engine e oferece recursos modernos de configuração.

Serviços

Serviços: Inicia a definição dos containers que serão gerenciados pelo Docker Compose.

DB: Configura um container MySQL.

  • image: Especifica a imagem Docker a ser usada, neste caso, a última versão do MySQL.

  • container_name: Define o nome do container.

  • command: Passa comandos adicionais para o servidor MySQL.

  • restart: Política de reinício do container.

  • volumes: Monta volumes para persistência de dados.

  • ports: Mapeia a porta 3306 do container para a mesma porta na máquina host.

  • environment: Define variáveis de ambiente necessárias para a configuração do MySQL.

  • networks: Especifica a rede a qual o container será conectado.

NodeApp: Configura um container para a aplicação Node.js.

  • container_name: Nome do container.

  • build: Diretório onde o Dockerfile está localizado, ponto (.) indica o diretório atual.

  • image: Nome e tag da imagem a ser construída.

  • restart: Política de reinício.

  • ports: Mapeia a porta 4447 do container para a mesma porta na máquina host.

  • depends_on: Garante que o container db seja iniciado antes deste.

  • networks: Conecta o container à rede especificada.

Volumes

Volumes: Define e gerencia volumes persistentes usados pelos containers, especificamente para o MySQL.

Redes

Redes: Define uma rede chamada internalnet com o driver de rede bridge, facilitando a comunicação entre os containers definidos no mesmo Docker Compose.

Last updated