SIDEL_ScriptsManager/docker-compose.yml

190 lines
5.9 KiB
YAML

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