Установка n8n на Ubuntu 24.04: Docker Compose и настройка HTTPS | AdminWiki

Установка n8n на Ubuntu: Полное руководство для DevOps и разработчиков

17 декабря 2025 11 мин. чтения #devops #docker #n8n #nodejs #ubuntu #workflow #автоматизация

Представь, что тебе нужно автоматизировать рутинные задачи: синхронизацию данных между сервисами, обработку webhook'ов или создание сложных бизнес-процессов. n8n — это инструмент автоматизации с доступным исходным кодом и условиями Sustainable Use License для создания workflow'ов, который можно развернуть на собственном сервере. Давай разберем, как выполнить установку n8n на Ubuntu правильно и безопасно.

Подготовка сервера Ubuntu

В этом примере используем новую Ubuntu 24.04 LTS. Для размещения n8n можно выбрать VPS, в том числе Timeweb Cloud (партнёрская ссылка): сравни ресурсы, резервные копии и стоимость. Понадобятся sudo, домен с правильными DNS A/AAAA и консоль восстановления. Выбери один метод установки: два экземпляра не должны занимать один порт.

Обновление системы и установка зависимостей

bash
# Обновляем пакеты системы
sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые утилиты
sudo apt install -y curl wget gnupg git build-essential

# Для работы с Docker (если будем использовать)
sudo apt install -y apt-transport-https ca-certificates software-properties-common

Важно: Все команды выполняем от обычного пользователя с sudo правами. Не работай от root напрямую!

Способ 1: Установка n8n через Node.js и PM2

npm/PM2 — альтернативный способ для версии n8n, которая поддерживает npm-установку. Перед установкой проверь её требования Node.js и release notes; не считай PM2 автоматически более подходящим для production. Для нового self-hosting основной выбор ниже — Docker Compose.

Установка Node.js и npm

bash
# Установи поддерживаемую выбранной версией n8n Node.js
# по официальной инструкции nodejs.org, затем проверь:
node --version
npm --version

Проверь текущий диапазон Node.js в документации n8n; на момент проверки он указан как 20.19–24.x. Выбери поддерживаемый LTS внутри диапазона. npm-установки помечены deprecated начиная с n8n 3.0: для такой версии выбирай Docker, а не этот вариант.

Установка и настройка n8n

bash
mkdir -p ~/n8n && cd ~/n8n
npm init -y
# Замени X.Y.Z на выбранную поддерживаемую npm-версию n8n
npm install --save-exact n8n@X.Y.Z
npm install --save-exact pm2

Настройка PM2 для управления процессом

bash
cd ~/n8n
umask 077
cat > ecosystem.config.js << 'EOF'
module.exports = {
  apps: [{
    name: 'n8n',
    script: './node_modules/n8n/bin/n8n',
    args: 'start',
    cwd: __dirname,
    env: {
      N8N_LISTEN_ADDRESS: '127.0.0.1',
      N8N_PROTOCOL: 'https',
      N8N_HOST: 'n8n.example.com',
      N8N_PORT: 5678,
      N8N_PROXY_HOPS: 1,
      N8N_ENCRYPTION_KEY: 'REPLACE_WITH_RANDOM_SECRET',
      WEBHOOK_URL: 'https://n8n.example.com/',
      N8N_EDITOR_BASE_URL: 'https://n8n.example.com/',
      DB_TYPE: 'sqlite',
      N8N_METRICS: 'false'
    }
  }]
};
EOF
chmod 600 ecosystem.config.js
# Сначала замени домен и секрет, затем:
./node_modules/.bin/pm2 start ecosystem.config.js
./node_modules/.bin/pm2 save

Внимание: Обязательно замени все значения в конфиге на свои! Генерация надежного ENCRYPTION_KEY: openssl rand -base64 32

Способ 2: Установка n8n через Docker

Docker Compose позволяет описать n8n и PostgreSQL вместе. Контейнеры не заменяют обновления, контроль доступа и резервные копии. Не запускай одновременно с PM2 на том же порту.

Установка Docker и Docker Compose

bash
# Установи Docker Engine и Compose plugin из официального
# apt-репозитория по docs.docker.com/engine/install/ubuntu/
sudo docker version
sudo docker compose version

