Activitats Pràctiques N8N
Curs d'Especialització en Big Data
ACTIVITAT 0: Instal·lació de N8N
Objectiu
Instal·lar i configurar N8N a l'entorn local utilitzant Docker.
Requisits previs
- Docker instal·lat (versió 20.10 o superior)
- Docker Compose instal·lat
- 2GB RAM mínim
- Port 5678 disponible
Part A: Instal·lació bàsica amb Docker
Passos:
-
Instal·lació ràpida amb Docker:
-
Accedir a N8N:
- Obrir navegador a: http://localhost:5678
- Crear usuari administrador
-
Configurar email i contrasenya
-
Verificar instal·lació:
- Crear un workflow de prova
- Afegir node "Manual Trigger"
- Afegir node "Set"
- Executar el workflow
Part B: Instal·lació amb Docker Compose (Recomanat)
Pas 1: Crear estructura de directoris
Pas 2: Crear fitxer docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=la_teva_contrasenya_segura
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=http://localhost:5678/
- GENERIC_TIMEZONE=Europe/Madrid
- TZ=Europe/Madrid
volumes:
- ./n8n_data:/home/node/.n8n
Pas 3: Iniciar N8N
Pas 4: Veure logs
Pas 5: Aturar N8N
Part C: Instal·lació amb PostgreSQL (Producció)
Crear fitxer docker-compose.yml complet:
version: '3.8'
services:
postgres:
image: postgres:15
container_name: n8n-postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=n8n_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U n8n']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n_password
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=la_teva_contrasenya_segura
- WEBHOOK_URL=http://localhost:5678/
- GENERIC_TIMEZONE=Europe/Madrid
volumes:
- ./n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
volumes:
postgres_data:
Lliurables
- Captura de pantalla del dashboard de N8N
- Captura del primer workflow creat
- Fitxer
docker-compose.ymlutilitzat - Document amb els problemes trobats i solucions
ACTIVITAT 1: Primer Workflow - Hola Món
Objectiu
Familiaritzar-se amb la interfície de N8N i crear un workflow bàsic.
Descripció
Crear un workflow que s'executi manualment i mostri un missatge personalitzat.
Passos
- Crear nou workflow:
- Click a "Add workflow"
-
Nom: "01_Hola_Mon"
-
Afegir nodes:
- Node 1: Manual Trigger
-
Node 2: Set
- Configurar:
message = "Hola des de N8N" - Afegir camp:
timestamp = {{ $now }} - Afegir camp:
usuari = "el_teu_nom"
- Configurar:
-
Executar i verificar:
- Click a "Execute Node" a cada node
- Verificar el output en JSON
Repte addicional
- Afegir un node HTTP Request que cridi a https://api.github.com/users/el_teu_usuari
- Combinar les dades amb Set
Lliurables
- Workflow exportat en JSON
- Captures de pantalla del resultat
ACTIVITAT 2: Pipeline ETL - API a Base de Dades
Objectiu
Crear un pipeline ETL que extregui dades d'una API pública, les transformi i les carregui en una base de dades PostgreSQL.
Descripció
Extreure dades d'usuaris d'una API (JSONPlaceholder), netejar i transformar les dades, i carregar-les a PostgreSQL.
Part A: Preparació de la base de dades
Crear contenidor PostgreSQL:
docker run --name n8n-postgres-test \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=n8n_test \
-p 5432:5432 \
-d postgres:15
Crear taula:
CREATE TABLE usuaris (
id SERIAL PRIMARY KEY,
user_id INTEGER UNIQUE,
nom VARCHAR(100),
username VARCHAR(50),
email VARCHAR(100),
ciutat VARCHAR(100),
empresa VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Part B: Configurar credencials a N8N
- Credentials > New Credential
- Seleccionar Postgres
- Configurar:
- Host:
localhost(o IP del contenidor) - Database:
n8n_test - User:
postgres - Password:
postgres - Port:
5432
Part C: Crear el workflow ETL
Nodes del workflow:
- Schedule Trigger
- Configurar: cada 1 hora
-
Per testing: usar Manual Trigger
-
HTTP Request - Extract
- Method: GET
- URL:
https://jsonplaceholder.typicode.com/users -
Name: "Extreure_Usuaris"
-
Function - Transform
-
Postgres - Load
- Operation: Insert
- Table:
usuaris - Columns: automàtic
- Options > On Conflict: "Update"
Part D: Verificació
SELECT * FROM usuaris;
SELECT COUNT(*) FROM usuaris;
SELECT ciutat, COUNT(*) as total FROM usuaris GROUP BY ciutat;
Repte addicional
- Afegir node de validació abans de carregar
- Implementar gestió d'errors
- Afegir logs a una taula separada
- Crear un report d'execució que s'enviï per email
Lliurables
- Workflow exportat
- Script SQL amb l'estructura de taules
- Captures de dades carregades a PostgreSQL
- Document explicant les transformacions realitzades
ACTIVITAT 3: Web Scraping i Anàlisi de Dades
Objectiu
Extreure dades d'una pàgina web, processar-les i generar estadístiques.
Descripció
Crear un workflow que extregui informació de productes d'una botiga online (ex: Books to Scrape) i analitzi preus.
Passos
- HTTP Request - Extracció
- URL:
http://books.toscrape.com/ -
Method: GET
-
HTML Extract
-
Configurar selectors CSS per a:
- Títol del llibre
- Preu
- Rating
- Disponibilitat
-
Function - Processament
-
Aggregate - Estadístiques
- Calcular preu mitjà
- Preu màxim i mínim
-
Comptar per rating
-
Output
- Enviar resultats per email
- O desar en CSV
Lliurables
- Workflow complet
- CSV amb les dades extretes
- Document amb anàlisi de resultats
ACTIVITAT 4: Pipeline de Dades en Temps Real
Objectiu
Crear un pipeline que processi dades en temps real mitjançant webhooks.
Descripció
Simular un sistema d'esdeveniments que rep dades de sensors IoT, les valida i emmagatzema.
Part A: Crear webhook receptor
- Webhook Trigger
- Path:
/dades-sensor - Method: POST
-
Configurar resposta personalitzada
-
Function - Validació
const items = $input.all(); return items.map(item => { const data = item.json; // Validar estructura if (!data.sensor_id || !data.temperatura || !data.timestamp) { throw new Error('Dades incompletes'); } // Validar rangs if (data.temperatura < -50 || data.temperatura > 100) { throw new Error('Temperatura fora de rang'); } return { json: { ...data, validat: true, processat_a: new Date().toISOString() } }; }); -
IF - Alerta de temperatura
- Condició: temperatura > 80
- True: enviar alerta
-
False: continuar
-
PostgreSQL - Emmagatzemar
- Insert a taula
lectures_sensors
Part B: Crear script de prova
Fitxer test_webhook.py:
import requests
import json
import random
import time
from datetime import datetime
webhook_url = "http://localhost:5678/webhook/dades-sensor"
def generar_dades_sensor():
return {
"sensor_id": f"SENSOR_{random.randint(1, 10)}",
"temperatura": round(random.uniform(20, 90), 2),
"humitat": round(random.uniform(30, 80), 2),
"timestamp": datetime.now().isoformat()
}
# Enviar 10 esdeveniments
for i in range(10):
dades = generar_dades_sensor()
resposta = requests.post(webhook_url, json=dades)
print(f"Esdeveniment {i+1}: {resposta.status_code} - Temp: {dades['temperatura']}°C")
time.sleep(2)
Lliurables
- Workflow amb webhook
- Script de prova Python
- Captures de dades rebudes
- Anàlisi d'alertes generades
ACTIVITAT 5: Integració amb APIs d'IA
Objectiu
Integrar serveis d'IA per enriquir dades automàticament.
Descripció
Crear un workflow que analitzi sentiment de comentaris de productes.
Requisits
- Compte a OpenAI o Hugging Face (API gratuïta disponible)
Part A: Workflow d'anàlisi de sentiment
-
Manual Trigger amb dades de prova
-
HTTP Request - IA API
- Configurar crida a API de sentiment
-
Processar cada comentari
-
Function - Classificar
const items = $input.all(); return items.map(item => { const sentiment = item.json.sentiment_score; let classificacio; if (sentiment > 0.6) { classificacio = 'Positiu'; } else if (sentiment < 0.4) { classificacio = 'Negatiu'; } else { classificacio = 'Neutral'; } return { json: { comentari: item.json.comentari, sentiment_score: sentiment, classificacio: classificacio, analitzat_a: new Date().toISOString() } }; }); -
Split In Batches
-
Agrupar per classificació
-
Switch
- Rutes segons sentiment
- Diferents accions per cada cas
Part B: Casos d'ús estesos
Opcions addicionals: - Anàlisi d'imatges amb Vision APIs - Extracció d'entitats de textos - Traducció automàtica - Generació de resums
Lliurables
- Workflow funcional
- Exemples d'anàlisis realitzades
- Comparativa de diferents APIs d'IA
ACTIVITAT 6: Monitoratge i Alertes Automàtiques
Objectiu
Crear un sistema de monitoratge que verifiqui l'estat de serveis i generi alertes.
Descripció
Monitor que verifica APIs públiques i envia notificacions si hi ha problemes.
Workflow
- Schedule Trigger
-
Cada 5 minuts
-
HTTP Request - Check Services (múltiples)
- URL 1: https://api.github.com/status
- URL 2: https://httpstat.us/200
-
URL 3: Altres serveis
-
Function - Avaluació
const items = $input.all(); const fallades = []; items.forEach(item => { if (item.json.statusCode !== 200) { fallades.push({ servei: item.json.url, estat: item.json.statusCode, error: item.json.error || 'Error desconegut', timestamp: new Date().toISOString() }); } }); return fallades.length > 0 ? [{ json: { estat: 'FALLADA', fallades } }] : [{ json: { estat: 'OK', verificats: items.length } }]; -
IF - Hi ha fallades?
- True: Enviar alerta
-
False: Log success
-
Accions d'alerta:
- Email notification
- Slack message
- Desar a base de dades
Part B: Dashboard d'estat
Crear taula de logs:
CREATE TABLE verificacions_serveis (
id SERIAL PRIMARY KEY,
nom_servei VARCHAR(100),
estat VARCHAR(20),
temps_resposta_ms INTEGER,
verificat_a TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Lliurables
- Workflow de monitoratge
- Historial de verificacions realitzades
- Exemples d'alertes generades
ACTIVITAT 7: Pipeline de Data Warehouse
Objectiu
Crear un pipeline complet de càrrega a un data warehouse simulat.
Descripció
ETL des de múltiples fonts cap a un data warehouse (PostgreSQL simulant DWH).
Arquitectura
Part A: Crear estructura DWH
-- Taules staging
CREATE SCHEMA staging;
CREATE TABLE staging.vendes_raw (
font VARCHAR(50),
dades JSONB,
carregat_a TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Taules DWH
CREATE SCHEMA dwh;
CREATE TABLE dwh.fact_vendes (
venda_id SERIAL PRIMARY KEY,
producte_id INTEGER,
client_id INTEGER,
import DECIMAL(10,2),
data_venda DATE,
sistema_origen VARCHAR(50)
);
CREATE TABLE dwh.dim_productes (
producte_id SERIAL PRIMARY KEY,
nom_producte VARCHAR(200),
categoria VARCHAR(100),
preu DECIMAL(10,2)
);
Part B: Workflow de càrrega
-
Schedule Trigger - Diari a les 2 AM
-
Subworkflow: Extract des d'API 1
- HTTP Request
- Transform
-
Load a staging
-
Subworkflow: Extract des de CSV
- Read Binary File
- Spreadsheet File
- Transform
-
Load a staging
-
Function: Merge i neteja
-
Postgres: Load a DWH
- Inserir a fact tables
-
Actualitzar dimension tables
-
Function: Data quality checks
-
Notification: Resultat
- Email amb resum
- Slack amb mètriques
Lliurables
- Workflow complet del pipeline
- Scripts SQL d'estructura
- Documentació del procés
- Report d'execució amb mètriques
ACTIVITAT 8: Projecte Final Integrador
Objectiu
Desenvolupar un projecte complet que integri tots els coneixements adquirits.
Opcions de projecte
Opció A: Sistema d'Anàlisi de Xarxes Socials
- Extreure dades d'APIs de xarxes socials
- Anàlisi de sentiment amb IA
- Generació de reports automatitzats
- Dashboard de mètriques en temps real
Opció B: Pipeline d'E-commerce Analytics
- Integració amb plataforma e-commerce
- ETL de productes, vendes, clients
- Data warehouse dimensional
- Alertes d'stock i vendes
- Reports automatitzats
Opció C: Monitor de Mercat Financer
- Extracció de dades d'APIs financeres
- Anàlisi de tendències
- Alertes de preus
- Prediccions bàsiques
- Visualització de dades
Requisits mínims
- Almenys 3 fonts de dades diferents
- Transformacions complexes amb JavaScript/Python
- Emmagatzematge en base de dades
- Integració amb IA (opcional)
- Sistema d'alertes
- Documentació completa
- Proves i validació
Estructura de lliurament
projecte-final/
├── README.md # Descripció del projecte
├── arquitectura.md # Diagrama i explicació
├── workflows/
│ ├── pipeline_principal.json
│ ├── subworkflow_1.json
│ └── ...
├── sql/
│ ├── schema.sql
│ └── queries.sql
├── scripts/
│ └── test_data.py
├── docs/
│ ├── manual_usuari.md
│ └── manual_tecnic.md
└── presentacio.pdf
Criteris d'avaluació
- Funcionalitat (30%): El sistema funciona correctament
- Complexitat tècnica (25%): Ús avançat de N8N
- Disseny d'arquitectura (20%): Arquitectura escalable i mantenible
- Qualitat del codi (15%): Codi net i documentat
- Documentació (10%): Documentació completa i clara
Lliurables
- Projecte complet segons estructura
- Vídeo demo (5-10 minuts)
- Presentació tècnica
- Codi font exportat
Recursos i Eines Addicionals
APIs públiques per practicar
- JSONPlaceholder: https://jsonplaceholder.typicode.com/
- OpenWeather: https://openweathermap.org/api
- CoinGecko: https://www.coingecko.com/en/api
- GitHub API: https://api.github.com/
- REST Countries: https://restcountries.com/
Eines complementàries
- Postman: testing d'APIs
- DBeaver: gestió de bases de dades
- VS Code: edició de scripts
- Git: control de versions
Bases de dades per practicar
- PostgreSQL (Docker)
- MongoDB (Docker)
- MySQL (Docker)
- Redis (Docker)
Versió: 1.0
Autor: Francesc - Institut Sa Palomera
Curs: Especialització en Big Data