190 lines
5.9 KiB
YAML
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 |