No post anterior Preparar servidor para deploy NodeJs foi apresentado como preparar seu servidor http com NGINx.
Obs.: Para continuar nessa postagem de pm2 é obrigatório a leitura e execução dos passos da primeira(Preparar servidor para deploy NodeJs).
Hoje se o servidor reiniciar temos que manualmente subir a aplicação, isso é ruim e trabalhoso para facilitar a nossa vida existe o pacote pm2.
Para mais detalhes sugiro:
Executando o PM2 e o Node.js em ambientes de produção
PM2: Como utilizar no NodeJS e funcionalidades secretas
1 – O que é PM2?
O PM2(Process Manager 2) é um gerenciador de processos automatizados para aplicações NodeJs em ambiente de produção. Nossa aplicação será completamente gerenciada pelo PM2 isso quer dizer:
- logs para auditoria e gerenciamento de erros;
- automatização de reinicialização e muitas outras vantagens;
Nessa postagem vamos nos atentar a inicialização automática de processos e logs.
2 – Instalar pm2
No terminal execute o comandos:
sudo npm install -g pm2
O comando acima vai baixar o pacote pm2 e instalar globalmente para acesso ao comando pm2 no terminal.
3 – Criar o serviço no pm2
Para criar o nosso serviço que executar a API que definimos no primeiro post:
pm2 start dist/server.js --name [INFORMAR_NOME_APLICACAO]
Onde INFORMAR_NOME_APLICACAO* é o nome que devemos informar da nossa aplicação, isso fica mais fácil para identificá-la.
No meu exemplo irei chamar a aplicação de **api_deploy que se encontra no caminho app/deploy/.
O comando completo pode ser visto abaixo:
pm2 start app/deploy/dist/server.js --name api_deploy
Ao executar o comando acima para criar um serviço no pm2 referente a nossa aplicação será apresentado uma saída igual à imagem abaixo:
Na imagem podemos ver as informações:
- id: Identificado único da nossa aplicação;
- name: Nome que informamos ao criar;
- pid: Caso precisar matar o processo só executar um kill;
- uptime: Tempo decorrido da nossa aplicação;
- status: Situação do processo;
- cpu: Informação do CPU que nossa aplicação está usando;
- mem: Memória usada pela nossa aplicação;
Para observar a lista de processos outra vez só executar o comando:
pm2 list
4 – inicialização automática de processos
Para que nossa aplicação seja reiniciada caso ocorra um restart do servidor, seguem os passos:
pm2 startup systemd
Primeiramente execute o comando acima, isso irá resultar em uma saída descrita abaixo:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u deploy --hp /home/deploy
Para efetuar a configuração execute o comando gerado acima:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u deploy --hp /home/deploy
Para finalizar a adição do serviço na lista de processos do pm2, execute:
pm2 save
5 – Logs
Um coisa muito interessante do pm2 é a possibilidade de verificar os logs gerados por nossa aplicação para isso existe o comando:
pm2 logs
Saída referente ao comando acima:
deploy@wanderson:~$ pm2 logs
[TAILING] Tailing last 15 lines for [all] processes (change the value with --lines option)
/home/deploy/.pm2/pm2.log last 15 lines:
PM2 | 2020-09-07T15:40:20: PM2 log: PM2 version : 4.4.1
PM2 | 2020-09-07T15:40:20: PM2 log: Node.js version : 12.18.3
PM2 | 2020-09-07T15:40:20: PM2 log: Current arch : x64
PM2 | 2020-09-07T15:40:20: PM2 log: PM2 home : /home/deploy/.pm2
PM2 | 2020-09-07T15:40:20: PM2 log: PM2 PID file : /home/deploy/.pm2/pm2.pid
PM2 | 2020-09-07T15:40:20: PM2 log: RPC socket file : /home/deploy/.pm2/rpc.sock
PM2 | 2020-09-07T15:40:20: PM2 log: BUS socket file : /home/deploy/.pm2/pub.sock
PM2 | 2020-09-07T15:40:20: PM2 log: Application log path : /home/deploy/.pm2/logs
PM2 | 2020-09-07T15:40:20: PM2 log: Worker Interval : 30000
PM2 | 2020-09-07T15:40:20: PM2 log: Process dump file : /home/deploy/.pm2/dump.pm2
PM2 | 2020-09-07T15:40:20: PM2 log: Concurrent actions : 2
PM2 | 2020-09-07T15:40:20: PM2 log: SIGTERM timeout : 1600
PM2 | 2020-09-07T15:40:20: PM2 log: ===============================================================================
PM2 | 2020-09-07T15:41:44: PM2 log: App [api_deploy:0] starting in -fork mode-
PM2 | 2020-09-07T15:41:44: PM2 log: App [api_deploy:0] online
/home/deploy/.pm2/logs/api-deploy-error.log last 15 lines:
/home/deploy/.pm2/logs/api-deploy-out.log last 15 lines:
0|api_depl | Server started on port 3333
Porém existe a possibilidade de verifica logs de forma gráfica que é muito mais amigável, para isso execute:
pm2 monit
Top comments (2)
Tem como eu fazer um log que eu recebo no email que avisa se o server cair?
Vc pode capturar eventos em sua aplicação quando shutdown, agora para enviar email vai ter que pensar em uma solução que esteja fora do seu ambiente controlado pelo pm2
pm2.io/docs/runtime/best-practices...