n8n на VPS: власна платформа автоматизації без ручної рутини
З вебсайту надходить заявка. n8n перевіряє дані, шукає дублікати, створює угоду, готує чернетку відповіді за допомогою ШІ та сповіщає менеджера в Telegram. Людина втручається лише тоді, коли потрібне рішення, а не для перенесення даних між вкладками браузера.
Нижче розглянемо, як працює n8n і як встановити його на VPS за допомогою Docker Compose, PostgreSQL, HTTPS та ізольованого виконання коду.
n8n у семи кроках
Мінімальний план запуску:
- Створіть VPS і спрямуйте на нього піддомен, наприклад
n8n.example.com. - Встановіть Docker і Docker Compose.
- Запустіть n8n разом із PostgreSQL, зовнішнім task runner і Caddy.
- Відкрийте інтерфейс через HTTPS і створіть обліковий запис власника.
- Підключіть Telegram, CRM, email або зовнішній API.
- Налаштуйте обробку помилок і термін зберігання даних виконання.
- Автоматизуйте резервне копіювання бази даних, даних і ключа шифрування.
Для невеликої production-інсталяції розумно почати з 2 vCPU і 4 GB RAM. 2 GB часто достатньо для тестування, але PostgreSQL, Docker і паралельні процеси швидко використовують залишок ресурсів.
Що таке n8n і як він працює?
n8n — платформа автоматизації workflow. Workflow складається з node: одна запускає процес, наступні отримують і перетворюють дані, а остання виконує дію.
Простий workflow виглядає так:
Webhook → перевірка даних → CRM → Telegram → відповідь сайту
Ланцюжок може запускатися webhook, розкладом, email, повідомленням або подією у зовнішньому сервісі. Між node доступні умови, цикли, фільтри, очікування й обробка помилок.
Одна з переваг n8n — автоматизація не обмежується готовими інтеграціями. Через HTTP Request можна викликати будь-який сервіс з API, а власну логіку написати в Code node на JavaScript або Python. Тому n8n посідає проміжне місце між простим no-code конструктором і власним серверним кодом.
Чому це більше, ніж пересилання даних?
n8n корисний, коли процес охоплює кілька систем і потребує рішення:
форма → перевірка → пошук дубліката → оцінка ШІ → схвалення менеджера → CRM
Людину можна залишити лише в контрольній точці. Наприклад, ШІ готує відповідь, але повідомлення надсилається клієнту тільки після схвалення працівника.
Типові сценарії:
- продажі та підтримка: збір заявок, призначення лідів і створення угод;
- контент і ШІ: підготовка чернеток, класифікація запитів і публікація після схвалення;
- DevOps: сповіщення про збої, Git webhook і перевірки API;
- внутрішні операції: синхронізація таблиць, пошти, календарів і корпоративних систем.
Self-hosted інсталяція дає контроль над процесом і базою даних, але не робить зовнішні сервіси локальними. Дані, надіслані в Telegram, CRM або хмарну модель ШІ, залишають VPS.
n8n Cloud чи власний сервер?
| Параметр | n8n Cloud | n8n на VPS |
|---|---|---|
| Запуск | Налаштування сервера не потрібне | Потрібні домен, Docker і HTTPS |
| Оновлення | Обробляє n8n | Обробляє власник |
| База даних і файли | В інфраструктурі сервісу | На обраному сервері |
| Масштабування | Відповідно до хмарного плану | Налаштовується самостійно |
| Відповідальність | Менше адміністрування | Резервні копії, безпека й моніторинг — відповідальність власника |
| Найкраще для | Швидкого старту без DevOps | Контролю, налаштування й постійних процесів |
Community Edition можна безкоштовно розмістити на власному сервері для особистих і внутрішніх бізнес-процесів. Однак n8n поширюється не за традиційною open-source ліцензією, а за fair-code Sustainable Use License. Вона дозволяє внутрішнє використання та модифікацію, але не дає просто розгорнути n8n, додати власний логотип і продавати доступ як окремий SaaS. Для такого продукту умови ліцензії потрібно перевіряти окремо.
Вимоги n8n до сервера
Навантаження залежить від обсягу даних, паралельності та типу операцій. Файли, довгі списки, Code node і workflow ШІ потребують більше пам'яті, ніж передавання невеликих JSON між API.
| Сценарій | Стартова конфігурація |
|---|---|
| Тести та особисті текстові workflow | 1 vCPU, 2 GB RAM, 20 GB NVMe |
| Невелика production-інсталяція | 2 vCPU, 4 GB RAM, 25–40 GB NVMe |
| Паралельні процеси, ШІ або файли | 4 vCPU, 8 GB RAM або більше |
| Кілька worker у queue mode | Розмір відповідно до обсягу виконань |
SQLite підходить для навчання й невеликої інсталяції з одним екземпляром. PostgreSQL зручніший для production: резервні копії простіші, а подальший перехід у queue mode легший.
Як встановити n8n на VPS
У прикладі використано Ubuntu 24.04, PostgreSQL, Caddy та зовнішній task runner. Замініть n8n.example.com і часовий пояс власними значеннями.
1. Налаштуйте DNS і підготуйте сервер
Створіть DNS-запис A, що вказує на IPv4-адресу VPS, а потім підключіться через SSH:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslВстановіть Docker Engine і плагін Compose з офіційного репозиторію:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionДозвольте лише SSH, HTTP і HTTPS:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableНе закривайте поточну SSH-сесію, доки не підтвердите, що нове підключення працює.
2. Створіть змінні середовища
Підготуйте каталог:
mkdir -p /opt/n8n
cd /opt/n8nСтворіть .env. Наведені нижче команди одразу генерують окремі випадкові секрети для PostgreSQL, шифрування n8n і task runner:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envТег stable зручний для першого запуску. Після перевірки інсталяції краще зафіксувати конкретну версію n8n, щоб наступне оновлення image не відбулося несподівано.
Не можна втратити N8N_ENCRYPTION_KEY. n8n використовує цей ключ для шифрування збережених паролів, токенів та інших облікових даних. Якщо відновити лише PostgreSQL без ключа, записи залишаться в базі, але n8n не зможе їх прочитати.
3. Створіть файл Docker Compose
Створіть compose.yaml:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: "5432"
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configЗовнішній task runner виконує код окремо від основного процесу n8n. Це безпечніше за внутрішній режим і зменшує ймовірність, що помилка в Code node вплине на редактор і обробку webhook.
4. Увімкніть HTTPS
Створіть Caddyfile:
{$N8N_HOST} {
reverse_proxy n8n:5678
}Caddy автоматично отримає TLS-сертифікат, якщо DNS уже вказує на VPS, а порти 80 і 443 доступні. Внутрішній порт 5678 не відкривається в інтернет: зовні доступні лише 80 і 443, тоді як Caddy звертається до n8n через Docker-мережу.
Змінні N8N_WEBHOOK_URL і N8N_PROXY_HOPS потрібні, щоб редактор генерував правильні публічні адреси webhook і довіряв заголовкам від одного reverse proxy.
5. Запустіть n8n
Перевірте фінальну конфігурацію та запустіть контейнери:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyВідкрийте:
https://n8n.example.comСтворіть обліковий запис власника. Не передавайте його пароль колегам: для командної роботи використовуйте окремі облікові записи й надавайте кожному лише потрібні права.
Ваш перший корисний workflow
Хороший тест — обробка заявки з вебсайту:
- Додайте node
Webhookз методомPOST. - За допомогою
Edit Fieldsзалиште лише ім'я, email і джерело. - Використайте node
If, щоб відхилити заявку без обов'язкових даних. - Створіть угоду в CRM або надішліть запит через
HTTP Request. - Додайте сповіщення Telegram.
- Завершіть ланцюжок node
Respond to Webhook. - Після тестування активуйте workflow і замініть тестовий webhook production-URL.
Цей приклад одразу перевіряє домен, HTTPS, вхідні запити, облікові дані та зовнішню інтеграцію. Далі додайте окремий Error Workflow, який сповіщатиме вас про збій основного ланцюжка.
Захист n8n після встановлення
Встановлений екземпляр n8n не стає автоматично надійним. Після запуску переконайтеся, що:
- редактор доступний лише через HTTPS;
.envмає права600і не додається до Git;- зовнішні API-ключі мають мінімально необхідні права;
- кожен webhook перевіряє підпис або secret джерела;
- історія виконань видаляється автоматично;
- помилки критичних workflow надсилаються адміністратору.
Community node встановлюються як пакети й можуть отримати доступ до даних workflow та сервера. Не додавайте невідомі node без перевірки. Якщо вони не потрібні, вимкніть їх за допомогою N8N_COMMUNITY_PACKAGES_ENABLED=false.
Запустіть вбудований аудит:
docker compose exec n8n n8n auditВін допомагає виявити незахищені webhook, ризиковані node та проблеми з обліковими даними, але не замінює ручну перевірку.
Історія виконань і персональні дані
n8n зберігає вхідні та вихідні дані для налагодження. Разом із ними в базі можуть залишатися email-повідомлення, номери телефонів, документи й відповіді API.
У наведеній конфігурації виконання видаляються через сім днів, а їхня кількість обмежена 10 000. Для чутливих процесів оберіть термін зберігання відповідно до політики утримання даних і видаляйте непотрібні поля до завершення workflow.
Резервні копії та оновлення
Для відновлення потрібні дамп PostgreSQL, volume n8n_data, файли конфігурації та .env із N8N_ENCRYPTION_KEY. Перед копіюванням зупиніть обробники, залишивши PostgreSQL запущеним. Це створює коротке переривання виконання workflow:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runnerАрхів із .env містить секрети: зашифруйте його та зберігайте за межами VPS. Періодично перевіряйте резервну копію пробним відновленням.
Перед оновленням зробіть резервну копію та перегляньте примітки до релізу:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psTask runner і основний контейнер мають використовувати один тег версії.
Коли потрібне масштабування?
Не починайте з Redis і кількох worker, доки немає реального навантаження. Один екземпляр із PostgreSQL простіше підтримувати, і зазвичай його достатньо для невеликих внутрішніх процесів.
Queue mode потрібен, коли довгі завдання затримують webhook, багато workflow запускаються одночасно або обробка файлів регулярно використовує всю доступну пам'ять. У такій схемі основний екземпляр отримує події, Redis розподіляє завдання, а worker виконують їх паралельно. Усі компоненти мають підключатися до тієї самої бази PostgreSQL і використовувати той самий N8N_ENCRYPTION_KEY.
Який VPS вибрати для n8n?
Для n8n, PostgreSQL, Caddy і task runner разом розумно почати з 2 vCPU, 4 GB RAM і NVMe-диска. На tropic.host цьому відповідає план Light: 2 vCPU, 4 GB RAM і 25 GB NVMe. Цього достатньо для перших production-workflow без інтенсивної обробки файлів.
Для документів, великих наборів даних і багатьох паралельних workflow ШІ краще вибрати 8 GB RAM. Важлива також стабільна мережа: webhook, OAuth callback і заплановані завдання мають бути постійно доступними.
Висновок
n8n перетворює повторювані операції на зрозумілі візуальні потоки: готові node пришвидшують запуск, HTTP Request підключає майже будь-який API, а Code node дає змогу додати власну логіку.
Self-hosted версія дає контроль над сервером і базою даних, але потребує HTTPS, обмежених ключів, очищення історії та перевірених резервних копій. Зберігайте N8N_ENCRYPTION_KEY разом із PostgreSQL: без нього відновлені облікові дані не можна розшифрувати.
Поширені запитання
Чи можна використовувати n8n безкоштовно?
Так. Community Edition можна безкоштовно розмістити на власному сервері для особистих і внутрішніх процесів. Перепродаж розміщеного n8n як окремого SaaS обмежений fair-code ліцензією.
Чи можна встановити n8n без домену?
Для локального тестування — так. Для публічних webhook і OAuth краще використовувати домен і HTTPS.
Скільки RAM потрібно n8n?
Прості особисті workflow часто працюють із 2 GB RAM. Для n8n із PostgreSQL, Caddy і task runner розумніше мати 4 GB; файли та паралельні виконання можуть потребувати 8 GB або більше.
Чи всі дані залишаються всередині VPS?
Лише ті, які workflow не надсилає в інші місця. База даних та історія виконань зберігаються на VPS, але node Telegram, CRM або зовнішньої моделі ШІ надсилають вибрані дані відповідному сервісу.
Що має входити до резервної копії n8n?
Дамп PostgreSQL, volume n8n_data, compose.yaml, Caddyfile і .env із N8N_ENCRYPTION_KEY. Зберігайте резервну копію за межами VPS у зашифрованому вигляді та перевіряйте її відновленням.
