Автоматическое обновление n8n через cron

Совсем недавно я рассказал как установить великолепный инструмент 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 позаботится о регулярном запуске.
При этом обновления будут устанавливаться только если действительно вышла новая версия образа.

Если вам нужна помощь или вы хотите настроить различные автоматизации, свяжитесь со мной!

Свяжитесь со мной

Похожие записи

Перезвонить?

Хотите развивать бизнес онлайн, мы можем вам помочь!