Создай ~/n8n-docker и в нём файл .env с правами 600. Задай N8N_VERSION (точную стабильную версию), POSTGRES_PASSWORD и N8N_ENCRYPTION_KEY (разные случайные значения, например openssl rand -hex 32), N8N_HOST=n8n.example.com. В примерах WEBHOOK_URL оставлен для совместимости: начиная с n8n 2.30.0 доступно имя N8N_WEBHOOK_URL, а с 2.35.0 старое помечено deprecated. Для выбранной версии 2.30.0+ замени имя на N8N_WEBHOOK_URL в обоих вариантах; не задавай оба. Сохрани ключ шифрования вместе с бэкапом: смена ключа делает старые credentials нечитаемыми. Не публикуй .env и вывод compose config. POSTGRES_PASSWORD инициализирует только новую базу, не меняет пароль существующего volume.

Docker Compose конфигурация для n8n

yaml
services:
  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: n8n_user
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n_user -d n8n"]
      interval: 10s
      timeout: 5s
      retries: 10
  n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION:?Set N8N_VERSION}
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      N8N_PROTOCOL: https
      N8N_HOST: ${N8N_HOST:?Set N8N_HOST}
      WEBHOOK_URL: https://${N8N_HOST}/
      N8N_EDITOR_BASE_URL: https://${N8N_HOST}/
      N8N_PROXY_HOPS: 1
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY:?Set N8N_ENCRYPTION_KEY}
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n_user
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD}
      N8N_METRICS: "false"
      GENERIC_TIMEZONE: Europe/Moscow
      TZ: Europe/Moscow
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
volumes:
  postgres_data:
  n8n_data:
bash
mkdir -p ~/n8n-docker && cd ~/n8n-docker
umask 077
nano .env  # Заполни переменные, описанные выше
chmod 600 .env
nano compose.yaml  # Вставь YAML выше
sudo docker compose config --quiet
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs --tail=100 n8n

Настройка Nginx в качестве reverse proxy

Для внешнего доступа используем Nginx с HTTPS. До публикации разреши фактический SSH-порт в firewall и проверь второй сеанс, затем 80/443; подготовь откат через консоль провайдера. Не открывай5678 наружу. На этапе первого владельца временно разреши доступ только своему публичному IP в Nginx, как показано ниже.

Установка и базовая настройка Nginx

bash
sudo apt install -y nginx
sudo systemctl status nginx

Конфигурация виртуального хоста для n8n

