# Guía de Instalación — SKEEN Derma Experts

**Versión:** 2.0  
**Fecha:** 16 de julio de 2026

---

## 1. Requisitos del Sistema

### Hardware Mínimo

- **CPU:** 4 vCPU
- **RAM:** 16 GB (22 GB recomendado)
- **Disco:** 80 GB SSD
- **Red:** IP pública fija (para webhooks de Meta)

### Software

| Software | Versión | Propósito |
|----------|---------|-----------|
| Ubuntu | 22.04 LTS | Sistema operativo |
| Docker | 24+ | Supabase self-hosted |
| Docker Compose | 2.20+ | Orquestación Supabase |
| Node.js | 20+ | WACRM, Bridge, Frontend build |
| Python | 3.12+ | Odoo, migración |
| PostgreSQL | 16 | Odoo DB |
| nginx | 1.24+ | Reverse proxy, static files |
| git | 2.40+ | Control de versiones |

---

## 2. Instalación del Sistema Base

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

# Instalar dependencias base
sudo apt install -y \
  curl wget git nginx postgresql postgresql-contrib \
  build-essential libssl-dev libffi-dev libxml2-dev libxslt1-dev \
  libjpeg-dev libpq-dev python3 python3-pip python3-venv \
  python3-dev libldap2-dev libsasl2-dev

# Instalar Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Instalar Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

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

# Verificar instalaciones
node -v          # v20.x
python3 --version # 3.12.x
docker --version
docker compose version
psql --version
nginx -v
```

---

## 3. Configuración de PostgreSQL

```bash
# Crear usuario y base de datos para Odoo
sudo -u postgres psql << 'EOF'
CREATE USER skeen WITH PASSWORD 'skeen_dev_2026';
ALTER USER skeen CREATEDB;
CREATE DATABASE skeen_odoo OWNER skeen;
EOF
```

---

## 4. Instalación de Supabase Self-Hosted

```bash
# Clonar Supabase
cd /root
git clone https://github.com/supabase/supabase.git skeen-supabase
cd skeen-supabase/docker

# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus valores

# Levantar Supabase
docker compose up -d

# Verificar contenedores
docker compose ps
docker compose logs -f db
```

**Variables importantes en `.env`:**

```env
POSTGRES_PASSWORD=your_postgres_password
JWT_SECRET=your_jwt_secret_32_chars
ANON_KEY=your_anon_jwt
SERVICE_ROLE_KEY=your_service_role_jwt
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=your_dashboard_password
SITE_URL=http://localhost:3000
ADDITIONAL_REDIRECT_URLS=http://localhost:3000
```

---

## 5. Instalación de WACRM

```bash
cd /root
git clone https://github.com/ArnasDon/wacrm.git skeen-wacrm
cd skeen-wacrm

# Instalar dependencias
npm install

# Configurar entorno
cp .env.local.example .env.local
```

**Editar `.env.local`:**

```env
# Supabase (self-hosted on localhost)
NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# Encryption key for WACRM (64 hex chars)
ENCRYPTION_KEY=your_64_hex_char_key

# WhatsApp / Meta (pending client data)
WHATSAPP_PHONE_NUMBER_ID=PENDING_PHONE_ID
WHATSAPP_BUSINESS_ACCOUNT_ID=PENDING_WABA_ID
WHATSAPP_ACCESS_TOKEN=PENDING_TOKEN
WHATSAPP_VERIFY_TOKEN=skeen_webhook_verify_2026

# Meta App Secret for webhook signature verification
META_APP_SECRET=your_meta_app_secret

# Application
NEXT_PUBLIC_APP_URL=http://localhost:3000
NODE_ENV=development
```

**Ejecutar migraciones de base de datos:**

```bash
# Ejecutar migraciones SQL en Supabase
# Las migraciones 026_api_keys.sql y 028_webhook_endpoints.sql son REQUERIDAS
```

**Build y arrancar:**

```bash
npm run build
npm start
# Dev: npm run dev (localhost:3000)
```

---

## 6. Instalación de Odoo 17

```bash
cd /root
git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 skeen-odoo
cd skeen-odoo

# Crear entorno virtual
python3 -m venv /root/odoo-venv
source /root/odoo-venv/bin/activate

# Instalar dependencias
pip install -r requirements.txt

# Configurar odoo.conf
cat > odoo.conf << 'EOF'
[options]
addons_path = /root/skeen-odoo/addons,/root/skeen-odoo/odoo/addons
admin_passwd = skeen_admin_2026
db_host = localhost
db_name = skeen_odoo
db_password = skeen_dev_2026
db_port = 5432
db_user = skeen
http_port = 8069
proxy_mode = True
workers = 0
EOF

