🐳 Docker para Balotario Licencia A-I
Este directorio contiene la configuración de Docker para la aplicación Balotario.
📁 Archivos de Docker
Dockerfile
Imagen principal de la aplicación
Características:
- ✅ Base: Python 3.11-slim (imagen ligera)
- ✅ Usuario no-root para seguridad
- ✅ Multi-stage optimizado para producción
- ✅ Health check integrado
- ✅ Variables de entorno configurables
docker-compose.yml
Orquestación de servicios
Servicios incluidos:
- balotario: Aplicación Flask principal
- nginx: Proxy reverso (opcional)
nginx.conf
Configuración de Nginx
Funcionalidades:
- ✅ Proxy reverso hacia Flask
- ✅ Compresión gzip para mejor rendimiento
- ✅ Rate limiting para protección
- ✅ Headers de seguridad
- ✅ Cache de archivos estáticos
🚀 Uso Rápido
Opción 1: Docker Simple
# Construir imagen
docker build -t balotario .
# Ejecutar en desarrollo
docker run -p 5000:5000 -e FLASK_ENV=development balotario
# Ejecutar en producción
docker run -d -p 5000:5000 -e FLASK_ENV=production balotario
Opción 2: Docker Compose (Recomendado)
# Iniciar todos los servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
# Detener servicios
docker-compose down
Opción 3: Script de Utilidades
# Usar el script helper
./scripts/docker.sh build
./scripts/docker.sh compose-up
./scripts/docker.sh logs
./scripts/docker.sh clean
🔧 Configuración
Variables de Entorno
Para Desarrollo:
FLASK_ENV=development
FLASK_DEBUG=true
DOCKER_CONTAINER=true
Para Producción:
FLASK_ENV=production
FLASK_DEBUG=false
DOCKER_CONTAINER=true
SECRET_KEY=tu_clave_secreta_aqui
Puertos
- 5000: Aplicación Flask
- 80: Nginx (si se usa)
- 443: HTTPS (si se configura)
📊 Recursos
Imagen Docker
- Tamaño base: ~150MB (Python slim)
- Tamaño final: ~200MB (con dependencias)
- RAM recomendada: 512MB mínimo
- CPU: 1 core suficiente
Volúmenes
volumes:
- ./data:/app/data:ro # Datos de solo lectura
- balotario-logs:/app/logs # Logs persistentes
🛡️ Seguridad
Medidas Implementadas:
- ✅ Usuario no-root en el contenedor
- ✅ Health checks para monitoreo
- ✅ Rate limiting en Nginx
- ✅ Headers de seguridad
- ✅ Secrets via variables de entorno
Recomendaciones Adicionales:
- 🔒 Usar secrets de Docker para claves
- 🔒 Configurar HTTPS con certificados
- 🔒 Implementar logging centralizado
- 🔒 Usar registry privado para imágenes
🚀 Despliegue
Desarrollo Local
# Clonar proyecto
git clone <repo>
cd balotario-licencia-a1
# Iniciar con Docker Compose
docker-compose up -d
# Acceder a la aplicación
open http://localhost:5000
Producción
# Variables de entorno
export FLASK_ENV=production
export SECRET_KEY=tu_clave_super_secreta
# Construir y ejecutar
docker build -t balotario:prod .
docker run -d -p 80:5000 \
-e FLASK_ENV=production \
-e SECRET_KEY=$SECRET_KEY \
--name balotario-prod \
--restart unless-stopped \
balotario:prod
Con Nginx (Recomendado para Producción)
# Usar Docker Compose completo
docker-compose -f docker-compose.yml up -d
# Acceder via Nginx
open http://localhost
🐛 Troubleshooting
Problemas Comunes
Puerto ocupado:
# Cambiar puerto en docker-compose.yml
ports:
- "8080:5000" # Usar puerto 8080 en lugar de 5000
Permisos:
# Verificar permisos de archivos
ls -la data/
chmod 644 data/balotario_clase_a_cat_I.md
Logs:
# Ver logs detallados
docker-compose logs -f balotario
docker logs balotario-prod
Limpiar todo:
# Limpiar completamente
./scripts/docker.sh clean
docker system prune -a
📈 Monitoreo
Health Checks
# Verificar salud del contenedor
docker inspect balotario-prod | grep Health -A 10
# Endpoint de salud
curl http://localhost:5000/
Métricas
- CPU:
docker stats balotario-prod - Memoria:
docker stats --no-stream - Logs:
docker logs --tail 100 balotario-prod
Nota: Esta configuración está optimizada para facilidad de uso y seguridad básica. Para producción enterprise, considera usar Kubernetes o Docker Swarm.