nginx
server {
    listen 80;
    listen [::]:80;
    server_name n8n.example.com;
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
        try_files $uri =404;
    }
    location = /metrics { deny all; }
    location / {
        # Замени адрес своим публичным IP до активации
        allow 203.0.113.10;
        deny all;
        proxy_pass http://127.0.0.1:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

Сохрани конфигурацию в /etc/nginx/sites-available/n8n, замени домен и IP, создай ссылку в sites-enabled. Выполни sudo nginx -t и только при успехе sudo systemctl reload nginx. Не вводи пароль по HTTP. Сначала выпусти сертификат; для домена должны работать DNS и доступ к80. После выдачи сертификата проверь сохранение временного IP-ограничения, открой HTTPS и создай owner-аккаунт с уникальным паролем/MFA. Только затем убери allow/deny из location / и снова проверь/reload Nginx.

Получение SSL сертификата через Certbot

bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.example.com
sudo certbot renew --dry-run
systemctl list-timers --all

Сравнение методов установки n8n

Критерий Node.js + PM2 Docker
Сложность установки Средняя Низкая
Изоляция Частичная Контейнерная, с общим ядром хоста
Обновление Выбор поддерживаемой версии, npm install --save-exact и restart после бэкапа Изменение N8N_VERSION, pull и up -d после бэкапа
Резервное копирование Согласованная копия SQLite и ~/.n8n, ключ и конфигурация Дамп PostgreSQL, данные n8n, ключ и конфигурация
Производительность Зависит от workflow и ресурсов Проверяется измерениями

Базовые команды управления n8n

Для PM2 установки:

  • ./node_modules/.bin/pm2 start ecosystem.config.js — запуск
  • ./node_modules/.bin/pm2 stop n8n — остановка
  • ./node_modules/.bin/pm2 restart n8n — перезапуск
  • ./node_modules/.bin/pm2 logs n8n — просмотр логов
  • ./node_modules/.bin/pm2 startup — из ~/n8n; выполни выданную startup-команду для текущего пользователя, затем ./node_modules/.bin/pm2 save

Для Docker установки:

  • sudo docker compose up -d — запуск
  • sudo docker compose down — остановка
  • sudo docker compose restart — перезапуск
  • sudo docker compose logs -f — логи
  • sudo docker compose pull — скачивание образа; для применения после бэкапа нужен sudo docker compose up -d

Часто задаваемые вопросы (FAQ)

Какой порт использует n8n по умолчанию?

n8n по умолчанию использует порт 5678. Это можно изменить через переменную окружения N8N_PORT.

Нужна ли отдельная база данных для n8n?

n8n поддерживает SQLite и PostgreSQL. Здесь PM2-пример использует SQLite, а Docker-пример — PostgreSQL. Выбирай по нагрузке и режиму работы; для queue mode используй поддерживаемую внешнюю БД. Ни один вариант не заменяет бэкапы и проверку восстановления.

Как настроить бэкапы workflow'ов?

В Docker-примере workflow и credentials находятся в PostgreSQL: останови n8n, сделай дамп базы и согласованную копию n8n_data, сохрани .env с ключом и Compose. PostgreSQL оставь работающим для pg_dump. Для PM2 останови процесс и скопируй весь ~/.n8n с SQLite, конфигурацию и ключ. Защити бэкапы, храни копию вне сервера и проверь восстановление; экспорт workflow не является полным бэкапом.

cd ~/n8n-docker
umask 077
mkdir -p ~/n8n-backups
sudo docker compose stop n8n
sudo docker compose exec -T postgres pg_dump -U n8n_user -d n8n -Fc > ~/n8n-backups/n8n-$(date +%Y%m%d-%H%M%S).dump
# Проверь успех pg_dump и скопируй n8n_data, .env и compose.yaml
# согласованным способом, затем верни n8n в работу:
sudo docker compose start n8n

Как обновить n8n до новой версии?

Прочитай release notes и сделай проверяемый бэкап. Для Docker измени закреплённую N8N_VERSION, выполни sudo docker compose pull и sudo docker compose up -d. Для локального npm из ~/n8n установи выбранную поддерживаемую версию через npm install --save-exact n8n@X.Y.Z, затем ./node_modules/.bin/pm2 restart n8n. Проверь вход, credentials и workflow; откат после миграции базы может требовать её восстановления.

Как настроить аутентификацию в n8n?

Используй встроенное управление пользователями n8n: создай owner-аккаунт при первом входе через HTTPS и включи доступную MFA. До завершения настройки ограничь доступ своим IP. Переменные N8N_BASIC_AUTH_* удалены начиная с n8n 1.0 и не защищают современную установку.

Оптимизация производительности

После успешной установки n8n на Ubuntu, рассмотрим несколько советов по оптимизации:

  • Настройка лимитов памяти: Для PM2 укажите max_memory_restart: '1G' в ecosystem.config.js
  • Оптимизация PostgreSQL: Настройте shared_buffers и work_mem в postgresql.conf
  • Очередь: Redis используется в queue mode как брокер, а не как универсальный кэш workflow; переход требует отдельной настройки workers, БД и ключа шифрования
  • Мониторинг: Настройте метрики через N8N_METRICS=true и подключите Prometheus только через защищённую внутреннюю сеть; пример Nginx блокирует публичный /metrics
  • Логирование: Настройте ротацию логов через logrotate

Профессиональный совет: Для высоконагруженных инсталляций рассмотрите возможность запуска n8n в кластере с использованием нескольких worker'ов и балансировкой нагрузки.

После проверки HTTPS, входа, тестового workflow и восстановления бэкапа можно оценить готовность установки n8n на Ubuntu. Ты можешь начать создавать автоматизации, подключать сервисы и оптимизировать бизнес-процессы. Помни про безопасность: регулярно обновляй систему, настраивай бэкапы и мониторинг. Удачи в автоматизации!

Поделиться: