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

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

No tutorial de hoje, vamos ver como instalar e configurar o MySQL além de subir a sua aplicação Node.js plugada nele.

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

Instalando o MySQL

O LightSail fornece um produto de MySQL na nuvem extremamente robusto e profissional, mas proporcionalmente caro, algo a partir de U$15/mês na data que escrevo este tutorial. Ele é super simples de criar, você apenas dá nome ao banco, ao usuário e define uma senha, tendo como resultado o host que eles geram dinamicamente, para que você possa montar a sua connection string e usar na sua aplicação. Não precisa de tutorial pra isso.

Minha ideia aqui é lhe ensinar como instalar e configurar o MySQL dentro do mesmo servidor em que o Node.js está. Isso tem algumas vantagens como custo reduzido e performance nas consultas. E isso tem duas desvantagens, como você ser responsável pela administração do mesmo e no futuro o MySQL pode atrapalhar o desempenho da sua aplicação por consumir recursos demais da máquina, sendo que, para estudo, a máquina de 512MB resolve, mas se for realmente colocar uma aplicação a rodar, tenha em mente no mínimo 1GB, quiça 2GB.

Futuramente você pode aumentar os recursos da máquina ou executar o mesmo passo a passo abaixo em outra máquina Amazon Linux 2 se quiser separar o MySQL da aplicação Node.js, então não precisa ficar mega preocupado com isso não.

Mas vamos ao que interessa, abra o terminal SSH web clicando no botão laranja de “Connect using SSH” ou use seu cliente SSH favorito.

O primeiro passo a se fazer no terminal é baixar e instalar o pacote do MySQL para o servidor. Note que estou baixando aqui a versão 5.7, talvez você queira baixar outra versão na data que lê este tutorial, consulte as versões disponíveis em https://dev.mysql.com/downloads/mysql/ selecionando Linux Fedora.

O primeiro comando baixa, o segundo instala com Yum (o gerenciador de pacotes do Fedora).

O próximo passo é habilitar o MySQL logo na inicialização do sistema e iniciar ele no servidor, usando o utilitário systemctl do Fedora e o serviço mysqld do MySQL.

Quando o MySQL subir pela primeira vez, ele estará com um password root aleatório. Para ter acesso a esta senha temporária, rode o comando abaixo que vai dar uma olhada nos logs de instalação.

Anote a senha que este comando lhe fornecer pois você precisará dela na sequência.

Para deixarmos nossa instalação do MySQL profissional, vamos rodar o utilitário mysql_secure_installation como administrador. Ele vai lhe pedir a senha de administrador, que você pegou antes.

Logo após se autenticar, ele deve pedir para você mudar a senha do root para uma à sua escolha. Muita atenção nesta senha pois ela é a de admin geral do banco de dados.

Vá avançando pelos passos, este é um setup interativo para deixar seu servidor seguro. Recomendo escolher as opções mais seguras como não permitir acesso anônimo, não permitir acesso externo, remover database temporária, etc.

Preparando a aplicação

Quando o setup terminar, você vai precisar criar a base de dados da sua aplicação. Para isso, conecte-se no servidor de MySQL usando o comando abaixo.

Ele vai pedir a sua senha de root (a mesma que cadastrou antes) e logo depois você pode criar o banco de dados usando o comando abaixo (substitua seu-banco).

Eu não sei como você vai fazer para migrar os seus dados. Pode ser que você queira rodar algum comando de import, de restore ou os SQL um-a-um, você que sabe. Eu particularmente gosto de usar Sequelize com MySQL, que já cria a estrutura do banco automaticamente e o popula, basta ter a database criada.

Da mesma forma, tem muitas maneiras de trazer sua aplicação pra dentro do servidor. Você pode fazê-lo via FTP (apenas certifique-se de não subir a node_modules) ou via Git, que é meu método favorito.

O Git não vem instalado por padrão no Amazon Linux 2, então rode o comando abaixo para baixá-lo.

Com o Git instalado, clone o repositório do seu projeto, altere as variáveis de ambiente para apontar para seu MySQL recém instalado e para a porta que liberou no firewall do Lightsail para a aplicação (falei disso na parte 1, lembra?).

Se a sua aplicação funciona com TypeScript, recomendo instalar ele globalmente no servidor também, com o comando abaixo.

E por último, teste a sua aplicação, rodando primeiro o comando de instalar as dependências e depois o comando de inicialização da mesma, dentro da pasta dela.

Isso por si só já é o suficiente para sua aplicação Node.js funcionar. Se você acessar via Postman ou via navegador o seu IP público ou DNS, na porta da sua aplicação, já deve conseguir utilizar ela.

No entanto, se ela crashar por algum motivo ou o servidor reiniciar, ela não irá voltar sozinha. Por isso recomendo o uso do PM2, que ensino a usar 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.

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.