Представь, что тебе нужно автоматизировать рутинные задачи: синхронизацию данных между сервисами, обработку webhook'ов или создание сложных бизнес-процессов. n8n — это инструмент автоматизации с доступным исходным кодом и условиями Sustainable Use License для создания workflow'ов, который можно развернуть на собственном сервере. Давай разберем, как выполнить установку n8n на Ubuntu правильно и безопасно.
Подготовка сервера Ubuntu
В этом примере используем новую Ubuntu 24.04 LTS. Для размещения n8n можно выбрать VPS, в том числе Timeweb Cloud (партнёрская ссылка): сравни ресурсы, резервные копии и стоимость. Понадобятся sudo, домен с правильными DNS A/AAAA и консоль восстановления. Выбери один метод установки: два экземпляра не должны занимать один порт.
Обновление системы и установка зависимостей
# Обновляем пакеты системы
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
# Установи поддерживаемую выбранной версией n8n Node.js
# по официальной инструкции nodejs.org, затем проверь:
node --version
npm --version
Проверь текущий диапазон Node.js в документации n8n; на момент проверки он указан как 20.19–24.x. Выбери поддерживаемый LTS внутри диапазона. npm-установки помечены deprecated начиная с n8n 3.0: для такой версии выбирай Docker, а не этот вариант.
Установка и настройка n8n
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 для управления процессом
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
# Установи 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
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:
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
sudo apt install -y nginx
sudo systemctl status nginx
Конфигурация виртуального хоста для n8n
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
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. Ты можешь начать создавать автоматизации, подключать сервисы и оптимизировать бизнес-процессы. Помни про безопасность: регулярно обновляй систему, настраивай бэкапы и мониторинг. Удачи в автоматизации!