Olá a todos, hoje quero fazer um tutorial sobre uma das minhas maneiras favoritas de implantar uma API REST rápida, usando NodeJS/Express, em um servidor Amazon EC2. Essa técnica essencialmente permite que seu servidor EC2 responda às alterações enviadas ao seu repositório GitHub.
Crie um novo diretório em sua máquina para que um aplicativo NodeJS/Express funcione. Estou chamando meu rekognition
Abra um terminal e execute este comando para inicializar um package.json npm init -y
Instale express.js npm i express
Crie um servidor expresso básico com um 'olá mundo' na rota padrão
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });
Teste para ter certeza de que está vendo 'Hello World!' em http://localhost:3000/
Bom trabalho, primeiro passo concluído! 💪
Inicialize um repositório Git em seu diretório e faça seu primeiro commit —
git init git add . git commit -m "First commit"
Crie um repositório remoto em sua conta GitHub
Adicione o novo repositório como origem e envie seu branch.
git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master
Substitua <REMOTE_REPOSITORY_URL>
pelo link para o repositório remoto que você acabou de criar.
Pode ser necessário alterar as configurações do repositório para usar 'master' como branch padrão em vez de 'main'.
Depois de fazer isso, você pode excluir o branch 'principal'.
Etapa 2: concluir! Estamos cozinhando com gás ⛽️
Aqui estão as etapas para iniciar sua instância EC2:
Navegue até o painel do EC2 e execute uma nova instância.
Escolha uma AMI (Amazon Machine Image) apropriada; Estou usando o Amazon Linux 2.
Agora, vamos testar o login no seu servidor via SSH em um terminal:
ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem
Substitua as variáveis pelos valores que você definiu para sua instância EC2.
Se você vir isso, você se conectou ao seu servidor, parabéns! 👏
Vamos instalar o NodeJS em nosso servidor:
sudo yum install -y nodejs
Instale o pm2 globalmente em nosso servidor via npm
sudo npm i -g pm2
Instale o git no servidor e configure suas credenciais:
sudo yum install git -y
git config --global user.name "Your Name" git config --global user.email "[email protected]"
Ok, agora vamos criar uma pasta var/www/
se ela ainda não existir:
sudo mkdir -p /var/www
Em seguida, adicione propriedade ao nosso usuário ec2:
sudo chown -R ec2-user:ec2-user /var/www
Navegue até o diretório da raiz do seu servidor - não a pasta /home people 👌 cd ~/var/www
Agora, a partir daqui, clonaremos nosso repositório git: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY
Substitua [USERNAME] [REPO_NAME] e [YOUR_PROJECT_DIRECTORY] pelos seus próprios valores.
Em seguida, alteramos o diretório para nosso repositório, para que cd YOUR_PROJECT_DIRECTORY
possa criar o arquivo ecosystem.config.js
para nossa configuração pm2:
nano ecosystem.config.js
Se parece com isso:
module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };
Feijão legal, ok - depois de criado e salvo, vamos iniciar o aplicativo com pm2:
pm2 start ecosystem.config.js
Agora podemos verificar se temos um 'Hello World!' do nosso servidor na porta 3000:
Para fazer o pm2 iniciar automaticamente na reinicialização do servidor, vamos executar:
pm2 save pm2 startup
Para verificar se o seu servidor está funcionando, você pode fazer pm2 status
; você pode ler os documentos no pm2 aqui
Se você chegou até aqui, você é uma estrela ⭐️
Esta é a última etapa do nosso processo. Vamos criar um arquivo .yml
para ações do Github para atualizar nosso servidor sempre que uma alteração for enviada para nosso branch master
No seu repositório, vá para a aba ‘Ações’ e crie um novo fluxo de trabalho personalizado. Estou chamando meu nodejs.yml
Aqui está o arquivo .yml para atualizar o repositório e reiniciar o pm2:
name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application
Certifique-se de atualizar 'your_project_directory'
Por último, você precisará adicionar esses segredos de ambiente. REMOTE_HOST
este é o endereço IP do seu servidor; REMOTE_USER
este é ec2-user
para Amazon Linux 2 AMI e, em seguida, cole o conteúdo do seu arquivo .pem como SSH_PRIVATE_KEY
Você pode fazer tudo isso nas configurações do repositório:
É isso! Terminamos, sim 😁
Você pode testar tudo isso alterando a mensagem 'Hello World' e enviando essa alteração para seu branch master; então você deverá ver a atualização em http://your.ip.address:3000
É um pouco complicado de configurar, mas quando você está desenvolvendo, é muito bom ter um pipeline de CI/CD fácil implantando automaticamente alterações em seu servidor REST API. Dessa forma, você pode implantar rapidamente as alterações ao vivo e vê-las no front-end do seu aplicativo web/móvel.
Deixe-me saber se isso foi útil nos comentários e obrigado pela leitura!!
Paz,
- Wes