# 🐳 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 ```bash # 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) ```bash # 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 ```bash # 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: ```bash FLASK_ENV=development FLASK_DEBUG=true DOCKER_CONTAINER=true ``` #### Para Producción: ```bash 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 ```yaml 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 ```bash # Clonar proyecto git clone cd balotario-licencia-a1 # Iniciar con Docker Compose docker-compose up -d # Acceder a la aplicación open http://localhost:5000 ``` ### Producción ```bash # 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) ```bash # Usar Docker Compose completo docker-compose -f docker-compose.yml up -d # Acceder via Nginx open http://localhost ``` ## 🐛 Troubleshooting ### Problemas Comunes #### Puerto ocupado: ```bash # Cambiar puerto en docker-compose.yml ports: - "8080:5000" # Usar puerto 8080 en lugar de 5000 ``` #### Permisos: ```bash # Verificar permisos de archivos ls -la data/ chmod 644 data/balotario_clase_a_cat_I.md ``` #### Logs: ```bash # Ver logs detallados docker-compose logs -f balotario docker logs balotario-prod ``` #### Limpiar todo: ```bash # Limpiar completamente ./scripts/docker.sh clean docker system prune -a ``` ## 📈 Monitoreo ### Health Checks ```bash # 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.