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