Все учётные данные внезапно перестают расшифровываться
Том данных был пересоздан, и n8n сгенерировал новый ключ шифрования. Старые учётные данные ничем не восстановить. Всегда задавайте N8N_ENCRYPTION_KEY явно и храните копию вне сервера.

Шесть шагов от голого Nordic VPS до n8n с терминированным TLS на вашем собственном домене — Docker Compose, Caddy, PostgreSQL, webhook, которые действительно срабатывают. Выполнения ограничены вашим CPU, а не тарифным планом, на машине стоимостью $3.90 в месяц. Проверено на Debian 12 с n8n 2.x.
Провизионирование
VPS + A-запись
Установить
get.docker.com
Compose
n8n + Caddy + Postgres
Первый запуск
Аккаунт владельца + 2FA
Вебхуки
WEBHOOK_URL
Усиление защиты
Очистка, тишина, резервные копии
n8n — это движок автоматизации workflow: визуальный холст, на котором вы соединяете триггер — webhook, расписание, новую строку в базе данных, сообщение в очереди — с цепочкой узлов, вызывающих API, преобразующих данные, ветвящихся по условиям, выполняющих произвольный JavaScript или Python и передающих результат дальше по цепочке. Несколько сотен узлов интеграции идут в комплекте, плюс универсальный узел HTTP Request, покрывающий всё остальное. Начиная с линейки 1.x он также несёт узлы AI Agent и LLM, поэтому значительная часть тех, кто устанавливает его в 2026 году, строит агентов, а не классическую ETL-сантехнику.
То, что важно прежде, чем вы наберёте хотя бы одну команду, — это лицензия, потому что n8n не является open source в смысле OSI, и разница здесь не академическая. Ядро распространяется по Sustainable Use License: неисключительная, безвозмездная, всемирная лицензия на использование, копирование, изменение и распространение ПО для внутренних деловых целей и для личного или некоммерческого использования. Что она не даёт — право брать плату с других за n8n или за производный от него продукт, и именно этот пункт исключает построение платного продукта «managed n8n» поверх него. Отдельно, любой файл с .ee. в имени или .ee в пути полностью исключён из этой лицензии и требует платной n8n Enterprise License.
Проще говоря: запуск n8n на VPS для автоматизации собственной компании, работы для собственных клиентов, оказываемой как услуга, или собственной личной жизни — внутри бесплатной лицензии, и всегда было внутри. Продажа n8n как хостинг-продукта — нет. Почти любой спор в интернете на тему «действительно ли n8n бесплатен» — это два человека, говорящих мимо друг друга через эту границу.
Сторона стоимости. n8n Cloud тарифицируется по числу выполнений: план Starter — €20 в месяц при годовой оплате за 2 500 выполнений, Pro — €50 в месяц за 10 000, Business — €667 в месяц за 40 000. При self-hosting число выполнений вообще не отдельная строка в счёте — оно ограничено лишь тем, сколько CPU и памяти есть у машины. Workflow, опрашивающий API каждые пять минут, сам по себе сжигает 8 640 выполнений в месяц; на Cloud один этот workflow уже вынуждает перейти на тариф Pro, а на VPS за $3.90 это статистическая погрешность на фоне простаивающего CPU.
| Вариант | Ежемесячно | Включённые выполнения | Кто им управляет |
|---|---|---|---|
| n8n Cloud · Starter | €20 | 2 500 | n8n GmbH |
| n8n Cloud · Pro | €50 | 10 000 | n8n GmbH |
| n8n Cloud · Business | €667 | 40 000 | n8n GmbH |
| Самостоятельный хостинг · Sentinel VPS | $3.90 | Ограничено CPU, а не тарифом | Вы |
Цены Cloud приведены по данным n8n.io на август 2026 года при годовой оплате; помесячная оплата обходится дороже. Компромисс не только в деньгах — self-hosting переносит обновления, резервное копирование, продление TLS и аптайм на вашу сторону.
Собственная документация n8n по Docker Compose указывает минимум 2 vCPU и 4 ГБ RAM. Это не маркетинговое число: ниже этого порога фронтенд редактора и умеренно разветвлённый workflow начнут бороться друг с другом за память, и первый крупный JSON-payload уложит контейнер по out-of-memory kill.
Sentinel · 2 vCPU, 4 ГБ, 120 ГБ NVMe, $3.90/мес. Правильное значение по умолчанию. Запускает n8n, PostgreSQL и Caddy вместе с запасом для персонального экземпляра или экземпляра небольшой команды, выполняющего несколько сотен выполнений в день. Память в простое держится около 700 МБ на все три контейнера.
Garrison · 4 vCPU, 8 ГБ, 240 ГБ NVMe, $7.90/мес. Следующая ступень, когда вы добавляете режим очереди с Redis и одним-двумя контейнерами-воркерами, когда workflow регулярно держат в памяти многомегабайтные данные, или когда вам нужен комфортный запас для workflow с AI-агентами, разветвляющихся на несколько параллельных веток.
Ravelin · 8 vCPU, 16 ГБ, 480 ГБ NVMe, $16.90/мес. Командный экземпляр с тысячами выполнений в день и работой с большим объёмом бинарных данных — генерация PDF, обработка изображений, транскрибирование аудио. Здесь важны выделенные ядра, поскольку такая нагрузка ограничена CPU, а не API.
Про диск обычно забывают. n8n хранит полные входные и выходные данные каждого узла каждого выполнения. Многословный workflow, запускающийся каждую минуту, пишет сотни мегабайт в неделю. По умолчанию очистка всё же работает — EXECUTIONS_DATA_PRUNE равно true, EXECUTIONS_DATA_MAX_AGE равно 336 часам (четырнадцать дней), а EXECUTIONS_DATA_PRUNE_MAX_COUNT равно 10 000, — но четырнадцать дней загруженного экземпляра — это всё равно много места на NVMe. Шаг 06 ужесточает эти значения.
В панели: Order → VPS → Sentinel, образ Debian 12. Для открытия аккаунта не нужен email, ни на каком этапе не запрашивается документ, удостоверяющий личность, а счёт оплачивается в Monero, Bitcoin, Lightning или любом другом из поддерживаемых активов. Выбирайте бастион по задержке до сервисов, которые вы автоматизируете, а не до себя — сервер автоматизации общается с API гораздо чаще, чем с вами.
Затем создайте DNS-запись, прежде чем трогать сервер: A-запись для n8n.example.com, указывающую на IPv4 VPS, и AAAA-запись, если вы используете IPv6. Это нужно сделать первым делом, потому что Caddy запрашивает сертификат у Let's Encrypt в момент запуска стека, а запрос сертификата для имени, которое не резолвится, завершается неудачей — затем откладывается, и вы тратите двадцать минут, гадая, почему сайт недоступен.
Дайте DNS минуту на распространение и подтвердите со своей машины, прежде чем продолжать:
dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else
Прежде чем что-либо начнёт слушать публичный порт, пройдите чек-лист защиты первого часа — SSH только по ключу, firewall, разрешающий лишь 22, 80 и 443, и автоматические обновления безопасности. Сервер автоматизации — это сейф с учётными данными; он заслуживает полного часа.
Подключитесь по SSH и установите Docker Engine с плагином Compose v2:
apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version
Скрипт-установщик ставит Engine, CLI, containerd и плагин Compose из собственного репозитория Docker. Последняя строка должна вывести Docker Compose version v2 или выше; если выводится «docker: 'compose' is not a docker command», значит, у вас установлен более старый пакет docker.io из дистрибутива, и его нужно сначала удалить.
Существует однострочный установщик n8n, который оборачивает всё это, и он работает. Это руководство вместо этого пишет файл Compose вручную, потому что всё, что вам позже понадобится менять — ключ шифрования, база данных, URL webhook, политика хранения, число воркеров — живёт в этом файле, а стек, который вы не можете прочитать, — это стек, который вы не можете починить в 3 часа ночи.
Сначала создайте каталог и сгенерируйте два секрета. Сгенерируйте их сейчас, именно в этом порядке, и вставляйте в .env по ходу дела — в частности, ключ шифрования должен существовать до первого запуска n8n, а не после.
mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32 # → N8N_ENCRYPTION_KEY
openssl rand -hex 24 # → POSTGRES_PASSWORD
/opt/n8n/.env
DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm
N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here
Немедленно закройте доступ к файлу — в нём ключ ко всем учётным данным, которые экземпляр когда-либо будет хранить:
chmod 600 /opt/n8n/.env
/opt/n8n/docker-compose.yml
services:
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
environment:
- DOMAIN=${DOMAIN}
- LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- N8N_HOST=${DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_EDITOR_BASE_URL=https://${DOMAIN}
- WEBHOOK_URL=https://${DOMAIN}/
- N8N_PROXY_HOPS=1
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_BLOCK_ENV_ACCESS_IN_NODE=true
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_VERSION_NOTIFICATIONS_ENABLED=false
- N8N_PERSONALIZATION_ENABLED=false
volumes:
- n8n_data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
pg_data:
n8n_data:
/opt/n8n/Caddyfile
{$DOMAIN} {
encode zstd gzip
tls {$LETSENCRYPT_EMAIL}
reverse_proxy n8n:5678
}
Два архитектурных решения, которые стоит назвать. Во-первых, n8n не публикует порт наружу. Только Caddy занимает 80 и 443; n8n слушает 5678 внутри сети Compose, куда ничто снаружи хоста дотянуться не может. Удивительно много self-hosted экземпляров n8n торчат в открытом интернете на порту 5678 без TLS спереди, и поисковики по открытым сервисам их индексируют. Во-вторых, том данных n8n остаётся подключённым, даже когда workflow теперь хранятся в PostgreSQL, — в этом каталоге по-прежнему лежат настройки экземпляра, файлы логов и ресурсы контроля версий.
Запустите:
cd /opt/n8n
docker compose up -d
docker compose logs -f caddy # watch the certificate being issued
Откройте https://n8n.example.com. Первый экран — настройка аккаунта владельца: email, пароль, имя. Больше не нужно настраивать переменную окружения для HTTP basic-auth; управление пользователями встроено в n8n начиная с линейки 1.x, и аккаунт, который вы создаёте здесь, — это владелец экземпляра. Используйте пароль из вашего менеджера паролей, затем сразу перейдите в Settings → Personal → Two-factor authentication и включите её. Этот логин — парадная дверь ко всем API-ключам, которые вы когда-либо вставите в узел.
n8n шифрует каждое хранимое учётное данное ключом N8N_ENCRYPTION_KEY. Если вы его не зададите, n8n сгенерирует его при первом запуске и запишет внутрь тома данных. Пересоздайте этот том — docker compose down -v, миграция на новый сервер, неудачное восстановление — и новый экземпляр сгенерирует другой ключ, все учётные данные в базе станут нерасшифровываемыми, и не будет никакого пути восстановления вообще. Каждый API-ключ, OAuth-токен и пароль придётся вводить заново вручную. Задайте ключ явно, как это делает данное руководство, и храните копию вне сервера.
Подходящее место для этой копии — менеджер паролей, который вы тоже контролируете сами — руководство по self-hosted Vaultwarden рассказывает об одном из них, и принципиальный момент в том, что он не должен жить на той же машине, что и то, что он отпирает.
Убедитесь, что база данных действительно PostgreSQL, а не откат на SQLite — если в переменных DB_ есть опечатка, n8n тихо запускается на SQLite, и вы узнаёте об этом три месяца спустя:
docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
n8n, который запускается, показывает редактор и выполняет ручной тест, — это ещё не работающий n8n. Тихо ломается именно половина с входящими webhook, причём так, что кажется, будто виноват сторонний сервис.
WEBHOOK_URL. Без него n8n строит URL webhook из N8N_HOST и N8N_PORT и выдаёт вам что-то вроде http://localhost:5678/webhook/abc — что вы затем вставляете в Stripe или GitHub, где до него никогда не достучаться. Файл Compose выше задаёт WEBHOOK_URL как публичный HTTPS-корень, именно его покажет редактор и именно по нему сможет достучаться внешний мир.
N8N_EDITOR_BASE_URL. Публичный URL, который n8n использует для ссылок в отправляемых письмах — сброс пароля, приглашения пользователей. Ошибка здесь означает ссылку-приглашение, указывающую на localhost, а это тикет в поддержку от коллеги, а не сломанная интеграция.
N8N_PROXY_HOPS. n8n считывает IP клиента из X-Forwarded-For и доверяет ровно стольким переходам, сколько указывает это число. При одном обратном прокси спереди — Caddy в этом стеке — значение равно 1. Поставьте Cloudflare перед Caddy — и оно станет 2. Оставьте значение по умолчанию 0 — и каждый запрос будет выглядеть исходящим от самого прокси, что незаметно ломает лимиты частоты запросов и любую логику в ваших workflow, основанную на IP.
N8N_SECURE_COOKIE. По умолчанию равно true, то есть cookie сессии отправляется только по HTTPS. Это правильная настройка, и этот стек её соблюдает. Стоит это знать, потому что это объясняет классический симптом первой попытки по обычному http: форма входа принимает пароль и затем бесконечно возвращает вас на форму входа. Решение — TLS, а не отключение флага.
Протестируйте это как следует. Создайте workflow с узлом Webhook, активируйте workflow, скопируйте Production URL, затем вызовите его с машины, которая не является сервером:
curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor
Различие, на котором хоть раз спотыкается каждый: Test URL слушает только пока у вас открыт редактор с включённым «Listen for test event». Production URL существует только тогда, когда workflow переключён в состояние Active. Webhook, который работает в редакторе и отдаёт 404 в продакшне, — почти всегда неактивный workflow.
Хранение. По умолчанию хранятся четырнадцать дней или 10 000 выполнений — что наступит раньше, — с полными входными и выходными данными для каждого узла. На небольшом NVMe с загруженным триггером по расписанию именно это заполняет диск. Добавьте следующее в блок окружения n8n и перезапустите:
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none — самое весомое решение для высокочастотного экземпляра: оно прекращает запись данных успешных выполнений, при этом каждое неудачное выполнение по-прежнему сохраняется полностью, чтобы его можно было отладить. Держите значение «all», пока ещё строите workflow, и переключайте его, как только workflow станет скучным и предсказуемым.
Тишина. Файл Compose уже отключает диагностику, уведомления о версиях и опрос персонализации. Единственный оставшийся исходящий вызов — галерея шаблонов, которая обращается к api.n8n.io; задайте N8N_TEMPLATES_ENABLED=false, если хотите вообще исключить сторонние вызовы. Если вы всё же отключаете уведомления о версиях, поставьте себе ежемесячное напоминание читать release notes — self-hosted экземпляр, который никто не обновляет, — худший исход, чем тот, что просто проверяет версии.
Узел Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, уже присутствующий в файле, запрещает выражениям и узлам Code читать переменные окружения процесса — а на этой машине это означает пароль PostgreSQL и ключ шифрования. Если вы не используете публичный REST API, добавьте N8N_PUBLIC_API_DISABLED=true и закройте также эту поверхность.
Резервные копии — все три части или ни одной. Резервная копия одной только базы данных бесполезна без ключа шифрования, а один только ключ ничего не восстановит. Делайте резервную копию дампа PostgreSQL, тома данных n8n и .env вместе и храните минимум одну копию вне сервера:
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
Имя тома — это имя проекта Compose плюс имя тома; если ваш каталог называется не n8n, выполните docker volume ls и используйте то, что увидите. Поместите эти три строки в задание cron, отправляйте архивы куда-то ещё и хотя бы раз протестируйте восстановление — непроверенная резервная копия — это вера, а не резервная копия.
Обновления. docker compose pull, затем docker compose up -d. Сначала сделайте снимок: n8n выполняет миграции базы данных при запуске, а миграции не рассчитаны на откат назад. При переходе через мажорную версию — например, скачок с 1.x на 2.x — читайте release notes до pull, а не после, и рассмотрите фиксацию явного тега образа вместо :latest, чтобы автоматический перезапуск никогда не обновлял вас неожиданно.
По умолчанию n8n работает в обычном режиме: один и тот же процесс, который обслуживает редактор и принимает webhook, также выполняет workflow. Это просто и работает корректно — пока один долгий workflow не заставит остальные ждать. Симптом безошибочный: выполнения минутами висят в статусе «running», редактор начинает тормозить, а webhook, который должен ответить за 200 мс, отвечает за восемь секунд.
Режим очереди разделяет работу. Основной экземпляр держит редактор, триггеры и конечные точки webhook; он помещает идентификаторы выполнений в Redis; отдельные процессы-воркеры забирают их, загружают workflow из PostgreSQL, выполняют его и сообщают результат обратно через Redis. Из этой архитектуры следуют три правила, и все три больно бьют тех, кто их пропускает: все экземпляры должны использовать одну и ту же базу данных PostgreSQL, все экземпляры должны нести один и тот же N8N_ENCRYPTION_KEY, а SQLite не поддерживается вообще.
Дополнения к файлу Compose — это сервис Redis и один сервис-воркер, представляющий собой тот же образ n8n, запущенный с командой worker:
redis:
image: redis:7-alpine
restart: unless-stopped
command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
volumes:
- redis_data:/data
n8n-worker:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
command: worker --concurrency=5
depends_on:
- redis
- postgres
environment:
# the SAME encryption key and the SAME database as the main instance
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
Добавьте EXECUTIONS_MODE=queue и QUEUE_BULL_REDIS_HOST=redis также в основной сервис n8n — обе стороны должны быть согласованы по режиму. Две опции стоит задать с самого начала: OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, чтобы нажатие «Test workflow» в редакторе не занимало основной процесс, и N8N_GRACEFUL_SHUTDOWN_TIMEOUT, который по умолчанию равен 30 секундам и определяет, сколько времени воркеру разрешено доработать текущую задачу при повторном развёртывании. Если ваши workflow обычно выполняются дольше тридцати секунд, увеличьте это значение — иначе каждое развёртывание будет обрывать работу на лету.
Не начинайте отсюда. Режим очереди добавляет два подвижных узла и целый класс отказов, которых у обычного режима попросту нет. Оставайтесь в обычном режиме, пока не увидите, что очередь растёт или один workflow блокирует другой, затем добавьте одного воркера на той же машине, прежде чем добавлять вторую машину. Эта последовательность — Sentinel в обычном режиме, Garrison с одним воркером, Ravelin с тремя — покрывает всё, кроме по-настоящему крупного развёртывания.
Большинство руководств по self-hosting трактуют выбор хоста как вопрос производительности. Для движка автоматизации это не так. Экземпляр n8n хранит вместе две вещи, которые почти ничто другое из того, что вы размещаете сами, не хранит вместе: единую зашифрованную таблицу с API-ключами, OAuth-токенами и паролями от почты для каждого автоматизируемого сервиса, и — тут же рядом — граф, который в точности описывает, как работает ваша организация. Какая CRM. Какой банковский фид. Какой поставщик. Каким клиентам какое письмо уходит по какому триггеру. Прочитайте список workflow компании — и вы прочитали компанию.
Уровень первый — за кого вас принимает хост. Уровень приложения здесь по-настоящему хорош: учётные данные зашифрованы в состоянии покоя, редактор защищён TLS и 2FA. Утечка происходит на уровне ниже. Хостинг-план знает ваше юридическое лицо, платёжный адрес и карту. Гиперскейлер знает то же самое и хранит это годами. Это не гипотетическая уязвимость; это ключ связи между «зашифрованный сейф существует» и «он принадлежит этой поименованной компании». Регистрация без email и без документа, удостоверяющего личность, оплаченная в Monero, убирает именно ключ связи, а не сам сейф.
Уровень второй — диск. Шифрование данных в состоянии покоя защищает только от того, у кого нет ключа, а при установке по умолчанию ключ лежит в той же файловой системе, что и база данных. Держите .env в режиме 600, храните копию ключа вне машины и выбирайте провайдера, чья юрисдикция не превращает дата-центр в удобное место для вручения повестки, — в этом вся суть руководства Nordic jurisdictions.
Уровень третий — исходящий IP. Каждый узел HTTP Request выходит с адреса VPS, а у этого адреса есть репутация. Диапазоны гиперскейлеров наиболее агрессивно ограничены по частоте запросов и защищены CAPTCHA во всём интернете, потому что именно там живут скраперы; workflow, который скрапит или опрашивает API, начнёт получать отказы на IP AWS или DigitalOcean задолго до того, как это произойдёт на более тихом Nordic-диапазоне. n8n также учитывает стандартные переменные HTTP_PROXY, HTTPS_PROXY, ALL_PROXY и NO_PROXY, так что горстку workflow, которым нужен другой выход, можно направить через локальный SOCKS-прокси или Tor, пока всё остальное идёт напрямую.
Ещё одна дверь, новая в линейке 2.x: n8n может открывать MCP-сервер уровня экземпляра, чтобы AI-агент мог вызывать ваши workflow как инструменты. Это по-настоящему полезно, и это также публичная конечная точка в ваш слой автоматизации, которая заслуживает такого же отношения, как и любая другая, — см. руководство по удалённому MCP-серверу с рассуждениями о TLS, OAuth и открытости наружу.
Том данных был пересоздан, и n8n сгенерировал новый ключ шифрования. Старые учётные данные ничем не восстановить. Всегда задавайте N8N_ENCRYPTION_KEY явно и храните копию вне сервера.
WEBHOOK_URL не задан, поэтому n8n строит URL из N8N_HOST. Задайте WEBHOOK_URL и N8N_EDITOR_BASE_URL как публичный HTTPS-адрес и перезапустите контейнер.
Вы обращаетесь к редактору по обычному http, и защищённый cookie сессии отклоняется. Завершите настройку TLS, а не устанавливайте N8N_SECURE_COOKIE в false на публичном экземпляре.
Четырнадцать дней полных данных выполнения от триггера, срабатывающего ежеминутно. Ужесточите EXECUTIONS_DATA_MAX_AGE и PRUNE_MAX_COUNT и перестаньте сохранять успешные выполнения.
Тег :latest плюс миграции базы данных, которые не откатываются назад. Зафиксируйте явный тег, делайте снимок перед каждым pull и читайте release notes при переходе через мажорные версии.
GENERIC_TIMEZONE по умолчанию равен America/New_York, что редко кому нужно. Задайте одинаковый реальный часовой пояс для GENERIC_TIMEZONE и TZ и перезапустите.
Десять вопросов, возникающих до, во время и после переноса экземпляра n8n на собственный сервер.
Для ваших собственных автоматизаций — да. n8n распространяется по Sustainable Use License: вы можете использовать, копировать, изменять и распространять его для внутренних деловых целей и для личного или некоммерческого использования, бесплатно. Что лицензия запрещает — брать плату с других за n8n или производный от него продукт, на практике — перепродавать «n8n hosting» как услугу. Файлы с .ee. в имени или .ee в пути каталога исключены из этой лицензии и требуют платной n8n Enterprise License. Итак: автоматизация собственной компании на арендованном VPS полностью укладывается в бесплатную лицензию; построение хостинг-бизнеса на n8n поверх неё — нет.
Собственная документация n8n по Docker Compose указывает минимум 2 vCPU и 4 ГБ RAM. Это ровно тариф Sentinel ($3.90/мес. — 2 vCPU, 4 ГБ, 120 ГБ NVMe), который спокойно тянет n8n плюс PostgreSQL плюс Caddy для персонального экземпляра или экземпляра небольшой команды. Переходите на Garrison (4 vCPU, 8 ГБ, $7.90/мес.), когда добавляете воркеров режима очереди или запускаете workflow, держащие в памяти большие данные, и на Ravelin (8 vCPU, 16 ГБ, $16.90/мес.) для командного экземпляра, выполняющего тысячи выполнений в день с бинарными данными — PDF, изображения, аудио.
SQLite используется по умолчанию и вполне подходит одному человеку с горсткой workflow. Переходите на PostgreSQL, когда появляются параллельные выполнения, когда история выполнений превышает несколько сотен тысяч строк, или когда вы планируете масштабироваться, — и учтите, что режим очереди вообще не поддерживает SQLite. Миграция позже означает экспорт workflow и учётных данных с последующим импортом в новый экземпляр — это вечер, который вам не понравится. Если есть хоть какой-то шанс роста, начинайте с PostgreSQL; файл Compose в этом руководстве уже так и делает.
Каждое учётное данное в базе становится навсегда нечитаемым. n8n шифрует хранимые учётные данные — OAuth-токены, API-ключи, пароли SMTP — этим ключом, и не существует ни механизма восстановления, ни тикета в поддержку, который вернёт их обратно. Каждое учётное данное придётся вводить заново вручную. Это самый распространённый способ угробить self-hosted экземпляр n8n: кто-то пересоздаёт том Docker, n8n генерирует новый ключ, и все workflow разом начинают падать с ошибкой расшифровки. Задайте ключ явно в вашем .env до первого запуска и храните копию не на сервере.
Четыре причины, в порядке частоты. (1) WEBHOOK_URL не задан, поэтому редактор выдаёт вам URL вида http://localhost:5678/webhook/…, который недоступен ни одному внешнему сервису, — задайте его как ваш публичный HTTPS-адрес. (2) Workflow не активирован; тестовый URL слушает только пока открыт редактор, продакшн-URL существует только когда workflow активен. (3) DNS или firewall: запись не резолвится, либо порты 80/443 закрыты. (4) Вы находитесь за дополнительным слоем прокси и не задали N8N_PROXY_HOPS, поэтому n8n считывает неверный IP клиента. Протестируйте обычным curl с машины, которая не является сервером.
Да, и это обычный паттерн — один Caddy спереди, одна сеть Compose, n8n на одном hostname, а Vaultwarden, Nextcloud или SearXNG — на других. Два предостережения. Память: n8n вместе с PostgreSQL простаивает на уровне около 700 МБ, а тяжёлый workflow может резко превысить это значение, так что оставляйте запас. Радиус поражения: база данных n8n — самая насыщенная учётными данными вещь на машине, так что всё остальное, что делит с ней хост, наследует её профиль риска. На тарифе $3.90/мес. разумно выделить движку автоматизации отдельный сервер.
По умолчанию — три конечные точки. Анонимная телеметрия продукта (N8N_DIAGNOSTICS_ENABLED, по умолчанию true), проверка новых версий и обновлений безопасности на api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, по умолчанию true) и браузер шаблонов workflow, который обращается к https://api.n8n.io (N8N_TEMPLATES_ENABLED, по умолчанию true). Ни один из них не передаёт ваши учётные данные или данные workflow, но все три сообщают, что по вашему IP существует экземпляр. Отключите все три (false), если хотите, чтобы машина молчала, — вы потеряете галерею шаблонов и баннер обновлений, так что следите за релизами самостоятельно.
n8n Cloud Starter стоит €20/мес. при годовой оплате за 2 500 выполнений; Pro — €50/мес. за 10 000. Sentinel VPS стоит $3.90/мес., а число выполнений ограничено только CPU и RAM, что для типичных workflow с webhook и API означает десятки тысяч. Денежная окупаемость наступает мгновенно; реальная стоимость — операционная. Self-hosting означает, что вы сами отвечаете за обновления, резервные копии, продление TLS и инцидент с переполненным диском в 3 часа ночи. Честное правило: если бы вы сами не обновили экземпляр в течение месяца после выхода патча безопасности — платите за Cloud. Если ежемесячный docker compose pull уже часть вашей жизни — размещайте сами.
Из-за того, что хранит экземпляр n8n. Таблица учётных данных — это единое зашифрованное хранилище API-ключей, OAuth-токенов и паролей от почты для каждого автоматизируемого сервиса, а рядом с ней — граф workflow, по которому легко прочитать, как на самом деле работает ваш бизнес: какая CRM, какой банковский фид, какой поставщик, какие клиенты. Статический сайт ничего из этого не раскрывает. Уровень приложения защищает это хорошо; утечка происходит на уровне метаданных. Если регистрация машины сопровождается сканом паспорта и картой, вы зашифровали сейф и написали своё имя на двери. Хост без KYC с оплатой в Monero удерживает оба уровня в согласии.
Да, для типичного случая — узел AI Agent, вызывающий удалённый API модели. Такая нагрузка ограничена вводом-выводом, она ждёт ответа провайдера, и Sentinel с этим справляется. Что не помещается — это запуск самой модели: локальная модель на 7B хочет около 8 ГБ RAM, а реальная скорость инференса требует GPU, которого у этих тарифов нет. Направьте n8n на удалённую конечную точку, совместимую с OpenAI, и держите VPS лёгким. Сопутствующее руководство по запуску AI-агента 24/7 раскрывает сторону runtime — политики перезапуска, секреты, лимиты расходов и ловушку crash-loop.
Sentinel (2 vCPU, 4 ГБ, 120 ГБ NVMe, $3.90/мес.) удовлетворяет минимальным требованиям n8n с запасом для PostgreSQL и Caddy на той же машине. Без email при регистрации, без документа, удостоверяющего личность, неограниченные выполнения.
Последняя проверка · 2026-08-24 · Источники · документация по хостингу n8n, n8n LICENSE.md (Sustainable Use License), страница цен n8n.io, официальная документация Docker и Caddy · Периодичность · ежегодно
This guide is one spoke of a larger series. The pillar walks the three privacy layers end to end — the sibling spokes below dive into the specifics.
Three independent layers — signup, payment, network — explained, legal context included, common mistakes flagged.
Deploy your own MCP server on a no-KYC VPS — TLS, streamable HTTP, OAuth.
Host an MCP server with no ID — the privacy stack, crypto-paid.
Перенесите агента с ноутбука — конфигурация, systemd, секреты, лимиты расходов.
Ollama на CPU без GPU — что поместится в 4, 8, 16 или 32 ГБ.