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