Publicando sua aplicação Node.js no Amazon LightSail (AWS) – Parte 2

No tutorial anterior de publicação de aplicação Node.js na AWS, eu lhe mostrei como criar o servidor corretamente, pegar a senha root, definir IP público e apontar seu domínio para seu servidor.

No tutorial de hoje, vamos ver uma série de outras coisas bacanas e importantes para o seu servidor.

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.

Vamos ver nesta parte 2 do tutorial:

Vamos lá!

Curso FullStack

Configurando HTTPS/SSL no servidor

No passado, ter um certificado SSL era algo extremamente caro e seu site rodar em HTTPS era sinal de status de segurança. Hoje não mais. Hoje se considera HTTP/SSL o mínimo necessário de preocupação com os dados trafegados dos seus clientes e usuários, é uma obrigação e mesmo blogs e outros sites simples têm usado de certificadoras baratas ou até mesmo gratuitas, como a Lets Encrypt que vou mostrar hoje.

A Let’s Encrypt é uma organização sem fins lucrativos fundada por uma consórcio de empresas de Internet gigantescas que querem tornar a web mais segura. Principalmente porque o negócio deles depende disso, hehehe.

Uma vez que você esteja usando um template de servidor da Bitnami, eles já deixam um script de configuração de certificado SSL/TLS da Let’s Encrypt na sua máquina. Para rodá-lo, primeiro você deve se conectar ao servidor via SSH, seja pelo terminal web disponível no seu painel de controle do Amazon Lightsail ou por algum cliente qualquer, como Putty.

Conexão SSH
Conexão SSH

Uma vez conectado no servidor, rode o comando abaixo para iniciar o script de criação e configuração do certificado:

Esse comando iniciará um tutorial via linha de comando bem simples e passo-a-passo. O tutorial vai lhe perguntar o domínio que deseja adicionar HTTPS, pergunta se quer redirecionar automaticamente todo tráfego HTTP para HTTPS e pede um email para que você receba notificações acerca do seu certificado.

Quando você confirmar com os termos de uso, o script irá fazer as alterações necessárias, dentre elas configurar um CRON job para atualizar o certificado automaticamente a cada 3 meses, lhe avisando por email dessas atualizações. Ao terminar as alterações, o servidor é reiniciado automaticamente e o certificado passa a valer.

Certificado SSL
Certificado SSL

Configurando sua aplicação no Apache

Agora, o próximo passo é configurar o Apache para hospedar a sua aplicação Node.js. Neste tutorial, vou mostrar como hospedar uma aplicação no servidor, mas o template da Bitnami permite que você coloque várias aplicações diferentes, mas isso requer configurações mais avançadas que não abordarei aqui.

Primeiro, você precisará estar conectado via SSH no seu servidor. Uma vez conectado, rode os comandos abaixo para criar a estrutura de pastas de um novo site Apache, considerando que deve trocar app.luiztools.com.br pelo nome da sua aplicação.

Agora, crie e edite um arquivo httpd-prefix.conf dentro da pasta conf do seu site, incluindo a linha abaixo. Por exemplo, vou criar com o nano, um editor de texto via terminal bem simples (use o que preferir para criar este arquivo):

E adicionarei a linha abaixo dentro do arquivo:

Se estiver usando o nano, Ctrl+X para fechar o arquivo, confirme o salvamento com Y e depois mantenha o nome do arquivo com Enter.

Agora, crie e edite um arquivo httpd-app.conf dentro da pasta conf também. Usarei o nano novamente:

E incluirei dentro somente estas linhas:

Note que estou configurando aí o Apache como um Proxy Reverso, ou seja, para toda requisição que chegar da Internet, eu vou mandar para localhost:3000 (127.0.0.1 é o mesmo que localhost), que é a porta padrão do Express, mas que talvez você queira mudar. Configure conforme a sua necessidade.

Novamente, se estiver usando o editor de texto via terminal nano, Ctrl+X para fechar o arquivo, confirme o salvamento com Y e depois mantenha o nome do arquivo com Enter.

Uma vez que tenha criado a estrutura acima, adicione uma linha no arquivo de configuração principal do Apache. Usarei o nano novamente para abrir o arquivo e podermos editá-lo:

A linha abaixo deve ser adicionada ao final do referido arquivo bitnami-apps-prefix.conf:

Feche o arquivo (Ctrl+X) e agora reinicie o Apache para que suas alterações tenham efeito:

Pronto, agora você deve colocar os seus arquivos na pasta /opt/bitnami/apps/app.luiztools.com.br/htdocs, vou mostrar como pode fazê-lo na sequência. Por enquanto, se acessar seu site no navegador, notará que ele está fora do ar por enquanto.

