Tropic Host

n8n: какво представлява и как да го инсталирате на VPS с Docker Compose

9 минути четене
Tropic
n8n: какво представлява и как да го инсталирате на VPS с Docker Compose

Language: bg

n8n на VPS: собствена платформа за автоматизация без излишен ръчен труд

От сайта пристига заявка. n8n проверява данните, търси дубликати, създава сделка, подготвя чернова на отговор с AI и уведомява мениджъра в Telegram. Човек се намесва само когато е нужно решение, а не за да прехвърля данни между разделите на браузъра.

По-долу ще разгледаме как работи n8n и как да го инсталирате на VPS с Docker Compose, PostgreSQL, HTTPS и изолирано изпълнение на код.

n8n в седем стъпки

Минимален план за стартиране:

  1. Създайте VPS и насочете поддомейн към него, например n8n.example.com.
  2. Инсталирайте Docker и Docker Compose.
  3. Стартирайте n8n с PostgreSQL, външен изпълнител на задачи и Caddy.
  4. Отворете интерфейса през HTTPS и създайте акаунт на собственика.
  5. Свържете Telegram, CRM, имейл или външен API.
  6. Настройте обработката на грешки и срока за съхранение на данните от изпълненията.
  7. Автоматизирайте резервните копия на базата данни, данните и ключа за шифроване.

За малка производствена инсталация е разумно да започнете с 2 vCPU и 4 GB RAM. За тестове често са достатъчни 2 GB, но PostgreSQL, Docker и едновременните процеси бързо изяждат останалия ресурс.

Какво е n8n и как работи

n8n е платформа за автоматизация на работни процеси. Работният процес се изгражда от възли: един започва процеса, следващите получават и преобразуват данни, а последният изпълнява действие.

Един прост работен процес изглежда така:

Webhook → data validation → CRM → Telegram → website response

Верига може да бъде задействана от webhook, график, имейл, съобщение или събитие във външна услуга. Между възлите са достъпни условия, цикли, филтри, изчаквания и обработка на грешки.

Една от силните страни на n8n е, че автоматизацията не се ограничава до готовите интеграции. Чрез HTTP Request можете да извикате всяка услуга с API, а в Code възел да напишете собствена логика на JavaScript или Python. Така n8n заема място между обикновен no-code конструктор и персонализиран сървърен код.

Защо е повече от препращане на данни

n8n е полезен, когато даден процес обхваща няколко системи и изисква решение:

form → validation → duplicate search → AI assessment → manager approval → CRM

Човек може да остане само в контролната точка. Например AI подготвя отговор, но съобщението се изпраща на клиента едва след одобрение от служител.

Типични случаи на употреба:

  • продажби и поддръжка: събиране на заявки, разпределяне на потенциални клиенти и създаване на сделки;
  • съдържание и AI: изготвяне на чернови, класифициране на запитвания и публикуване след одобрение;
  • DevOps: известия за прекъсвания, Git webhook-и и проверки на API;
  • вътрешни операции: синхронизиране на електронни таблици, имейл, календари и корпоративни системи.

Self-hosted инсталацията ви дава контрол върху процеса и базата данни, но не прави външните услуги локални. Данните, изпратени към Telegram, CRM или облачен AI модел, напускат VPS-а.

n8n Cloud или собствен сървър

Параметърn8n Cloudn8n на VPS
СтартиранеНе е нужна настройка на сървърНужни са домейн, Docker и HTTPS
АктуализацииОбработват се от n8nОбработват се от собственика
База данни и файловеВ инфраструктурата на услугатаНа избрания сървър
МащабиранеСпоред облачния планНастройва се самостоятелно
ОтговорностПо-малко администрацияРезервните копия, сигурността и мониторингът са отговорност на собственика
Подходящо заБърз старт без DevOpsКонтрол, персонализация и постоянно работещи процеси

