n8n na vlastním VPS přes Docker a HTTPS

n8n na vlastním VPS: kompletní návod přes Docker a HTTPS

Publikováno: 10. června 2026|Affiliate prohlášení

Chceš si rozjet n8n na vlastním serveru a mít data pod kontrolou? Provedu tě tím od nuly: výběr VPS, instalace přes Docker Compose, HTTPS přes reverse proxy a PostgreSQL pro produkci. Žádná teorie, jen příkazy, které si můžeš zkopírovat. Na konci máš checklist a FAQ.

Rychlá odpověď: jak na to nejjednodušeji

Nemáš čas číst celý článek? Tady je destilát: n8n se nejjednodušeji a nejspolehlivěji hostuje přes Docker na malém VPS, s reverse proxy (Caddy nebo Nginx), která řeší HTTPS přes Let's Encrypt. Pro hraní stačí SQLite, pro produkci si rovnou nasaď PostgreSQL.

A teď to celé pomalu, krok za krokem. Provedl jsem tímhle setupem už pár klientů, takže ti rovnou ukážu i místa, kde se obvykle člověk seknul (mě nevyjímaje).

Jako oficiální zdroj pravdy budu odkazovat na dokumentaci n8n k hostingu — ta se mění, takže pokud čteš tohle za půl roku, mrkni, jestli se něco neposunulo.

Krok 1: Vyber VPS a operační systém

n8n není žádný žrout. Pro osobní automatizace a pár desítek workflow ti bohatě stačí malý server. Contabo ve svém návodu na self-hosting n8n doporučuje pro produkci 2 vCPU, 4 GB RAM a 30 GB NVMe SSD — což je rozumný základ. Když budeš jen testovat, zvládneš to i na 1 vCPU / 2 GB RAM, ale jakmile přidáš PostgreSQL a začneš tahat větší payloady, ty dvě gigovky paměti ti dojdou rychleji, než řekneš „out of memory".

Jako OS jednoznačně doporučuji Ubuntu 24.04 LTS. Vyšlo v dubnu 2024 a má standardní bezpečnostní podporu do května 2029, takže máš roky klid podle Ubuntu release cycle. LTS = Long Term Support, čili přesně to, co chceš pod serverem, který má běžet a nepřemýšlet o něm.

Než půjdeš dál, potřebuješ dvě věci:

  1. doménu (nebo subdoménu, např. n8n.tvojedomena.cz), protože bez ní nedostaneš pořádný HTTPS certifikát,
  2. v DNS nastavený A záznam směřující na IP adresu tvého VPS.

Krok 2: Připrav server a nainstaluj Docker

Připoj se na server přes SSH a nejdřív všechno aktualizuj. Pak nainstaluj Docker oficiálním instalačním skriptem — postup odpovídá Contabo návodu:

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo apt install docker-compose-v2 -y
sudo usermod -aG docker ${USER}

Poslední řádek přidá tvého uživatele do skupiny docker, abys nemusel u každého příkazu psát sudo. Aby se to projevilo, musíš se odhlásit a znovu přihlásit (nebo dát newgrp docker). Tohle lidi pravidelně přehlížejí a pak nadávají, že „docker hází permission denied".

Ověř, že vše běží:

docker --version
docker compose version

Krok 3: Instalace n8n přes Docker Compose

Já osobně nikdy nesázím na holý docker run — u čehokoli, co má přežít restart serveru, používám Docker Compose. Je to čitelnější a údržba je o level jinde.

Vytvoř si adresář a soubory:

mkdir ~/n8n && cd ~/n8n
nano docker-compose.yml

Pro rychlý start (SQLite) vypadá minimální docker-compose.yml takhle. n8n ukládá data do volume n8n_data namountovaného na /home/node/.n8n a poslouchá na portu 5678:

services:
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.tvojedomena.cz
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.tvojedomena.cz/
- GENERIC_TIMEZONE=Europe/Prague
- N8N_ENCRYPTION_KEY=zmen_me_na_dlouhy_nahodny_retezec
volumes:
- n8n_data:/home/node/.n8n

volumes:
n8n_data:

Všimni si 127.0.0.1:5678:5678 — port nevystavuji přímo do internetu. n8n poslouchá jen na localhostu a navenek ho pustí až reverse proxy s HTTPS (k té se dostaneme za chvíli). Vystavit n8n holé na veřejný port bez TLS je klasický začátečnický faux pas.

