Nodemon & PM2

Nodemon & PM2

Você sabia que existem duas ferramentas incríveis voltadas para o gerenciamento e monitoramento das nossas aplicações? 🙃

Estou me referindo às ferramentas Nodemon e PM2, que podem ser instaladas na nossa máquina local (ou servidor de produção) para facilitar o desenvolvimento, e a gestão de nossas aplicações feitas com NodeJS.

Ambas são instaladas via NPM, e apesar de serem bastante similares, cada uma delas desempenham papéis distintos (mas complementares).

Vamos nessa? 😋

O que é o Nodemon?

Antes de te explicar o que vem a ser o Nodemon, vamos refletir no seguinte ponto: "Como você está rodando suas aplicações feitas com NodeJS atualmente?".

Ah... essa pergunta é até fácil, né professor? Eu abro meu terminal, digito o comando [node ./index.js] e pronto! 🤣

Exato, e nós estamos seguindo dessa maneira desde o início da nossa jornada 😉

Mas... esse comando tem um pequeno porém que é o seguinte: "A medida em que você atualiza algum arquivo .js, você se vê obrigado a terminar a execução do NodeJS, e executar novamente o mesmo comando (node ./index.js), para que então, o NodeJS consiga capturar suas novas alterações".

Isso é um pouco chato não é verdade? 😞

Mas e se existisse uma forma de fazer com que o NodeJS conseguisse capturar todas as alterações que estamos fazendo em nossos arquivos? de modo que após o salvamento (CTRL + S) de um arquivo, o NodeJS subisse novamente o servidor de maneira automática?

E sim, essa ferramenta existe, e a aplicação responsável por isso se chama Nodemon 🥳

Poxaaa professor, e por que você só foi falar dessa ferramenta agora? 😤

Porque como diz o velho ditado: "Mar calmO não faz bons marinheiros" 🫡

Mas o que interessa hoje para nós, é a utilização dessa ferramenta, e como ele pode aumentar a sua produtividade!

Agora sim, vamos responder a pergunta: O que é o Nodemon?

Nodemon é uma ferramenta que ajuda no desenvolvimento de aplicações NodeJS, reiniciando automaticamente o servidor toda vez que há uma alteração no código.

A sua principal característica, envolve o monitoramento de todos os arquivos da sua aplicação, de forma a reiniciar o servidor automaticamente.

Então, basicamente, por de baixo dos panos, essa ferramenta fica comparando as datas de alterações dos arquivos, e quando ele acha uma incosistência (data alterada), ele trata de executar um node ./seu-arquivo.js de maneira automática.

É importante ressaltar que o Nodemon é voltado para AMBIENTES DE DESENVOLVIMENTO, e não de produção (lá, nós utilizamos o PM2 ou outras tecnologias relacionadas).

Tanto é, que a instalação da biblioteca no seu projeto local envolve o uso da flag -D, indicando que a biblioteca não deve ser instalada em ambientes de produção.

Apesar disso, costumamos instalar o Nodemon de forma global em nossa máquina local, uma vez que podemos ter diversas outras aplicações locais que podem ser monitoradas por ele.

Instalando o Nodemon

Como recomendação, essa biblioteca deve ser instalada de forma global dentro da sua máquina local, sendo assim, com o seu terminal (Prompt de Comando) aberto em qualquer pasta do seu sistema operacional, basta executar:

npm install -g nodemon

Caso você queria instalar o nodemon somente na pasta do seu projeto, certifique-se de que o seu terminal (Promt de Comando) está aberto na pasta raiz do seu projeto, antes de executar o comando abaixo:

npm install --save-dev nodemon

Executando o Nodemon

Com a aplicação instalada de forma global (ou dentro da pasta do seu projeto), basta executar o seguinte comando no terminal:

nodemon index.js

O comando acima, inicialmente o Nodemon vai executar o seu servidor, e também vai ficar monitorando todas as alterações que acontecem com o arquivo index.js, e quando identificá-las, o Nodemon vai reiniciar o servidor novamente.

Configurando o Nodemon para monitorar todas as alterações que acontecem dentro da pasta do seu projeto

É certo dizer, que o comando nodemon index.js, nao vai reiniciar o seu servidor caso você faça alterações em outros arquivos .js que existem dentro da pasta do seu projeto, mesmo que eles estejam sendo incluídos dentro do index.js.

Isso ocorre porque o Nodemon monitora apenas os arquivos que você especifica diretamente.

Portanto, se o arquivo index.js não mudar, mesmo que outros arquivos (como os controladores, classes, funções...) sejam alterados, o Nodemon não reiniciará o servidor automaticamente.

Para resolver isso, você pode configurar o Nodemon para monitorar todos os arquivos e diretórios do seu projeto, e não apenas o arquivo principal (index.js).

Neste caso, dentro da pasta raiz do seu projeto, você vai precisar criar um arquivo de configuração chamado de nodemon.json, com a seguinte configuração:

{
  "watch": ["controllers", "models", "views", "routes", "services", "helpers", "index.js"],
  "ext": "js,json,css,handlebars,html,env"
}

