Como criar uma aplicação de node.js facilmente

O Node.js é um ambiente de execução de código aberto Javascript para facilmente construir do lado do servidor e aplicações de rede. A plataforma roda em Linux, OS X, FreeBSD e Windows, e suas aplicações são escritas em JavaScript. Os aplicativos podem ser executados na linha de comando, mas vamos ensiná-lo a executá-los como um serviço, de modo que será reiniciado automaticamente no reinício ou falha, para que você possa usá-los em um ambiente de produção.


Neste tutorial, vamos cobrir a criação de um ambiente de produção Node.js que é composto de duas máquinas CentOS 7; um servidor irá executar aplicativos Node.js geridos pela PM2, enquanto o outro vai fornecer aos usuários o acesso ao aplicativo através de um Nginx com proxy reverso apontando para o servidor de aplicativos.

Pré-requisitos

Este guia utiliza dois servidores CentOS 7 com rede virtual privada (os Clouds da LoopHOST possuem esta rede).

Utilizaremos a seguinte nomenclatura:

  • app: O servidor onde o Node.js irá executar, e o PM2
  • web: O servidor que iremos instalar o nginx, que irá agir como um proxy reverso. Os usuários irão acessar o ip público deste servidor, para chegar até a sua aplicação executada no Node.js.

É possível utilizar um único servidor para este tutorial, mas você precisará fazer algumas alterações ao longo dele. Simplesmente utilize o IP local da máquina (127.0.0.1) ao invés de utilizar o ip privado do servidor app.

Um diagrama de como sua infra estrutura ficará após seguir este tutorial:

Reverse Proxy to Node.js Application

Instalando o Node.js

Nós iremos criar a instalar a última versão estável do Node.js, no servidor app.

Primeiro, utilize o Yum para instalar as dependências necessárias:

  • yum install gcc-c++ make

O próximo passo é fazer o download do código fonte do Node.js.

Vá até a página de download do Node.js e encontre o link do ‘Source Code’. Copie o link e guarde.

Entre no seu diretório, e então substitua o link que copiou após o comando WGET.. exemplo abaixo:

  • cd ~
  • wget https://nodejs.org/dist/v0.12.5/node-v0.12.5.tar.gz

Agora extraia o arquivo baixado com este comando:

  • tar xvf node-v*

Acesse o diretório que foi extraído:

  • cd node-v*

Configure e compile o Node.js com estes comandos:

  • ./configure
  • make

Isto irá levar vários minutos para completar. Quando finalizar, instale o Node.js com este comando:

  • make install

Se voc6e quiser deletar o código fonte que baixou, após instalar, utilize o comando rm:

  • cd ~
  • rm -rf node-v*

A aplicação de execução do Node.js agora está instalado.

Instalar NPM (Node Package Manager)

Para ter acesso fácil a vários pacotes de Node, iremos instalar o npm.

Primeiro, instalamos o repositório EPEL com o comando abaixo:

  • yum install epel-release

Com o repositório instalado, agora podemos utilizar o yum para instalar a aplicação do npm:

  • yum install npm

Agora que temos o Node.js e o npm instalados, podemos prosseguir.

Instalar PM2

Agora vamos instalar PM2, que é um gerenciador de processos para aplicações Node.js. PM2 oferece uma maneira fácil de gerenciar e daemonize aplicações (executá-los como um serviço).

Usaremos Nó Embalado Modules (NPM), que é basicamente um gerenciador de pacotes para módulos nó que instala com Node.js, para instalar PM2 em nosso servidor de aplicativo. Utilize este comando para instalar o PM2:

    sudo npm install pm2@latest -g

Gerenciar aplicativos com PM2

PM2 é simples e fácil de usar. Nós vamos cobrir alguns usos básicos da PM2.

A primeira coisa que você vai querer fazer é usar o comando start pm2 para executar o aplicativo que você criou em segundo plano.. aqui iremos iniciar o arquivo hello.js:

    pm2 start hello.js

Isso também adiciona o aplicativo à lista de processos da PM2, que é emitido toda vez que você iniciar um aplicativo:
Saída:

┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ │ App nome modo ID de │ │ │ pid memória │ │ estado reinício uptime │ │ │ assistindo
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ │ Olá 0 │ │ garfo 30099 │ │ on-line 0 │ │ 0s 14.227 MB │ │ deficientes
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘

Como você pode ver, PM2 atribui automaticamente um nome de App (com base no nome do arquivo, sem a extensão .js) e um ID de PM2. PM2 também mantém outras informações, como o PID do processo, o seu estado actual, e uso de memória.

Os aplicativos que estão sendo executados sob PM2 será reiniciado automaticamente se o aplicativo falha ou é morto, mas um passo adicional deve ser tomado para obter o aplicativo para iniciar na inicialização do sistema (boot ou reinicialização). Felizmente, PM2 oferece uma maneira fácil de fazer isso, o subcomando inicialização.

