August 6

Как обновить PostgreSQL до версии 17 в n8n на VPS от Бегет

Многие выбирают облачную платформу Бегет для размещения self-hosted версии n8n на VPS по следующим причинам:

  • Низкие тарифы - от 9 ₽ в день. Можно пополнить баланс на 30 ₽ и протестировать работу n8n в течение трёх дней на выбранном тарифе.
  • Прозрачное проксирование запросов к OpenAI API - вы можете без проблем обращаться к api.openai.com даже с российских IP, минуя блокировку:{"error":{"code":"unsupported_country_region_territory", "message":"Country, region, or territory not supported", "param":null, "type":"request_forbidden"}}
  • Бесплатная установка n8n - при заказе нового VPS вы можете сразу получить настроенную версию n8n с защищённым HTTPS-доступом.

Однако стоит учитывать один нюанс: при автоматической установке используется устаревшая версия PostgreSQL - 11 (выпущена в 2018 году). Актуальная версия на 2025 год - PostgreSQL 17, содержащая множество улучшений в области безопасности и производительности. N8n корректно работает с 17 версией.

Ниже - пошаговая инструкция по обновлению PostgreSQL до версии 17 для n8n на VPS от Бегет.


Пошаговая инструкция

1. Подключение к серверу по SSH

ssh root@<ip_адрес_сервера>

2. Переход в директорию n8n

cd /opt/beget/n8n

3. Остановка сервиса n8n

docker compose stop n8n

4. Создание дампа базы данных

Уточните имя контейнера с PostgreSQL:

docker compose ps | grep postgres

Скорее всего, он называется n8n-postgres-1. Выполните дамп БД:

docker exec -it n8n-postgres-1 pg_dump -U root n8n > n8n_backup.sql

5. Остановка сервиса PostgreSQL

docker compose stop postgres

6. Создание резервных копий

mv db_storage db_storage_backup
mkdir db_storage
cp init-data.sh init-data_backup.sh
cp docker-compose.yml docker-compose_backup.yml

7. Обновление версии PostgreSQL в docker-compose.yml

sed -i 's#postgres:11#postgres:17#g' docker-compose.yml

8. Обновление скрипта инициализации init-data.sh

Содержимое должно быть следующим:

cat > init-data.sh << 'EOF'
#!/bin/bash
set -e;

if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
    psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
        CREATE USER "${POSTGRES_NON_ROOT_USER}" WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
        GRANT ALL PRIVILEGES ON DATABASE "${POSTGRES_DB}" TO "${POSTGRES_NON_ROOT_USER}";
        GRANT CREATE ON SCHEMA public TO "${POSTGRES_NON_ROOT_USER}";
EOSQL
else
    echo "SETUP INFO: No Environment variables given!"
fi
EOF

9. Загрузка нового образа PostgreSQL

docker compose pull postgres

10. Запуск новой версии PostgreSQL

docker compose up -d postgres

11. Проверка логов PostgreSQL

Убедитесь, что нет ошибок:

docker compose logs postgres

12. Восстановление дампа в новую базу данных

cat n8n_backup.sql | docker exec -i n8n-postgres-1 psql -U root -d n8n

13. Запуск сервиса n8n

docker compose start n8n

14. Проверка логов n8n

docker compose logs n8n --tail 100

15. Проверка интерфейса n8n

Убедитесь, что все workflows работают корректно. Если всё в порядке - удалите временные файлы:

rm init-data_backup.sh docker-compose_backup.yml n8n_backup.sql
rm -rf db_storage_backup

16. Очистка неиспользуемых Docker-образов

docker image prune -a

Если вы всё сделали по инструкции - поздравляю! Теперь ваша система работает с актуальной и безопасной версией PostgreSQL 17.