# 🚀 Guía: Implementación de un Nodo Central de IA Privada (IA-Core)

Esta guía permite desplegar una infraestructura soberana de Inteligencia Artificial que incluye procesamiento de lenguaje (LLM), interfaz corporativa y transcripción de voz a texto (STT). 

**Puntos clave de esta arquitectura:**
* **Privacidad Total:** Los datos nunca salen de tu servidor.
* **Seguridad:** Acceso vía API protegido por tokens.
* **Optimización:** Configurado específicamente para alto rendimiento en CPUs.

---

## 📋 1. Requisitos y Dependencias

Antes de empezar, asegúrate de tener un servidor con Linux (Ubuntu 22.04 LTS recomendado) y los siguientes componentes instalados:

```bash
# Actualizar el sistema
sudo apt update && sudo apt upgrade -y

# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Instalar Docker Compose
sudo apt install docker-compose-plugin -y
```

---

## 🏗️ 2. Estructura de Directorios

Para mantener la persistencia de los modelos y las configuraciones, crearemos una estructura en el volumen principal:

```bash
sudo mkdir -p /ai_data/{infrastructure/nginx,ollama_storage,webui_storage,logs}
sudo chown -R $USER:$USER /ai_data
```

---

## 🛠️ 3. Configuración del Servidor (Docker Compose)

Crea el archivo maestro en `/ai_data/infrastructure/docker-compose.yml`:

```yaml
services:
  # PROXY SEGURO (El Portero)
  nginx:
    image: nginx:latest
    container_name: nginx_proxy
    restart: always
    ports:
      - "80:80"
    volumes:
      - /ai_data/infrastructure/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - ollama
      - open-webui
      - faster-whisper

  # MOTOR DE IA (OLLAMA) - OPTIMIZADO PARA CPU
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: always
    environment:
      - OLLAMA_NUM_THREAD=12        # Hilos de CPU dedicados a la IA
      - OLLAMA_NUM_PARALLEL=1      # Una petición a la vez para estabilidad
      - OLLAMA_MAX_LOADED_MODELS=1  # Optimización de RAM
      - OLLAMA_KEEP_ALIVE=15m       # Tiempo de persistencia en memoria
    volumes:
      - /ai_data/ollama_storage:/root/.ollama

  # INTERFAZ CORPORATIVA (Open WebUI)
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: always
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      - /ai_data/webui_storage:/app/backend/data
    environment:
      - 'OLLAMA_BASE_URL=http://ollama:11434'
      - 'WEBUI_AUTH=True'           # Forzar login para usuarios
    depends_on:
      - ollama

  # MOTOR DE AUDIO (Transcripción de voz)
  faster-whisper:
    image: fedirz/faster-whisper-server:latest-cpu
    container_name: faster-whisper
    restart: always
    environment:
      - WHISPER_MODEL=large-v3-turbo
      - WHISPER_THREADS=4           # Impacto controlado en CPU
```

---

## 🛡️ 4. Configuración de Seguridad (Nginx)

Crea el archivo de reglas en `/ai_data/infrastructure/nginx/nginx.conf`. Este archivo gestiona el tráfico y valida que las aplicaciones externas (como n8n) tengan la llave de acceso.

```nginx
worker_processes auto;
events { worker_connections 1024; }

http {
    include mime.types;
    default_type application/octet-stream;
    client_max_body_size 100M;

    # Tiempos de espera extendidos para procesos pesados de IA
    proxy_read_timeout 600s;
    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;

    # CAPA DE SEGURIDAD: Definición de API Key
    map $http_x_api_key $api_client_name {
        default "";
        "TU_TOKEN_GENERADO_AQUI" "external_app_service"; 
    }

    server {
        listen 80;
        server_name localhost;

        # 1. INTERFAZ WEB (Humanos)
        location / {
            proxy_pass http://open-webui:8080;
            proxy_set_header Host $host;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

        # 2. API DE IA (Ollama) - PROTEGIDO
        location /ollama/ {
            if ($api_client_name = "") { return 401 '{"error": "API Key invalida"}'; }
            rewrite ^/ollama/(.*)$ /$1 break;
            proxy_pass http://ollama:11434;
            proxy_set_header Host $host;
        }

        # 3. API DE AUDIO (Whisper) - PROTEGIDO
        location /whisper/ {
            if ($api_client_name = "") { return 401 '{"error": "API Key invalida"}'; }
            rewrite ^/whisper/(.*)$ /$1 break;
            proxy_pass http://faster-whisper:8000;
            proxy_set_header Host $host;
        }

        # Health Check
        location /health {
            return 200 '{"status": "IA Core Online"}';
            add_header Content-Type application/json;
        }
    }
}
```

---

## 🚀 5. Despliegue e Instalación de Modelos

1.  **Iniciar el servidor:**
    ```bash
    cd /ai_data/infrastructure
    docker compose up -d
    ```

2.  **Instalar los modelos recomendados (Open Source):**
    Ejecuta estos comandos para descargar los "cerebros" en tu servidor:

    * **Llama 3.1 8B** (Equilibrio general):
        ```bash
        docker exec -it ollama ollama pull llama3.1:8b
        ```
    * **Gemma 2 9B** (Excelente para marketing y CPU):
        ```bash
        docker exec -it ollama ollama pull gemma2:9b
        ```
    * **DeepSeek-R1 14B** (Razonamiento complejo/Lógica):
        ```bash
        docker exec -it ollama ollama pull deepseek-r1:14b
        ```
    * **Phi-4 14B** (Lo último de Microsoft en lógica):
        ```bash
        docker exec -it ollama ollama pull phi4
        ```
    * **GPT-OSS 20B** (Modelo OpenAI-style para tareas agénticas):
        ```bash
        docker exec -it ollama ollama pull gpt-oss:20b
        ```
Agregar los que quieras

---

## 📈 6. Verificación Final

Para comprobar que tu nodo está blindado y operativo, intenta acceder a la API desde otra máquina:
* `curl http://IP_SERVIDOR/ollama/api/tags` ➔ Debe devolver **401 No autorizado**.
* `curl -H "X-API-Key: TU_TOKEN" http://IP_SERVIDOR/ollama/api/tags` ➔ Debe devolver la lista de modelos.

¡Ya tienes un nodo de IA profesional listo para escalar!