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

В этой статье я расскажу как автоматизировать процесс с помощью простого скрипта.
Обычно процесс включает следующие шаги:
- Скачивание свежего образа
n8n
- Обновление сервисов через
docker-compose pull
- Перезапуск контейнеров
docker-compose up -d
- Проверка, что 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
Установка
- Создаем и сохраняем скрипт:
nano /usr/local/bin/update-n8n.sh
Вставляем код выше, сохраняем и делаем его исполняемым:
chmod +x /usr/local/bin/update-n8n.sh
- Добавляем в cron, например, запуск каждое воскресенье в 03:00:
0 3 * * 0 /usr/local/bin/update-n8n.sh >> /var/log/update-n8n.log 2>&1
- Проверяем вручную:
bash /usr/local/bin/update-n8n.sh
Как это работает
- Скрипт сначала выполняет
docker pull
. - Если образ уже актуален, обновление прерывается, чтобы не тратить ресурсы.
- Если появилась новая версия, выполняется
docker-compose pull
иdocker-compose up -d
. - После этого идёт цикл ожидания до 5 минут: каждые 10 секунд проверяется доступность
(url_n8n)
. - Когда n8n отвечает, скрипт завершается успешно.
Заключение
Теперь ваш n8n будет обновляться автоматически, а cron позаботится о регулярном запуске.
При этом обновления будут устанавливаться только если действительно вышла новая версия образа.