n8n — из тех инструментов, что начинаешь использовать слегка, а потом тихо пропускаешь через него половину своих операций. И тут «оно крутится на чужом облачном месте, с оплатой за каждое выполнение, а мои API-ключи живут на их серверах» начинает нравиться меньше. Self-host чинит все три пункта — фиксированная цена, нет лимита запусков, ключи остаются на вашем сервере. С Docker это работа на пятнадцать минут.
Сколько сервера реально нужно
Сначала честные цифры, чтобы не взять лишнего или мало:
- ~2 ГБ RAM — sweet spot: n8n плюс его база Postgres плюс обычные сценарии сидят комфортно.
- 1 ГБ работает при лёгких сценариях, но на больших прогонах заметите.
- 4 ГБ — если тяжёлые параллельные запуски или крупные данные.
В покое n8n не прожорлив к CPU; всплески — во время прогонов. 2 ядра хватает большинству. (Подробнее про подбор под нагрузку — в гайде по sizing.)
Установка через Docker
На свежем Ubuntu/Debian ставим Docker:
curl -fsSL https://get.docker.com | sudo sh
Папка и docker-compose.yml — n8n с постоянным томом и Postgres:
services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.yourdomain.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=db
- DB_POSTGRESDB_PASSWORD=change-me
volumes:
- ./n8n-data:/home/node/.n8n
depends_on: [db]
db:
image: postgres:16
restart: always
environment:
- POSTGRES_PASSWORD=change-me
- POSTGRES_DB=n8n
volumes:
- ./db-data:/var/lib/postgresql/data
sudo docker compose up -d
Два момента стоит подчеркнуть: тома (n8n-data, db-data) — то, что сохраняет ваши сценарии при перезапусках и апгрейдах, не пропускайте их. И n8n привязан к 127.0.0.1, а не 0.0.0.0 — он не торчит в интернет напрямую. Это нарочно; доступ безопасно решает следующий шаг.
Доступ: HTTPS или туннель
- Публичный URL (нужен для OAuth-нод и вебхуков): направьте субдомен на сервер и поставьте реверс-прокси (Caddy — наименьшие усилия, авто-HTTPS) перед
127.0.0.1:5678. Здесь подходит тариф с выделенным IP — у вас порты и DNS. - Только для себя, без домена: пропустите прокси и ходите через SSH-туннель —
ssh -L 5678:127.0.0.1:5678 user@server, затем откройтеlocalhost:5678. Работает и на NAT-VPS.
Закройте сервер и держите аптайм
n8n хранит ваши API-ключи и креды, так что машина должна быть закрыта: пройдите чек-лист безопасности (SSH-ключи, файрвол, без пароля) до того, как класть реальные креды. restart: always в compose уже означает, что Docker поднимает n8n после падения или перезагрузки — аптайм закрыт.
Стоит ли?
Будьте честны с собой насчёт объёма. Гоняете автоматизации постоянно — self-host выигрывает по цене (фикс vs за выполнение) и снимает лимиты. Пара флоу в месяц — облачное место меньше мороки. Но аргумент контроля стоит в любом случае: ваши сценарии, ваши данные, ваши ключи — на вашем сервере, не в аренде. Для большинства, кто всерьёз взялся за n8n, это и есть решающий фактор.
Сервер на 2 ГБ, compose-файл, домен (или туннель) — и у вас свой хаб автоматизаций, оплачиваемый криптой без KYC, живой за минуты.