Preparar servidor para deploy NodeJs com PM2

Wanderson Alves Rodrigues - Sep 7 '20 - - Dev Community

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:

Pacote PM2

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
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:
Alt Text

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Para finalizar a adição do serviço na lista de processos do pm2, execute:

pm2 save
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Porém existe a possibilidade de verifica logs de forma gráfica que é muito mais amigável, para isso execute:

pm2 monit
Enter fullscreen mode Exit fullscreen mode

O executar o comando acima será apresentado a saída:
Alt Text

. . . . . . . . . . . . . . . . . . .
Terabox Video Player