Este projeto é uma API desenvolvida com FastAPI para gerenciar alunos, cursos e matrículas em uma instituição de ensino.
A maneira mais simples e recomendada de executar o projeto é usando Docker Compose, que orquestra todos os contêineres (API, Frontend, Bancos de Dados, Monitoramento).
A partir da raiz do projeto, execute:
docker-compose up --build -dEste comando irá construir as imagens e iniciar todos os serviços em segundo plano.
Após iniciar os contêineres, os seguintes serviços estarão disponíveis:
-
API (Backend):
- URL:
http://localhost:8000 - Docs Interativos (Swagger):
http://localhost:8000/docs - Métricas:
http://localhost:8000/metrics
- URL:
-
Webtop (Ambiente de Teste Visual):
- URL:
http://localhost:3000 - Descrição: Um ambiente de desktop completo rodando no seu navegador. É a principal forma de interagir visualmente com o frontend em um ambiente isolado.
- URL:
-
Frontend (dentro do Webtop):
- URL:
http://localhost:3001 - Como usar: Acesse o desktop do Webtop, abra o navegador Chromium que já vem instalado e navegue para
http://frontend.
- URL:
-
Monitoramento:
- Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3003/login- Usuário:
admin - Senha:
admin
- Usuário:
- Prometheus:
Esta abordagem é ideal se você deseja modificar o código da API e ver as alterações instantaneamente (hot-reload), enquanto se conecta ao banco de dados que está rodando no Docker.
-
Inicie o serviço do banco de dados:
docker-compose up -d db
-
Prepare o ambiente Python (na raiz do projeto):
-
Crie e ative um ambiente virtual:
python3 -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows
-
Instale as dependências:
pip install -r requirements.txt
-
-
Configure a variável de ambiente do banco de dados:
-
Linux/macOS:
export DATABASE_URL="postgresql+psycopg2://ellis_user:ellis_pass@localhost:5432/ellis_db"
-
Windows (PowerShell):
$env:DATABASE_URL="postgresql+psycopg2://ellis_user:ellis_pass@localhost:5432/ellis_db"
-
-
Execute a aplicação com Uvicorn:
uvicorn api.app:app --reload
A API estará disponível em
http://localhost:8000.
Para garantir a qualidade e a integridade do código, o projeto inclui uma suíte de testes unitários e de integração.
Para executar os testes da API em um ambiente isolado que se conecta ao banco de dados de teste (db_test):
docker-compose run --rm testsPara executar os testes E2E que simulam a interação do usuário com o frontend:
docker-compose run --rm e2e-testsO projeto inclui um stack completo de monitoramento usando Prometheus e Grafana:
- HTTP Requests: Total de requisições por endpoint e status
- Response Time: Tempo de resposta das requisições
- Active Connections: Conexões ativas no banco de dados
- Database Operations: Operações de banco de dados por tipo
- Application Health: Status geral da aplicação
- Acesse
http://localhost:3003/login - Faça login com
admin/admin - Adicione Prometheus como datasource:
http://prometheus:9090 - Importe dashboards personalizados ou crie os seus próprios
Configure alertas no Grafana para monitorar:
- Alta latência nas requisições
- Erros 5xx frequentes
- Uso excessivo de CPU/memória
- Falhas de conexão com o banco de dados
ellis/ ├── api/ # Contém toda a lógica do backend (FastAPI) │ ├── routers/ # Módulos de rotas (alunos, cursos, etc.) │ ├── app.py # Ponto de entrada da aplicação FastAPI │ ├── database.py # Configuração da conexão com o banco de dados │ ├── models.py # Modelos de dados (SQLAlchemy ORM) │ └── schemas.py # Schemas de validação de dados (Pydantic) ├── frontend/ # Contém toda a lógica do frontend (React) │ ├── src/ │ └── Dockerfile # Define como construir a imagem de produção do frontend ├── tests/ # Testes unitários e de integração do backend (Pytest) ├── e2e-tests/ # Testes de ponta a ponta (Playwright) ├── docker-compose.yml # Orquestra todos os serviços da aplicação ├── Dockerfile # Define a imagem da API ├── prometheus.yml # Configuração do Prometheus └── readme.md # Este arquivo
- Porta já em uso: Verifique se as portas 8000, 3000, 3001, 3003 e 9090 estão disponíveis
- Grafana não carrega: Aguarde alguns segundos para o serviço inicializar completamente
- Métricas não aparecem: Certifique-se de que a API está recebendo requisições
Para visualizar logs específicos:
docker-compose logs -f [nome_do_serviço]Serviços disponíveis: api, frontend, db, prometheus, grafana, webtop