Tropic Host

n8n: co to je a jak jej nainstalovat na VPS s Docker Compose

9 min čtení
Tropic
n8n: co to je a jak jej nainstalovat na VPS s Docker Compose

Language: cs

n8n na VPS: vlastní automatizační platforma bez ruční rutiny

Z webu přijde požadavek. n8n ověří data, zkontroluje duplicity, vytvoří obchodní příležitost, připraví návrh odpovědi pomocí AI a upozorní manažera v Telegramu. Člověk zasáhne jen tehdy, když je potřeba rozhodnutí — ne kvůli přesouvání dat mezi kartami prohlížeče.

Níže se podíváme, jak n8n funguje a jak jej nainstalovat na VPS s Docker Compose, PostgreSQL, HTTPS a izolovaným spouštěním kódu.

n8n v sedmi krocích

Minimální plán spuštění:

  1. Vytvořte VPS a nasměrujte na něj subdoménu, například n8n.example.com.
  2. Nainstalujte Docker a Docker Compose.
  3. Spusťte n8n s PostgreSQL, externím task runnerem a Caddy.
  4. Otevřete rozhraní přes HTTPS a vytvořte účet vlastníka.
  5. Připojte Telegram, CRM, e-mail nebo libovolné externí API.
  6. Nastavte zpracování chyb a dobu uchovávání dat o spuštěních.
  7. Automatizujte zálohy databáze, dat a šifrovacího klíče.

Pro malé produkční nasazení je rozumné začít se 2 vCPU a 4 GB RAM. 2 GB často stačí na testování, ale PostgreSQL, Docker a souběžné procesy rychle spotřebují zbývající rezervu.

Co je n8n a jak funguje

n8n je platforma pro automatizaci pracovních postupů. Workflow se skládá z uzlů: jeden proces spustí, další uzly načtou a upraví data a poslední uzel provede akci.

Jednoduchý workflow může vypadat takto:

Webhook → data validation → CRM → Telegram → website response

Řetězec může spustit webhook, plán, e-mail, zpráva nebo událost v externí službě. Mezi uzly jsou k dispozici podmínky, smyčky, filtry, čekání a zpracování chyb.

Jednou ze silných stránek n8n je, že automatizace není omezena na hotové integrace. Pomocí HTTP Request můžete volat jakoukoli službu s API, zatímco vlastní logiku lze napsat v uzlu Code pomocí JavaScriptu nebo Pythonu. n8n se tak nachází mezi jednoduchým no-code nástrojem a vlastním kódem na serveru.

Proč nejde jen o předávání dat

n8n se hodí, když proces prochází několika systémy a vyžaduje rozhodnutí:

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

Člověka lze ponechat pouze v kontrolním bodě. AI například připraví odpověď, ale zpráva se zákazníkovi odešle až po schválení zaměstnancem.

Typické případy použití:

  • prodej a podpora: sběr požadavků, přiřazování leadů a vytváření obchodních příležitostí;
  • obsah a AI: příprava návrhů, klasifikace dotazů a publikování po schválení;
  • DevOps: upozornění na výpadky, Git webhooky a kontroly API;
  • interní provoz: synchronizace tabulek, e-mailů, kalendářů a firemních systémů.

Vlastní instalace vám dává kontrolu nad procesem a databází, ale externí služby tím nepřestanou být externí. Data odeslaná do Telegramu, CRM nebo cloudového AI modelu opouštějí VPS.

n8n Cloud nebo vlastní server

Parametrn8n Cloudn8n na VPS
SpuštěníBez nastavování serveruJe vyžadována doména, Docker a HTTPS
AktualizaceZajišťuje n8nZajišťuje vlastník
Databáze a souboryV infrastruktuře službyNa zvoleném serveru
ŠkálováníPodle cloudového tarifuKonfiguruje se samostatně
OdpovědnostMéně administraceZálohy, bezpečnost a monitoring jsou odpovědností vlastníka
Vhodné proRychlý start bez DevOpsKontrolu, přizpůsobení a trvale běžící procesy

Community Edition lze provozovat na vlastním serveru zdarma a používat pro osobní i interní firemní procesy. n8n však není distribuováno pod tradiční open-source licencí, ale pod licencí fair-code Sustainable Use License. Ta dovoluje interní použití a úpravy, neumožňuje ale jednoduše nasadit n8n, přidat vlastní logo a prodávat přístup jako samostatné SaaS. U takového produktu je třeba podmínky licence posoudit zvlášť.

Požadavky na server n8n

Zátěž závisí na objemu dat, souběžnosti a druhu operací. Soubory, dlouhé seznamy, uzly Code a AI workflow potřebují více paměti než předávání malých JSON payloadů mezi API.