No exemplo acima, configuramos o Nodemon para monitorar as pastas controllers, models, views, routes, services, helpers e o arquivo index.js. Ele também observará alterações em arquivos com as extensões .js, .json, .css, .handlebars, .html e .env.

Com essa configuração salva, basta que você execute o comando abaixo dentro da pasta do seu projeto:

nodemon index.js

Esse comando diz explicitamente ao Nodemon que o arquivo principal a ser executado é o index.js. Mesmo assim, ele ainda usará as configurações definidas no arquivo nodemon.json para monitorar as outras pastas e extensões.

Além da criação do arquivo nodemon.json, existem duas outras maneiras diferentes de monitorar os arquivos do seu projeto, vejamos cada uma delas 😉

1°) Usar a flag --watch diretamente no terminal

Outra opção é usar a flag --watch diretamente no comando para especificar os diretórios que você quer que o Nodemon monitore:

nodemon --watch controllers --watch models --watch routes --watch views index.js

Com o comando acima, o Nodemon irá reiniciar o servidor sempre que houver uma mudança nos arquivos localizados nas pastas controllers, models, routes, ou views, além do index.js.

2°) Monitorar o projeto inteiro

Se quiser monitorar todas as mudanças no projeto, você pode usar a opção --watch . para observar a raiz do projeto. Faça isso sem se esquecer de passar o arquivo index.js:

nodemon --watch . index.js

O que é o PM2

Como dito anteriormente em um spoiler que foi dado 😆

O PM2 é uma ferramenta de monitoramento, mas que é voltada para servidores de produção!

O que o torna mais que uma ferramenta de monitoramento, mas sim, um gerenciador de processos para aplicativos feitos com NodeJS.

É com o PM2 que nós conseguiremos executar e manter múltiplas instâncias de uma aplicação em segundo plano.

Vejamos algumas de suas principais características:

Reinicialização Automática: reinicia automaticamente a aplicação em caso de falhas.

Cluster Mode: executa várias instâncias da aplicação em paralelo, aproveitando todos os núcleos da CPU do servidor.

Logs e Monitoramento: permite visualizar logs e monitorar o desempenho da aplicação.

Execução em Produção: é usado principalmente em ambientes de produção para manter as aplicações sempre ativas.

Gerenciamento de Deploy: facilita o processo de deploy contínuo com o comando pm2 deploy.

Ou seja, sabe quando você cria a sua aplicação na sua máquina local e chega o momento de colocá-la online? Sabe como você faz para rodar a sua aplicação em NodeJS dentro do seu servidor?

Com o comando node...

Errado... 🙂‍↔️

Com o nodemon...

Também errado... 🙂‍↔️

Com o PM2?

Exatamente 🤩

Será por meio do PM2 que nós iremos colocar nossa aplicação online dentro do nosso servidor.

Instalando o PM2

Apesar do PM2 também poder ser instalado na nossa máquina local, o ideal é que você o utilize em ambientes de produção.

Para instalar o PM2 globalmente, basta executar o comando abaixo:

npm install pm2 -g

Executando o PM2

O processo de execução de uma aplicação feita com NodeJS em um servidor de produção usando o PM2, é relativamente simples, bastando apenas executar:

pm2 start index.js

Para reiniciar ou desligar o servidor, você tem alguns comandos:

pm2 stop
pm2 restart

Para monitorar algumas métricas, podemos usar:

pm2 monit

Para saber mais sobre o PM2, não deixe de consultar a documentação da ferramenta.

Colocando sua aplicação em um ambiente de produção

Apesar do PM2 ajudar a subir a nossa aplicação, ele sozinho é incapaz de fazer com que a nossa aplicação em NodeJS fique online.

Pois isso depende de diversos outros processos e configurações, que envolvem tanto o deploy de aplicações online quanto ter entendimento sobre infraestrutura, servidores e redes.

Para garantir que sua aplicação esteja acessível na internet, é necessário configurar corretamente diversos aspectos, como:

  • Servidor de Hospedagem (AWS, Digital Ocean, Heroku...),
  • Servidores Web (NGINX, Apache...),
  • Configuração de Domínio e DNS,
  • Segurança e SSL,
  • Gerencimento de banco de dados,
  • Escalabilidade...

E diversos outros aspectos que dariam uma nova jornada completa no Portal da Micilini 😆

Como ponto de partida, você pode consultar este artigo, que conta com algumas informações relevantes do que você precisa fazer para subir uma aplicação feita com NodeJS no Ubuntu.

Conclusão

Nesta lição, você aprendeu a instalar e utilizar duas grandes bibliotecas que ajudam a monitorar nossas aplicações:

Mas que será que nos aguarda na próxima lição? 🧐

Criadores de Conteúdo

Foto do William Lima
William Lima
Fundador da Micilini

Inventor nato, escreve conteudos de programação para o portal da micilini.

Torne-se um MIC 🤖

Mais de 100 mic's já estão conectados na plataforma.