n8n на VPS: собственная платформа автоматизации без ручной рутины
Поступает заявка с сайта. n8n проверяет данные, ищет дубликаты, создает сделку, готовит с помощью ИИ черновик ответа и отправляет уведомление менеджеру в Telegram. Человек подключается только там, где нужно принять решение, а не переносить данные между вкладками браузера.
Ниже разберем, как работает n8n и как установить его на VPS с Docker Compose, PostgreSQL, HTTPS и изолированным выполнением кода.
n8n за семь шагов
Минимальный план запуска:
- Создать VPS и направить на него поддомен, например
n8n.example.com. - Установить Docker и Docker Compose.
- Запустить n8n с PostgreSQL, внешним исполнителем задач и Caddy.
- Открыть интерфейс по HTTPS и создать учетную запись владельца.
- Подключить Telegram, CRM, электронную почту или внешний API.
- Настроить обработку ошибок и срок хранения данных выполнений.
- Автоматизировать резервное копирование базы данных, данных и ключа шифрования.
Для небольшой рабочей установки разумно начать с 2 vCPU и 4 ГБ оперативной памяти. Для тестирования часто достаточно 2 ГБ, но PostgreSQL, Docker и параллельные процессы быстро используют оставшийся запас ресурсов.
Что такое n8n и как он работает
n8n — платформа автоматизации рабочих процессов. Workflow собирается из узлов: один запускает процесс, следующие получают и преобразуют данные, а последний выполняет действие.
Простой workflow выглядит так:
Webhook → проверка данных → CRM → Telegram → ответ сайту
Цепочка может запускаться вебхуком, расписанием, электронным письмом, сообщением или событием во внешнем сервисе. Между узлами доступны условия, циклы, фильтры, ожидания и обработка ошибок.
Одно из преимуществ n8n — автоматизация не ограничивается готовыми интеграциями. К любому сервису с API можно обратиться через HTTP Request, а собственную логику написать в узле Code на JavaScript или Python. Поэтому n8n находится между простым no-code-конструктором и самостоятельно разработанным серверным кодом.
Почему это больше, чем пересылка данных
n8n полезен, когда процесс проходит через несколько систем и требует принятия решения:
форма → проверка → поиск дубликатов → оценка ИИ → подтверждение менеджера → CRM
Человека можно оставить только на контрольной точке. Например, ИИ готовит ответ, но сообщение отправляется клиенту лишь после одобрения сотрудника.
Типичные сценарии использования:
- продажи и поддержка: сбор обращений, распределение лидов и создание сделок;
- контент и ИИ: подготовка черновиков, классификация обращений и публикация после одобрения;
- DevOps: уведомления о сбоях, Git-вебхуки и проверки API;
- внутренние операции: синхронизация таблиц, почты, календарей и корпоративных систем.
Self-hosted-установка дает контроль над процессом и базой данных, но не делает внешние сервисы локальными. Данные, отправленные в Telegram, CRM или облачную модель ИИ, покидают VPS.
n8n Cloud или собственный сервер
| Параметр | n8n Cloud | n8n на VPS |
|---|---|---|
| Запуск | Настройка сервера не требуется | Нужны домен, Docker и HTTPS |
| Обновления | Выполняет n8n | Выполняет владелец |
| База данных и файлы | На инфраструктуре сервиса | На выбранном сервере |
| Масштабирование | В соответствии с тарифом облака | Настраивается самостоятельно |
| Ответственность | Меньше задач администрирования | Резервные копии, безопасность и мониторинг — ответственность владельца |
| Лучше всего подходит для | Быстрого старта без DevOps | Контроля, кастомизации и постоянно работающих процессов |
Community Edition можно бесплатно разместить на собственном сервере и использовать для личных и внутренних бизнес-процессов. Однако n8n распространяется не под традиционной лицензией открытого исходного кода, а по модели fair code под лицензией Sustainable Use License. Она разрешает внутреннее использование и модификацию, но не позволяет просто развернуть n8n, добавить собственный логотип и продавать доступ к нему как к отдельному SaaS. Для такого продукта условия лицензии нужно изучить отдельно.
Требования n8n к серверу
Нагрузка зависит от объема данных, количества одновременных операций и типа действий. Для файлов, длинных списков, узлов Code и сценариев с ИИ требуется больше памяти, чем для передачи небольших JSON-пакетов между API.
| Сценарий | Начальная конфигурация |
|---|---|
| Тестирование и личные текстовые workflow | 1 vCPU, 2 ГБ RAM, 20 ГБ NVMe |
| Небольшая рабочая установка | 2 vCPU, 4 ГБ RAM, 25–40 ГБ NVMe |
| Параллельные процессы, ИИ или файлы | 4 vCPU, 8 ГБ RAM или больше |
| Несколько worker-процессов в queue mode | Размер зависит от объема выполнений |
SQLite подходит для обучения и небольшой установки с одним экземпляром. Для production удобнее PostgreSQL: резервное копирование проще, а последующий переход в 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, чтобы следующее обновление образа не произошло неожиданно.
Нельзя терять 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 повлияет на редактор и обработку вебхуков.
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 нужны, чтобы редактор формировал правильные публичные адреса вебхуков и доверял заголовкам от одного обратного прокси.
5. Запустить n8n
Проверьте итоговую конфигурацию и запустите контейнеры:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyОткройте:
https://n8n.example.comСоздайте учетную запись владельца. Не передавайте ее пароль коллегам: для совместной работы используйте отдельные учетные записи и выдавайте каждому только необходимый доступ.
Первый полезный workflow
Хороший тестовый сценарий — обработка заявки с сайта:
- Добавьте узел
Webhookс методомPOST. - С помощью
Edit Fieldsоставьте только имя, адрес электронной почты и источник. - Используйте узел
If, чтобы отклонить заявку без обязательных данных. - Создайте сделку в CRM или отправьте запрос через
HTTP Request. - Добавьте уведомление в Telegram.
- Завершите цепочку узлом
Respond to Webhook. - После тестирования активируйте workflow и замените тестовый webhook на рабочий URL.
Этот пример сразу проверяет домен, HTTPS, входящие запросы, учетные данные и внешнюю интеграцию. Затем добавьте отдельный Error Workflow, который будет уведомлять вас о сбое основной цепочки.
Защита n8n после установки
Установленный экземпляр n8n не становится автоматически надежным. После запуска убедитесь, что:
- редактор доступен только по HTTPS;
- для
.envустановлены права600, а сам файл не добавлен в Git; - внешние ключи API имеют минимально необходимые разрешения;
- каждый webhook проверяет подпись или секрет источника;
- история выполнений удаляется автоматически;
- об ошибках критически важных workflow получает уведомление администратор.
Community nodes устанавливаются как пакеты и могут получить доступ к данным workflow и серверу. Не добавляйте неизвестные узлы без проверки. Если они не нужны, отключите их с помощью N8N_COMMUNITY_PACKAGES_ENABLED=false.
Запустите встроенный аудит:
docker compose exec n8n n8n auditОн помогает обнаружить незащищенные вебхуки, рискованные узлы и проблемы с учетными данными, но не заменяет ручную проверку.
История выполнений и персональные данные
n8n сохраняет входные и выходные данные для отладки. Вместе с ними в базе могут оставаться электронные письма, номера телефонов, документы и ответы 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 становится необходим, когда длительные задачи задерживают вебхуки, одновременно запускается много workflow или обработка файлов регулярно расходует всю доступную память. В такой схеме основной экземпляр принимает события, Redis распределяет задания, а worker-процессы выполняют их параллельно. Все компоненты должны подключаться к одной базе PostgreSQL и использовать один и тот же N8N_ENCRYPTION_KEY.
Какой VPS выбрать для n8n
Для n8n, PostgreSQL, Caddy и task runner в совокупности разумно начать с 2 vCPU, 4 ГБ RAM и NVMe-накопителя. На tropic.host тариф Light соответствует этой конфигурации: 2 vCPU, 4 ГБ RAM и 25 ГБ NVMe. Этого достаточно для первых рабочих workflow без интенсивной обработки файлов.
Для документов, больших наборов данных и множества параллельных workflow с ИИ лучше выбрать 8 ГБ RAM. Важна и стабильная сеть: вебхуки, OAuth-callback и задачи по расписанию должны оставаться доступными постоянно.
Заключение
n8n превращает повторяющиеся операции в понятные визуальные процессы: готовые узлы ускоряют запуск, HTTP Request подключает почти любой API, а узел Code позволяет добавить собственную логику.
Self-hosted-версия дает контроль над сервером и базой данных, но требует HTTPS, ограниченных ключей, очистки истории и проверенных резервных копий. Храните N8N_ENCRYPTION_KEY вместе с PostgreSQL: без него восстановленные учетные данные невозможно расшифровать.
FAQ
Можно ли использовать n8n бесплатно?
Да. Community Edition можно бесплатно разместить на собственном сервере для личных и внутренних процессов. Перепродажа размещенного n8n как отдельного SaaS ограничена лицензией fair code.
Можно ли установить n8n без домена?
Для локального тестирования — да. Для публичных вебхуков и OAuth лучше использовать домен и HTTPS.
Сколько оперативной памяти нужно n8n?
Простые личные workflow часто работают с 2 ГБ RAM. Для n8n вместе с PostgreSQL, Caddy и task runner разумнее иметь 4 ГБ; для файлов и параллельных выполнений может потребоваться 8 ГБ или больше.
Все ли данные остаются внутри VPS?
Только те данные, которые workflow не отправляет в другие места. База данных и история выполнений хранятся на VPS, но узлы Telegram, CRM или внешней модели ИИ отправляют выбранные данные соответствующему сервису.
Что нужно включить в резервную копию n8n?
Дамп PostgreSQL, volume n8n_data, compose.yaml, Caddyfile и .env с N8N_ENCRYPTION_KEY. Храните резервную копию за пределами VPS в зашифрованном виде и проверяйте ее восстановлением.
