Przejdź do treści

Instalacja n8n na serwerze krok po kroku, z kopiami i aktualizacjami

Ten poradnik jest dla osób, które stawiają n8n samodzielnie i nie chcą wracać do tematu po kwartale z pełnym dyskiem. Opisuję składniki i ustawienia bez numerów wersji, bo te zmieniają się często.

Autor: Szymon Łakomy. Aktualizacja:

Czego potrzebujesz przed startem

  • serwera VPS z Linuksem i dostępem przez SSH,
  • subdomeny, na przykład n8n.twojafirma.pl, z rekordem DNS wskazującym na serwer,
  • Dockera z wtyczką Compose,
  • portów 80 i 443 otwartych dla proxy, przy czym port n8n (domyślnie 5678) nie powinien być dostępny z internetu,
  • firmowego menedżera haseł na klucz szyfrowania i hasło do bazy.

Na tanich serwerach ze współdzielonym adresem IPv4, takich jak mikr.us, standardowe porty są zwykle dostępne tylko przez IPv6 albo przez subdomenę dostawcy. Sposób wystawienia n8n i uzyskania certyfikatu sprawdzam wtedy w dokumentacji danego dostawcy.

Trzy usługi w docker compose

  • postgres: oficjalny obraz Postgres, wolumen na dane, użytkownik i hasło w pliku .env, bez portu wystawionego na zewnątrz.
  • n8n: oficjalny obraz n8n z przypiętą wersją zamiast latest, wolumen na katalog /home/node/.n8n, zależność od usługi bazy i port dostępny tylko w sieci wewnętrznej Dockera.
  • proxy: Caddy, Nginx albo Traefik, który przyjmuje ruch na portach 80 i 443, uzyskuje certyfikat Let’s Encrypt i przekazuje ruch do n8n, w tym połączenia WebSocket, z których korzysta edytor.

Każdej usłudze ustawiam politykę restartu unless-stopped, żeby po ponownym uruchomieniu serwera całość wstała sama. Wolumen n8n jest ważny: bez niego odtworzony kontener traci pliki konfiguracyjne, w tym wygenerowany klucz szyfrowania.

Zmienne środowiskowe do ustawienia

ZmiennaDo czego służy
DB_TYPE oraz DB_POSTGRESDB_HOST, DB_POSTGRESDB_DATABASE, DB_POSTGRESDB_USER, DB_POSTGRESDB_PASSWORDpołączenie z Postgres zamiast domyślnego SQLite
N8N_ENCRYPTION_KEYszyfruje zapisane dane uwierzytelniające; bez tego samego klucza kopia bazy nie odtworzy logowań
WEBHOOK_URLpubliczny adres, z którego n8n buduje adresy webhooków i formularzy; bez niego za proxy pojawiają się adresy z wewnętrznym portem
N8N_HOST i N8N_PROTOCOLdomena instancji i protokół https
GENERIC_TIMEZONE i TZstrefa Europe/Warsaw dla harmonogramów i dat
EXECUTIONS_DATA_PRUNE i EXECUTIONS_DATA_MAX_AGEautomatyczne usuwanie starych wykonań z bazy
Nazwy tych zmiennych są stabilne, ale przed instalacją porównuję je z aktualną dokumentacją n8n, bo domyślne wartości potrafią się zmienić.

Kopie i aktualizacja krok po kroku

  1. Zrzut bazy narzędziem pg_dump uruchamiany z harmonogramu systemowego i kopiowany poza serwer.
  2. Klucz szyfrowania i plik .env w menedżerze haseł, nie tylko na dysku serwera.
  3. Eksport przepływów do plików JSON z linii poleceń n8n jako druga warstwa kopii i prosta historia zmian.
  4. Przed aktualizacją: przegląd informacji o zmianach w nowej wersji i świeża kopia bazy.
  5. Aktualizacja: zmiana numeru wersji obrazu w pliku compose, pobranie obrazu, ponowne uruchomienie i sprawdzenie najważniejszych przepływów.
  6. Co jakiś czas odtworzenie kopii na czystym serwerze, żeby wiedzieć, że da się z niej wstać.

Co psuje się po kilku miesiącach

Rosnące logi wykonań

Bez czyszczenia każde wykonanie zostaje w bazie razem z danymi. Przepływ odpytujący API co minutę potrafi zapełnić dysk szybciej niż wszystkie pozostałe razem.

Pełny dysk przez Dockera

Stare obrazy i logi kontenerów rosną po cichu. Ustawiam rotację logów i co jakiś czas usuwam nieużywane obrazy.

Zmienione adresy webhooków

Nowa domena, brak WEBHOOK_URL albo adres testowy wpisany w zewnętrznym systemie sprawiają, że dane trafiają donikąd. Pomaga lista miejsc, w których wpisano każdy webhook.

Wygasłe tokeny

Połączenia OAuth i klucze API mają termin ważności, podobnie token używany przy pobieraniu faktur z KSeF w n8n. Przepływ błędów powinien o tym powiadomić, zanim zauważy to klient.

Zgubiony klucz szyfrowania

Kontener postawiony od nowa bez wolumenu i bez zmiennej generuje nowy klucz, a wszystkie zapisane logowania przestają działać.

Decyzję, czy w ogóle stawiać własny serwer, ułatwi porównanie n8n self-hosted czy cloud, a zasady kopii opisuje tekst kopie zapasowe dla firmy. Pilnowanie przepływów po wdrożeniu to osobny temat, opisany jako opieka nad automatyzacjami.

Jeśli wolisz, żeby ktoś postawił serwer za Ciebie i pilnował go dalej, opisuję to w usłudze hosting n8n dla firmy.

Najczęstsze pytania

Czy mogę zostać przy SQLite?

Do nauki i jednego, dwóch przepływów tak. Przy większej liczbie wykonań Postgres jest stabilniejszy, łatwiej robić mu kopie i przenosić go między serwerami. Przenosiny później są możliwe, ale wygodniej zacząć od Postgres.

Co zrobić, gdy zgubię N8N_ENCRYPTION_KEY?

Przepływy i historia zostaną, ale zapisanych danych uwierzytelniających nie odszyfrujesz. Każde konto i klucz API trzeba będzie podłączyć od nowa. Dlatego klucz trzymam poza serwerem.

Jak często aktualizować n8n?

Nie przy każdym wydaniu, ale też bez długiego zostawania w tyle, bo duże skoki między wersjami są trudniejsze. Każdą aktualizację poprzedza kopia i przegląd zmian, a przy ważnych przepływach także test na drugiej instancji.

Czy da się zainstalować n8n bez Dockera?

Tak, przez npm na serwerze z Node.js. Dla firmy wybieram Dockera, bo aktualizacja sprowadza się do zmiany wersji obrazu, a całe środowisko opisuje jeden plik, który łatwo odtworzyć na innym serwerze. Tło znajdziesz w tekście co to jest n8n.

Powiązane strony

Nie chcesz instalować n8n samodzielnie?

Napisz, na jakim serwerze ma działać. Postawię n8n z kopiami i przekażę opis konfiguracji.