n8n na VPS: krok po kroku od gołego Ubuntu do działającego systemu n8n

By Grzegorz Bartman , 8 March 2025

n8n pozwala łatwo tworzyć automatyczne przepływy między różnymi usługami (Jira, Slack, e-mail, OpenAI i wiele innych). Możesz go hostować samodzielnie, by mieć pełną kontrolę nad danymi i kosztami.

Startowanie od zera na świeżym serwerze Ubuntu, instalacja wszystkich narzędzi, zabezpieczenie go i skonfigurowanie SSL dla n8n bywa skomplikowane. Łatwo o pominiecie ważnych kroków albo złą konfigurację, co prowadzi do błędów z uprawnieniami i niechronionego ruchu HTTP.

W tym poradniku dowiesz się, jak:

  1. Przygotować Ubuntu (firewall, pakiety, automatyczne aktualizacje).
  2. Wygenerować klucze SSH i skonfigurować repo Git dla Docker Compose.
  3. Utworzyć pliki docker-compose.yml, .gitignore i Caddyfile.
  4. Sklonować repo na serwer, ustawić poprawne uprawnienia i rozwiązać częste błędy.
  5. Postawić n8n z certyfikatem SSL od Let’s Encrypt, korzystając z reverse proxy Caddy.

 

Gdzie kupić tani serwer VPS/Cloud

Poniżej kilka najbardziej znanych firm, których ofertę warto przejrzeć:

  • Hetzner
  • OVH
  • DigitalOcean
  • Linode
  • Mikrus

Ceny u tych dostawców zaczynają się zwykle od około 5 USD za miesiąc. Warto sprawdzić bieżące oferty i porównać je pod kątem dostępnej mocy CPU, pamięci RAM, transferu danych oraz lokalizacji serwerów.

 

Przygotowanie serwera z Ubuntu – pakiety, bezpieczeństwo, firewall

Zacznij od aktualizacji pakietów:

apt update
apt upgrade -y

Zainstaluj narzędzie do automatycznych aktualizacji:

 
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

Firewall (UFW)

Zainstaluj i włącz ufw, otwierając podstawowe porty (SSH, HTTP, HTTPS):

 
apt install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 5678/tcp
ufw enable

 

portsentry – ochrona przed skanowaniem portów

Aby dodatkowo chronić serwer przed skanami portów i podejrzanymi próbami połączeń, zainstaluj portsentry:

apt install -y portsentry
  • Plik konfiguracyjny zwykle znajdziesz w /etc/portsentry/portsentry.conf.
  • Białą listę adresów IP (np. zaufanych) możesz dodać w /etc/portsentry/portsentry.ignore.static:

     
    echo "123.123.123.123" >> /etc/portsentry/portsentry.ignore.static
    
  • Uruchom i włącz usługę:

    systemctl enable portsentry
    systemctl start portsentry
    

Dzięki temu zmniejszysz ryzyko ataków na otwarte porty.

 

Klucze SSH – praca z repozytorium Docker Compose

Wygeneruj klucz SSH (np. dla Bitbucket), żeby łatwo klonować i wypychać zmiany w repozytorium:

 
ssh-keygen -t rsa -b 4096 -C "twó[email protected]" -f ~/.ssh/id_rsa_bitbucket

Plik publiczny (id_rsa_bitbucket.pub) dodaj w ustawieniach repo (Bitbucket/GitLab/GitHub). Dzięki temu nie musisz wpisywać hasła przy każdym git push/pull.

 

Pliki w repo: Docker Compose, .gitignore i Caddyfile

W lokalnym repo (albo bezpośrednio na serwerze) przygotuj:

docker-compose.yml

Zawiera definicję usług (n8n i Caddy) z automatyczną konfiguracją SSL:

version: "3"
services:
 n8n:
   image: n8nio/n8n
   container_name: n8n
   restart: unless-stopped
   environment:
     - N8N_HOST=n8n.twoja-domena.pl
     - N8N_PROTOCOL=https
     - N8N_PORT=5678
     - WEBHOOK_URL=https://n8n.twoja-domena.pl/
     - N8N_SECURE_COOKIE=false
   volumes:
     - ./n8n-data:/home/node/.n8n
 caddy:
   image: caddy:latest
   container_name: caddy
   restart: unless-stopped
   ports:
     - "80:80"
     - "443:443"
   volumes:
     # Nasz plik konfiguracyjny Caddy
     - ./Caddyfile:/etc/caddy/Caddyfile:ro
     # Trzymanie danych i certyfikatów
     - caddy_data:/data
     - caddy_config:/config
   depends_on:
     - n8n
volumes:
 caddy_data:
 caddy_config:

 

Caddyfile

Caddy automatycznie pobierze certyfikat Let’s Encrypt i będzie go odnawiać:

{
   email twó[email protected]
}
n8n.twoja-domena.pl {
   reverse_proxy n8n:5678
}

 

.gitignore

Nie wrzucaj lokalnych danych n8n do repo:

n8n-data
.env

 

Klonowanie repo, uprawnienia i typowe błędy

Na serwerze:

apt install -y git
mkdir /opt/n8n
cd /opt/n8n
git clone [email protected]:twoj_user/twoje_repo.git
cd twoje_repo
 
 

Jeśli używasz kontenerów (jak n8n) z uid/gid 1000, upewnij się, że katalogi mają odpowiednie uprawnienia:

mkdir n8n-data
chown -R 1000:1000 n8n-data
 

Najczęstsze błędy i ich rozwiązania:

  • Brak otwartego portu (np. 5678) – sprawdź ufw lub reguły bezpieczeństwa w panelu VPS.
  • EACCES (permission denied) – nadaj poprawne uprawnienia katalogowi danych n8n.
  • Zły adres / HTTPS – pamiętaj, by ustawić prawidłową domenę (np. n8n.twoja-domena.pl).

 

5. Uruchomienie n8n z SSL

Wszystko gotowe? W katalogu projektu:

docker-compose up -d
 

Caddy wystartuje, zajmie się pobraniem certyfikatu Let’s Encrypt, a n8n będzie dostępny przez:

(oczywiście zastąp n8n.twoja-domena.pl swoją rzeczywistą subdomeną).


Podsumowanie

Teraz masz działające n8n na własnym serwerze z Ubuntu, uruchamiane przez Docker Compose, z automatycznymi aktualizacjami systemu, zaporą ogniową UFW i certyfikatem Let’s Encrypt obsługiwanym przez Caddy. Wszystkie kroki – od kluczy SSH, przez konfigurację plików w repo, aż po unikanie typowych błędów z uprawnieniami – są w jednym miejscu, dzięki czemu możesz z łatwością dostosować ten przepis do własnych potrzeb.

 

Linki