Publicando sua aplicação via SFTP

Talvez o jeito mais fácil de se publicar sua aplicação Node.js no servidor seja através de FTP, ou melhor, SFTP, que é o FTP sobre SSH, que é mais seguro. Para fazê-lo é muito simples: basta configurar seu cliente de SFTP favorito e eu recomendo o Filezilla.

Uma vez com o Filezilla instalado, crie um novo site, dando um nome à ele e siga as configurações abaixo:

  • em protocolo, escolha SFTP;
  • em host, coloque o IP ou hostname do seu servidor (o meu eu configurei o DNS no tutorial passado para app.luiztools.com.br, lembra?);
  • em Tipo de Login, selecione “Arquivo chave”;
  • em Usuário, se você não mudou, é bitnami;
  • em “Arquivo com chave”, selecione o certificado PEM que você baixou durante a criação da sua máquina. Caso não tenha feito da primeira vez, pode baixar de novo na área de configurações da sua conta;

Agora basta clicar em conectar e você verá a estrutura de diretórios do seu servidor, assim como faz quando se conecta via SSH.

SFTP
SFTP

Logo na raiz você deve encontrar a pasta do Apache (webserver) e um atalho para a pasta htdocs, onde está o site que você visualiza quando acessa o IP ou domínio no navegador. Altere o texto da index e você verá as alterações na página raiz.

Este NÃO é o seu site. Não adianta subir sua aplicação aqui.

Navegue pela estrutura de pastas até chegar onde deve ficar a sua aplicação. Se você seguiu as minhas instruções à risca, você vai ter de navegar alguns diretórios acima da raiz onde o Filezilla vai te deixar depois de conectado. A minha aplicação está configurada para /opt/bitnami/apps/app.luiztools.com.br/htdocs. Você pode digitar o caminho diretamente no Filezilla, na barra de endereço acima da estrutura de pastas do servidor.

Suba seus arquivos para esta pasta, sem a node_modules e sem os arquivos ENV se estiver usando dotenv. O arquivo ENV deve ser criado diretamente no servidor, mais tarde, com as configurações de produção.

Atenção: se você não estiver conseguindo subir via SFTP por falta de permissão (permission denied ou algo assim), conecte-se no servidor via SSH e rode o comando abaixo (altere o caminho da pasta conforme a sua), para dar permissão ao usuário bitnami:

Na sequência, vamos ver como executar esta aplicação de fato.

Executando sua aplicação Node.js no servidor

Volte ao SSH. Sim se você não gostava dele antes, agora ele será seu melhor amigo, hehehe.

Acesse a pasta da sua aplicação, a minha eu acesso com o comando abaixo. Tomei a liberdade de incluir o comando para instalar as dependências da sua aplicação (lembra que eu disse para você não subir a node_modules?) e o comando para iniciá-la, do jeito mais básico possível:

Agora, se tudo deu certo, você pode acessar novamente a sua aplicação no navegador, quer pelo IP, quer pelo nome, como mostra a minha aplicação funcionando abaixo (sim, eu subi a aplicação padrão do Express-Generator).

Node funcionando
Node funcionando

Note que subir sua aplicação com “npm start” não é muito recomendado pois, se ela cair, ficará fora até que você note e entre no servidor novamente para reiniciá-la. Sendo assim, o ideal é usar algum gerenciador de processo, como forever ou PM2, sendo que recomendo e ensino a usar este último neste tutorial e no vídeo abaixo.

Criando um snapshot como backup do servidor

Se você não deixou configurado para serem feitos snapshots diários do seu servidor, você terá de fazê-lo tão logo termine de configurar e subir a sua aplicação para o servidor. Afinal, imagine ter de fazer todos os passos que já fizemos até aqui de novo caso dê algum problema com a sua máquina?

Para Fazê-lo é muito simples, basta ir na área de administração (Manage) da sua instância e acessar a aba Snapshots.

Snapshots
Snapshots

Ali você pode tanto configurar os snapshots automáticos quanto criar um manualmente. Saliento que snapshots ocupam espaço em disco e consequentemente são cobrados pela Amazon, embora não sejam caros.

Se a sua máquina na Amazon for multi-core e você quiser aproveitar todo o desempenho dela, dá uma olhada no vídeo abaixo de como subir o Node.js em modo cluster.

Na parte 3, que você pode ler aqui, falarei de como subir a sua base MongoDB para a AWS também!

Espero que tenha gostado do tutorial!

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

Publicado por

Luiz Duarte

Pós-graduado em computação, professor, empreendedor, autor, Agile Coach e programador nas horas vagas.