n8n publica versiones nuevas con frecuencia, con correcciones de seguridad, nodos nuevos y cambios en el editor. Si lo ejecutas con Docker Compose, actualizar consiste en descargar la imagen nueva y recrear el contenedor, pero antes conviene hacer una copia de seguridad para poder volver atrás si algo falla. En este tutorial actualizarás una instalación de n8n con PostgreSQL en Ubuntu 24.04, comprobarás la versión nueva y verás cómo revertir el cambio.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS (u otra distribución con Docker) donde n8n ya funcione con Docker Compose, por ejemplo un VPS de CubePath.
  • Docker Engine con el plugin de Docker Compose v2 (el comando docker compose, sin guion).
  • Acceso SSH con un usuario con privilegios sudo.
  • Saber en qué carpeta está el archivo docker-compose.yml de n8n. En esta guía se usa /opt/n8n; sustitúyela por la tuya si es distinta.

Paso 1: Revisar la instalación actual

Conéctate al servidor, sustituyendo tu_usuario y ip_del_servidor por tus datos:

ssh tu_usuario@ip_del_servidor

Entra en la carpeta del proyecto y lista los servicios:

cd /opt/n8n
sudo docker compose ps
NAME           IMAGE                     COMMAND                  SERVICE    CREATED        STATUS                  PORTS
n8n            docker.n8n.io/n8nio/n8n   "tini -- /docker-ent…"   n8n        3 months ago   Up 3 months             0.0.0.0:5678->5678/tcp
n8n-postgres   postgres:16               "docker-entrypoint.s…"   postgres   3 months ago   Up 3 months (healthy)   5432/tcp

Anota los nombres de la columna SERVICE (aquí n8n y postgres), porque los usarás en los siguientes pasos. Consulta la versión que tienes ahora:

sudo docker compose exec n8n n8n --version
1.110.1

Abre docker-compose.yml y revisa la línea image: del servicio de n8n:

grep -n "image:" docker-compose.yml
  • Si pone docker.n8n.io/n8nio/n8n o n8nio/n8n sin etiqueta, o con :latest, al descargar obtendrás la última versión estable.
  • Si tiene una versión fija (por ejemplo n8nio/n8n:1.110.1), cámbiala por la versión a la que quieras ir antes de continuar.

Antes de saltar de versión mayor (por ejemplo de 1.x a 2.x), lee las notas de la versión y la guía de cambios incompatibles en la documentación oficial de n8n, porque pueden requerir ajustes en variables de entorno o en tus flujos.

Paso 2: Hacer una copia de seguridad

Una actualización puede ejecutar migraciones en la base de datos que no se pueden deshacer. Guarda una copia antes de tocar nada. Crea una carpeta para las copias:

sudo mkdir -p /opt/n8n/backups

Vuelca la base de datos de PostgreSQL. Sustituye n8n en -U y en el nombre de la base de datos por los valores de POSTGRES_USER y POSTGRES_DB de tu docker-compose.yml o de tu archivo .env:

sudo docker compose exec -T postgres pg_dump -U n8n -d n8n -Fc | sudo tee /opt/n8n/backups/n8n-$(date +%F).dump > /dev/null

Comprueba que el archivo no está vacío:

ls -lh /opt/n8n/backups/
-rw-r--r-- 1 root root 4.2M Sep 25 10:20 n8n-2026-09-25.dump

Exporta además los flujos y las credenciales con la CLI de n8n. Es una copia independiente de la base de datos que puedes importar en otra instalación. Las credenciales se exportan cifradas con la clave de cifrado de la instancia:

sudo docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json
sudo docker compose exec n8n n8n export:credentials --all --output=/home/node/.n8n/backup-credentials.json

Los archivos quedan en el volumen de datos de n8n (/home/node/.n8n), que no se borra al recrear el contenedor. Guarda también la clave de cifrado (N8N_ENCRYPTION_KEY en tu .env, o el archivo config dentro de ese volumen): sin ella no podrás descifrar las credenciales.

Paso 3: Descargar la nueva imagen

Descarga las imágenes nuevas sin detener el servicio. Así el tiempo de corte se limita al reinicio del contenedor:

sudo docker compose pull n8n
[+] Pulling 1/1
 n8n Pulled

Solo se actualiza n8n. No actualices la imagen de PostgreSQL a otra versión mayor (por ejemplo de 16 a 17) en el mismo paso: el formato de datos cambia entre versiones mayores y requiere una migración aparte.

Paso 4: Recrear el contenedor

Aplica la imagen nueva. Docker Compose solo recrea los contenedores cuya imagen o configuración ha cambiado, así que no hace falta ejecutar docker compose down antes:

sudo docker compose up -d
[+] Running 2/2
 Container n8n-postgres  Running
 Container n8n           Started

Sigue los registros durante el arranque. La primera vez tras la actualización n8n aplica las migraciones de la base de datos, lo que puede tardar unos segundos o varios minutos si tienes muchas ejecuciones guardadas:

sudo docker compose logs -f n8n

Espera a ver una línea similar a esta y pulsa Ctrl+C para salir:

Editor is now accessible via:
https://n8n.tu_dominio.com

Paso 5: Verificar la actualización

Comprueba la versión que se está ejecutando:

sudo docker compose exec n8n n8n --version
1.112.0

Confirma que los contenedores están en marcha:

sudo docker compose ps

Por último, entra en el editor desde el navegador, abre un par de flujos y lanza una ejecución manual de uno que use credenciales. Revisa también que los flujos con disparadores (webhooks, cron) siguen activos.

Cuando todo funcione, puedes eliminar las imágenes antiguas que ya no usa ningún contenedor para liberar espacio:

sudo docker image prune

Paso 6: Volver a la versión anterior si algo falla

Si la versión nueva da problemas, fija en docker-compose.yml la versión que tenías antes (la que anotaste en el paso 1):

sudo nano /opt/n8n/docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:1.110.1

Como la versión nueva ya migró la base de datos, restaura la copia antes de arrancar la versión anterior. Detén n8n, restaura el volcado y vuelve a levantarlo:

sudo docker compose stop n8n
sudo docker compose exec -T postgres pg_restore -U n8n -d n8n --clean --if-exists < /opt/n8n/backups/n8n-2026-09-25.dump
sudo docker compose up -d

Comprueba de nuevo la versión con sudo docker compose exec n8n n8n --version. Ten en cuenta que perderás las ejecuciones y cambios hechos después de la copia.

Solución de problemas

  • n8n se reinicia en bucle tras actualizar. Revisa sudo docker compose logs n8n. Si el error menciona una migración, restaura la copia y vuelve a la versión anterior mientras revisas las notas de la versión.
  • Mismatching encryption keys. El contenedor nuevo no está usando la misma clave de cifrado. Asegúrate de que N8N_ENCRYPTION_KEY está definido en el .env o de que el volumen de datos sigue montado en /home/node/.n8n.
  • La descarga no trae una versión nueva. La imagen tiene una etiqueta fija en docker-compose.yml. Cámbiala por la versión que quieras y repite los pasos 3 y 4.

Conclusión

Has actualizado n8n con una copia de seguridad previa de la base de datos, los flujos y las credenciales, has verificado la versión nueva y sabes cómo volver atrás. Para las próximas actualizaciones, fija una versión concreta en docker-compose.yml en lugar de latest, así sabrás siempre qué se está ejecutando. Como siguientes pasos, programa copias diarias de PostgreSQL con cron y suscríbete a las notas de versión de n8n para enterarte de los cambios incompatibles.