# Copiar módulos custom
cp -r /root/SKEEN-Proyecto/odoo-addons/* /root/skeen-odoo/addons/

# Iniciar Odoo
./odoo-bin -c odoo.conf --logfile=/tmp/odoo.log
```

---

## 7. Instalación de Hermes

```bash
cd /root
git clone https://github.com/NousResearch/Hermes-Agent.git hermes-repo
cd hermes-repo

# Crear entorno virtual
python3 -m venv /root/hermes-venv
source /root/hermes-venv/bin/activate

# Instalar
pip install -e .

# Configurar
hermes setup
```

**Configurar variables de entorno:**

```bash
export NAN_API_KEY=sk-gJ8OWbZVGeWy9ns_H00cxA
export NAN_BASE_URL=https://api.nan.builders/v1
```

**Iniciar gateway:**

```bash
hermes gateway run
```

---

## 8. Instalación del Bridge SKEEN

```bash
cd /root/skeen-roadmap-hermes/hermes
npm install

# Configurar
cat > .env << 'EOF'
NAN_API_KEY=sk-gJ8OWbZVGeWy9ns_H00cxA
NAN_BASE_URL=https://api.nan.builders/v1
NAN_MODEL=qwen3.6
WACRM_URL=http://localhost:3000
WACRM_API_KEY=your_wacrm_api_key
BRIDGE_PORT=8090
EOF

# Iniciar bridge
node webhook-bridge.js
```

---

## 9. Instalación del Frontend React

```bash
cd /root
git clone https://git.consultoria-as.com/consultoria-as/SKEEN-Proyecto.git
cd SKEEN-Proyecto/frontend

# Instalar dependencias
npm install

# Desarrollo
npm run dev

# Producción
npm run build
sudo mkdir -p /var/www/skeen-frontend
sudo cp -r dist/* /var/www/skeen-frontend/
```

**Configurar nginx:**

```nginx
server {
    listen 80;
    server_name skeen.consultoria-as.com;
    root /var/www/skeen-frontend;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api/odoo {
        proxy_pass http://localhost:8069;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /api/wacrm {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
```

---

## 10. Configuración de Automatización en WACRM

1. Ir a **WACRM Dashboard → Automations**.
2. Crear automatización "Nuevo mensaje → Webhook Hermes Bridge":
   - **Trigger:** `new_message_received`
   - **Step:** `send_webhook`
   - **URL:** `http://localhost:8090/webhook/wacrm`
   - **Body:** `{"from":"{{ vars.contact_phone }}","text":"{{ message.text }}","conversation_id":"{{ vars.conversation_id }}","contact_id":"{{ vars.contact_id }}"}`

---

## 11. Creación de API Key en WACRM

1. Ir a **WACRM Dashboard → Settings → API Keys**.
2. Crear nueva API key con scopes:
   - `messages:send`
   - `messages:read`
   - `contacts:read`
   - `contacts:write`
   - `conversations:read`
   - `broadcasts:send`
   - `webhooks:manage`
3. Guardar la key en `.env` del bridge como `WACRM_API_KEY`.

---

## 12. Verificación de la Instalación

```bash
# Health checks
curl http://localhost:8069/web/health
curl http://localhost:8090/health
curl http://localhost:8069/skeen/frontend/v1/health

# Servicios corriendo
ss -tlnp | grep -E "3000|5173|8069|8000|8090|8644|8080|9119"

# Logs
tail -f /tmp/wacrm.log
tail -f /tmp/odoo.log
tail -f /tmp/hermes-bridge.log
```

---

## 13. Troubleshooting Común

### WACRM no conecta a Supabase

```bash
# Verificar contenedores
cd /root/skeen-supabase/docker && docker compose ps

# Verificar variables de entorno
cat /root/skeen-wacrm/.env.local | grep SUPABASE
```

### Odoo no inicia

```bash
# Ver logs
tail -100 /tmp/odoo.log

# Verificar PostgreSQL
sudo -u postgres psql -d skeen_odoo -c "SELECT 1;"
```

### Bridge no responde

```bash
# Verificar puerto
ss -tlnp | grep 8090

# Ver logs
tail -100 /tmp/hermes-bridge.log
```

### Frontend no carga

```bash
# Verificar nginx
sudo nginx -t
sudo systemctl status nginx

# Verificar build
ls -la /var/www/skeen-frontend/
```

---

## 14. Scripts de Operación

| Script | Propósito |
|--------|-----------|
| `scripts/skeen-start-all.sh` | Inicia todo el ecosistema |
| `scripts/skeen-stop-all.sh` | Detiene todo el ecosistema |
| `scripts/skeen-start-odoo.sh` | Inicia solo Odoo |

---

## 15. Notas de Producción

1. **HTTPS:** Configurar SSL con Let's Encrypt antes de go-live.
2. **Firewall:** Abrir solo puertos necesarios (80, 443, 22).
3. **Backups:** Configurar backups diarios de PostgreSQL.
4. **Monitoreo:** Instalar Uptime Kuma.
5. **Logs:** Configurar logrotate para `/tmp/*.log`.
6. **Variables de entorno:** Usar systemd EnvironmentFile o .env files.
