Reviewed-on: #1
n8n — Custom Image
Imagen custom de n8n basada en la oficial, con n8n-nodes-upload-post preinstalado como bootstrap.
Versión actual
| Componente | Versión |
|---|---|
| n8n base | 2.15.1 |
| n8n-nodes-upload-post | 0.1.42 |
Arquitectura
Gitea repo (chemavx/n8n)
└── Dockerfile
└── FROM n8nio/n8n:2.15.1
+ n8n-nodes-upload-post@0.1.42 (bootstrap)
└── CI/CD → git.chemavx.xyz/chemavx/n8n:<sha>
└── k8s-manifests/n8n/deployment-n8n.yaml (parcheado automáticamente)
└── ArgoCD → despliega en cluster
Nota sobre el nodo custom: el nodo está instalado en la imagen como fallback. En operación normal, el PVC monta sobre /home/node/.n8n y n8n usa la versión del PVC (instalada via UI). Si el PVC se pierde o se usa un volumen nuevo, la imagen ya trae el nodo listo.
Cómo hacer bump de versión de n8n
-
Revisa el changelog de n8n para breaking changes o migraciones de BD.
-
Edita el
Dockerfile:FROM n8nio/n8n:X.Y.Z # ← cambiar aquí -
Commit y push a
main:git commit -am "chore: bump n8n to X.Y.Z" git push -
El CI construye la imagen y actualiza el manifiesto automáticamente.
⚠️ Advertencia crítica sobre migraciones de BD
n8n ejecuta migraciones de esquema SQLite automáticamente al arrancar con una versión nueva.
Una vez que el pod arranca con la nueva versión, NO se puede hacer rollback de imagen si hubo migraciones — la versión antigua no sabe leer el esquema nuevo y n8n no arrancará.
Regla: hacer backup ANTES de cualquier bump de versión mayor o minor:
# 1. Checkpoint WAL
kubectl exec -n n8n deployment/n8n -- node -e "
const sqlite3 = require('/usr/local/lib/node_modules/n8n/node_modules/.pnpm/sqlite3@5.1.7/node_modules/sqlite3');
const db = new sqlite3.Database('/home/node/.n8n/database.sqlite');
db.run('PRAGMA wal_checkpoint(TRUNCATE)', () => { console.log('OK'); db.close(); });
"
# 2. Backup manual
kubectl create job --from=cronjob/backup backup-pre-n8n-upgrade-$(date +%Y%m%d%H%M) -n backup-system
kubectl wait --for=condition=complete job/backup-pre-n8n-upgrade-... -n backup-system --timeout=300s
Los bumps de patch (2.15.1 → 2.15.2) son generalmente seguros. Los bumps de minor o major requieren revisar el changelog.
Cómo actualizar n8n-nodes-upload-post
Edita el Dockerfile:
RUN ... npm install n8n-nodes-upload-post@X.Y.Z && ...
Después actualiza también el nodo desde la UI de n8n para que el PVC quede sincronizado con la imagen.
Secreto requerido en el cluster
El deployment requiere el secret n8n-secret en el namespace n8n:
kubectl create secret generic n8n-secret \
--from-literal=encryption-key='<VALOR_EN_VAULTWARDEN>' \
-n n8n
Sin este secret, n8n arranca pero no puede descifrar ninguna credencial.
Rollback de emergencia
Si el nuevo deploy falla antes de que n8n arranque (imagen no disponible, error de config):
# Volver a la imagen anterior (sustituir <sha-anterior>)
kubectl set image deployment/n8n n8n=git.chemavx.xyz/chemavx/n8n:<sha-anterior> -n n8n
Si n8n ya arrancó con la nueva versión y hubo migraciones, no hacer rollback de imagen — restaurar desde backup.