Este site usa cookies e tecnologias afins que nos ajudam a oferecer uma melhor experiência. Ao clicar no botão "Aceitar" ou continuar sua navegação você concorda com o uso de cookies.

Aceitar

Node.js

Deploy de aplicação Node.js na Digital Ocean - Parte 2

Luiz Duarte
Escrito por Luiz Duarte em 24/03/2021
Deploy de aplicação Node.js na Digital Ocean - Parte 2

No tutorial anterior de publicação de aplicação Node.js na Digital Ocean, eu lhe mostrei como criar o droplet corretamente, subir seus fontes, criar e configurar o banco de dados de produção.

No tutorial de hoje, vamos ver como configurar o PM2, o Nginx, os DNS e finalizar o processo com SSL.

Atenção: este é um tutorial intermediário. Se você não sabe programar Node.js ainda, não comece com ele pois vai mais te atrapalhar do que te ajudar. Para iniciantes, eu recomendo meus livros e meu curso (inclusive no curso você encontra este conteúdo em vídeoaula). Infraestrutura/servidores para iniciantes eu recomendo a Umbler ou a Heroku.

Curso FullStack

#5 – Configurando o PM2

Uma vez que sua aplicação esteja subindo com “npm start” corretamente, pode encerrar o processo, era só um teste. Você não deve deixar sua aplicação rodando no servidor com “npm start”, pois caso dê algum erro na aplicação ou o próprio droplet seja reiniciado por algum motivo, sua aplicação não se recuperaria e ficaria offline.

Para garantir que nossa aplicação Node.js fique rodando 24×7, precisamos de um gerenciador de processos que mantenha ela sempre no ar, como o PM2, sigla para Process Manager 2. Falo mais dele no vídeo abaixo.

Ele vem pré-instalado no droplet e é justamente ele que está garantindo que aquela página padrão que você vê quando acessa o IP da máquina no navegador esteja sempre rodando. Aliás, vamos derrubar ela agora, para subir nossa aplicação no lugar.

O PM2 está rodando na máquina com o usuário nodejs, o que evita que ele tenha super privilégios na sua máquina. Assim, para darmos comandos ao PM2, é importante executarmos estes comandos como este usuário, usando o runuser no terminal.

O comando acima, por exemplo, roda “pm2 list” (para listar todos os processos atualmente gerenciados pelo PM2) mas em nome do usuário nodejs ao invés do root.

Será apresentado a você uma lista de processos, onde provavelmente tem um chamado hello, que o padrão que já vem no droplet e que está rodando na porta 3000. Ele é o site que vemos quando acessamos o IP da máquina no navegador.

Agora que você sabe os processos atualmente em execução, derrube eles para que não fique nenhum. Abaixo o exemplo de como fazer isso para o processo de name hello (default do droplet)

Se você quiser rodar a sua aplicação agora na porta 3000, vai funcionar, mas se o hello for reiniciado, vai dar problema nele, então é melhor não usar esta porta.

Agora, para cadastrar a sua aplicação no PM2, navegue até a pasta onde está o arquivo que inicia a aplicação e rode o comando abaixo, onde server refere-se ao server.js, por exemplo.

E para finalizar esta etapa, temos de salvar as configs do PM2, para que a nova aplicação suba junto da máquina, caso ela seja reiniciada.

Com isso, a sua aplicação vai estar sempre rodando. Caso ela caia, por qualquer motivo, ela será reinicializada automaticamente também.

Quer testar sua aplicação por dentro do servidor? Você pode usar o utilitário cURL no no terminal, como abaixo.

Ele vai fazer um GET naquela URL informada e vai imprimir o HTTP response no console mesmo. Mas mesmo funcionando localmente, você deve ter notado que a sua aplicação ainda não é acessível pela Internet. Esse é o próximo passo.

#6 – Configurando o Nginx

O droplet na Digital Ocean vem pré-configurado com uma aplicação chamada Nginx (lê-se “enginex”, tipo “motorx” em Inglês), que caso você não conheça, é um webserver bem popular. O Ngnix está lá para atuar como um proxy reverso. Assim, o Ngnix permite que todas requests da Internet cheguem na porta 80, padrão HTTP, mas que internamente tenhamos aplicações rodando em todas as outras 65534 portas disponíveis, ou ainda redirecionando para outros servidores da sua rede, por exemplo.

Assim, para que sua aplicação possa ser acessada pela Internet, precisamos adicionar uma configuração no Nginx instalado no seu droplet. Para fazer isso, conecte-se via SSH no seu servidor e rode o comando abaixo.

Isso irá abrir no terminal o arquivo de configuração default do Nginx, usando o editor nano. Nele, você vai encontrar as regras de roteamento, sendo que a interessante pra gente é essa aqui.