Community Edition може да бъде self-hosted безплатно на собствен сървър за лични и вътрешни бизнес процеси. n8n обаче се разпространява не под традиционен лиценз за отворен код, а под fair-code Sustainable Use License. Той позволява вътрешна употреба и промени, но не позволява просто да внедрите n8n, да добавите собствено лого и да продавате достъп като самостоятелен SaaS. За такъв продукт условията на лиценза трябва да се проверят отделно.

Изисквания към сървъра за n8n

Натоварването зависи от обема на данните, паралелността и вида на операциите. Файловете, дългите списъци, Code възлите и AI работните процеси изискват повече памет от прехвърлянето на малки JSON пакети между API.

СценарийНачална конфигурация
Тестове и лични текстови работни процеси1 vCPU, 2 GB RAM, 20 GB NVMe
Малка производствена инсталация2 vCPU, 4 GB RAM, 25–40 GB NVMe
Едновременни процеси, AI или файлове4 vCPU, 8 GB RAM или повече
Няколко worker процеса в queue modeОразмеряване според обема на изпълненията

SQLite е подходящ за обучение и за малка инсталация с един екземпляр. PostgreSQL е по-удобен за производство: резервните копия са по-лесни, а последващото преминаване към queue mode е по-просто.

Как да инсталирате n8n на VPS

В този пример се използват Ubuntu 24.04, PostgreSQL, Caddy и външен изпълнител на задачи. Заменете n8n.example.com и часовата зона със собствените си стойности.

1. Настройте DNS и подгответе сървъра

Създайте A DNS запис, който сочи към 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 и изпълнителя на задачи:

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

Външният изпълнител на задачи изпълнява кода отделно от основния процес на n8n. Това е по-безопасно от вътрешния режим и намалява вероятността грешка в Code възел да засегне редактора и обработката на webhook-и.

4. Активирайте HTTPS

Създайте Caddyfile:

{$N8N_HOST} {
    reverse_proxy n8n:5678
}

Ако DNS вече сочи към VPS-а и портове 80 и 443 са достъпни, Caddy автоматично ще получи TLS сертификат. Вътрешният порт 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

Създайте акаунта на собственика. Не споделяйте паролата му с колеги: за екипна работа използвайте отделни акаунти и дайте на всеки само нужния достъп.

Първият ви полезен работен процес

Добър тест е обработката на заявка от сайт:

  1. Добавете възел Webhook с метод POST.
  2. Използвайте Edit Fields, за да оставите само името, имейл адреса и източника.
  3. Използвайте възел If, за да отхвърлите заявка без задължителни данни.
  4. Създайте сделка в CRM или изпратете заявка чрез HTTP Request.
  5. Добавете известие в Telegram.
  6. Завършете веригата с възел Respond to Webhook.
  7. След теста активирайте работния процес и заменете тестовия webhook с производствения URL.

Този пример веднага проверява домейна, HTTPS, входящите заявки, идентификационните данни и външната интеграция. След това добавете отделен Error Workflow, който да ви уведоми, когато основната верига се провали.

Защита на n8n след инсталацията

Инсталираният n8n не става автоматично надежден. След стартирането се уверете, че:

  • редакторът е достъпен само през HTTPS;
  • .env има права 600 и не се изпраща в Git;
  • външните API ключове имат минимално необходимите права;
  • всеки webhook проверява подписа или тайната на източника;
  • историята на изпълненията се изтрива автоматично;
  • грешките в критичните работни процеси се изпращат на администратора.

Community възлите се инсталират като пакети и могат да получат достъп до данните от работните процеси и до сървъра. Не добавяйте непознати възли, без да ги прегледате. Ако не са ви нужни, изключете ги с N8N_COMMUNITY_PACKAGES_ENABLED=false.

Стартирайте вградения одит:

docker compose exec n8n n8n audit

Той помага да откриете незащитени webhook-и, рискови възли и проблеми с идентификационните данни, но не заменя ръчния преглед.

