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.jso
n 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.