ScénářVýchozí konfigurace
Testy a osobní textové workflow1 vCPU, 2 GB RAM, 20 GB NVMe
Malá produkční instalace2 vCPU, 4 GB RAM, 25–40 GB NVMe
Souběžné procesy, AI nebo soubory4 vCPU, 8 GB RAM nebo více
Více worker procesů v queue režimuVelikost podle objemu spuštění

SQLite se hodí pro učení a malé nastavení s jedinou instancí. PostgreSQL je pro produkci praktičtější: zálohy se snadněji spravují a pozdější přechod do queue režimu je jednodušší.

Jak nainstalovat n8n na VPS

Tento příklad používá Ubuntu 24.04, PostgreSQL, Caddy a externí task runner. Nahraďte n8n.example.com a časové pásmo vlastními hodnotami.

1. Nastavení DNS a příprava serveru

Vytvořte DNS záznam A směřující na IPv4 adresu VPS a poté se připojte přes SSH:

ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw openssl

Nainstalujte Docker Engine a plugin Compose z oficiálního repozitáře:

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

Povolte pouze SSH, HTTP a HTTPS:

ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Neukončujte aktuální relaci SSH, dokud nepotvrdíte, že nové připojení funguje.

2. Vytvoření proměnných prostředí

Připravte adresář:

mkdir -p /opt/n8n
cd /opt/n8n

Vytvořte .env. Níže uvedené příkazy okamžitě vygenerují samostatná náhodná tajemství pro PostgreSQL, šifrování n8n a 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

Tag stable je vhodný pro první spuštění. Po ověření instalace je lepší připnout konkrétní verzi n8n, aby se při další aktualizaci obraz neočekávaně nezměnil.

Nesmíte ztratit N8N_ENCRYPTION_KEY. n8n tento klíč používá k šifrování uložených hesel, tokenů a dalších přihlašovacích údajů. Pokud obnovíte pouze PostgreSQL bez klíče, záznamy v databázi zůstanou, ale n8n je nebude umět přečíst.

3. Vytvoření souboru Docker Compose

Vytvořte 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

Externí task runner spouští kód odděleně od hlavního procesu n8n. Je to bezpečnější než interní režim a snižuje pravděpodobnost, že chyba v uzlu Code ovlivní editor a zpracování webhooků.

4. Zapnutí HTTPS

Vytvořte Caddyfile:

{$N8N_HOST} {
    reverse_proxy n8n:5678
}

Caddy automaticky získá certifikát TLS, pokud DNS už směřuje na VPS a porty 80 a 443 jsou dostupné. Interní port 5678 není vystaven do internetu: zvenčí jsou dostupné pouze porty 80 a 443, zatímco Caddy přistupuje k n8n přes síť Dockeru.

Proměnné N8N_WEBHOOK_URL a N8N_PROXY_HOPS jsou nutné, aby editor vytvářel správné veřejné adresy webhooků a důvěřoval hlavičkám z jednoho reverse proxy.

5. Spuštění n8n

Ověřte výslednou konfiguraci a spusťte kontejnery:

docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddy

Otevřete:

https://n8n.example.com

Vytvořte účet vlastníka. Jeho heslo nesdílejte s kolegy: pro tým používejte samostatné účty a každému přidělte jen potřebný přístup.

První užitečný workflow

Dobrým testem je zpracování požadavku z webu:

  1. Přidejte uzel Webhook s metodou POST.
  2. Pomocí uzlu Edit Fields ponechte pouze jméno, e-mailovou adresu a zdroj.
  3. Pomocí uzlu If odmítněte požadavek bez povinných údajů.
  4. Vytvořte obchodní příležitost v CRM nebo odešlete požadavek přes HTTP Request.
  5. Přidejte oznámení v Telegramu.
  6. Řetězec zakončete uzlem Respond to Webhook.
  7. Po otestování workflow aktivujte a testovací webhook nahraďte produkční URL.

Tento příklad okamžitě ověří doménu, HTTPS, příchozí požadavky, přihlašovací údaje a externí integraci. Poté přidejte samostatný Error Workflow, který vás upozorní při selhání hlavního řetězce.

Zabezpečení n8n po instalaci

Nainstalovaná instance n8n není automaticky spolehlivá. Po spuštění se ujistěte, že:

  • editor je dostupný pouze přes HTTPS;
  • .env má oprávnění 600 a není uložen v Gitu;
  • externí API klíče mají minimální potřebná oprávnění;
  • každý webhook ověřuje podpis nebo tajemství zdroje;
  • historie spuštění se automaticky maže;
  • chyby v kritických workflow se odesílají administrátorovi.

