🐳 Dockerfiles Guide¶
Autor: Anderson Henrique da Silva Localização: Minas Gerais, Brasil Última Atualização: 2025-10-13 15:15:18 -0300
Author: Anderson Henrique da Silva Date: 2025-10-07 21:38:00
📁 Arquivos Disponíveis¶
Este projeto possui dois Dockerfiles diferentes para diferentes ambientes de deploy:
1. Dockerfile - Railway/Render/Produção¶
Uso: Deploy em Railway, Render, ou qualquer plataforma de produção
Características:
- ✅ API completa (src.api.app)
- ✅ Porta dinâmica (${PORT})
- ✅ PostgreSQL client incluído
- ✅ Healthcheck com 40s startup
- ✅ Suporte a Celery workers
- ✅ Otimizado para produção
Como usar:
2. Dockerfile.hf - HuggingFace Spaces¶
Uso: Deploy no HuggingFace Spaces
Características:
- ✅ API simplificada (start_hf.py)
- ✅ Porta fixa 7860 (padrão HF Spaces)
- ✅ Healthcheck com 5s startup
- ✅ Sem dependências de DB
- ✅ Otimizado para ambiente HF
Como usar no HuggingFace:
1. Renomeie Dockerfile.hf para Dockerfile
2. Push para o branch hf-fastapi
3. HuggingFace detecta e faz deploy automático
Como testar localmente:
🎯 Qual Usar?¶
Railway/Render → Use Procfile (Recommended)¶
# Railway prioriza Procfile sobre Dockerfile
# Certifique-se de que railway.toml/railway.json NÃO existem
# Railway detecta e usa Procfile automaticamente
git push origin main
IMPORTANTE: Se railway.toml, railway.json ou nixpacks.toml existirem, faça backup:
mv railway.toml railway.toml.backup
mv railway.json railway.json.backup
mv nixpacks.toml nixpacks.toml.backup
HuggingFace Spaces → Use Dockerfile.hf¶
# Copiar antes de fazer push para HF
cp Dockerfile.hf Dockerfile
git push huggingface main:hf-fastapi
Docker Compose local → Use docker-compose.yml¶
🔧 Diferenças Técnicas¶
| Feature | Dockerfile (Produção) |
Dockerfile.hf (HF Spaces) |
|---|---|---|
| Entry Point | src.api.app |
start_hf.py |
| Porta | Dinâmica (${PORT}) |
Fixa (7860) |
| PostgreSQL | ✅ Cliente incluído | ❌ Não necessário |
| Healthcheck Start | 40s | 5s |
| Celery Support | ✅ Full | ❌ Não suportado |
| WebSocket | ✅ Completo | ✅ Básico |
| Database | PostgreSQL/Supabase | In-memory |
🚀 Deploy Automático¶
Railway¶
# railway.toml - detecta Dockerfile automaticamente
[deploy]
startCommand = "uvicorn src.api.app:app --host 0.0.0.0 --port ${PORT:-8000}"
HuggingFace Spaces¶
📝 Notas Importantes¶
- Nunca commitar ambos como
Dockerfile: Isso causa confusão. Mantenha sempre: Dockerfile→ versão Railway/Render-
Dockerfile.hf→ versão HuggingFace -
Portas:
- Railway: Usa
PORTenv var (geralmente 3000-9000) - HuggingFace: Sempre 7860
-
Local: 8000 por padrão
-
Environment Variables:
- Produção: Todas as vars necessárias (SUPABASE, GROQ, etc)
-
HF: Mesmas vars, mas algumas opcionais
-
Healthcheck:
- Produção: 40s startup (agentes levam tempo pra inicializar)
- HF: 5s startup (versão simplificada é rápida)
🔍 Troubleshooting¶
Erro: "Port already in use"¶
Erro: "Invalid value for --port"¶
Healthcheck falhando¶
# Ver logs do container
docker logs <container_id>
# Testar healthcheck manualmente
curl http://localhost:8000/health