Per la prima installazione, usa lo script di inizializzazione che configura automaticamente tutto:
cd n8n-as-mas-support-tech
./init-project.shLo script init-project.sh:
- Chiede interattivamente le credenziali admin (email e password)
- Determina automaticamente UID/GID del tuo utente
- Crea tutte le directory necessarie
- Verifica e corregge i permessi
- Genera il file
.envcon tutte le configurazioni
Dopo l'inizializzazione:
# Avvia i container
podman compose up -d
# Attendi 30-60 secondi che i container siano pronti, poi inizializza N8N
./init-n8n.shLo script init-n8n.sh crea automaticamente:
- Utente admin con le credenziali specificate in
.env - Progetto personale collegato all'utente
- Configurazione iniziale
Nota: Esegui init-n8n.sh dopo il primo podman compose up -d o se hai problemi di login.
Se hai già eseguito init-project.sh e hai il file .env:
# (Opzionale) Carica le variabili d'ambiente dal file .env
source .env
# Avvia i container
podman compose up -d
# Inizializza N8N (se necessario)
./init-n8n.shSe preferisci configurare manualmente invece di usare init-project.sh:
# Configura permessi e variabili d'ambiente
./setup_permissions.sh
export N8N_UID=$(id -u)
export N8N_GID=$(id -g)
# Poi avvia i container
podman compose up -dOppure aggiungi al tuo ~/.bashrc o ~/.zshrc:
export N8N_UID=$(id -u)
export N8N_GID=$(id -g)Questo rende il setup più portabile e compatibile con il tuo utente.
Lo script init-project.sh prepara l'ambiente prima di eseguire podman compose up -d. Esegue automaticamente:
-
Verifica prerequisiti: Controlla che podman e docker-compose.yml siano presenti
-
Configurazione credenziali admin: Chiede interattivamente email e password per l'utente admin di N8N
- Valida il formato email
- Richiede password con conferma (minimo 6 caratteri)
-
Determinazione UID/GID: Rileva automaticamente l'UID e GID dell'utente corrente
-
Creazione directory: Crea tutte le directory
volumes/*necessarie se mancanti -
Verifica permessi: Controlla e corregge i permessi delle directory usando
podman unshare -
Generazione file .env: Crea il file
.envcon tutte le variabili d'ambiente:ADMIN_EMAILeADMIN_PASSWORD: Credenziali adminN8N_UIDeN8N_GID: ID utente/gruppo per i containerN8N_API_KEY: Chiave API opzionale (vuota inizialmente)
Il file .env viene creato con permessi 600 (solo proprietario) per sicurezza.
Utilizzo:
./init-project.shLo script è interattivo e guida l'utente attraverso il processo di configurazione.
Lo script init-n8n.sh crea l'utente admin e il progetto personale in N8N. Legge automaticamente le credenziali dal file .env se presente, altrimenti usa valori di default.
Utilizzo:
# Dopo che i container sono avviati e pronti
./init-n8n.shNota: Esegui questo script dopo podman compose up -d e dopo aver atteso che i container siano completamente inizializzati (circa 30-60 secondi).
Servizi disponibili:
| Servizio | URL | Descrizione |
|---|---|---|
| n8n | http://localhost:5678 | Workflow automation |
| MCP Server | http://localhost:8012 | AI workflow generation |
| RedisInsight | http://localhost:9001 | Redis GUI |
| Redis | localhost:6389 | Cache/messaging |
Le credenziali admin sono configurate durante l'esecuzione di init-project.sh e salvate nel file .env:
- Email: Configurata durante
init-project.sh(default:admin@spee.itse non specificato) - Password: Configurata durante
init-project.sh(default:adminse non specificato)
Il file .env contiene anche:
N8N_UIDeN8N_GID: ID utente/gruppo per i containerN8N_API_KEY: Chiave API opzionale (può essere configurata dopo)
Nota: Il file .env è nel .gitignore e non viene committato nel repository per sicurezza.
Tutti i dati persistenti sono nella cartella ./volumes/:
volumes/
├── config/ # API key MCP
├── n8n_data/ # Configurazione n8n locale
├── postgres_data/ # Database PostgreSQL (utenti, workflow, credenziali)
├── redis_data/ # Dati Redis
├── redisinsight_data/ # Configurazione RedisInsight
└── workflows/ # Workflow esportati
I dati persistono tra podman compose down e up.
Il docker-compose usa una rete custom con IP statici per la risoluzione DNS (compatibile con Podman CNI senza plugin aggiuntivi):
| Container | IP | Hostname |
|-----------|-----|----------|
| n8n-db | 172.28.0.2 | db |
| n8n-redis | 172.28.0.3 | redis |
| n8n-redisinsight | 172.28.0.4 | redisinsight |
| n8n-app | 172.28.0.5 | n8n |
| n8n-mcp | 172.28.0.6 | n8n-mcp |
Il docker-compose include un MCP (Model Context Protocol) server che permette di generare workflow N8N tramite AI assistant come Cursor.
-
Apri Cursor IDE
-
Vai in:
File>Preferences>Settings>Tools & Integrations>MCP Tools -
Clicca su Add MCP Server e aggiungi:
{
"mcpServers": {
"n8n": {
"url": "http://localhost:8012/sse",
"transport": "sse"
}
}
}- Riavvia Cursor
-
Accedi a http://localhost:5678 con le credenziali dal file
.secret -
Vai in Settings > API
-
Clicca Create API Key e copia la chiave
-
In Cursor chat, salva la chiave:
Salva la N8N API Key: n8n_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- save_api_key: Salva API key nel volume persistente
- generate_workflow: Genera workflow JSON da requisiti
- import_workflow: Importa workflow in N8N
- list_workflows: Lista tutti i workflow
- get_workflow: Ottiene workflow per ID
- list_saved_workflows: Lista workflow salvati localmente
In Cursor chat:
- "Genera un workflow N8N che ascolta un canale Redis e pubblica su un altro canale"
- "Lista tutti i workflow in N8N"
- "Importa questo workflow JSON in N8N"
Lo script import_workflows.py importa tutti i workflow dalla cartella volumes/workflows/:
# Importa tutti i workflow (salta quelli esistenti)
./import_workflows.py
# Aggiorna i workflow esistenti invece di skipparli
./import_workflows.py --update
# Specifica un URL N8N diverso
./import_workflows.py --url http://localhost:5678Lo script delete_workflow.py elimina un workflow dato il nome:
# Elimina un workflow (con conferma)
./delete_workflow.py "Nome Workflow"
# Elimina senza conferma
./delete_workflow.py "Nome Workflow" --force
# Specifica un URL N8N diverso
./delete_workflow.py "Nome Workflow" --url http://localhost:5678Nota: Entrambi gli script usano automaticamente username/password dal file .env (se presente), oppure l'API key se disponibile.
Lo script reset_n8n.sh resetta N8N a uno stato vergine, eliminando tutti i dati persistenti:
# Reset completo (richiede conferma)
./reset_n8n.sh- Tutti i workflow salvati in N8N
- Tutti gli utenti e credenziali
- Tutti i dati del database PostgreSQL
- Tutti i dati di configurazione N8N
- Tutti i dati Redis
I seguenti dati NON vengono eliminati:
- Workflow esportati in
volumes/workflows/(file JSON) - Configurazione API key in
volumes/config/
Dopo il reset, i container rimangono fermati. Devi:
-
Rigenerare la configurazione (se il file
.envè stato eliminato):./init-project.sh
Oppure, se il file
.envesiste ancora:source .env -
Riavviare i container:
podman compose up -d
-
Creare l'utente admin:
./init-n8n.sh
Nota: Le variabili N8N_UID e N8N_GID nel file .env permettono ai container di usare l'UID/GID del tuo utente invece di 1000:1000 hardcoded, rendendo il setup più portabile.
In questo esempio un Redis trigger attende un messaggio sul canale A, un nodo Python lo elabora, e un altro nodo Redis lo pubblica sul canale B:
Python code del nodo "Print":
for item in _input.all():
item.json.myNewField = 1
output = item
print(item)
return _input.all()Nel campo data del nodo Redis per ri-pubblicare:
{{ JSON.stringify($json.message) }}Quando importi un workflow, le credenziali non vengono incluse per motivi di sicurezza. Devi configurarle manualmente:
-
Apri il workflow importato in N8N UI (http://localhost:5678)
-
Clicca sul nodo Redis che mostra l'errore "credentials for Redis are not set"
-
Clicca su "Create New Credential" o seleziona una credenziale esistente
-
Configura i parametri:
- Host:
redis⚠️ IMPORTANTE: Usaredis(nonn8n-redis!)- Il container Redis ha
hostname: redisnel docker-compose - I container sulla stessa rete Docker/Podman usano l'hostname per la risoluzione DNS
- Se accedi da host (non da container), usa
localhost
- Il container Redis ha
- Port:
6379⚠️ IMPORTANTE: Usa6379(porta interna del container), NON6389!- La porta
6389è solo per l'accesso dall'host (mappatura6389:6379) - Quando N8N (container) si connette a Redis (container), usa la porta interna
6379 - Se accedi da host, usa
6389(porta mappata)
- La porta
- Password: (lascia vuoto se Redis non ha password configurata)
- Database:
0(default)
- Host:
-
Salva la credenziale e il workflow dovrebbe funzionare
Nota Importante:
- Da container N8N: Usa
redis:6379(hostnameredis, porta interna6379)⚠️ NON usare la porta 6389 - quella è solo per l'accesso dall'host!
- Da host: Usa
localhost:6389(porta mappata6389) - NON usare
n8n-rediscome hostname - quello è solo ilcontainer_name, non l'hostname per la risoluzione DNS!
Configurazione corretta per N8N (container -> container):
- Host:
redis - Port:
6379← Questa è la porta corretta!
Se N8N non si connette a Redis nonostante la configurazione corretta:
-
Verifica che Redis sia in esecuzione:
podman ps | grep redis podman exec n8n-redis redis-cli ping # Dovrebbe rispondere: PONG
-
Verifica la connettività di rete dal container N8N:
podman exec n8n-app nc -zv redis 6379 # Dovrebbe mostrare: redis (172.28.0.3:6379) open
-
Verifica la risoluzione DNS:
podman exec n8n-app getent hosts redis # Dovrebbe mostrare: 172.28.0.3 redis
-
Controlla la configurazione delle credenziali in N8N:
- Assicurati di aver salvato le credenziali dopo averle create
- Verifica che il nodo Redis usi le credenziali corrette (clicca sul nodo e controlla il campo "Credential")
- Prova a ricreare le credenziali se necessario
-
Verifica la porta:
⚠️ IMPORTANTE: Usa porta6379, NON6389!- La porta
6389è solo per l'accesso dall'host (vedi docker-compose.yml:6389:6379) - Quando N8N (container) si connette a Redis (container), deve usare la porta interna
6379
-
Se il problema persiste, prova con l'IP diretto:
- Host:
172.28.0.3 - Port:
6379← Non 6389! - (Questo bypassa la risoluzione DNS ma funziona come workaround)
- Host:
Se vedi una pagina bianca con errore nella console:
ResponseError: Could not find a personal project for this user
Esegui lo script di inizializzazione:
./init-n8n.shLo script verifica e crea automaticamente:
- L'utente admin se non esiste
- Il progetto personale se non esiste
- La relazione tra utente e progetto
- Le impostazioni utente necessarie
Verifica che la rete abbia gli IP corretti:
podman network inspect n8n_n8n_netPer ricominciare da zero, usa lo script dedicato:
./reset_n8n.shDopo il reset, rigenera la configurazione:
./init-project.sh
podman compose up -d
./init-n8n.shOppure manualmente:
podman compose down
rm -rf volumes/postgres_data/*
rm -rf volumes/n8n_data/*
rm -rf volumes/redis_data/*
rm -rf volumes/redisinsight_data/*
./init-project.sh
podman compose up -d
./init-n8n.shNota: Lo script reset_n8n.sh è più sicuro perché richiede conferma e preserva i workflow esportati. Il file .env non viene eliminato dal reset, ma puoi rigenerarlo con init-project.sh se necessario.
