segunda-feira, 21 de outubro de 2024

Automação do Deploy da Aplicação com GitHub Actions


Fala pessoal, tudo certo?

Dando sequência, agora vamos providenciar um processo de automação de deploy da nossa aplicação de gerenciamento de tasks com o GitHub Action e também com o Render.

O que é o Render?

Render é uma plataforma de nuvem que simplifica o processo de implantação e gerenciamento de aplicações. Ele oferece uma ampla gama de serviços, como:

  • Hospedagem de Aplicações Web: Permite implantar aplicações web em diversas linguagens, como Python, Node.js, Ruby, entre outras, com facilidade.

  • Deploy Automático: Render integra-se facilmente com repositórios do GitHub e GitLab, permitindo que você faça deploy automaticamente toda vez que houver um push para a branch principal.

  • Escalabilidade: A plataforma é projetada para escalar automaticamente suas aplicações, oferecendo planos de pagamento que variam de gratuito a soluções pagas, dependendo das necessidades do projeto.

  • Suporte a Servidores e Contêineres: Render suporta a execução de aplicações em contêineres Docker e também permite a criação de servidores dedicados.

  • Simplicidade e Facilidade de Uso: Com uma interface amigável e recursos de configuração simples, o Render torna o processo de implantação acessível para desenvolvedores de todos os níveis de experiência.

Em resumo, o Render é uma ótima escolha para desenvolvedores que buscam uma solução simples e eficaz para hospedar suas aplicações na nuvem, sem se preocupar com a complexidade da infraestrutura.

Outro ponto importante do Render, podemos usar para estudo sem gerar custo. =]

Antes de mais nada, você precisar criar sua conta no site do Render - https://render.com/

Depois de ter sua conta criada, vamos ao passo-a-passo.

Criando o Web Service no Render:

Agora, no site do Render, vamos criar nosso projeto / aplicação para que o WorkFlow saiba onde fazer o deploy.

Na página inicial do Render, Clique em + New - Web Service

Conecte-se ao repositório do Git onde está o projeto do gerenciamento de tarefas.

De um nome para ele, pode ser app-task-api, por exemplo.

Na tela seguinte, tera um breve resumo de configurações feitas automaticamente. Mas também teremos alguns itens que precisamos fornecer as informações.

Em Start Command, inseria o comando que o Render irá utilizar para fazer o start da aplicação:

python app.py

Em Instance Type, selecione a opção Free.

E por último, clique no botão Deploy Web Service.

Feito isso, agora vamos voltar para nossa máquina onde está o projeto propriamente dito.

Alteração no app.py

Primeiramente, precisamos adicionar a configuração abaixo no app.py para que seja possível subir IP e Porta no Deploy do Render:

if __name__ == '__main__':

app.run(host='0.0.0.0', port=10000)

Ele ficará quase no final do arquivo:

Criar o arquivo de dependência

Dentro da pasta onde está nosso projeto, vamos criar o arquivo requeriments.txt com as dependências abaixo:

Flask==2.0.2

Werkzeug==2.0.3

Depois, vamos criar o path onde irá residir o arquivo do workflow:

mkdir -p .github/workflows

Lembre-se que aqui, ainda estamos dentro da pasta do projeto.

Vamos entrar dentro deste novo diretório:

cd .github/workflows

Criar o arquivo de deploy.yml e adicionar o seguinte conteúdo:

vi deploy.yml
name: Deploy to Render

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.8'  # ou a versão que você estiver usando

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Deploy to Render
        env:
          RENDER_API_KEY: ${{ secrets.RENDER_API_KEY }}
        run: |
          curl -X POST https://api.render.com/deploy/srv-xxxxxxxx  # substitua 'srv-xxxxxxxx' pelo ID do seu serviço

** Essa informação da URL e ID do serviço, você encontra no site do Render - Dentro da estrutura do seu Web Service - Settings - Deploy hook.

Altere para o valor correspondente do seu seriço e salve o arquivo.

Fazendo o push das alterações

Depois de criar o requirements.txt, workflow e alterar o app.py, adicione e faça o commit dessas alterações:

git add requirements.txt .github/workflows/deploy.yml app.py
git commit -m "Add requirements GitHub Actions workflow and app.py update"
git push origin main
Após executar o push, podemos ver que no GitHub Actions teremos um start do WorkFlow:



No Render, dentro de Logs temos o processo de Deploy dentro da ferramenta:

Assim que o Deploy finalizar, mais acima nessa tela temos a URL para acessar e testar nossa aplicação:

Como não teremos nada ainda, o retorno ao acessar a URL deve ser esse (lembrando que precisamos colocar no final dela /api/tasks):


Agora, vamos fazer um teste direto na API.

Para isso, vamos executar o comando curl fazendo o post de um preenchimento de informação:

curl -X POST https://task-api-5rkl.onrender.com/api/tasks -H "Content-Type: application/json" -d '{"title": "Tarefa 1", "completed": false}'

Lembre-se de atualizar a URL de acordo com a da sua aplicação.

Quando acessarmos novamente a aplicação, o resultado será esse:

Com mais esse post, agora já concluímos as seguintes etapas:

  1. Criação de uma aplicação com API exposta para gerenciamento de tarefas;
  2. Utilizar um repositório com versionamento de código;
  3. Automação do processo de Deploy e Publicação da aplicação;
Abs e até a próxima. =]
:wq!

Nenhum comentário:

Postar um comentário