Retención. Los valores por defecto conservan catorce días o 10 000 ejecuciones, lo que llegue primero, con los datos completos de entrada y salida de cada nodo. En un NVMe pequeño con un disparador de programación activo, eso es lo que llena el disco. Añada esto al bloque de entorno de n8n y reinicie:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none es la mayor mejora posible en una instancia de alta frecuencia: deja de escribir los payloads de las ejecuciones que funcionaron, mientras sigue almacenando cada ejecución fallida completa para poder depurarla. Manténgalo en «all» mientras todavía está construyendo el flujo de trabajo, y cámbielo en cuanto el flujo de trabajo sea aburrido.
Silencio. El archivo Compose ya desactiva la telemetría, las notificaciones de versión y la encuesta de personalización. El único llamante saliente que queda es la galería de plantillas, que consulta api.n8n.io; fije N8N_TEMPLATES_ENABLED=false si no quiere ninguna llamada a terceros en absoluto. Si desactiva las notificaciones de versión, ponga un recordatorio mensual en su calendario para leer las notas de la versión — una instancia autoalojada que nadie actualiza es un resultado peor que una que consulta versiones.
El nodo Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, ya presente en el archivo, impide que las expresiones y los nodos Code lean las variables de entorno del proceso — que en esta máquina significa la contraseña de PostgreSQL y la clave de cifrado. Si no usa la API REST pública, añada N8N_PUBLIC_API_DISABLED=true y cierre también esa superficie.
Copias de seguridad — las tres partes o ninguna. Una copia de seguridad de la base de datos por sí sola no vale nada sin la clave de cifrado, y la clave por sí sola no restaura nada. Haga copia de seguridad del volcado de PostgreSQL, del volumen de datos de n8n y del .env juntos, y conserve al menos una copia fuera del servidor:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
El nombre del volumen es el nombre del proyecto Compose más el nombre del volumen; si su directorio no se llama n8n, ejecute docker volume ls y use lo que vea. Ponga las tres líneas en un cron, envíe los archivos a otro sitio, y pruebe una restauración una vez — una copia de seguridad sin probar es una creencia, no una copia de seguridad.
Actualizaciones. docker compose pull seguido de docker compose up -d. Haga primero una instantánea: n8n ejecuta migraciones de base de datos al arrancar, y las migraciones no están diseñadas para revertirse. Al cruzar una versión mayor — el salto de 1.x a 2.x, por ejemplo — lea las notas de la versión antes de hacer pull y no después, y considere fijar una etiqueta de imagen explícita en vez de :latest para que un reinicio desatendido nunca le actualice por sorpresa.