A primeira linha define um bloco location. Podem haver diversos blocos location, um por regra de roteamento. O “location /” é a regra default, quando acessarem a raiz do servidor, e a última linha dessa regra, a proxy_pass diz o redirecionamento interno que deve ser feito.

É nesta linha que você deve ajustar para apontar para a porta correta onde está rodando a sua aplicação Node.js. Depois de alterar o Nginx, use o comando abaixo para reiniciá-lo.

Com isso, se você acessar agora o IP do seu droplet no navegador, já deve conseguir acessar sua aplicação.

#7 – Configurando o DNS

Partirei do pressuposto aqui que você já possui um domínio registrado. Para domínios de teste, recomendo a Freenom. Para domínios de produção, recomendo a Umbler, que vende a preço de custo e sem planos de fidelidade.

Vamos começar criando a zona de DNS na DO. No botão verde “create” que fica no topo, escolha a opção “Domain/DNS”

Na tela que vai se abrir, digite o seu domínio.

Pronto, a sua zona de DNS estará criada na DO. Precisamos adicionar ao menos um registro de DNS do tipo A na zona, como na imagem abaixo, onde disse que o hostname @ (default) será redirecionado para o meu droplet. Opcionalmente, crie um registro www também, se quiser que possa ser acessado desta forma também.

Agora é hora de ir onde você registrou o seu domínio e apontar os Name Servers do mesmo para os endereços da DO abaixo.

  • ns1.digitalocean.com
  • ns2.digitalocean.com
  • ns3.digitalocean.com

Se o seu domínio foi registrado na Freenom, por exemplo, basta você se autenticar na sua conta, ir na área dos seus domínios, depois em Manage DNS e por fim em Management Tools > NameServers > Custom.

Com tudo configurado no seu provedor de registro de domínios, deve levar de minutos a horas para o DNS ser propagado e os acessos ao seu domínio começarem a cair no seu droplet.

Quando isso começar a acontecer e você digitar no navegador o seu domínio, ele deve acessar normalmente a aplicação. Mas você vai notar algo próximo ao nome do seu domínio que talvez lhe incomode…

Precisaremos de um certificado SSL e algumas configurações, para tirar essa mensagem de site não seguro…

#8 – Configurando o SSL

Antigamente, o único jeito de você obter um certificado SSL era pagando para um emissor autorizado emitir um para você, pagamento este que era geralmente anual inclusive. Felizmente os tempos mudaram.

Um consórcio de grandes empresas web como Google, Facebook, AWS, etc se juntou para patrocinar uma organização chamada ISRG que fundou a Let’s Encrypt, uma certificadora gratuita e automatizada que emite certificados e vem ganhando cada vez mais respeito no mercado.

Para gerar e instalar um certificado emitido pela Let’s Encrypt vamos utilizar um utilitário chamado Certbot. Use o comando abaixo para obtê-lo uma vez conectado via SSH no seu droplet, lembrando que ele é um Linux Ubuntu.

Depois de instalado o Certbot, vamos instalar o plugin para Nginx, visando facilitar nosso trabalho de configuração.

A instalação automatizada vai procurar uma configuração de Nginx que referencie o domínio para o qual você irá instalar o certificado. Sendo assim, vamos abrir o arquivo de configuração do Nginx para alterar a variável server_name.

Procure pela linha que diz:

E substitua por (colocando o seu domínio nas variações necessárias):

Depois do arquivo editado e salvo, reinicie o Ngnix.

Agora, para rodar o Certbot a fim de gerar e instalar o certificado no Nginx, rode o seguinte comando (incluí duas variações do domínio).

Durante a instalação, será solicitado o seu email e se concorda com os termos da Let’s Encrypt. tem uma pergunta se quer compartilhar o seu email com a fundação e a última, que é bem importante, diz sobre redirecionamento de tráfego HTTP para HTTPS, o que eu recomendo que você aceite, para ninguém conseguir utilizar sua aplicação sem segurança na rede.

O resultado é instantâneo, assim que você finalizar o assistente do Certbot, pode acessar a sua aplicação pelo domínio dela no navegador e verá o famoso cadeado.

Com isso, sua aplicação não apenas está publicada na Digital Ocean como seu domínio de produção está devidamente configurado e protegido. Para aplicações monolíticas ou somente web APIs, isso é o suficiente e esse tutorial encerra aqui.

Mas se você trabalha com ReactJS e seu front-end é separado do backend, leia este tutorial para saber como fazer o deploy dele também.

Até lá!

Curtiu o post? Então clica no banner abaixo e dá uma conferida no meu curso sobre programação com Node.js!

Curso Node.js e MongoDB

 

Hey,

o que você achou deste conteúdo? Conte nos comentários.