Configuração do Projeto
Este documento descreve as configurações necessárias para executar a API de Gerenciamento de Carros.
Variáveis de Ambiente
O projeto utiliza um arquivo .env para armazenar as variáveis de ambiente sensíveis. Crie um arquivo .env na raiz do projeto com as seguintes variáveis:
DATABASE_URL=sqlite+aiosqlite:///./car.db
JWT_SECRET_KEY=sua_chave_secreta_aqui
JWT_ALGORITHM=HS256
JWT_EXPIRATION_MINUTES=30
Descrição das Variáveis
DATABASE_URL: URL de conexão com o banco de dados. O padrão usa SQLite, mas pode ser alterado para PostgreSQL ou MySQL.JWT_SECRET_KEY: Chave secreta usada para assinar os tokens JWT. Substitua pelo valor seguro em produção.JWT_ALGORITHM: Algoritmo usado para codificar os tokens JWT (padrão: HS256).JWT_EXPIRATION_MINUTES: Tempo de expiração dos tokens JWT em minutos (padrão: 30).
Configuração do Banco de Dados
SQLite (Padrão)
O banco de dados padrão é SQLite, que cria um único arquivo (car.db) no diretório raiz. Esta configuração é adequada para desenvolvimento e testes.
PostgreSQL
Para usar PostgreSQL, altere a variável DATABASE_URL:
DATABASE_URL=postgresql+asyncpg://usuario:senha@localhost:5432/nome_do_banco
Certifique-se de instalar as dependências adicionais:
poetry add asyncpg
MySQL
Para usar MySQL, altere a variável DATABASE_URL:
DATABASE_URL=mysql+aiomysql://usuario:senha@localhost:3306/nome_do_banco
Certifique-se de instalar as dependências adicionais:
poetry add aiomysql
Configuração do Servidor
FastAPI
A aplicação é configurada em car_api/app.py e pode ser iniciada com diferentes opções:
# Modo de desenvolvimento com recarga automática
poetry run fastapi dev car_api/app.py
# Modo de produção
poetry run uvicorn car_api.app:app --host 0.0.0.0 --port 8000 --workers 4
Parâmetros de Configuração
--host: Endereço IP para escutar (padrão: 127.0.0.1)--port: Porta para escutar (padrão: 8000)--workers: Número de workers (padrão: 1, útil apenas em produção)--reload: Ativa recarga automática (apenas em desenvolvimento)
Configuração de Segurança
JWT Tokens
A API utiliza autenticação baseada em JWT (JSON Web Tokens). Os tokens têm validade de 30 minutos por padrão, conforme definido na variável JWT_EXPIRATION_MINUTES.
Hash de Senhas
As senhas são armazenadas com hash usando Argon2, um algoritmo de hashing de senha resistente a ataques de força bruta.
Configuração do Alembic (Migrações)
O projeto utiliza Alembic para gerenciamento de migrações de banco de dados. O arquivo de configuração está em alembic.ini.
Para executar migrações:
# Aplicar todas as migrações pendentes
poetry run alembic upgrade head
# Criar nova migração
poetry run alembic revision --autogenerate -m "Descrição da migração"
# Reverter última migração
poetry run alembic downgrade -1
Configuração do Linter e Formatador
O projeto utiliza Ruff para linting e formatação de código. As configurações estão em pyproject.toml:
[tool.ruff]
line-length = 79
exclude = [
# Lista de diretórios excluídos
]
[tool.ruff.lint]
preview = true
select = ['I', 'F', 'E', 'W', 'PL', 'PT']
ignore = ['PLR2004', 'PLR0917', 'PLR0913']
[tool.ruff.format]
preview = true
quote-style = 'single'
Para executar o linter e formatador:
# Verificar problemas de estilo
poetry run ruff check
# Corrigir automaticamente problemas
poetry run ruff check --fix
# Formatar código
poetry run ruff format
Configuração do MkDocs
A documentação é gerada com MkDocs Material. As configurações estão em mkdocs.yml:
site_name: Car API
site_description: Uma API REST completa para gerenciamento de carros e usuários
site_author: Rolv
theme:
name: material
palette:
primary: green
font:
text: Roboto
nav:
- Início: index.md
# Outras páginas de documentação
plugins:
- search
Para servir a documentação localmente:
poetry run mkdocs serve -a 127.0.0.1:8001
Configuração de Logs
Atualmente, o projeto não possui configuração específica de logs, mas o FastAPI fornece logs básicos. Em produção, recomenda-se configurar logs mais detalhados com bibliotecas como structlog ou logging.
Configuração para Produção
Para ambiente de produção, considere as seguintes configurações:
- Use um banco de dados robusto como PostgreSQL
- Configure uma chave JWT segura e rotacionável
- Defina limites de taxa de requisições
- Configure HTTPS/TLS
- Monitore o desempenho e erros
- Configure backups regulares do banco de dados