diff --git a/docs/01-wsl2-n8n.md b/docs/01-wsl2-n8n.md new file mode 100644 index 0000000..02a85a2 --- /dev/null +++ b/docs/01-wsl2-n8n.md @@ -0,0 +1,91 @@ +# 🪟 Instalación de Ubuntu + n8n en Windows (WSL2) + +> ← [Volver al índice](../README.md) | Siguiente: [☁️ Google Cloud VM →](./02-gcloud-vm-n8n.md) + +--- + +## Requisitos previos + +- Windows 10 versión 2004+ o Windows 11 +- Acceso a Microsoft Store +- PowerShell con permisos de administrador + +--- + +## Paso 1 — Instalar Ubuntu 24.04 LTS + +Descarga desde Microsoft Store: + +👉 [Ubuntu 24.04 LTS](https://apps.microsoft.com/store/detail/ubuntu-2404-lts/9NZ3KLHXDJP5) + +--- + +## Paso 2 — Habilitar WSL2 + +Abre **PowerShell como administrador** y ejecuta: + +```powershell +wsl --install +``` + +Esto habilita WSL2 y descarga Ubuntu automáticamente. + +--- + +## Paso 3 — Reiniciar el equipo + +Windows completará la instalación durante el reinicio. + +--- + +## Paso 4 — Configurar Ubuntu + +- Abre **Ubuntu 24.04** desde el menú de inicio. +- Crea tu **usuario** y **contraseña** cuando se te solicite. + +--- + +## Paso 5 — Instalar dependencias y n8n + +Ejecuta los siguientes comandos en orden dentro de Ubuntu: + +```bash +# Instalar NVM (última versión estable) +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash + +# Recargar bash para que funcione nvm +source ~/.bashrc + +# Instalar Node.js LTS (última recomendada por n8n) +nvm install --lts + +# Verificar versiones +node -v +npm -v + +# Instalar n8n última versión +npm install -g n8n@latest + +# Ejecutar n8n +n8n +``` + +--- + +## Paso 6 — Acceder a n8n + +Abre en tu navegador: + +👉 [http://localhost:5678](http://localhost:5678) + +--- + +## Notas + +- n8n se ejecuta en primer plano. Cierra la terminal y se detendrá. +- Para entornos de producción o con dominio propio, consulta los pasos de [Google Cloud VM](./02-gcloud-vm-n8n.md) y [HTTPS](./03-https-nginx.md). +- Esta instalación es ideal para **desarrollo local y pruebas**. + +--- + +> ← [Volver al índice](../README.md) | Siguiente: [☁️ Google Cloud VM →](./02-gcloud-vm-n8n.md) diff --git a/docs/02-gcloud-vm-n8n.md b/docs/02-gcloud-vm-n8n.md new file mode 100644 index 0000000..b9ce528 --- /dev/null +++ b/docs/02-gcloud-vm-n8n.md @@ -0,0 +1,140 @@ +# ☁️ Instalación de n8n en Google Cloud VM + +> ← [Anterior: 🪟 WSL2](./01-wsl2-n8n.md) | [Volver al índice](../README.md) | Siguiente: [🔐 HTTPS →](./03-https-nginx.md) + +--- + +## Requisitos previos + +- Cuenta en [Google Cloud Console](https://console.cloud.google.com/) +- Proyecto activo con facturación habilitada +- `gcloud` CLI instalado *(opcional, también se puede hacer desde la web)* + +--- + +## Paso 1 — Crear la VM en Google Cloud + +1. Ingresa a [Google Cloud Console](https://console.cloud.google.com/). +2. Ve a **Compute Engine > VM Instances**. +3. Haz clic en **Create Instance** y configura: + +| Campo | Valor recomendado | +|-------|------------------| +| **Nombre** | `n8n-vm` | +| **Región/Zona** | La más cercana a tu ubicación | +| **Machine type** | `e2-medium` (2 vCPU, 4 GB RAM) | +| **Boot disk** | Ubuntu 24.04 LTS | +| **Firewall** | ✅ Allow HTTP traffic / ✅ Allow HTTPS traffic | + +4. Haz clic en **Create**. + +--- + +## Paso 2 — Conectarse a la VM + +Desde la consola o terminal: + +```bash +gcloud compute ssh n8n-vm --zone us-central1-a +``` + +También puedes usar el botón **SSH** directamente desde la consola web de GCP. + +--- + +## Paso 3 — Actualizar paquetes + +```bash +sudo apt update && sudo apt upgrade -y +``` + +--- + +## Paso 4 — Instalar dependencias y n8n + +```bash +# Instalar NVM +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash + +# Recargar bash +source ~/.bashrc + +# Instalar Node.js LTS +nvm install --lts + +# Verificar versiones +node -v +npm -v + +# Instalar n8n +npm install -g n8n@latest + +# Ejecutar n8n +n8n +``` + +n8n quedará escuchando en el puerto **5678** por defecto. + +--- + +## Paso 5 — Abrir puertos en el firewall de Google Cloud + +### Opción A: Desde la consola web + +1. Ve a **VPC Network > Firewall**. +2. Clic en **Create Firewall Rule** y configura: + +| Campo | Valor | +|-------|-------| +| **Name** | `allow-n8n` | +| **Targets** | All instances in the network | +| **Source IP ranges** | `0.0.0.0/0` *(o tu IP para mayor seguridad)* | +| **Protocols/Ports** | TCP: `80, 443, 5678` | + +### Opción B: Con gcloud CLI + +```bash +gcloud compute firewall-rules create allow-n8n \ + --allow tcp:80,tcp:443,tcp:5678 \ + --source-ranges=0.0.0.0/0 \ + --target-tags=n8n-server +``` + +Luego edita tu VM y en **Network tags** agrega `n8n-server`. + +--- + +## Paso 6 — Acceder a n8n + +Abre en tu navegador: + +👉 `http://EXTERNAL_IP:5678` + +*(La IP externa está visible en la consola de GCP)* + +--- + +## Paso 7 (Opcional) — Ejecutar n8n en segundo plano con PM2 + +Sin PM2, n8n se detiene al cerrar la sesión SSH. + +```bash +npm install -g pm2 + +pm2 start n8n +pm2 save +pm2 startup +``` + +PM2 se asegura de que n8n se reinicie automáticamente tras reinicios de la VM. + +--- + +## ⚠️ Nota de seguridad + +> No expongas el puerto `5678` directamente en producción. Lo ideal es configurar un **proxy inverso con Nginx + SSL**. +> Consulta el siguiente paso: [🔐 Habilitar HTTPS](./03-https-nginx.md) + +--- + +> ← [Anterior: 🪟 WSL2](./01-wsl2-n8n.md) | [Volver al índice](../README.md) | Siguiente: [🔐 HTTPS →](./03-https-nginx.md) diff --git a/docs/03-https-nginx.md b/docs/03-https-nginx.md new file mode 100644 index 0000000..cd8ed6d --- /dev/null +++ b/docs/03-https-nginx.md @@ -0,0 +1,126 @@ +# 🔐 Habilitar HTTPS en Google Cloud (Nginx + Certbot) + +> ← [Anterior: ☁️ Google Cloud VM](./02-gcloud-vm-n8n.md) | [Volver al índice](../README.md) | Siguiente: [🕷️ Crawl4AI →](./04-crawl4ai-ubuntu.md) + +--- + +## Requisitos previos + +- VM en Google Cloud con Ubuntu 24.04 *(ver [paso anterior](./02-gcloud-vm-n8n.md))* +- n8n ya instalado y corriendo con PM2 +- Un **dominio propio** con un registro **A** apuntando a la IP externa de tu VM: + +``` +n8n.midominio.com → EXTERNAL_IP_VM +``` + +--- + +## Paso 1 — Instalar n8n con PM2 (si no lo hiciste aún) + +```bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash +source ~/.bashrc +nvm install --lts +npm install -g n8n@latest + +npm install -g pm2 +pm2 start n8n +pm2 save +pm2 startup +``` + +--- + +## Paso 2 — Instalar Nginx + +```bash +sudo apt install -y nginx +``` + +### Crear configuración para n8n + +```bash +sudo nano /etc/nginx/sites-available/n8n +``` + +Pega el siguiente contenido (reemplaza `n8n.midominio.com` por tu dominio real): + +```nginx +server { + listen 80; + server_name n8n.midominio.com; + + location / { + proxy_pass http://localhost:5678; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +### Activar el sitio + +```bash +sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/ +sudo nginx -t +sudo systemctl reload nginx +``` + +n8n ya será accesible en `http://n8n.midominio.com`. + +--- + +## Paso 3 — Instalar Certbot para HTTPS + +```bash +sudo apt install -y certbot python3-certbot-nginx +``` + +Ejecuta el proceso de certificación: + +```bash +sudo certbot --nginx -d n8n.midominio.com +``` + +Durante el proceso: +- Acepta los términos de servicio. +- Selecciona la opción de **redirigir todo el tráfico a HTTPS**. + +Certbot configurará Nginx automáticamente para usar TLS. + +--- + +## Paso 4 — Verificar acceso + +Abre en tu navegador: + +👉 `https://n8n.midominio.com` + +n8n estará corriendo con **HTTPS válido y seguro** ✅ + +--- + +## Paso 5 — Renovación automática de certificados + +Certbot instala un cron job que renueva los certificados antes de que expiren. Puedes verificarlo con: + +```bash +sudo certbot renew --dry-run +``` + +--- + +## ✅ Resultado final + +Con esta configuración tienes: + +- ✅ **n8n corriendo en segundo plano** con PM2 +- ✅ **Acceso seguro** vía Nginx + HTTPS (Let's Encrypt) +- ✅ **Firewall en GCP** abierto solo en puertos `80` y `443` (ya no necesitas exponer el `5678`) + +--- + +> ← [Anterior: ☁️ Google Cloud VM](./02-gcloud-vm-n8n.md) | [Volver al índice](../README.md) | Siguiente: [🕷️ Crawl4AI →](./04-crawl4ai-ubuntu.md) diff --git a/docs/04-crawl4ai-ubuntu.md b/docs/04-crawl4ai-ubuntu.md new file mode 100644 index 0000000..077e1ae --- /dev/null +++ b/docs/04-crawl4ai-ubuntu.md @@ -0,0 +1,113 @@ +# 🕷️ Instalación de Crawl4AI en Ubuntu + +> ← [Anterior: 🔐 HTTPS](./03-https-nginx.md) | [Volver al índice](../README.md) | Siguiente: [📋 Proyecto →](./05-proyecto-website-craw-css.md) + +--- + +## Requisitos previos + +- Ubuntu 22.04+ (local vía WSL2 o en Google Cloud VM) +- Python 3 y pip instalados + +```bash +sudo apt update && sudo apt install -y python3 python3-pip +``` + +--- + +## Instalación básica + +### 1 — Instalar el núcleo de Crawl4AI + +```bash +pip install crawl4ai +``` + +Esto instala la versión base sin características adicionales como modelos ML o Transformers. + +### 2 — Ejecutar la configuración inicial + +```bash +crawl4ai-setup +``` + +Este comando instala y configura las dependencias del navegador: Playwright, librerías del sistema, etc. + +### 3 — Diagnosticar el entorno *(opcional pero recomendado)* + +```bash +crawl4ai-doctor +``` + +Verifica compatibilidad de Python, instalación de Playwright y variables del sistema. + +### 4 — Verificar la instalación con un ejemplo + +```python +import asyncio +from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig + +async def main(): + async with AsyncWebCrawler() as crawler: + result = await crawler.arun(url="https://www.example.com") + print(result.markdown[:300]) + +if __name__ == "__main__": + asyncio.run(main()) +``` + +Ejecuta el script y verás los primeros 300 caracteres de `example.com` en formato Markdown. + +--- + +## Instalación avanzada *(opcional)* + +Elige según las capacidades que necesites: + +| Variante | Comando | +|----------|---------| +| Con PyTorch | `pip install crawl4ai[torch] && crawl4ai-setup` | +| Con Transformers | `pip install crawl4ai[transformer] && crawl4ai-setup` | +| Todas las características | `pip install crawl4ai[all] && crawl4ai-setup` | + +### Pre-descargar modelos *(solo si los necesitas)* + +```bash +crawl4ai-download-models +``` + +> ⚠️ Los modelos son pesados. Descárgalos solo si tu flujo los requiere. + +--- + +## Opción Docker *(experimental)* + +La documentación oficial indica que la vía Docker es **experimental** y puede cambiar. No se recomienda para producción aún. + +```bash +docker pull unclecode/crawl4ai:latest +docker run -p 11235:11235 unclecode/crawl4ai:latest +``` + +Consulta la [documentación oficial de Crawl4AI](https://docs.crawl4ai.com/core/installation/) para actualizaciones. + +--- + +## Resumen de comandos + +```bash +# Instalación mínima +pip install crawl4ai +crawl4ai-setup + +# Verificar entorno +crawl4ai-doctor + +# Instalación completa +pip install crawl4ai[all] +crawl4ai-setup +``` + +--- + +> ← [Anterior: 🔐 HTTPS](./03-https-nginx.md) | [Volver al índice](../README.md) | Siguiente: [📋 Proyecto →](./05-proyecto-website-craw-css.md) diff --git a/docs/05-proyecto-website-craw-css.md b/docs/05-proyecto-website-craw-css.md new file mode 100644 index 0000000..7e0a19d --- /dev/null +++ b/docs/05-proyecto-website-craw-css.md @@ -0,0 +1,125 @@ +# 📋 Documento del Proyecto — Website Craw CSS + +> ← [Anterior: 🕷️ Crawl4AI](./04-crawl4ai-ubuntu.md) | [Volver al índice](../README.md) + +--- + +## 1. Iniciación + +| Campo | Detalle | +|-------|---------| +| **Objetivo** | Automatizar la extracción de productos desde páginas web mediante Crawl4AI, procesar los datos con n8n y exportarlos en formato usable (JSON/archivo) | +| **Stakeholders** | Equipo de datos/marketing *(consumirá los resultados)*, equipo de IT *(mantendrá el flujo en n8n)* | +| **Justificación** | Reducir esfuerzo manual en scraping, garantizar consistencia de datos y preparar pipeline para análisis en Google Sheets u otras herramientas | + +--- + +## 2. Planificación + +### Requerimientos técnicos + +- Servidor con n8n instalado (Ubuntu/Docker) +- Conexión a Crawl4AI +- Credenciales: `httpBasicAuth` y `httpHeaderAuth` +- Acceso a Google Sheets (OAuth2 configurado) + +### Alcance + +- Número de URLs a escanear: `Array.from({ length: 2 })` → 2 páginas por ahora, escalable +- **Campos a extraer**: `link`, `título`, `rating` (conteo de estrellas), `descripción`, `precio`, `stock` + +### Riesgos + +| Riesgo | Descripción | +|--------|-------------| +| 🔴 Bloqueo de IP | Crawling excesivo puede resultar en bloqueo por el sitio objetivo | +| 🟡 Cambio en HTML | Si la estructura de la web cambia, los selectores CSS deben actualizarse | +| 🟡 Fallos de credenciales | Acceso perdido a Crawl4AI o Google Sheets interrumpe el flujo | + +--- + +## 3. Diseño y Arquitectura + +### Flujo de nodos en n8n + +``` +Manual Trigger + │ + ▼ +Markdown Crawl Request ──► POST a Crawl4AI con URLs + esquema JSON-CSS + │ + ▼ +Wait (15s) ──────────────► Pausa mientras Crawl4AI procesa + │ + ▼ +Get LLM Crawl ───────────► Recupera resultados por task_id + │ + ▼ +LLM if In Process ───────► ¿Sigue en estado "pending/processing"? + │ │ + [Sí] [No] + │ │ + └─────────┤ + ▼ + LLM Result ──────► Convierte rating a número (star_count) + │ + ▼ + Split Out ──────► Divide resultados por producto + │ + ▼ + Convert to File ───► Exporta a archivo final (JSON/CSV) + │ + ▼ + [Opcional] Google Sheets ── (deshabilitado por defecto) +``` + +**Tipo de arquitectura**: Workflow asincrónico con polling + procesamiento + exportación. + +--- + +## 4. Ejecución / Desarrollo + +### Implementación inicial + +1. Configurar credenciales: `crawl4aiserver`, `panel`, Google Sheets. +2. Probar con dataset pequeño (2 páginas) para validar selectores CSS. + +### Edición futura + +- Ampliar `Array.from({ length: N })` para procesar más páginas. +- Ajustar `baseSelector` y `fields` si cambia la estructura web. +- Habilitar el módulo de Google Sheets para registro en línea. + +--- + +## 5. Monitoreo y Control + +### Logs + +Revisar ejecuciones en: **n8n → Execution History** + +### KPIs + +| Indicador | Descripción | +|-----------|-------------| +| % productos extraídos | Porcentaje de productos extraídos correctamente por batch | +| Tiempo de procesamiento | Tiempo promedio por batch de páginas | + +### Control de cambios + +- Antes de editar `schema.fields`, probar en ambiente de desarrollo. +- Documentar versiones del flujo (`versionId` ya está incluido en el JSON de n8n). + +--- + +## 6. Cierre / Entrega + +| Entregable | Formato | +|------------|---------| +| Archivo de productos estructurados | JSON o CSV | +| Exportación automática | Google Drive / Google Sheets | +| Documentación de uso | Este repositorio | + +--- + +> ← [Anterior: 🕷️ Crawl4AI](./04-crawl4ai-ubuntu.md) | [Volver al índice](../README.md)