Requisitos del Sistema
Requisitos Técnicos
Hardware Mínimo
Para Desarrollo Local
CPU:
- Procesador de 4 núcleos a 2.5 GHz o superior
- Arquitectura x86_64 (AMD64/Intel 64-bit)
- Soporte para instrucciones AVX recomendado
Memoria RAM:
- Mínimo: 8 GB RAM
- Recomendado: 16 GB RAM
- Óptimo: 32 GB RAM o más
Almacenamiento:
- Mínimo: 20 GB de espacio libre
- Recomendado: SSD con 50 GB de espacio libre
- Modelos ML: 5-10 GB adicionales para modelos entrenados
GPU (Opcional):
- NVIDIA GPU con soporte CUDA 11.0+
- Mínimo 4 GB VRAM para aceleración ML
- Recomendado 8 GB VRAM o más
Para Producción
CPU:
- 8+ núcleos a 3.0 GHz o superior
- Soporte para múltiples threads
- Arquitectura moderna (Intel Xeon, AMD EPYC)
Memoria RAM:
- Pequeña escala: 32 GB RAM
- Mediana escala: 64 GB RAM
- Gran escala: 128 GB RAM o más
Almacenamiento:
- Sistema: SSD NVMe 100 GB+
- Datos: SSD/HDD 500 GB+ según volumen
- Backup: Espacio adicional para respaldos
Red:
- Conexión de alta velocidad (1 Gbps+)
- Baja latencia para APIs externas
- Balanceadores de carga para alta disponibilidad
Software Base
Sistemas Operativos Soportados
Linux (Recomendado):
# Ubuntu 20.04 LTS o superior
Ubuntu 20.04+, 22.04+
# CentOS/RHEL 8+
CentOS 8+, Red Hat Enterprise Linux 8+
# Debian 11+
Debian 11 (Bullseye) o superior
# Amazon Linux 2
Amazon Linux 2 AMI
Windows:
# Windows 10/11
Windows 10 Pro/Enterprise (versión 1909+)
Windows 11 Pro/Enterprise
# Windows Server
Windows Server 2019/2022
macOS:
# macOS 11.0+
macOS Big Sur (11.0) o superior
macOS Monterey (12.0) recomendado
Dependencias del Sistema
Python 3.11+:
# Instalación en Ubuntu/Debian
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
# Instalación en CentOS/RHEL
sudo dnf install python3.11 python3.11-devel
# Verificar instalación
python3.11 --version
Node.js 18+:
# Usando NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Verificar instalación
node --version
npm --version
Docker y Docker Compose:
# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Instalar Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verificar instalación
docker --version
docker-compose --version
Git:
# Ubuntu/Debian
sudo apt install git
# CentOS/RHEL
sudo dnf install git
# Verificar instalación
git --version
Dependencias de Python
Librerías Core
# requirements.txt - Core dependencies
fastapi==0.104.1
uvicorn[standard]==0.24.0
pydantic==2.5.0
httpx==0.25.2
redis==5.0.1
psycopg2-binary==2.9.9
sqlalchemy==2.0.23
alembic==1.13.1
Machine Learning
# ML dependencies
torch==2.1.2
torchvision==0.16.2
paddlepaddle==2.5.2
paddleocr==2.7.0.3
timm==0.9.12
scikit-learn==1.3.2
opencv-python==4.8.1.78
pillow==10.1.0
numpy==1.24.4
Utilidades
# Utility dependencies
python-multipart==0.0.6
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-dotenv==1.0.0
loguru==0.7.2
prometheus-client==0.19.0
aiofiles==23.2.1
Configuración de Red
Puertos Requeridos
Servicios Principales:
# docker-compose.yml ports
api-gateway: 8000
image-processor: 8001
ml-embeddings: 8002
ml-classifier: 8003
ocr-extractor: 8004
Servicios de Infraestructura:
# Infrastructure ports
postgres: 5432
redis: 6379
nginx: 80, 443
prometheus: 9090
grafana: 3000
Desarrollo:
# Development ports
docusaurus: 3000
jupyter: 8888
tensorboard: 6006
Firewall Configuration
# Ubuntu/Debian - UFW
sudo ufw allow 8000:8004/tcp # IRIS services
sudo ufw allow 5432/tcp # PostgreSQL
sudo ufw allow 6379/tcp # Redis
sudo ufw allow 80,443/tcp # HTTP/HTTPS
# CentOS/RHEL - Firewalld
sudo firewall-cmd --permanent --add-port=8000-8004/tcp
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Variables de Entorno
Configuración Básica
# .env file
# API Configuration
API_GATEWAY_HOST=0.0.0.0
API_GATEWAY_PORT=8000
API_GATEWAY_WORKERS=4
# Database Configuration
DATABASE_URL=postgresql://iris:password@localhost:5432/iris_db
DATABASE_POOL_SIZE=20
DATABASE_MAX_OVERFLOW=30
# Redis Configuration
REDIS_URL=redis://localhost:6379/0
REDIS_MAX_CONNECTIONS=20
# JWT Configuration
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
# ML Configuration
ML_MODEL_PATH=/app/data/models
ML_BATCH_SIZE=8
ML_DEVICE=cpu # or cuda for GPU
# OCR Configuration
OCR_LANGUAGES=es,en,fr
OCR_USE_GPU=false
OCR_CONFIDENCE_THRESHOLD=0.7
# Logging
LOG_LEVEL=INFO
LOG_FORMAT=json
LOG_FILE=/var/log/iris/app.log
Configuración de Producción
# Production environment variables
ENVIRONMENT=production
DEBUG=false
CORS_ORIGINS=["https://iris.yourdomain.com"]
# Security
ALLOWED_HOSTS=["iris.yourdomain.com", "api.iris.yourdomain.com"]
SECURE_COOKIES=true
SECURE_HEADERS=true
# Performance
WORKERS_PER_CORE=2
MAX_WORKERS=16
WORKER_TIMEOUT=300
KEEP_ALIVE=5
# Monitoring
PROMETHEUS_ENABLED=true
METRICS_PORT=9090
HEALTH_CHECK_INTERVAL=30
Base de Datos
PostgreSQL Setup
-- Create database and user
CREATE DATABASE iris_db;
CREATE USER iris WITH ENCRYPTED PASSWORD 'your-secure-password';
GRANT ALL PRIVILEGES ON DATABASE iris_db TO iris;
-- Connect to iris_db and grant schema permissions
\c iris_db
GRANT ALL ON SCHEMA public TO iris;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO iris;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO iris;
PostgreSQL Configuration
# postgresql.conf optimizations
shared_buffers = 256MB
effective_cache_size = 1GB
maintenance_work_mem = 64MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
Redis Configuration
# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
Verificación de Requisitos
Script de Verificación
#!/usr/bin/env python3
"""
Script para verificar que todos los requisitos estén instalados
"""
import sys
import subprocess
import pkg_resources
from packaging import version
def check_python_version():
"""Verificar versión de Python"""
required = version.parse("3.11.0")
current = version.parse(f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}")
if current >= required:
print(f"✅ Python {current} (requerido: {required}+)")
return True
else:
print(f"❌ Python {current} (requerido: {required}+)")
return False
def check_command(command, required_version=None):
"""Verificar que un comando esté disponible"""
try:
result = subprocess.run([command, "--version"],
capture_output=True, text=True)
if result.returncode == 0:
if required_version:
# Extraer versión y comparar
output = result.stdout.strip()
print(f"✅ {command}: {output}")
else:
print(f"✅ {command}: Disponible")
return True
else:
print(f"❌ {command}: No disponible")
return False
except FileNotFoundError:
print(f"❌ {command}: No encontrado")
return False
def check_python_packages():
"""Verificar paquetes de Python instalados"""
required_packages = [
'fastapi>=0.104.0',
'torch>=2.1.0',
'paddlepaddle>=2.5.0',
'opencv-python>=4.8.0'
]
all_installed = True
for package in required_packages:
try:
pkg_resources.require(package)
print(f"✅ {package}: Instalado")
except pkg_resources.DistributionNotFound:
print(f"❌ {package}: No instalado")
all_installed = False
except pkg_resources.VersionConflict as e:
print(f"❌ {package}: Conflicto de versión - {e}")
all_installed = False
return all_installed
def check_docker():
"""Verificar Docker y Docker Compose"""
docker_ok = check_command("docker")
compose_ok = check_command("docker-compose") or check_command("docker", ["compose", "version"])
return docker_ok and compose_ok
def main():
"""Función principal de verificación"""
print("🔍 Verificando requisitos del sistema IRIS...\n")
checks = [
("Python 3.11+", check_python_version),
("Node.js", lambda: check_command("node")),
("Git", lambda: check_command("git")),
("Docker", check_docker),
("Paquetes Python", check_python_packages)
]
results = []
for name, check_func in checks:
print(f"\n📋 Verificando {name}:")
results.append(check_func())
print("\n" + "="*50)
if all(results):
print("🎉 ¡Todos los requisitos están satisfechos!")
print("Puedes proceder con la instalación de IRIS.")
else:
print("⚠️ Algunos requisitos no están satisfechos.")
print("Por favor, instala las dependencias faltantes antes de continuar.")
return all(results)
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)
Uso del Script
# Hacer ejecutable
chmod +x check_requirements.py
# Ejecutar verificación
python3 check_requirements.py
# O con Python directamente
python3 -c "
import subprocess
import sys
result = subprocess.run([sys.executable, 'check_requirements.py'])
sys.exit(result.returncode)
"
Troubleshooting Común
Problemas de Instalación
Error: Python 3.11 no encontrado
# Ubuntu/Debian - Agregar repositorio deadsnakes
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev
Error: OpenCV no se instala
# Instalar dependencias del sistema para OpenCV
sudo apt install libglib2.0-0 libsm6 libxext6 libxrender-dev libgl1-mesa-glx
Error: PaddleOCR requires paddlepaddle
# Instalar PaddlePaddle primero
pip install paddlepaddle==2.5.2
pip install paddleocr==2.7.0.3
Error: Docker permission denied
# Agregar usuario al grupo docker
sudo usermod -aG docker $USER
newgrp docker
Problemas de Memoria
Out of Memory durante entrenamiento
# Reducir batch size en configuración
ML_BATCH_SIZE=4 # Default: 8
ML_WORKERS=2 # Default: 4
Redis out of memory
# Aumentar límite de memoria Redis
redis-cli CONFIG SET maxmemory 4gb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
Problemas de Red
Puertos en uso
# Verificar qué está usando el puerto
sudo netstat -tulpn | grep :8000
# Cambiar puerto en configuración
API_GATEWAY_PORT=8080
Firewall bloqueando conexiones
# Verificar estado del firewall
sudo ufw status
sudo firewall-cmd --list-all
# Agregar reglas necesarias
sudo ufw allow 8000:8004/tcp