Instalacja i hosting n8n
Zanim zbudujesz pierwszy workflow, potrzebujesz działającej instancji n8n. W tym module pokażę Ci wszystkie realne ścieżki - od najszybszego n8n Cloud, przez Dockera na własnym serwerze, po VPS, Raspberry Pi i Cloudflare Tunnel. Skupię się na tym, dlaczego dana opcja ma sens, a nie tylko na klikaniu po kroku.
Wymagania systemowe
Dział zatytułowany „Wymagania systemowe”n8n jest aplikacją Node.js i nie jest szczególnie wymagający, ale jest istotna różnica między "wystartuje" a "uciągnie produkcję". Poniżej rozdzielamy minimum do nauki od realnego minimum produkcyjnego - bo to dwa różne światy.
| Wskaźnik | Wartość |
|---|---|
| RAM (nauka) | ~512 MB - 1 GB |
| RAM (produkcja) | 2 GB+ |
| CPU | 1-2 rdzenie |
| Dysk | kilka GB+ |
Wartości powyżej to praktyczne wskazówki, a nie sztywne wymaganie z dokumentacji. Sam silnik n8n jest lekki, ale apetyt na RAM rośnie wraz z liczbą równoległych wykonań, rozmiarem przetwarzanych danych (np. duże pliki, obszerne odpowiedzi API) i node'ami AI. Na słabej maszynie ciężki workflow potrafi przeciążyć pamięć i ubić proces - dlatego do produkcji warto mieć zapas.
Node.js
Dział zatytułowany „Node.js”Jeśli instalujesz n8n przez npm, potrzebujesz wcześniej zainstalowanego Node.js w wersji od 20.19 do 24.x. Jeśli używasz Dockera, nie musisz się tym przejmować - Node.js jest już w obrazie. To zresztą jeden z głównych powodów, dla których polecam Dockera: omijasz zależności i konflikty wersji na hoście.
Baza danych: SQLite czy PostgreSQL?
Dział zatytułowany „Baza danych: SQLite czy PostgreSQL?”n8n musi gdzieś trzymać Twoje workflow, wykonania i poświadczenia. Domyślnie używa SQLite - pliku w katalogu danych, bez stawiania osobnego serwera bazy. To świetne na start i do nauki. Do poważniejszych wdrożeń docs i społeczność rekomendują PostgreSQL: lepiej radzi sobie z większym obciążeniem, jest wymagany przy skalowaniu (tryb kolejkowy / queue mode) i ułatwia backupy.
| Aspekt | SQLite (domyślnie) | PostgreSQL |
|---|---|---|
| Konfiguracja | Zero - działa od razu | Trzeba postawić serwer bazy |
| Dla kogo | Nauka, mała instancja, dom | Produkcja, większy ruch, zespół |
| Skalowanie (queue mode) | Nieodpowiednie | Wymagane |
| Backup | Kopia pliku / wolumenu | Standardowe narzędzia Postgresa |
| Wydajność pod obciążeniem | Ograniczona | Dużo lepsza |
n8n Cloud - najszybszy start
Dział zatytułowany „n8n Cloud - najszybszy start”Jeśli chcesz zobaczyć n8n w akcji w ciągu kilku minut i nie interesuje Cię administracja serwerem, n8n Cloud jest najprostszą drogą. To hostowana wersja prowadzona przez twórców n8n.
Co dostajesz
- Zero instalacji i utrzymania instancji
- Aktualizacje jednym kliknięciem do najnowszej wersji
- Monitoring dostępności po stronie n8n
- Zarządzane uwierzytelnianie OAuth (gotowe callbacki)
- HTTPS i publiczny adres bez konfiguracji
Czego się spodziewać
- Płatny abonament zamiast własnego serwera
- Dane przechowywane u dostawcy (nie u Ciebie)
- Mniejsza kontrola nad środowiskiem niż self-host
- Usługa niedostępna w niektórych regionach (Rosja, Białoruś)
Docker i Docker Compose krok po kroku
Dział zatytułowany „Docker i Docker Compose krok po kroku”Docker to najpopularniejszy sposób self-hostingu n8n - i mój domyślny wybór w kursie. Dostajesz gotowy obraz z odpowiednim Node.js, izolację od reszty systemu oraz powtarzalność: ta sama komenda da ten sam efekt na laptopie, VPS-ie i Raspberry Pi.
Najprostszy start (jeden kontener, SQLite)
Dział zatytułowany „Najprostszy start (jeden kontener, SQLite)”Najpierw tworzymy wolumen danych - to nazwane miejsce na dysku, w którym Docker trzyma dane n8n niezależnie od kontenera. Dzięki temu możesz skasować i odtworzyć kontener (np. przy aktualizacji), a Twoje workflow, poświadczenia i klucz szyfrowania zostaną.
docker volume create n8n_data
docker run -it --rm \ --name n8n \ -p 5678:5678 \ -e GENERIC_TIMEZONE="Europe/Warsaw" \ -e TZ="Europe/Warsaw" \ -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \ -e N8N_RUNNERS_ENABLED=true \ -v n8n_data:/home/node/.n8n \ docker.n8n.io/n8nio/n8nPo uruchomieniu otwórz http://localhost:5678. Co tu się właściwie dzieje?
-p 5678:5678- udostępnia port n8n z kontenera na Twoim komputerze. Port to numerowane "drzwi", przez które program jest widoczny w sieci - n8n używa numeru 5678.-v n8n_data:/home/node/.n8n- montuje wolumen do katalogu danych n8n. To kluczowe dla trwałości: tu lądują baza SQLite, poświadczenia i klucz szyfrowania.-e GENERIC_TIMEZONE/-e TZ- strefa czasowa (ważna dla node'ów harmonogramu, np. "codziennie o 7:00").--rm- usuwa kontener po zatrzymaniu (dane i tak przeżyją w wolumenie). Do trwałego działania w tle używa się raczej-dzamiast-it --rm.
Docker Compose - wygodniej i pod produkcję
Dział zatytułowany „Docker Compose - wygodniej i pod produkcję”Pojedyncza długa komenda docker run jest okej do testu, ale w praktyce lepiej opisać
całą konfigurację w pliku docker-compose.yml. Zyskujesz czytelność, łatwe aktualizacje
i miejsce na dołożenie kolejnych usług (np. PostgreSQL czy reverse proxy). Uruchamiasz
wszystko jedną komendą:
docker compose up -dOficjalne przewodniki "server setups" w docs n8n pokazują gotowe konfiguracje Compose
(np. z Traefikiem jako reverse proxy, automatycznym SSL od Let's Encrypt oraz wolumenami
n8n_data i traefik_data). To dobry szablon na pełne wdrożenie z własną domeną -
wrócę do tego w sekcji o HTTPS.
Self-hosting na Raspberry Pi i mini PC
Dział zatytułowany „Self-hosting na Raspberry Pi i mini PC”n8n da się uruchomić w domu na małym, energooszczędnym sprzęcie - to popularne rozwiązanie dla automatyzacji domowych i osobistych, gdzie zależy Ci na pełnej kontroli i braku opłat abonamentowych.
Raspberry Pi (najlepiej z większą ilością RAM-u) albo tani mini PC bez problemu udźwigną n8n do prywatnych workflow. Najprościej postawić n8n tak jak na każdej innej maszynie - przez Dockera (obraz wspiera architekturę ARM). Pamiętaj jednak o realiach domowego serwera:
- Pamięć i dysk - wybierz wariant z większym RAM-em; jako nośnik wolimy dobry SSD/dysk niż słabą kartę microSD (mniej awarii, lepsza wydajność bazy).
- Dostępność z zewnątrz - w domu zwykle nie masz publicznego, stałego IP ani otwartych portów. Tu najlepiej sprawdza się Cloudflare Tunnel (patrz sekcja "HTTPS, domena, reverse proxy i Cloudflare Tunnel" niżej), który udostępnia n8n po HTTPS bez przekierowań portów.
- Backup - domowy sprzęt potrafi paść (zasilanie, karta). Regularnie kopiuj wolumen danych i klucz szyfrowania.
VPS i PaaS - gdzie postawić n8n w sieci
Dział zatytułowany „VPS i PaaS - gdzie postawić n8n w sieci”Gdy chcesz, by n8n działało 24/7 z publicznym adresem i sensownym uptime, najczęściej wynajmujesz VPS (własny serwer w chmurze) albo korzystasz z platformy PaaS (która część roboty bierze na siebie). Wybór to kompromis między ceną, kontrolą a wygodą.
VPS klasyczny
Pełna kontrola: Hetzner, cyber_Folks, Hostinger. Sam stawiasz Dockera, domenę i HTTPS
- najtaniej za moc, ale wymaga administracji.
PaaS
Railway i podobne: deploy n8n "na klik", mniej grzebania w serwerze. Wygodniej, zwykle drożej za tę samą moc.
Mikrus i tanie VPS
Bardzo tanie, polskie maluchy do nauki i lekkich automatyzacji. Uwaga na zasoby - mało RAM-u przy cięższych workflow.
Każda z tych opcji ma inne mocne i słabe strony, inne ceny i inny poziom "zrób to sam". Zamiast streszczać je tu po łebkach, odsyłam do pełnego, regularnie aktualizowanego materiału.
HTTPS, domena, reverse proxy i Cloudflare Tunnel
Dział zatytułowany „HTTPS, domena, reverse proxy i Cloudflare Tunnel”Self-hostowane n8n prawie zawsze chcesz wystawić po HTTPS, na własnej domenie. To nie jest fanaberia - bez publicznego, bezpiecznego adresu nie zadziałają poprawnie webhooki ani logowanie OAuth do wielu usług.
Dlaczego OAuth wymaga publicznego HTTPS
Dział zatytułowany „Dlaczego OAuth wymaga publicznego HTTPS”Gdy łączysz n8n z usługą przez OAuth (Google, Slack, GitHub itd.), dostawca po
zalogowaniu odsyła użytkownika na adres zwrotny (callback). Ten adres musi być
publicznie dostępny i zwykle musi być po HTTPS - http://localhost nie zadziała, bo
dostawca nie ma jak tam wrócić. Tak samo webhooki: zewnętrzna usługa musi móc "zapukać"
do Twojego n8n z internetu.
Ścieżka A: VPS + domena + Let's Encrypt
Dział zatytułowany „Ścieżka A: VPS + domena + Let's Encrypt”Klasyczne wdrożenie produkcyjne. Masz VPS z publicznym IP, kierujesz na niego subdomenę
(np. n8n.twojadomena.pl), a przed n8n stawiasz reverse proxy, które obsługuje HTTPS
i certyfikat. Najczęstsze wybory to Traefik lub Caddy (automatyczny, darmowy
certyfikat od Let's Encrypt) albo NGINX. W konfiguracji ustawiasz wtedy m.in.:
N8N_HOST- domena, pod którą działa n8n (np.n8n.twojadomena.pl).N8N_PROTOCOL=https- protokół, którego n8n używa do budowania adresów.WEBHOOK_URL- pełny publiczny adres bazowy webhooków.
Reverse proxy (np. Traefik) zajmie się wystawieniem TLS i automatycznym odnawianiem certyfikatu - gotowe szablony Docker Compose w docs n8n robią to za Ciebie.
Ścieżka B: lokalnie + Cloudflare Tunnel
Dział zatytułowany „Ścieżka B: lokalnie + Cloudflare Tunnel”Gdy n8n stoi w domu (Raspberry Pi, mini PC) i nie masz publicznego IP ani nie chcesz otwierać portów na routerze, świetnie sprawdza się Cloudflare Tunnel. Tunel tworzy szyfrowane połączenie wychodzące z Twojej maszyny do sieci Cloudflare i udostępnia n8n pod publiczną subdomeną po HTTPS - bez przekierowań portów i bez wystawiania IP. Dzięki temu OAuth i webhooki działają tak, jakbyś miał pełnoprawny serwer w sieci.
Klucz N8N_ENCRYPTION_KEY i zmienne środowiskowe
Dział zatytułowany „Klucz N8N_ENCRYPTION_KEY i zmienne środowiskowe”To prawdopodobnie najważniejsza sekcja całego modułu z perspektywy bezpieczeństwa i odzyskiwania danych. Zrozum ją zanim wpiszesz pierwsze poświadczenie do produkcyjnej instancji.
Co robi klucz szyfrowania
Dział zatytułowany „Co robi klucz szyfrowania”n8n szyfruje Twoje poświadczenia (klucze API, tokeny OAuth, hasła) przed zapisaniem
ich do bazy. Do tego szyfrowania używa właśnie N8N_ENCRYPTION_KEY. Przy pierwszym
uruchomieniu, jeśli nie podasz własnego klucza, n8n wygeneruje losowy klucz
automatycznie i zapisze go w katalogu danych ~/.n8n (w Dockerze: /home/node/.n8n,
czyli w Twoim wolumenie).
Jak ustawić własny klucz
Dział zatytułowany „Jak ustawić własny klucz”Zamiast polegać na losowym kluczu z pliku, na produkcji warto ustawić własny, zanim
uruchomisz n8n po raz pierwszy. Wygenerujesz mocny, losowy klucz np. tak (komenda
openssl jest dostępna na Linux i macOS, a na Windows w "Git Bash"):
openssl rand -hex 32Wynik podajesz n8n jako zmienną środowiskową - w Dockerze przez -e lub w pliku
Compose, na npm przez eksport zmiennej:
export N8N_ENCRYPTION_KEY=<TWÓJ_WYGENEROWANY_KLUCZ>Inne ważne zmienne środowiskowe
Dział zatytułowany „Inne ważne zmienne środowiskowe”n8n konfiguruje się głównie przez zmienne środowiskowe. Poza kluczem warto znać kilka podstawowych:
| Zmienna | Do czego służy |
|---|---|
N8N_ENCRYPTION_KEY |
Klucz szyfrujący poświadczenia w bazie (opisany wyżej). |
DB_TYPE |
Typ bazy danych - domyślnie SQLite; dla Postgresa postgresdb. |
DB_POSTGRESDB_HOST i pokrewne |
Host, port, nazwa bazy, użytkownik i hasło połączenia z PostgreSQL. |
N8N_HOST |
Domena, pod którą działa n8n. |
N8N_PROTOCOL |
Protokół (np. https) używany do budowania adresów. |
WEBHOOK_URL |
Publiczny adres bazowy webhooków (ważne za reverse proxy). |
GENERIC_TIMEZONE / TZ |
Strefa czasowa - wpływa na node'y harmonogramu. |
Aktualizacje i utrzymanie
Dział zatytułowany „Aktualizacje i utrzymanie”n8n rozwija się szybko - nowe node'y, poprawki i funkcje pojawiają się często. Aktualizowanie jest proste, ale warto robić to świadomie, żeby uniknąć niespodzianek po zmianie wersji.
Aktualizacja w Docker Compose
Dział zatytułowany „Aktualizacja w Docker Compose”Jeśli używasz Compose, aktualizacja to pobranie nowego obrazu i odtworzenie kontenera (dane zostają w wolumenie):
docker compose pulldocker compose up -dAktualizacja pojedynczego kontenera (docker run)
Dział zatytułowany „Aktualizacja pojedynczego kontenera (docker run)”Przy klasycznym docker run pobierasz nowy obraz, zatrzymujesz i usuwasz stary kontener,
a potem uruchamiasz nowy (na tym samym wolumenie):
docker pull docker.n8n.io/n8nio/n8ndocker stop n8ndocker rm n8nMożesz też przypiąć konkretną wersję zamiast najnowszej, podając tag, np.
docker.n8n.io/n8nio/n8n:1.81.0 - przydatne, gdy chcesz kontrolować, na co dokładnie
aktualizujesz.
Sprawdź się
Dział zatytułowany „Sprawdź się”Zanim ruszysz dalej, odpowiedz sobie na te pytania - na głos albo w dwóch zdaniach na kartce. Jeśli przy którymś się zawahasz, wróć do podlinkowanej sekcji.
- Uczysz się i stawiasz pierwszą instancję lokalnie - dlaczego SQLite w zupełności wystarczy, a PostgreSQL na tym etapie byłby przerostem formy nad treścią? Jeśli nie masz pewności - Baza danych: SQLite czy PostgreSQL?.
- Podczas aktualizacji kontenera
docker runusuwasz stary kontener i uruchamiasz nowy w jego miejsce. Dlaczego to bezpieczne dla Twoich workflow i poświadczeń, o ile masz wolumenn8n_data, a katastrofalne bez niego? Jeśli nie masz pewności - Aktualizacja pojedynczego kontenera (docker run). - Twoje self-hostowane n8n działa na
localhostbez żadnego tunelu ani domeny. Dlaczego logowanie przez Google czy Slack (OAuth) się nie uda, mimo że sama instancja działa poprawnie? Jeśli nie masz pewności - Dlaczego OAuth wymaga publicznego HTTPS. - Planujesz w przyszłości tryb kolejkowy (queue mode) z kilkoma workerami. Dlaczego
wszystkie muszą mieć dokładnie ten sam
N8N_ENCRYPTION_KEY, a nie każdy swój? Jeśli nie masz pewności - Jak ustawić własny klucz.
Mini-zadanie: sprawdź, czy Twój wolumen naprawdę chroni dane
Potrzebujesz Dockera i kilkunastu minut.
- Uruchom n8n w kontenerze z wolumenem
n8n_data(komenda z sekcji Docker i Docker Compose krok po kroku). - Utwórz w edytorze pusty workflow z jednym node'em i zapisz go pod dowolną nazwą.
- Zatrzymaj kontener (
docker stop n8n) i usuń go (docker rm n8n). - Uruchom ponownie tę samą komendę
docker runz tym samym wolumenem-v n8n_data:/home/node/.n8n. - Otwórz
http://localhost:5678- Twój workflow powinien tam nadal być. Gdybyś w kroku 1 pominął-v, po tym ćwiczeniu zniknąłby bezpowrotnie.
Co warto zapamiętać z tego modułu
- Do nauki wystarczy mało zasobów i SQLite; do produkcji planuj 2 GB+ RAM i PostgreSQL.
- n8n Cloud = najszybszy start bez administracji; self-host = kontrola i niższy koszt długofalowy.
- Docker to domyślny self-host: pamiętaj o wolumenie
n8n_data- bez niego tracisz dane. - OAuth i webhooki potrzebują publicznego HTTPS: VPS + domena + Let's Encrypt albo Cloudflare Tunnel.
- Za reverse proxy ustaw
WEBHOOK_URL,N8N_HOSTiN8N_PROTOCOL. N8N_ENCRYPTION_KEYszyfruje poświadczenia - utrata klucza = utrata poświadczeń. Backupuj go razem z bazą.- Aktualizuj świadomie: backup, release notes,
docker compose pull && up -d.
Częste pytania
Cloud czy self-hosting - od czego zacząć naukę?
Najszybszy start daje n8n Cloud (trial) albo lokalny Docker. Cloud ma zerową konfigurację i od razu działające OAuth, więc świetnie nadaje się do nauki. Gdy poczujesz się pewnie i będziesz chciał kontroli nad danymi oraz kosztami, przejdź na self-hosting przez Dockera.
Po restarcie zniknęły mi workflow i poświadczenia - dlaczego?
Najczęściej dlatego, że kontener uruchomiono bez wolumenu danych. Upewnij się, że masz `-v n8n_data:/home/node/.n8n` (lub odpowiedni wpis w Compose). Dane n8n - baza, poświadczenia, klucz szyfrowania - żyją w tym wolumenie, nie w samym kontenerze.
Czy potrzebuję własnej domeny i HTTPS?
Do nauki lokalnej nie. Ale gdy chcesz używać webhooków albo logowania OAuth do zewnętrznych usług, potrzebujesz publicznego adresu po HTTPS. Na VPS-ie zrobisz to przez reverse proxy z Let's Encrypt, a w domu najwygodniej przez Cloudflare Tunnel.
Co się stanie, jeśli zgubię N8N_ENCRYPTION_KEY?
Nie odszyfrujesz istniejących poświadczeń zapisanych w bazie - trzeba będzie wprowadzić je ponownie. Dlatego klucz traktuj jak hasło: przechowuj go bezpiecznie i backupuj razem z bazą danych. Na produkcji najlepiej ustawić własny klucz zmienną środowiskową, zanim uruchomisz instancję po raz pierwszy.
Jak bezpiecznie aktualizować n8n?
Najpierw backup (wolumen/baza + klucz), potem przeczytaj release notes pod kątem zmian łamiących zgodność, a następnie w Compose: `docker compose pull` i `docker compose up -d`. Na ważnych instancjach nie przeskakuj wielu wersji naraz i testuj po aktualizacji.
made with ❤️ by aitomate.pl - Łukasz Podgórski