VPS•6 min czytania•Aktualizacja: 2026-10-16

Jak zainstalować n8n na serwerze VPS z Dockerem i Caddy SSL (Krok po kroku)

1. Dlaczego własny VPS zamiast n8n Cloud?

Zmieniam tekst - Oficjalny hosting n8n Cloud kosztuje od 20€ do nawet 120€ miesięcznie i narzuca sztuczne limity na liczbę wykonań potoków (tzw. executions). Własny serwer VPS z wirtualizacją KVM kosztuje ułamek tej kwoty (od ok. 25-35 zł/mies.) i oferuje:

• **Brak limitów wykonań**: możesz przetwarzać miliony webhooków miesięcznie bez dopłat.
• **Prywatność i bezpieczeństwo danych**: Twoje klucze API (OpenAI, Claude, bazy danych klientów) nie opuszczają Twojego serwera, co spełnia restrykcyjne wymogi RODO i umów poufności (NDA).
• **Własna baza PostgreSQL**: pełna kontrola nad historią wykonań i stanem potoków bez ograniczeń retencji.

2. Wymagania sprzętowe i wybór serwera

Do podstawowych automatyzacji bez ciężkich webhooków wystarczą 2 GB RAM. Jednak jeśli planujesz podłączać agentów AI, przetwarzać duże pliki JSON lub uruchamiać węzły wektorowe (np. Qdrant / Pinecone), absolutnym standardem jest maszyna z **minimum 4 GB do 8 GB RAM** oraz dyskiem NVMe, aby uniknąć zabicia kontenera przez systemowy OOM Killer.

3. Przygotowanie Ubuntu i instalacja Dockera

Po zalogowaniu się na serwer przez SSH jako użytkownik root zaktualizuj pakiety i zainstaluj oficjalny silnik Docker wraz z wtyczką Docker Compose:

apt update && apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
mkdir -p /opt/n8n && cd /opt/n8n

4. Plik docker-compose.yml z PostgreSQL i Caddy

Wykorzystujemy nowoczesny stos produkcyjny: kontener n8n, bazę PostgreSQL 16 oraz serwer Caddy, który w 100% automatycznie pobiera i odnawia certyfikat Let's Encrypt SSL.

version: '3.8'

services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_DB: n8n
volumes:
- postgres_storage:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${DB_USER} -d n8n']
interval: 5s
timeout: 5s
retries: 10

n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=${DB_USER}
- DB_POSTGRESDB_PASSWORD=${DB_PASS}
- N8N_HOST=${SUBDOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://${SUBDOMAIN}/
- GENERIC_TIMEZONE=Europe/Warsaw
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy

caddy:
image: caddy:latest
restart: unless-stopped
ports:
- '80:80'
- '443:443'
volumes:
- caddy_data:/data
- caddy_config:/config
command: caddy reverse-proxy --from https://${SUBDOMAIN} --to http://n8n:5678

volumes:
postgres_storage:
n8n_storage:
caddy_data:
caddy_config:

5. Plik zmiennych środowiskowych .env

Utwórz plik `.env` w katalogu `/opt/n8n` i uzupełnij swoją domenę oraz silne hasło bazy danych:

SUBDOMAIN=n8n.twojadomena.pl
DB_USER=n8n_admin
DB_PASS=SuperBezpieczneHasloPostgres2026!

💡 TIP: Pamiętaj, aby przed uruchomieniem skierować rekord A w DNS domeny (np. n8n.twojadomena.pl) na adres IP Twojego serwera VPS.

6. Uruchomienie i weryfikacja certyfikatu SSL

Uruchom potok w tle jednym poleceniem. Caddy automatycznie wynegocjuje darmowy certyfikat SSL z Let's Encrypt w około 10 sekund:

docker compose up -d
docker compose logs -f caddy

7. Optymalizacja RAM pod potoki agentów AI

Domyślnie n8n zapisuje każde pojedyncze wykonanie w bazie. Przy tysiącach zapytań baza PostgreSQL może szybko urosnąć. W powyższej konfiguracji dodaliśmy dwie kluczowe flagi: `EXECUTIONS_DATA_PRUNE=true` oraz `EXECUTIONS_DATA_MAX_AGE=168` (automatyczne czyszczenie logów starszych niż 7 dni), co gwarantuje stałe, niskie zużycie RAM-u i dysku.

Często zadawane pytania (FAQ)

Czy po restarcie serwera n8n wstanie automatycznie?

Tak, dyrektywa restart: unless-stopped w pliku docker-compose.yml gwarantuje, że wszystkie trzy kontenery (baza, n8n i Caddy) samoczynnie wznowią pracę.

Jak zaktualizować n8n do nowej wersji w przyszłości?

Wystarczy przejść do /opt/n8n i wykonać komendę: docker compose pull && docker compose up -d. Baza danych i dane workflow pozostają nienaruszone na trwałych wolumenach.