Sou um adepto de NodeJS, e a facilidade de utilizar o JavaScript me levaram a buscar alternativas para criar serviços REST, então resolvi estudar com mais afinco alguns WebServers baseados em NodeJS. Foi aí, que me deparei com hapi (http://hapijs.com), um framework bem robusto e estável, e hoje utilizado por muitas empresas grandes.
Mas como torná-lo um serviço ativo em meu servidor? Encontrei um módulo do NodeJS chamado PM2 (https://github.com/Unitech/pm2). É um gerenciador de processos em NodeJS com Load-Balancer.
Hoje ele possui versão estável para Mac OS X e Linux, e está em fase beta para Windows.
Bom, sem mais apresentações, vou fazer um exemplo básico usando o PM2 com um WebServer hapi.
Primeiro fazemos a instalação dos módulos utilizando o npm:
npm install hapi –save
Criamos um servidor e adicionamos as rotas:
var Hapi = require(‘hapi’);
var server = new Hapi.Server();
server.connection({ port: 3000 });
server.route({
method: ‘GET’,
path: ‘/’,
handler: function (request, reply) {
reply.file(‘./public/index.html’);
}
});server.route({
method: ‘GET’,
path: ‘/{name}’,
handler: function (request, reply) {
reply(‘Hello, ‘ + encodeURIComponent(request.params.name) + ‘!’);
}
});server.start(function () {
console.log(‘Server running at:’, server.info.uri);
});
Salve na pasta raíz do projeto com o nome de hapiws.js
O PM2 é bem simples de se utilizar, com poucos passos, já conseguimos gerenciar alguma aplicação. Vamos instalar o PM2 através do npm e deixá-lo global. (Utilizando o Mac OS X como exemplo):
npm install pm2 -g
Após a instalação, acessamos a pasta do nosso projeto via terminal e utilizamos o comando:
pm2 start hapiws.js
O PM2 vai utilizar o nome do seu arquivo JavaScript como nome da sua aplicação.
Vai ser exibido algo como o exemplo abaixo:
Essa tabela mostra qual processo nosso está Online, seu Uptime, Memória utilizada.
Para listar os processos, utilize o comando:
pm2 list
Ou para verificar as informações de um App específico:
pm2 show [nome do app]
Com isso, conseguimos manter nosso gerenciador de processos ativo, mas e se o nosso servidor for reiniciado? Tenho que fazer tudo isso novamente?
Utilizando o comando pm2 startup [sistema operacional], ele vai gerar um script e um comando para execução, como no seguinte exemplo, utilizando Mac OS X:
Após executar o comando, toda vez que o servidor reiniciar, o PM2 irá subir os servidores que você configurou.
Você pode matar processos utilizando pm2 stop all ou pm2 stop [id do app], e reiniciar com pm2 restart all.
Nas próximas postagens, vou abordar sobre alguns módulos para o PM2 e como utilizar o Load-Balancer e o Cluster Mode.
Espero que tenham gostado, e até a próxima!
que massa