Deploy de aplicação Node.js + MySQL na Amazon AWS (LightSail)

No tutorial de hoje vamos aprender como publicar uma aplicação Node.js em conjunto do banco de dados MySQL na nuvem pública da AWS, de maneira profissional. No passado eu já ensinei como fazer isso para aplicações Node.js + MongoDB, caso lhe interesse também use este link.

Parto do pressuposto aqui que você já tem a aplicação Node.js pronta e que já tenha criado uma conta na AWS. Criar uma conta lá requer cartão de crédito, mas não se preocupe com taxas pois o serviço que vamos usar tem 30 dias grátis. Depois de fazer o tutorial pode excluí-lo se quiser.

E considerando que Node.js roda em Linux e consome pouquíssimos recursos, mesmo a AWS sendo um player caro se comparado a provedores menores, têm seu custo minimizado ao se trabalhar com esta plataforma, principalmente optando pelos datacenters nos EUA, que são os mais baratos (esqueça o datacenter em SP, ele já ficou fora do ar algumas vezes).

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 videoaula). Infraestrutura/servidores para quem está começando agora com desenvolvimento web eu recomendo a Umbler.

Curso FullStack

Criando o servidor

O primeiro passo é você criar o seu servidor virtual na Amazon AWS. Para isso, minha recomendação é usar o serviço Amazon Lightsail que torna muito mais simples esta tarefa através de dezenas de templates prontos.

Com a sua conta na Amazon criada e autenticado, acesse o painel do Amazon Lightsail.

Amazon Lightsail

Em Instance location, eu deixarei como “Virginia, Zone A”, nos EUA. É um excelente datacenter e a única razão para que eu lhe recomende algum outro é se seus outros serviços em nuvem que a sua aplicação Node.js vai se conectar estejam em outra região do país. Falarei mais sobre isso no futuro e, se for seu primeiro contato com AWS, use Virginia sem pensar duas vezes.

Escolha a plataforma Linux/Unix, como na imagem.

Selecione o blueprint (template) Amazon Linux 2, na categoria “OS Only”. Esta é uma distro Linux bem magra baseada em Fedora e mantida pela Amazon. Se você já conhece Fedora, RedHat ou CentOS, vai se sentir em casa.

Opcionalmente você pode deixar um script em shell que executará quando a máquina for iniciada e logo abaixo você pode criar chaves SSH próprias ou usar uma gerada pela AWS para você.

SSH
SSH

Na imagem acima você deve notar também que pode habilitar a opção de snapshots automáticos, para que seja feito backups do seu disco inteiro do servidor diariamente. Obviamente isso ocupa espaço e portanto irá lhe gerar custos, mas vale a pena caso tenha que fazer alguma restauração posterior. Falarei disso mais tarde também.

Na sequência, você vai escolher o tamanho da sua instância e descobrirá quanto irá pagar por ela. Na época que escrevo este artigo, os preços iniciam em U$3.50/mês por uma máquina com 1 CPU, 512MB RAM, 20GB SSD e até 1TB de tráfego no mês. É mais do que suficiente para um servidor Linux pelado só rodando um Node.js com uma aplicação pequena para estudos. Mas se for deixar uma aplicação real e o banco de dados for ficar na mesma máquina, coloque no mínimo 1GB de RAM.

Caso futuramente você precise de mais recursos, é possível mudar de plano para um upgrade geral e, em alguns casos, aumentar apenas um ou outro recurso (como disco, que pode ser expandido).

A título de curiosidade, o servidor mais caro disponível no Lightsail hoje (2020) é um com 8 CPUs, 32GB RAM, 640GB SSD e 7TB de transferência mensal por U$160/mês.

Os últimos passos são de identificação da sua máquina: o nome dela e as suas tags, sendo estas últimas opcionais. A minha instância vai ficar com o nome sugerido Node-js-1.

Clique em “Create instance”.

Em poucos minutos seu servidor estará pronto e executando com sucesso!

Configurando a rede

O primeiro passo é fixar um IP público estático. Por padrão a AWS associa um IP aleatório na sua máquina, que troca cada vez que você reinicia a mesma. Obviamente isso não é legal em ambiente produtivo, então vamos deixar um fixo na sua máquina.

Na mesma área de administração da instância, acesse a aba Networking.

Networking
Networking

Aqui você pode criar um IP estático (Create static IP) e futuramente, mexer nas regras de firewall, que hoje são apenas 3 portas liberadas (o resto está bloqueado por padrão). Por exemplo, se você não for colocar a sua aplicação Node.js para rodar na porta 80, certifique-se de liberar a sua porta no firewall da máquina.

As configurações do IP são bem simples, apenas selecione a instância e dê um nome ao mesmo (todos os recursos da Amazon permite que você dê nomes a eles, para gestão ficar mais fácil depois).

Anote o seu IP estático e saiba que a Amazon não cobra até IP estáticos associado a uma máquina.

Se você tiver um domínio de Internet (qualquer extensão: .com, .com.br, etc) e quiser apontar para este servidor é muito simples de fazê-lo também.

Se você já tiver uma zona de DNS em algum outro provedor, pode criar um registro A com um subdomínio apontando para o IP deste servidor nesta zona já existente. app.luiztools.com.br ou algo assim, que pode apontar para um servidor completamente diferente do site luiztools.com.br.

É o meu caso.

Mas se acabou de comprar um domínio e/ou não possui zona de DNS ainda, volte à home do Lightsail (onde aparecem os cards de todas suas instâncias) e selecione a aba Networking. Aqui você administra as suas zonas de DNS e seus IPs estáticos.

DNS e IP
DNS e IP

Clique no botão “Create DNS zone”. Na tela seguinte, digite o domínio que você registro e mande criar a zona.

A Amazon vai te fornecer quatro endereços de name servers (popularmente chamados de NS). Esses endereços devem ser colocados na empresa onde registrou o seu domínio (Registro.br, por exemplo).

E nesta zona, você deve adicionar o registro do tipo “A” (de Address), com o subdomain “@” e apontando para o seu IP do servidor (a Amazon lista os seus IPs para que não precise digitar o IP).

Registro de DNS
Registro de DNS

Com isso, em poucos segundos, o seu domínio já estará apontando para o servidor e poderá acessá-lo pelo nome no navegador.

Instalando o Node.js

Lembra que eu falei que o Amazon Linux 2 era extremamente magro? Pois é, ele não vem com quase nada instalado, por isso teremos de instalar e configurar quaisquer serviços e aplicações que queiramos nele, a começar pelo Node.js.

Acesse os detalhes da instância e clique no botão laranja enorme escrito “Connect using SSH”, o que vai abrir um terminal web conectado na sua instância, como abaixo. Se preferir, conecte-se ao IP do servidor carregando o certificado PEM em um cliente SSH desktop.

Uma vez no terminal de linha de comando web, rode o comando abaixo para baixar o Node.js 14 no seu servidor usando o utilitário cURL.

Depois de baixado, use o comando abaixo para instalar o Node.js usando o Yum, que é o gerenciador de pacotes do Fedora.

Para testar se o Node.js está funcionando, você pode rodar o comando abaixo, que deve exibir no terminal a versão instalada.

Seu servidor já está minimamente funcionando e possui Node.js instalado, mas nenhuma aplicação nele ainda. Na parte dois deste tutorial vou seguir configurando o mesmo e vou lhe ensinar como publicar sua aplicação Node.js. Clique aqui para ler!

Espero que tenha gostado do tutorial!

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

Publicado por

Luiz Duarte

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