n8n autoallotjat en producció: mode cua, Redis i còpies
El salt de la instància única de Docker a una que aguanta volum: el mode cua amb Redis i workers, la clau d'encriptació que ha de ser idèntica, i les còpies que sí que has de tenir.
·10 min de lectura
Tercera guia del clúster d’automatització amb n8n. Muntar n8n per provar és un docker run i cinc minuts. Muntar-lo perquè hi confiï el teu negoci és una altra cosa, i és el que veurem: quan la instància única deixa de servir, com passar al mode cua, i què has de tenir abans de posar-hi res que importi.
La instància única, i on es queda curta
L’arrencada mínima és un sol contenidor:
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
# ...credencials de la base de dades
volumes:
- n8n_data:/home/node/.n8n
Dues decisions ja importen aquí, encara amb un sol contenidor:
La base de dades ha de ser Postgres, no SQLite. Per defecte n8n fa servir SQLite dins del volum, que va bé per provar i malament per a res seriós: es corromp amb concurrència i és incòmode de copiar. Posa DB_TYPE=postgresdb des del principi.
La clau d’encriptació és sagrada. N8N_ENCRYPTION_KEY és amb el que n8n xifra totes les credencials guardades. Si la perds, perds l’accés a totes les connexions i les has de tornar a introduir una per una. Guarda-la fora del contenidor, en un gestor de secrets o com a mínim en un lloc segur, i no la generis a l’atzar cada desplegament.
Amb un sol contenidor, totes les execucions corren dins del mateix procés. Mentre siguin poques i ràpides, perfecte. El problema arriba quan un flux llarg bloqueja els altres, o quan el volum puja i un sol procés no dona l’abast. Aquí entra el mode cua.
El mode cua: separar qui rep de qui executa
El mode cua (queue mode) desacobla dues feines que en la instància única fa el mateix procés: rebre els disparadors i executar els fluxos.
- La instància principal rep els webhooks i els horaris, i en comptes d’executar-los, els posa en una cua.
- Uns quants processos worker treuen feina de la cua i l’executen.
- La cua és Redis, que fa d’intermediari entre els dos.
Així una càrrega de feina no bloqueja la resta, i pots afegir workers quan el volum puja sense tocar res més. Aquesta és l’arquitectura amb què n8n escala de veritat.
La configuració mínima
S’activa amb una variable d’entorn, a la principal i a cada worker:
EXECUTIONS_MODE=queue
I cal apuntar tots els processos al mateix Redis i a la mateixa base de dades:
# (fragment) principal i workers comparteixen aquestes variables
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
El worker és la mateixa imatge amb un altre ordre d’arrencada:
n8n-worker:
image: docker.n8n.io/n8nio/n8n
command: worker
environment:
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
# ...les mateixes credencials de base de dades
depends_on:
- redis
- postgres
Per posar més capacitat, aixeques més rèpliques del worker. La principal no cal duplicar-la per a la majoria de casos.
Les tres coses que peten en muntar-ho
1. La clau d’encriptació ha de ser idèntica a tots els processos. És l’error número u del mode cua. Si la principal xifra una credencial amb una clau i el worker en té una altra, el worker no pot desxifrar-la i el flux peta amb un error que no diu això enlloc. N8N_ENCRYPTION_KEY exactament la mateixa a la principal i a tots els workers.
2. Tots han de veure el mateix Redis i la mateixa base de dades. Redis és on viu la cua; la base de dades, on viuen les dades i l’historial. Si un worker no arriba a un dels dos, no treballa, i sovint sense un error clar.
3. Els webhooks segueixen entrant per la principal. En mode cua, la principal és qui rep. Si la poses darrere d’un proxy, assegura’t que les URL de webhook públiques hi apunten. Es controla amb WEBHOOK_URL.
Comprovar que els workers estan vius
Els workers poden exposar comprovacions de salut, útils si els poses darrere d’un balancejador o els vigiles:
QUEUE_HEALTH_CHECK_ACTIVE=true
Amb això, cada worker respon a /healthz (està viu?) i a /healthz/readiness (arriba a la base de dades i a Redis?). És el que mira l’orquestrador per saber si un worker està a punt o s’ha de reiniciar.
Les còpies de seguretat que sí que has de tenir
n8n guarda dues coses que has de poder recuperar, i no són el mateix:
- La base de dades de Postgres — hi viuen els fluxos, les credencials (xifrades) i l’historial d’execucions. És la còpia important. Un
pg_dumpdiari, provat, i guardat fora del servidor. - La
N8N_ENCRYPTION_KEY— sense ella, la còpia de la base de dades és inútil: les credencials no es poden desxifrar. Es guarda a part de la base de dades, perquè tenir-les juntes és com deixar la clau dins del pany.
Redis no cal copiar-lo: és una cua de pas, no una font de veritat. Si es perd, es perden les execucions que estaven a la cua en aquell moment, i la reconciliació de la guia de gestió d’errors les recupera.
La prova de foc de qualsevol còpia: restaura-la en net i mira si arrenca. Una còpia que no s’ha provat a restaurar no és una còpia, és una esperança. Val per a n8n i per a qualsevol altra cosa.
Netejar l’historial abans que t’ompli el disc
Cada execució queda registrada a la base de dades. Amb volum, això creix sense aturador i un dia el disc s’omple. n8n pot podar-ho sol:
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=336 # hores; 336 = 14 dies
Ajusta els dies al que necessitis per depurar. Guardar sis mesos d’execucions «per si de cas» és la manera lenta d’omplir el disc.
El resum de la posada en producció
- Postgres des del primer dia, mai SQLite per a res seriós.
N8N_ENCRYPTION_KEYfixa, guardada fora, idèntica a tots els processos.- Mode cua amb Redis i workers quan el volum ho demani; abans, no cal.
- Còpia diària i provada de Postgres, amb la clau d’encriptació guardada a part.
- Poda de l’historial perquè el disc no s’ompli sol.
Torna al tronc de la guia d’n8n, o mira com gestionar els errors dels fluxos que ara ja corren en producció.
La configuració del mode cua surt de la documentació d’n8n sobre escalat.