Совсем недавно я рассказал как установить великолепный инструмент N8N на ваш сервер и использовать его для автоматизации процессов и не только. Важное замечание, N8N, как открытый проект постоянно развивается, улучшается и чинится. Если вы используете N8N в Docker, то периодическое обновление контейнера важная часть поддержки безопасности и получения новых функций и хорошая практика.

N8n update

В этой статье я расскажу как автоматизировать процесс с помощью простого скрипта.

Обычно процесс включает следующие шаги:

  1. Скачивание свежего образа n8n
  2. Обновление сервисов через docker-compose pull
  3. Перезапуск контейнеров docker-compose up -d
  4. Проверка, что n8n доступен

Мы можем автоматизировать это с помощью скрипта и cron

Если вы установили n8n по моей инструкции, то замените только ссылку на n8n и соответственно ваши названия директорий, код хорошо прокомментирован, разобраться легко.

#!/bin/bash
# Скрипт автоматического обновления n8n через Docker и проверка доступности
# Автор: Vlad Noskov https://ndigital.dev

set -e  # Выходим при любой ошибке

# Папка, где находится docker-compose.yml
N8N_DIR="$HOME/my-n8n-stack"

# URL, по которому доступен n8n (для проверки готовности)
N8N_URL="url_your_n8n"

echo "===> Проверяю наличие обновлений образа n8n..."
# Сохраняем вывод docker pull в переменную
PULL_OUTPUT=$(docker pull docker.n8n.io/n8nio/n8n)

# Если образ актуален, выводим сообщение и завершаем скрипт
if echo "$PULL_OUTPUT" | grep -q "Image is up to date"; then
    echo "ℹ️ Обновлений нет. Скрипт завершён."
    exit 0
fi

# Если обновление есть, продолжаем
echo "===> Найдено обновление, продолжаю..."

# Переходим в каталог с docker-compose.yml
cd "$N8N_DIR" || {
  echo "❌ Не удалось перейти в каталог $N8N_DIR"
  exit 1
}

# Обновляем образы всех сервисов, указанных в docker-compose.yml
echo "===> Обновляю образы сервисов..."
docker-compose pull

# Перезапускаем контейнеры в фоне, чтобы применились новые образы
echo "===> Перезапускаю контейнеры..."
docker-compose up -d

# Начинаем проверку доступности n8n через указанный URL
echo "===> Жду, пока n8n станет доступен по $N8N_URL ..."

# Цикл ожидания до 5 минут (30 попыток по 10 секунд)
for i in $(seq 1 30); do
    # Проверяем доступность URL через curl
    if curl -sSf "$N8N_URL" > /dev/null; then
        echo "✅ n8n готов и отвечает на HTTPS!"
        exit 0  # Если успешно, завершаем скрипт
    fi
    # Если сервис ещё не доступен, ждём 10 секунд
    echo "⏳ Ожидание... ($i/30)"
    sleep 10
done

# Если после 5 минут n8n так и не откликнулся, выводим ошибку
echo "❌ Ошибка: n8n не доступен по $N8N_URL спустя 5 минут."
exit 1

Установка

  1. Создаем и сохраняем скрипт:
nano /usr/local/bin/update-n8n.sh

Вставляем код выше, сохраняем и делаем его исполняемым:

chmod +x /usr/local/bin/update-n8n.sh
  1. Добавляем в cron, например, запуск каждое воскресенье в 03:00:
0 3 * * 0 /usr/local/bin/update-n8n.sh >> /var/log/update-n8n.log 2>&1
  1. Проверяем вручную:
bash /usr/local/bin/update-n8n.sh

Как это работает

  • Скрипт сначала выполняет docker pull.
  • Если образ уже актуален, обновление прерывается, чтобы не тратить ресурсы.
  • Если появилась новая версия, выполняется docker-compose pull и docker-compose up -d.
  • После этого идёт цикл ожидания до 5 минут: каждые 10 секунд проверяется доступность (url_n8n).
  • Когда n8n отвечает, скрипт завершается успешно.

Заключение

Теперь ваш n8n будет обновляться автоматически, а cron позаботится о регулярном запуске.
При этом обновления будут устанавливаться только если действительно вышла новая версия образа.