version: '3.8' services: # Servicio principal de SIDEL ScriptsManager scriptsmanager: build: . container_name: sidel_scriptsmanager ports: - "5002:5002" # Puerto principal del frontend Flask (según run_app.py) - "5200-5400:5200-5400" # Rango de puertos para scripts dinámicos (especificación SIDEL) volumes: # Volúmenes para persistencia de datos multiusuario según especificaciones - ./data:/app/data - ./backup:/app/backup - ./logs:/app/logs # Scripts de backend (SOLO app/backend/script_groups/) - ./app/backend/script_groups:/app/app/backend/script_groups # Base de datos SQLite - ./data/scriptsmanager.db:/app/data/scriptsmanager.db environment: # Variables de entorno según especificaciones SIDEL ScriptsManager - DEBUG=false - SECRET_KEY=sidel-scriptsmanager-production-key-change-this - DATABASE_URL=sqlite:///app/data/scriptsmanager.db - BASE_DATA_PATH=/app/data - BACKUP_ENABLED=true - PORT_RANGE_START=5200 - PORT_RANGE_END=5400 - MAX_PROJECTS_PER_USER=50 # Variables multiusuario y multi-proyecto - DEFAULT_LANGUAGE=en - SUPPORTED_LANGUAGES=en,es,it,fr - DEFAULT_THEME=light # Variables para conda - Entornos según especificaciones - CONDA_DEFAULT_ENV=scriptsmanager - TSNET_ENV=tsnet - PYTHONPATH=/app # Variables específicas de SIDEL - SIDEL_LOGO_PATH=/app/app/static/images/SIDEL.png - CORPORATE_BRANDING=true restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:5002/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - scriptsmanager_network # Servicio para desarrollo con hot-reload scriptsmanager-dev: build: . container_name: sidel_scriptsmanager_dev ports: - "5003:5002" # Puerto de desarrollo para el frontend - "5201-5401:5200-5400" # Rango de puertos para desarrollo volumes: # Montar código completo para desarrollo - .:/app - ./data:/app/data - ./backup:/app/backup - ./logs:/app/logs environment: - DEBUG=true - SECRET_KEY=sidel-dev-secret-key - DATABASE_URL=sqlite:///app/data/scriptsmanager_dev.db - FLASK_ENV=development - BASE_DATA_PATH=/app/data - BACKUP_ENABLED=false - PORT_RANGE_START=5200 - PORT_RANGE_END=5400 - MAX_PROJECTS_PER_USER=100 - DEFAULT_LANGUAGE=en - SUPPORTED_LANGUAGES=en,es,it,fr - DEFAULT_THEME=light - CONDA_DEFAULT_ENV=scriptsmanager - TSNET_ENV=tsnet - PYTHONPATH=/app - SIDEL_LOGO_PATH=/app/app/static/images/SIDEL.png - CORPORATE_BRANDING=true command: > bash -c "source activate scriptsmanager && python scripts/init_db.py && python scripts/run_app.py" profiles: - dev networks: - scriptsmanager_network # Servicio para backup automático según especificaciones SIDEL backup: build: . container_name: sidel_backup_service volumes: - ./data:/app/data - ./backup:/app/backup - ./logs:/app/logs environment: - BACKUP_ENABLED=true - BACKUP_RETENTION_DAYS=30 - DATABASE_URL=sqlite:///app/data/scriptsmanager.db - PYTHONPATH=/app command: > bash -c "source activate scriptsmanager && while true; do echo '=== Starting daily backup ===' python -c 'from app.services.backup_service import BackupService; BackupService().create_backup()' echo '=== Backup completed ===' sleep 86400 # Backup diario (24 horas) done" profiles: - backup networks: - scriptsmanager_network # Servicio de monitoreo de logs (opcional) log-monitor: build: . container_name: sidel_log_monitor volumes: - ./logs:/app/logs - ./data:/app/data environment: - DATABASE_URL=sqlite:///app/data/scriptsmanager.db - PYTHONPATH=/app command: > bash -c "source activate scriptsmanager && python -c ' import time from app.services.log_service import LogService print(\"Starting log monitor service...\") while True: try: # Cleanup de logs antiguos según políticas de retención LogService().cleanup_old_logs() time.sleep(3600) # Cleanup cada hora except Exception as e: print(f\"Log monitor error: {e}\") time.sleep(60) '" profiles: - monitoring networks: - scriptsmanager_network # Base de datos separada (opcional, si quieres usar PostgreSQL en lugar de SQLite) postgres: image: postgres:15 container_name: sidel_postgres environment: - POSTGRES_DB=scriptsmanager - POSTGRES_USER=scriptsmanager - POSTGRES_PASSWORD=scriptsmanager_password volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" profiles: - postgres networks: - scriptsmanager_network # Servicio para backup automático backup: build: . container_name: sidel_backup volumes: - ./data:/app/data - ./backup:/app/backup environment: - BACKUP_ENABLED=true - PYTHONPATH=/app command: > bash -c "source activate scriptsmanager && while true; do python -c 'from app.services.backup_service import BackupService; BackupService().create_backup()' sleep 86400 # Backup diario done" profiles: - backup networks: - scriptsmanager_network volumes: postgres_data: networks: scriptsmanager_network: driver: bridge