Как обновить n8n на своем сервере(Docker)

в 11:52, , рубрики: n8n, n8n docker, n8n как настроить, n8n как установить на сервер, n8n установка, Portainer, Ubuntu

Послезавтра, 15 декабря, выходит n8n 2.0. Обновляется он достаточно часто. Ниже описан безопасный способ обновления при использовании Docker с сохранением данных. В последних 2 пунктах я описал два варианта - при обновлении на стабильную релизную версию и для обновления на бету. Инструкция актуальна для n8n, развернутого через docker.

В этой инструкции предполагается, что n8n запущен в контейнере с названием n8n, a volume с данными для него называется n8n_data. Как установить и настроить такую связку я писал ранее

1. Бэкапим текущий n8n

Если хостинг позволяет делать снэпшоты VPS-ки и откатываться к ним - то можно сделать снэпшот перед обновлением(тогда ручной бэкап из следующего пункта можно не делать и сразу переходить к п.2).

Создадим архив с данными из volume перед обновлением:

docker run --rm 
  -v n8n_data:/data 
  -v $(pwd):/backup 
  busybox 
  tar czf /backup/n8n-backup-$(date +%d-%m-%Y).tar.gz /data

После выполнения в текущей директории появится файл: n8n-backup-DD-MM-YYYY.tar.gz

⚠️ Внимание!
Откат на предыдущую версию не всегда возможен простой заменой образа, так как иногда миграции БД могут быть необратимыми. Убедитесь что архив с бэкапом действительно создался.

‼️ Также учитывайте, что при обновлении с версии 1 на 2 beta некоторые воркфлоу у вас могут сломаться(для этого в последних минорных версиях есть migration tool, доступный в разделе Settings > Migration Report

Проверить наличие созданного архива можно командой:

ls -l

2. Останавливаем и удаляем текущий контейнер n8n

Команда удаления предварительно остановит контейнер:

docker rm -f n8n

3. Качаем образ с нужной версией n8n

Для обновления на последнюю стабильную(релизную) версию:

docker pull docker.n8n.io/n8nio/n8n:latest

Или же(для обновления на бета-версию):

docker pull docker.n8n.io/n8nio/n8n:next

4. Запускаем обновленный n8n

Для стабильной версии:

docker run -d 
  --name n8n 
  --restart=always 
  -p 5678:5678 
  -v n8n_data:/home/node/.n8n 
  docker.n8n.io/n8nio/n8n:latest

Для бета-версии:

docker run -d 
  --name n8n 
  --restart=always 
  -p 5678:5678 
  -v n8n_data:/home/node/.n8n 
  docker.n8n.io/n8nio/n8n:next

Готово! После того, как выполнили команду, немного ждем и проверяем в веб-интерфейсе, поменялась ли версия.

Как откатиться из бэкапа на предыдущую версию, если что-то пошло не так

Откат n8n и восстановление данных из volume

Если вдруг после обновления n8n предложил создать админскую учетку, а потом запустился «пустым» (без workflows и credentials), то скорее всего, причина в том, что при обновлении был некорректно указан volume(я, например, опечатался). Данные при этом сохранены, но текущий n8n "смотрит" в новый, пустой volume.

Ищем нужный volume с данными n8n

Посмотреть список всех volumes:

docker volume ls

Дальше для каждого "подозрительного" volume выполнить:

docker run --rm 
  -v ИМЯ_VOLUME:/data 
  busybox 
  ls -la /data

В нужном volume должны быть вот эти данные:

  • database.sqlite

  • config

  • workflows

  • credentials

"Запоминаем" жертву и идем смотреть, какой volume используется текущий контейнер n8n**

docker inspect n8n | grep -A 10 Mounts

Если volume отличается от найденного на предыдущем шаге — n8n запущен не с теми данными.

Посмотреть перечень volume-ов и найти «потерявшегося» еще можно в интерфейсе portainer-а, по его наименованию, дате создания и метке Unused

Далее удаляем текущий контейнер n8n

docker rm -f n8n

И запускаем n8n с правильным volume

Перед тем как выполнять команду, нужно обязательно убедиться, что теперь будет указан корректный volume, в котором найден database.sqlite

docker run -d 
  --name n8n 
  --restart=always 
  -p 5678:5678 
  -v ИМЯ_ПРАВИЛЬНОГО_VOLUME:/home/node/.n8n 
  docker.n8n.io/n8nio/n8n:latest

Ждем, пока n8n запустится и проверяем, появилась ли информация.
На случай если данных нет ни в одном volume - восстанавливаем данные из бекапа.

Инструкция по установке n8n на свой сервер

Автор: DaHacka

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js