Komunitní uzly se instalují jako balíčky a mohou získat přístup k datům workflow i serveru. Nepřidávejte neznámé uzly bez kontroly. Pokud je nepotřebujete, zakažte je pomocí N8N_COMMUNITY_PACKAGES_ENABLED=false.

Spusťte vestavěný audit:

docker compose exec n8n n8n audit

Audit pomáhá najít nechráněné webhooky, rizikové uzly a problémy s přihlašovacími údaji, ale nenahrazuje ruční kontrolu.

Historie spuštění a osobní údaje

n8n ukládá vstupní a výstupní data pro ladění. Spolu s nimi mohou v databázi zůstat e-mailové zprávy, telefonní čísla, dokumenty a odpovědi API.

V uvedené konfiguraci se spuštění mažou po sedmi dnech a jejich počet je omezen na 10 000. U citlivých procesů nastavte dobu uchovávání podle své politiky a před dokončením workflow odstraňte nepotřebná pole.

Zálohy a aktualizace

Obnova vyžaduje dump PostgreSQL, svazek n8n_data, konfigurační soubory a .env obsahující N8N_ENCRYPTION_KEY. Před kopírováním zastavte procesory a PostgreSQL nechte běžet. Tím vznikne krátké přerušení spouštění 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

Archiv obsahující .env zahrnuje tajemství: zašifrujte jej a uložte mimo VPS. Zálohu pravidelně ověřujte zkušební obnovou.

Před aktualizací vytvořte zálohu a projděte poznámky k vydání:

cd /opt/n8n
docker compose pull
docker compose up -d
docker compose ps

Task runner a hlavní kontejner musí používat stejný tag verze.

Kdy je potřeba škálování

Nezačínejte s Redisem a několika workery, dokud neexistuje skutečná zátěž. Jedna instance s PostgreSQL se snáze udržuje a obvykle pokryje malé interní procesy.

Queue režim je nutný, když dlouhé úlohy zpožďují webhooky, mnoho workflow se spouští současně nebo zpracování souborů pravidelně spotřebuje všechnu dostupnou paměť. V takovém nastavení hlavní instance přijímá události, Redis rozděluje úlohy a workeři je provádějí paralelně. Všechny komponenty se musí připojit ke stejné databázi PostgreSQL a používat stejný N8N_ENCRYPTION_KEY.

Jaké VPS zvolit pro n8n

Pro n8n, PostgreSQL, Caddy a task runner dohromady je rozumné začít se 2 vCPU, 4 GB RAM a diskem NVMe. Na tropic.host tomu odpovídá tarif Light: 2 vCPU, 4 GB RAM a 25 GB NVMe. To stačí pro první produkční workflow bez náročného zpracování souborů.

Pro dokumenty, velké datové sady a mnoho souběžných AI workflow je lepší 8 GB RAM. Důležitá je také stabilní síť: webhooky, OAuth callbacky a plánované úlohy musí zůstat nepřetržitě dostupné.

Závěr

n8n mění opakující se operace na přehledné vizuální toky: hotové uzly urychlují spuštění, HTTP Request připojí téměř jakékoli API a uzel Code umožní přidat vlastní logiku.

Verze s vlastním hostingem vám dává kontrolu nad serverem a databází, ale vyžaduje HTTPS, omezené klíče, čištění historie a ověřené zálohy. Uložte N8N_ENCRYPTION_KEY společně s PostgreSQL: bez něj nelze obnovené přihlašovací údaje dešifrovat.

FAQ

Lze n8n používat zdarma?

Ano. Community Edition lze bezplatně provozovat na vlastním serveru pro osobní a interní procesy. Prodej hostovaného n8n jako samostatného SaaS omezuje licence fair-code.

Lze n8n nainstalovat bez domény?

Pro lokální testování ano. Pro veřejné webhooky a OAuth je lepší použít doménu a HTTPS.

Kolik RAM n8n potřebuje?

Jednoduchá osobní workflow často běží se 2 GB RAM. Pro n8n s PostgreSQL, Caddy a task runnerem je rozumnějších 4 GB; soubory a souběžná spuštění mohou vyžadovat 8 GB nebo více.

Zůstávají všechna data uvnitř VPS?

Pouze data, která workflow neodešle jinam. Databáze a historie spuštění se ukládají na VPS, ale uzly pro Telegram, CRM nebo externí AI model odesílají vybraná data příslušné službě.

Co má obsahovat záloha n8n?

Dump PostgreSQL, svazek n8n_data, compose.yaml, Caddyfile a .env obsahující N8N_ENCRYPTION_KEY. Zálohu ukládejte mimo VPS v zašifrované podobě a ověřte ji obnovou.