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 e já ensinei como fazer isso na Digital Ocean também.
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).
Esse tutorial considera que sua aplicação Node.js é um backend HTTP/HTTPS. Caso ele forneça serviço de websockets (WS/WSS), use este outro tutorial.
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).
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.
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.
Na imagem abaixo 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).
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 Amazon_Linux_2023-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.
Aqui você pode criar um IP estático (Attach static IP) e futuramente, mexer nas regras de firewall, que hoje são apenas 3 portas liberadas (o resto está bloqueado por padrão). 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 o primeiro IP estático associado a uma máquina.
Se você tiver um domínio de Internet (qualquer extensão: .com, .com.br, etc, recomendo a Freenom para domínios gratuitos e a Umbler para pagos) 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.
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 ou Umbler, 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).
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 2023 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 NVM, que é o gerenciador de versões do Node.
1 2 3 |
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash |
Depois de baixado, use o comando abaixo para ativar o NVM.
1 2 3 |
. ~/.nvm/nvm.sh |
E por fim o comando abaixo para instalar a versão estável recomendada de Node (LTS).
1 2 3 |
nvm install --lts |
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 e seu banco dados. Escolha o link abaixo de acordo com seu banco:
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!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.