O subcomando startup gera e configura um script de inicialização para lançar PM2 e seus processos gerenciados em botas de servidor. Você também deve especificar a plataforma que está sendo executado, que é centos, no nosso caso:

    pm2 startup centos

A última linha da saída resultante incluirá um comando (que deve ser executado com privilégios de superusuário) que você deve executar:
Saída:

[PM2] Você tem que executar este comando como root. Execute o seguinte comando:
      sudo env PATH=$PATH:/usr/local/bin pm2 startup centos -u sammy

Execute o comando que foi gerado (semelhante à saída destacado acima) para definir PM2 para iniciar no boot (use o comando de sua própria saída):

    sudo env PATH=$PATH:/usr/local/bin pm2 startup centos -u sammy

Outro uso PM2 (Opcional)

PM2 oferece muitas subcomandos que permitem que você gerencie ou procurar informações sobre suas aplicações. Note que a execução PM2 sem nenhum argumento irá mostrar uma página de ajuda, incluindo o uso exemplo, que cobre o uso PM2 mais detalhadamente do que esta seção do tutorial.

Pare um aplicativo com este comando (especificar o nome PM2 App ou id):

pm2 stop exemplo

Reiniciar uma aplicação com este comando (especificar o nome PM2 App ou id):

    pm2 restart example

A lista de aplicações actualmente geridos pela PM2 também pode ser olhou para cima com o subcomando list:

    pm2 list

Mais informações sobre um aplicativo específico pode ser encontrado usando subcomando info (especificar o nome PM2 App ou id) ::

    pm2 info example

O monitor de processo PM2 pode ser puxado para cima com o subcomando monit. Isso exibe o status do aplicativo, CPU e uso de memória:

pm2 monit

Agora que a sua aplicação Node.js está sendo executado e gerido pela PM2, vamos configurar o proxy reverso.

Agora que a sua aplicação está em execução, e escutando em um endereço IP privado, você precisa criar uma maneira para que seus usuários para acessá-lo. Vamos configurar um servidor web Nginx como um proxy reverso para esta finalidade. Este tutorial irá configurar um servidor Nginx a partir do zero. Se você já tem uma configuração do servidor Nginx, você pode simplesmente copiar o bloco localização no bloco de servidor de sua escolha (verifique se o local não está em conflito com qualquer um dos conteúdos existentes do seu servidor web).

No servidor Web, vamos instalar o pacote de liberação Epel usando o yum:

    sudo yum install epel-release

Em seguida, instale Nginx:

sudo yum install nginx

Agora, abra o arquivo de configuração do Nginx para edição:

sudo vi /etc/nginx/nginx.conf

Encontre a linha onde a localização / é definido, dentro do bloco de servidor padrão. Deve ser algo parecido com isto:
trecho nginx.conf – localização / (antes)

        location / {
}

Substituí-lo com o seguinte bloco de código e não se esqueça de substituir o seu próprio nome de domínio para a directiva server_name (ou endereço IP se você não tem um domínio configurado), eo endereço IP privado do servidor de aplicativos para o APP_PRIVATE_IP_ADDRESS. Além disso, altere a porta (8080), se a aplicação está configurada para escutar em uma porta diferente:
trecho /etc/nginx/nginx.conf – localização / (depois)
   

location / {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

Isso configura o servidor web para responder a solicitações na sua raiz. Supondo que o nosso servidor está disponível em example.com, acessando http://example.com/ através de um navegador web seria enviar o pedido para o endereço IP privado do servidor de aplicativos na porta 8080, que seria recebido e respondeu a pelo Node.js aplicação.

Você pode adicionar blocos de localização adicionais para o mesmo bloco servidor para fornecer acesso a outros aplicativos no mesmo servidor web. Por exemplo, se você também estavam executando outro aplicativo Node.js no servidor de aplicativo na porta 8081, você pode adicionar este bloco local para permitir o acesso a ele através http://example.com/app2:
Nginx Configuração – Localizações Adicionais

    location /app2 {
proxy_pass http://APP_PRIVATE_IP_ADDRESS:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

Uma vez que você terminar de adicionar os blocos de localização para as suas aplicações, salvar e sair.

No servidor Web, reinicie Nginx e habilitá-lo para iniciar no boot:

    sudo systemctl restart nginx
sudo systemctl enable nginx

Assumindo que o seu aplicativo Node.js está em execução, e suas configurações de aplicativos e Nginx estão corretas, você deve ser capaz de acessar seu aplicativo através do proxy reverso do servidor web. Experimentá-lo, acessando o URL do seu servidor web (seu endereço IP público ou nome de domínio).

Você tem agora a sua aplicação Node.js correndo atrás de um proxy reverso Nginx. Esta configuração de proxy reverso é flexível o suficiente para fornecer a seus usuários acesso a outros aplicativos ou conteúdo web estática que você deseja compartilhar. Boa sorte com seu desenvolvimento Node.js!

Além disso, se você estiver olhando para criptografar as transmissões entre o servidor web e seus usuários, aqui está um tutorial que irá ajudá-lo a obter HTTPS (TLS / SSL) apoio configurar.