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 configurar o PostgreSQL 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).
Criando o banco PostgreSQL
O LightSail fornece um produto de PostgreSQL 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 PostgreSQL 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 PostgreSQL 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çá 2GB.
Futuramente você pode aumentar os recursos da máquina ou executar o mesmo passo a passo abaixo em outra máquina Amazon Linux 2023 se quiser separar o PostgreSQL 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 PostgreSQL para o servidor.
1 2 3 4 |
sudo dnf update sudo dnf install postgresql15.x86_64 postgresql15-server |
O primeiro comando atualiza as referências e o segundo instala o PostgreSQL em si. Eventualmente algum dos comandos vai pedir confirmação para instalar, o que você faz apenas apertando y.
O próximo passo é inicializar o PostgreSQL e registrá-lo para iniciar junto do Linux.
1 2 3 4 5 |
sudo postgresql-setup --initdb sudo systemctl start postgresql sudo systemctl enable postgresql |
Quando o PostgreSQL subir pela primeira vez, ele estará com um password root aleatório. Para mudar a senha de administrador use o comando abaixo.
1 2 3 |
sudo passwd postgres |
Para deixarmos nossa instalação do PostgreSQL profissional, vamos trocar também a senha do banco default. Para isso, primeiro se autentique como root usando o primeiro comando, depois mude a senha do usuário do banco default com os demais comandos abaixo.
1 2 3 4 5 |
su - postgres psql -c "ALTER USER postgres WITH PASSWORD 'nova-senha';" exit |
Não há necessidade de mexer em nada relacionado à rede pois a instalação default só aceita conexões localhost por padrão. Mas precisando fazer outras tarefas alternativas você irá precisar editar o arquivo de configuração do Postgre, que fica em /var/lib/pgsql/data/postgresql.conf
Preparando a aplicação
Quando o setup terminar, você vai precisar criar um usuário e uma base de dados da sua aplicação. Para isso, conecte-se no servidor de PostgreSQL usando o comando abaixo.
1 2 3 |
sudo -u postgres psql |
Ele vai pedir a sua senha de root (a mesma que cadastrou antes) e logo depois você pode criar o usuário e banco de dados usando o comando abaixo (substitua seu-banco).
1 2 3 4 5 6 |
CREATE USER your-username WITH PASSWORD 'password'; CREATE DATABASE database_name; GRANT ALL PRIVILEGES ON DATABASE database_name TO your-username; exit |
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 PostgreSQL, 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 2023, então rode o comando abaixo para baixá-lo.
1 2 3 |
sudo yum install git -y |
Com o Git instalado, clone o repositório do seu projeto, altere as variáveis de ambiente para apontar para seu PostgreSQL recém instalado e para a porta que liberou no firewall do Lightsail para a aplicação (falei disso na parte 1, lembra?).
1 2 3 |
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.
1 2 3 |
npm i && npm start |
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.
Um resumo dos comandos necessários para instalar e usar o PM2 na sua máquina da Amazon pode ser encontrado abaixo. O primeiro comando instala o PM2 globalmente, o segundo registra ele na inicialização do servidor, o terceiro (que deve ser executado dentro da pasta do projeto) registra a sua aplicação no PM2 (definindo que ela vai rodar com npm start) e o último salva suas novas configurações.
1 2 3 4 5 6 |
npm install -g pm2 pm2 startup pm2 start npm --name nomeApp -- start pm2 save |
Outra alternativa é usar um arquivo de configuração JSON na raiz do seu projeto, aí o comando de registro da sua aplicação fica levemente diferente, tendo de referenciar o arquivo JSON.
1 2 3 |
pm2 start seuarquivo.json |
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.
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!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.