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
| Zmienna | Do czego służy |
|---|---|
| DB_TYPE oraz DB_POSTGRESDB_HOST, DB_POSTGRESDB_DATABASE, DB_POSTGRESDB_USER, DB_POSTGRESDB_PASSWORD | połączenie z Postgres zamiast domyślnego SQLite |
| N8N_ENCRYPTION_KEY | szyfruje zapisane dane uwierzytelniające; bez tego samego klucza kopia bazy nie odtworzy logowań |
| WEBHOOK_URL | publiczny 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_PROTOCOL | domena instancji i protokół https |
| GENERIC_TIMEZONE i TZ | strefa Europe/Warsaw dla harmonogramów i dat |
| EXECUTIONS_DATA_PRUNE i EXECUTIONS_DATA_MAX_AGE | automatyczne usuwanie starych wykonań z bazy |
Kopie i aktualizacja krok po kroku
- Zrzut bazy narzędziem pg_dump uruchamiany z harmonogramu systemowego i kopiowany poza serwer.
- Klucz szyfrowania i plik .env w menedżerze haseł, nie tylko na dysku serwera.
- Eksport przepływów do plików JSON z linii poleceń n8n jako druga warstwa kopii i prosta historia zmian.
- Przed aktualizacją: przegląd informacji o zmianach w nowej wersji i świeża kopia bazy.
- Aktualizacja: zmiana numeru wersji obrazu w pliku compose, pobranie obrazu, ponowne uruchomienie i sprawdzenie najważniejszych przepływów.
- 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.