Klíč N8N_ENCRYPTION_KEY si vygeneruj náhodně, třeba openssl rand -hex 32, a nikdy ho neztrať — n8n jím šifruje credentials. Bez něj po migraci nerozšifruješ uložená přihlašovací data.

Spusť to:

docker compose up -d
docker compose ps
docker compose logs -f n8n

V tuhle chvíli n8n běží, ale jen na localhostu. Logy si projdi — jestli vidíš Editor is now accessible, máš vyhráno.

Krok 4: Reverse proxy a HTTPS (správný WEBHOOK_URL)

Tohle je část, kde to nejčastěji skřípe. n8n samo o sobě HTTPS neřeší — od toho je reverse proxy. Máš dvě dobré volby:

Varianta A: Caddy (líný způsob, doporučuju)

Caddy si HTTPS přes Let's Encrypt vyřídí sám, automaticky, bez certbotu. Caddyfile na tři řádky:

n8n.tvojedomena.cz {
reverse_proxy 127.0.0.1:5678
}

To je vážně všechno. Caddy si při startu vyžádá certifikát a bude ho obnovovat. (Když to vidím, vždycky mi přijde, že jsem za ta léta s ručním certbotem strávil zbytečně moc večerů.)

Varianta B: Nginx + certbot

Pokud už Nginx na serveru máš nebo ho prostě preferuješ, postup je podle Contabo návodu tento. Nainstaluj Nginx a v server bloku nasměruj provoz na localhost:5678, pak vyřeš certifikát:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d n8n.tvojedomena.cz

Certbot ti upraví Nginx konfiguraci a nastaví automatické obnovování. U Nginxu nezapomeň v server bloku přidat hlavičky pro WebSocket — n8n editor je bez nich nervózní:

location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}

Klíčové: WEBHOOK_URL

Ať zvolíš cokoli, WEBHOOK_URL musí ukazovat na tvou veřejnou HTTPS adresu (https://n8n.tvojedomena.cz/). Tahle proměnná určuje URL, kterou n8n předává externím službám pro webhooky. Když ji necháš špatně, n8n bude generovat webhook adresy směřující na localhost nebo na port 5678 a tvoje integrace ti přestanou chodit. Devět z deseti „proč mi nefunguje webhook" případů je právě tohle.

Krok 5: PostgreSQL místo SQLite pro produkci

Pro produkci nech SQLite plavat. Podle dokumentace n8n k databázím je SQLite výchozí volba, ale n8n podporuje i PostgreSQL — a ten je pro vícero souběžných workflow a větší zátěž prostě robustnější. Tady je docker-compose.yml s Postgresem (proměnné DB_TYPE a DB_POSTGRESDB_* odpovídají Contabo návodu):

services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
- POSTGRES_DB=n8n
- POSTGRES_USER=n8nuser
- POSTGRES_PASSWORD=silne_heslo_zmen_me
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8nuser -d n8n"]
interval: 10s
timeout: 5s
retries: 5

n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
ports:
- "127.0.0.1:5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8nuser
- DB_POSTGRESDB_PASSWORD=silne_heslo_zmen_me
- N8N_HOST=n8n.tvojedomena.cz
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.tvojedomena.cz/
- GENERIC_TIMEZONE=Europe/Prague
- N8N_ENCRYPTION_KEY=zmen_me_na_dlouhy_nahodny_retezec
volumes:
- n8n_data:/home/node/.n8n

volumes:
n8n_data:
postgres_data:

depends_on s condition: service_healthy zajistí, že n8n nastartuje až po tom, co je databáze připravená — jinak ti při startu klidně spadne na „connection refused".

Krok 6: První přihlášení a env proměnné

Otevři https://n8n.tvojedomena.cz v prohlížeči. Moderní verze n8n tě při prvním spuštění provedou založením vlastnického účtu (e-mail + heslo) přímo v UI — to je dnes výchozí způsob zabezpečení a stačí ti k tomu. Nastav si silné heslo, ne admin123 (ano, viděl jsem to v ostrém provozu).

K nejdůležitějším proměnným prostředí podle dokumentace n8n patří:

  1. N8N_HOST — doména, na které n8n běží,
  2. N8N_PROTOCOLhttps,
  3. WEBHOOK_URL — veřejná HTTPS adresa pro webhooky,
  4. GENERIC_TIMEZONE — časové pásmo pro plánované workflow (jinak ti Cron uzly poběží v UTC a budeš se divit),
  5. N8N_ENCRYPTION_KEY — klíč pro šifrování credentials.

Krok 7: Aktualizace a zálohy

S Compose je aktualizace n8n triviální. Stáhneš nový image a restartuješ:

cd ~/n8n
docker compose pull
docker compose up -d

Staré image pak ukliď přes docker image prune. Aktualizuj rozumně — ne každý den, ale ani ne jednou za rok. Před každou aktualizací zálohuj.

Zálohy stojí na dvou věcech: na volume s daty n8n a (u produkce) na databázi. Postgres si vyexportuješ takhle:

docker compose exec postgres pg_dump -U n8nuser n8n > n8n_backup_$(date +%F).sql

A k tomu si pravidelně zálohuj N8N_ENCRYPTION_KEY a obsah volume n8n_data. Bez šifrovacího klíče je ti záloha databáze k ničemu, protože credentials nerozšifruješ. Tohle si dej do automatu (cron) a odkládej zálohy mimo server — třeba do objektového úložiště.

Checklist před ostrým provozem

  1. VPS s Ubuntu 24.04 LTS, min. 2 vCPU / 4 GB RAM pro produkci
  2. DNS A záznam míří na IP serveru
  3. Docker a Docker Compose nainstalované a funkční
  4. n8n poslouchá jen na 127.0.0.1, ne veřejně
  5. Reverse proxy (Caddy/Nginx) s platným HTTPS certifikátem
  6. WEBHOOK_URL ukazuje na veřejnou HTTPS adresu
  7. PostgreSQL místo SQLite pro produkci
  8. Vygenerovaný a zazálohovaný N8N_ENCRYPTION_KEY
  9. Nastavené automatické zálohy databáze i volume
  10. Firewall pouští jen porty 22, 80 a 443

FAQ

Jaký VPS minimálně potřebuju pro n8n?

Pro testování zvládneš 1 vCPU / 2 GB RAM, pro produkci doporučuje Contabo 2 vCPU / 4 GB RAM / 30 GB NVMe. Náročnost roste s počtem souběžných workflow a velikostí dat.

Musím použít PostgreSQL, nebo stačí SQLite?

Podle dokumentace n8n je SQLite výchozí a na hraní bohatě stačí. Pro produkci a vyšší zátěž ale sáhni po PostgreSQL — je robustnější a lépe škáluje.

Proč mi nefungují webhooky?

V drtivé většině případů je špatně WEBHOOK_URL. Musí ukazovat na tvou veřejnou HTTPS adresu (https://n8n.tvojedomena.cz/), ne na localhost ani na port 5678.

Caddy, nebo Nginx?

Pokud nemáš silnou preferenci, vezmi Caddy — HTTPS přes Let's Encrypt vyřídí automaticky a konfigurace je na pár řádků. Nginx zvol, když ho už provozuješ nebo potřebuješ jemnější kontrolu.

Jak n8n aktualizuju, abych nepřišel o data?

S Docker Compose stačí docker compose pull a docker compose up -d. Data zůstávají ve volume n8n_data (a v Postgresu), takže o ně nepřijdeš — ale stejně před aktualizací zálohuj.

Co když ztratím N8N_ENCRYPTION_KEY?

Smůla — n8n jím šifruje uložené credentials, takže bez něj je po migraci nebo obnově ze zálohy nerozšifruješ. Vygeneruj ho jednou, zálohuj a hlídej jako oko v hlavě.

Kam dál

Pokud teprve vybíráš server, na kterém to celé poběží, mrkni na náš porovnávač služeb, projdi si recenze poskytovatelů a než objednáš, koukni na aktuální kupóny a slevy. Trochu času nad výběrem VPS se vyplatí — n8n na něm pojede klidně roky.

O autorovi

Jakub Mareš

Jakub Mareš

Webový specialista a serverový administrátor s dlouholetou praxí v oblasti VPS serverů, WordPressu, optimalizace výkonu a webové bezpečnosti. Pomáhá firmám budovat rychlá, stabilní a bezpečná webová řešení.

Zůstaňte informováni

Získejte nejnovější hostingové nabídky, kupóny a odborné tipy přímo do vašeho emailu.