Este projeto é um exemplo prático de como configurar uma aplicação FastAPI utilizando Docker, integração contínua (CI) com GitHub Actions e deploy na AWS. O objetivo é demonstrar boas práticas para desenvolvimento, testes automatizados e deploy de aplicações modernas.
Este projeto consiste em uma aplicação simples em FastAPI com três endpoints:
/
: Retorna uma mensagem "Hello World"./items/{item_id}
: Retorna um JSON com oitem_id
e um parâmetro opcionalq
./hi
: Retorna uma mensagem "hi".
A aplicação é containerizada usando Docker, testada automaticamente com GitHub Actions e pode ser implantada na AWS (ou outro provedor de nuvem).
- Docker instalado na sua máquina.
- Git para clonar o repositório.
- Uma conta no Docker Hub para push da imagem.
- Uma conta na AWS para deploy (opcional).
- Clone o repositório:
git clone https://github.com/GeorgeOgeorge/github-ci-test
cd github-ci-test
- Construa a imagem Docker:
docker build -tag fastapi-app .
- Execute o contêiner:
docker run --detach --name fastapi-container fastapi-app
-
Acesse a aplicação:
Abra o navegador e acesse:
- http://localhost:8000/ para ver "Hello World".
- http://localhost:8000/hi para ver "hi".
- http://localhost:8000/items/42?q=test para testar o endpoint de items.
O projeto utiliza GitHub Actions para automatizar testes, builds e push da imagem Docker para o Docker Hub. O workflow está configurado no arquivo .github/workflows/build-push-ci.yml.
- Testes: Executa testes automatizados (lint e pytest).
- Build: Constrói a imagem Docker.
- Push: Envia a imagem para o Docker Hub.
- DOCKER_HUB_USERNAME: Nome de usuário do Docker Hub.
- DOCKER_HUB_TOKEN: Token de acesso pessoal do Docker Hub.
O deploy na AWS pode ser feito manualmente ou automatizado usando serviços como AWS ECS (Elastic Container Service) ou AWS Fargate. A imagem Docker gerada pode ser usada diretamente no ECS.
- Push da imagem para o Docker Hub (já feito pelo CI).
- Crie um cluster no ECS.
- Configure um serviço para rodar a imagem Docker.
- Acesse a aplicação via endpoint público gerado pela AWS.
A aplicação está containerizada usando Docker. O Dockerfile contém todas as instruções necessárias para construir a imagem.
-
Construir a imagem:
docker build -t fastapi-app .
-
Rodar o contêiner:
docker run -d -p 8000:8000 --name fastapi-container fastapi-app
-
Parar o contêiner:
docker stop fastapi-container
-
Remover o contêiner:
docker rm fastapi-container
O projeto inclui testes automatizados usando pytest e verificação de estilo de código com flake8.
-
Instale as dependências:
pip install -r requirements.txt
-
Execute os testes:
pytest
-
Verifique o lint:
flake8 .
-
GET /:
- Retorno: {"Hello": "World"}
-
GET /items/{item_id}:
-
Parâmetros:
- item_id (int): ID do item.
- q (str, opcional): Query string.
-
Retorno: {"item_id": 42, "q": "test"}
-
-
GET /hi:
- Retorno: {"hi": "hello"}
Se tiver dúvidas ou sugestões, entre em contato:
Nome: George Mendonça Silva de Morais
Email: george1bsilva@outlook.com
GitHub: GeorgeOgeorge
Este projeto é um exemplo prático para estudos e demonstração de boas práticas de desenvolvimento. Sinta-se à vontade para utilizá-lo como base para seus próprios projetos! 🚀