История на изпълненията и лични данни

n8n съхранява входните и изходните данни за отстраняване на грешки. Заедно с тях в базата данни може да останат имейл съобщения, телефонни номера, документи и API отговори.

В конфигурацията по-горе изпълненията се изтриват след седем дни, а броят им е ограничен до 10 000. За чувствителни процеси изберете срока за съхранение според политиката си за данните и премахнете ненужните полета, преди работният процес да завърши.

Резервни копия и актуализации

Възстановяването изисква PostgreSQL dump, n8n_data volume, конфигурационните файлове и .env, съдържащ N8N_ENCRYPTION_KEY. Преди копиране спрете процесорите, като оставите PostgreSQL да работи. Това създава кратко прекъсване при изпълнението на работните процеси:

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

Изпълнителят на задачи и основният контейнер трябва да използват един и същ таг на версията.

Кога е нужно мащабиране

Не започвайте с Redis и няколко worker, преди да има реално натоварване. Един екземпляр с PostgreSQL е по-лесен за поддръжка и обикновено покрива малки вътрешни процеси.

Queue mode става необходим, когато дългите задачи забавят webhook-ите, много работни процеси стартират едновременно или обработката на файлове редовно изчерпва наличната памет. В тази конфигурация основният екземпляр получава събитията, Redis разпределя задачите, а worker-ите ги изпълняват паралелно. Всички компоненти трябва да се свързват към една и съща PostgreSQL база и да използват един и същ N8N_ENCRYPTION_KEY.

Кой VPS да изберете за n8n

За n8n, PostgreSQL, Caddy и изпълнител на задачи заедно е разумно да започнете с 2 vCPU, 4 GB RAM и NVMe диск. В tropic.host планът Light съответства на тази конфигурация: 2 vCPU, 4 GB RAM и 25 GB NVMe. Това е достатъчно за първите производствени работни процеси без тежка обработка на файлове.

За документи, големи набори от данни и много едновременни AI работни процеси 8 GB RAM е по-добър избор. Стабилната мрежа също е важна: webhook-ите, OAuth callback-ите и планираните задачи трябва да са постоянно достъпни.

Заключение

n8n превръща повтарящите се операции в ясни визуални потоци: готовите възли ускоряват старта, HTTP Request свързва почти всеки API, а Code възелът позволява да добавите собствена логика.

Self-hosted версията ви дава контрол над сървъра и базата данни, но изисква HTTPS, ограничени ключове, почистване на историята и проверени резервни копия. Съхранявайте N8N_ENCRYPTION_KEY заедно с PostgreSQL: без него възстановените идентификационни данни не могат да бъдат дешифрирани.

FAQ

Може ли n8n да се използва безплатно?

Да. Community Edition може да се хоства безплатно на собствен сървър за лични и вътрешни процеси. Препродажбата на hosted n8n като самостоятелен SaaS е ограничена от fair-code лиценза.

Може ли n8n да се инсталира без домейн?

За локални тестове — да. За публични webhook-и и OAuth е по-добре да използвате домейн и HTTPS.

Колко RAM е необходим на n8n?

Обикновените лични работни процеси често работят с 2 GB RAM. За n8n с PostgreSQL, Caddy и изпълнител на задачи 4 GB е по-разумно, а файловете и едновременните изпълнения може да изискват 8 GB или повече.

Остават ли всички данни във VPS-а?

Остават само данните, които работният процес не изпраща другаде. Базата данни и историята на изпълненията се съхраняват във VPS-а, но възлите за Telegram, CRM или външен AI модел изпращат избраните данни към съответната услуга.

Какво трябва да включва резервното копие на n8n?

PostgreSQL dump, n8n_data volume, compose.yaml, Caddyfile и .env, съдържащ N8N_ENCRYPTION_KEY. Съхранявайте резервното копие извън VPS-а в шифрован вид и го проверявайте чрез възстановяване.