feat: add API Key authentication, Dockerfile, and docker-compose

- core/auth.py: API Key auth via header X-API-Key (env PDFTOOLKIT_API_KEY)
  - Modo dev: sem chave configurada → acesso livre
  - Modo produção: exige chave, retorna 401/403
- api.py: endpoints protegidos com Depends(_auth_required)
  - /health e / permanecem públicos
- Dockerfile: multi-stage (base → api → web)
- docker-compose.yml: api + web com healthcheck, volumes e rede
- .env.example: template de variáveis de ambiente
- README.md: seções de autenticação e Docker
This commit is contained in:
CM Consultor
2026-08-09 02:38:19 +00:00
parent 84d4a1eab5
commit f16c53bd4c
8 changed files with 351 additions and 59 deletions

View File

@@ -4,6 +4,8 @@ Transforme, otimize e gerencie arquivos PDF com facilidade.
- **Interface Web**: Streamlit com upload drag-and-drop e configuração visual
- **API REST**: FastAPI com documentação OpenAPI automática em `/docs`
- **Autenticação**: API Key via header `X-API-Key` (configurável via env var)
- **Docker**: containers prontos para produção via docker-compose
- **Operações**: compressão, PDF/A ↔ PDF comum, merge, split, rotação, extração de texto e imagens
---
@@ -14,8 +16,9 @@ Transforme, otimize e gerencie arquivos PDF com facilidade.
- Python 3.12+
- pip
- Docker (opcional, para containers)
### Instalação
### Instalação (sem Docker)
```bash
git clone <url-do-repositorio> pdf-toolkit
@@ -23,7 +26,7 @@ cd pdf-toolkit
pip install -r requirements.txt
```
### Execução
### Execução (sem Docker)
**Streamlit (interface web):**
```bash
@@ -109,6 +112,75 @@ pdf-toolkit/
---
## 🔐 Autenticação da API
A API suporta autenticação via **API Key** no header `X-API-Key`.
### Configuração
Defina a variável de ambiente `PDFTOOLKIT_API_KEY`:
```bash
export PDFTOOLKIT_API_KEY="sua-chave-secreta-aqui"
```
Se a variável **não** estiver definida, a API roda sem autenticação (modo desenvolvimento).
### Uso com curl
```bash
curl -X POST http://localhost:8555/compress \
-H "X-API-Key: sua-chave-secreta-aqui" \
-F "file=@documento.pdf" \
-o comprimido.pdf
```
### Endpoints públicos (sem auth)
- `GET /` — raiz informativa
- `GET /health` — health check
---
## 🐳 Docker
### Com docker-compose (recomendado)
```bash
# 1. Copie e configure o .env
cp .env.example .env
# Edite .env com sua API Key
# 2. Inicie os serviços
docker compose up -d --build
# Acesse:
# - Streamlit: http://localhost:8550
# - API: http://localhost:8555
# - Swagger: http://localhost:8555/docs
```
### Build manual
```bash
# API
docker build --target api -t pdf-toolkit-api .
docker run -p 8555:8555 --env-file .env pdf-toolkit-api
# Web
docker build --target web -t pdf-toolkit-web .
docker run -p 8550:8550 --env-file .env pdf-toolkit-web
```
### Estrutura dos containers
- **api**: FastAPI + uvicorn, porta 8555
- **web**: Streamlit, porta 8550, depende do serviço `api`
- Volume compartilhado `uploads` para arquivos temporários
- Healthcheck em ambos os containers
---
## 🧪 Testes
```bash