Wprowadzenie
n8n to jedno z najpotężniejszych obecnie dostępnych narzędzi do automatyzacji przepływu pracy z otwartym kodem źródłowym. W przeciwieństwie do alternatywnych rozwiązań typu SaaS, takich jak Zapier czy Make, n8n zapewnia pełną kontrolę nad danymi i automatyzacjami — ale tylko wtedy, gdy sam je hostujesz. Serwer VPS z systemem Linux stanowi idealne środowisko do tego celu: jest zawsze dostępny, niedrogi i w pełni pod twoją kontrolą.
Ten przewodnik przeprowadzi Cię przez cały proces konfiguracji gotowej do produkcji, samodzielnie hostowanej instancji n8n na serwerze VPS z systemem Linux. Zaczynając od pustego serwera, stworzysz w pełni zabezpieczone wdrożenie n8n z obsługą protokołu SSL, wykorzystujące Docker, Nginx, PostgreSQL, automatyczne kopie zapasowe oraz wzmocnioną konfigurację zabezpieczeń.
Najważniejsze informacje
- n8n na serwerze VPS zapewnia nieograniczoną liczbę przepływów pracy, brak limitów użytkowania oraz pełną własność danych
- Docker jest zalecaną metodą instalacji, ułatwiającą aktualizacje i izolację
- PostgreSQL jest zalecaną bazą danych dla obciążeń produkcyjnych (nie SQLite)
- Do użytku produkcyjnego wymagany jest serwer proxy odwrotny (Nginx) z certyfikatem SSL Let’s Encrypt
- Aby zapewnić płynne działanie n8n z PostgreSQL, serwer VPS powinien mieć co najmniej 1 vCPU i 2 GB pamięci RAM
- Regularne, automatyczne kopie zapasowe chronią dane przepływów pracy i dane uwierzytelniające
Czym jest n8n?
n8n (wymawiane jako „n-eight-n”) to platforma do automatyzacji przepływów pracy z otwartym kodem źródłowym, która pozwala łączyć aplikacje, interfejsy API i usługi za pomocą wizualnego edytora opartego na węzłach. Obsługuje ponad 400 gotowych integracji i umożliwia uruchamianie niestandardowego kodu JavaScript lub Python w ramach przepływów pracy.
Kluczowa różnica między n8n a jego konkurentami sprowadza się do trzech kwestii: własności, kosztów i elastyczności.
**Własność: **Kiedy samodzielnie hostujesz n8n, dane przepływów pracy, poświadczenia i logi wykonania nigdy nie opuszczają Twojego serwera. Dla zespołów zajmujących się wrażliwymi danymi klientów, dokumentacją finansową lub zastrzeżoną logiką biznesową ma to ogromne znaczenie. Platformy chmurowe przechowują logikę automatyzacji na swojej infrastrukturze, podlegając ich zasadom przechowywania danych i poziomowi bezpieczeństwa.
**Koszt: **Plan chmurowy n8n nalicza opłaty za każde wykonanie przepływu pracy, co w przypadku automatyzacji o dużej skali szybko się sumuje. Średniej wielkości zespół wykonujący tysiące operacji dziennie może wydawać setki dolarów miesięcznie. Na własnym serwerze VPS, po opłaceniu serwera, liczba wykonań jest nieograniczona i nie wiąże się z żadnymi dodatkowymi kosztami.
**Elastyczność: **Samodzielnie hostowana platforma n8n pozwala na instalowanie węzłów społecznościowych, uruchamianie dowolnego kodu w ramach przepływów pracy, łączenie się z usługami wewnętrznymi niedostępnymi z publicznej sieci internetowej oraz konfigurowanie każdego aspektu wdrożenia zgodnie z własnymi preferencjami. Plany chmurowe ograniczają wiele z tych możliwości.
Wymagania wstępne
Zanim zaczniesz, upewnij się, że masz:
- Serwer VPS z systemem Linux, na którym działa Ubuntu 22.04 lub 24.04 (zalecane). Sprawdź, czy Twój dostawca oferuje Ubuntu w wybranym przez Ciebie planie, ponieważ niektóre plany podstawowe oferują wyłącznie inne dystrybucje
- Użytkownik bez uprawnień roota, ale z uprawnieniami sudo
- Nazwa domeny skierowana na adres IP serwera VPS (np. n8n.twojadomena.com)
- Dostęp SSH do serwera
- Podstawowa znajomość wiersza poleceń systemu Linux
Wybór odpowiedniego serwera VPS
Wybrany serwer ma bezpośredni wpływ na wydajność n8n. Potrzebujesz co najmniej 1 vCPU, 2 GB pamięci RAM i 20 GB pamięci SSD. Dodatkowa pamięć RAM w porównaniu z minimalną instalacją opartą na SQLite jest potrzebna, ponieważ PostgreSQL, Nginx i n8n działają jednocześnie.
Platforma "wszystko w jednym" dla skutecznego SEO
Za każdym udanym biznesem stoi silna kampania SEO. Ale z niezliczonych narzędzi optymalizacji i technik tam do wyboru, może być trudno wiedzieć, gdzie zacząć. Cóż, nie obawiaj się więcej, ponieważ mam właśnie coś, co może pomóc. Przedstawiamy Ranktracker - platformę all-in-one dla skutecznego SEO.
W końcu otworzyliśmy rejestrację do Ranktrackera całkowicie za darmo!
Załóż darmowe kontoLub Zaloguj się używając swoich danych uwierzytelniających
W przypadku zespołów z wieloma użytkownikami, złożonymi wieloetapowymi przepływami pracy lub wysoką przepustowością webhooków zaleca się przejście na 2 vCPU i 4 GB pamięci RAM. Jeśli planujesz przechowywać długie logi wykonania, pojemność dyskowa powinna wynosić co najmniej 40 GB.
PetroSky oferuje plany VPS z dyskami NVMe w Paryżu i Montrealu, gdzie n8n jest dostępne jako aplikacja instalowana jednym kliknięciem przy finalizacji zamówienia: skrypt instalacyjny typu open source wdraża n8n za pomocą Docker Compose i automatycznie konfiguruje HTTPS poprzez Caddy oraz Let’s Encrypt. Niniejszy przewodnik opisuje procedurę ręczną, która działa u dowolnego dostawcy.
Wybierając dostawcę VPS, weź również pod uwagę lokalizację geograficzną. Umieść swoją instancję n8n w regionie najbliższym usługom, z którymi będzie się najczęściej łączyć — zmniejsza to opóźnienia API podczas wykonywania przepływów pracy.
Krok 1: Zaktualizuj serwer
Połącz się przez SSH z serwerem VPS i przed instalacją czegokolwiek przeprowadź pełną aktualizację systemu:
sudo apt update && sudo apt upgrade -y
Dzięki temu zyskasz pewność, że masz najnowsze poprawki bezpieczeństwa i że wszystkie biblioteki systemowe są aktualne przed dodaniem Docker i innego oprogramowania.
Jeśli została zastosowana aktualizacja jądra, uruchom ponownie system:
sudo reboot
Po ponownym połączeniu przez SSH utwórz dedykowanego użytkownika systemowego do uruchamiania n8n. Uruchamianie usług jako root stanowi zagrożenie dla bezpieczeństwa:
sudo adduser n8nuser
sudo usermod -aG sudo n8nuser
su - n8nuser
Krok 2: Zainstaluj Docker i Docker Compose
Oficjalną, zalecaną przez n8n metodą instalacji jest Docker. Docker izoluje n8n i jego zależności od reszty systemu, co sprawia, że aktualizacje i przywracanie poprzednich wersji są proste.
Zainstaluj Docker za pomocą oficjalnego skryptu:
curl -fsSL https://get.docker.com | sudo sh
W dokumentacji Docker zaznaczono, że skrypt ten nie jest zalecany w środowiskach produkcyjnych, ponieważ instaluje najnowszą wersję bez możliwości wyboru konkretnej wersji. Jeśli chcesz zablokować wersje Docker, skorzystaj zamiast tego z metody repozytorium apt opisanej w przewodniku instalacji Docker na Ubuntu (docs.docker.com/engine/install/ubuntu/).
Dodaj swojego użytkownika do grupy Docker, aby móc uruchamiać polecenia Docker bez użycia sudo:
sudo usermod -aG docker $USER
newgrp docker
Sprawdź, czy Docker działa poprawnie:
docker --version
docker compose version
Oba polecenia powinny zwrócić ciągi znaków określające wersję bez błędów. Jeśli nie znaleziono Docker Compose, zainstaluj go ręcznie:
sudo apt install docker-compose-plugin -y
Krok 3: Skonfiguruj PostgreSQL do pracy w środowisku produkcyjnym
Domyślnie n8n używa SQLite jako bazy danych. SQLite sprawdza się w przypadku użytku osobistego i prostych przepływów pracy, ale słabo radzi sobie z równoczesnym zapisem, co objawia się spowolnieniami i błędami typu „baza danych jest zablokowana”, gdy wiele przepływów pracy działa jednocześnie. W przypadku wdrożenia produkcyjnego właściwym wyborem jest PostgreSQL.
Platforma "wszystko w jednym" dla skutecznego SEO
Za każdym udanym biznesem stoi silna kampania SEO. Ale z niezliczonych narzędzi optymalizacji i technik tam do wyboru, może być trudno wiedzieć, gdzie zacząć. Cóż, nie obawiaj się więcej, ponieważ mam właśnie coś, co może pomóc. Przedstawiamy Ranktracker - platformę all-in-one dla skutecznego SEO.
W końcu otworzyliśmy rejestrację do Ranktrackera całkowicie za darmo!
Załóż darmowe kontoLub Zaloguj się używając swoich danych uwierzytelniających
Uruchom PostgreSQL w Dockerze wraz z n8n:
mkdir ~/n8n && cd ~/n8n
Utwórz plik środowiskowy, aby bezpiecznie przechowywać swoje klucze dostępu. Nigdy nie wpisuj haseł na stałe w pliku compose:
nano ~/n8n/.env
Dodaj poniższe wpisy, zastępując wartości zastępcze silnymi, unikalnymi hasłami:
POSTGRES_USER=n8n
POSTGRES_PASSWORD=twoje_silne_hasło_do_bazy_danych
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=twój_losowy_ciąg_32_znaków
Wygeneruj bezpieczny klucz szyfrujący za pomocą:
openssl rand -hex 16
Wynik tego polecenia użyj jako N8N_ENCRYPTION_KEY. Klucz ten szyfruje dane uwierzytelniające przechowywane w n8n — jeśli go utracisz, wszystkie zapisane dane uwierzytelniające staną się nie do odzyskania.
Krok 4: Utwórz plik Docker Compose dla n8n
Utwórz plik docker-compose.yml w katalogu n8n:
nano ~/n8n/docker-compose.yml
Wklej następującą konfigurację:
services:
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.yourdomain.com/
- GENERIC_TIMEZONE=Europe/London
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- EXECUTIONS_MODE=regular
- N8N_LOG_LEVEL=info
woluminy:
- n8n_data:/home/node/.n8n
zależy od:
postgres:
warunek: service_healthy
woluminy:
postgres_data:
n8n_data:
Uwagi dotyczące konfiguracji:
- Powiązanie portu 127.0.0.1:5678:5678 gwarantuje, że dostęp do n8n jest możliwy wyłącznie lokalnie. Nginx będzie obsługiwał cały ruch zewnętrzny — nigdy nie należy bezpośrednio udostępniać portu 5678 w Internecie.
- Użycie `depends_on` z warunkiem `service_healthy` gwarantuje, że n8n poczeka na pełną gotowość PostgreSQL przed uruchomieniem. Bez tego n8n zakończy się niepowodzeniem przy pierwszym uruchomieniu, jeśli baza danych nie będzie jeszcze akceptować połączeń.
- Ustawienie `N8N_LOG_LEVEL=info` zapewnia przydatne logi operacyjne bez przeciążania przestrzeni dyskowej, jak ma to miejsce w przypadku trybu debugowania.
Krok 5: Zainstaluj i skonfiguruj Nginx
Nginx będzie pełnił rolę odwrotnego proxy, przekazując ruch HTTPS z portu 443 do kontenera n8n na porcie 5678. Obsługuje on również zakończenie połączenia SSL, co oznacza, że sam n8n nie musi zarządzać certyfikatami.
sudo apt install nginx -y
Usuń domyślną witrynę i utwórz nowy blok serwera dla n8n:
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/n8n
Wklej następujący fragment:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name n8n.twojadomena.com;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
chunked_transfer_encoding on;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 90s;
client_max_body_size 50m;
}
}
Blok map na początku poprawnie obsługuje nagłówki aktualizacji WebSocket. n8n wykorzystuje WebSockets do aktualizacji w czasie rzeczywistym w edytorze, więc ta konfiguracja jest ważna — bez niej edytor wizualny nie będzie działał poprawnie.
Dyrektywa `client_max_body_size 50m` umożliwia przepływom pracy odbieranie dużych ładunków webhooków. Domyślny limit Nginx wynosi 1 MB, co jest zbyt małą wartością dla przepływów pracy przetwarzających przesyłanie plików lub duże odpowiedzi JSON.
Włącz tę konfigurację i przetestuj ją:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Krok 6: Wystaw certyfikat SSL za pomocą Let’s Encrypt
Zainstaluj Certbot i wtyczkę Nginx:
sudo apt install certbot python3-certbot-nginx -y
Złóż wniosek o certyfikat dla swojej domeny:
sudo certbot --nginx -d n8n.twojadomena.com
Postępuj zgodnie z wyświetlanymi instrukcjami. Gdy pojawi się pytanie, czy przekierować ruch HTTP na HTTPS, wybierz opcję „Tak” (opcja 2). Certbot automatycznie zaktualizuje konfigurację serwera Nginx, aby obsłużyć to przekierowanie, oraz zainstaluje pełny łańcuch certyfikatów.
Sprawdź, czy automatyczne odnawianie jest poprawnie skonfigurowane:
sudo certbot renew --dry-run
Certbot instaluje timer systemd, który automatycznie odnawia certyfikaty co 12 godzin. Certyfikaty są odnawiane, gdy pozostało mniej niż 30 dni do ich wygaśnięcia. Nigdy nie powinno być konieczne ręczne odnawianie.
Krok 7: Uruchom n8n
Wróć do katalogu n8n i uruchom wszystkie usługi:
cd ~/n8n
docker compose up -d
Docker pobierze obrazy PostgreSQL i n8n, utworzy woluminy, najpierw uruchomi PostgreSQL, poczeka na pomyślny wynik testu sprawności, a następnie uruchomi n8n. Proces ten trwa 1–3 minuty przy pierwszym uruchomieniu.
Sprawdź, czy oba kontenery działają:
docker compose ps
Powinieneś zobaczyć zarówno postgres, jak i n8n na liście ze statusem „Up”. Jeśli n8n wyświetla status „Restarting”, sprawdź logi:
docker compose logs n8n --tail=50
Gdy oba kontenery będą działać poprawnie, otwórz przeglądarkę i przejdź do strony https://n8n.yourdomain.com. Zostaniesz poproszony o utworzenie konta właściciela przy użyciu adresu e-mail i hasła. Konto to ma pełny dostęp administracyjny do Twojej instancji n8n.
Krok 8: Skonfiguruj n8n tak, aby uruchamiał się podczas startu systemu
Dyrektywa „restart: always” w pliku docker-compose.yml gwarantuje, że wszystkie kontenery uruchamiają się automatycznie po awarii lub ponownym uruchomieniu serwera.
Sprawdź to, restartując serwer:
sudo reboot
Po ponownym połączeniu się przez SSH sprawdź, czy n8n uruchomił się automatycznie:
docker compose -f ~/n8n/docker-compose.yml ps
Oba kontenery powinny być widoczne jako uruchomione bez konieczności ręcznej interwencji.
Krok 9: Skonfiguruj automatyczne kopie zapasowe
Dane n8n — przepływy pracy, dane uwierzytelniające i historia wykonania — znajdują się w dwóch miejscach: w bazie danych PostgreSQL oraz w woluminie Docker n8n_data (w którym przechowywane są klucze szyfrujące i część konfiguracji). Należy regularnie tworzyć kopie zapasowe obu tych miejsc.
Utwórz skrypt tworzenia kopii zapasowej:
nano ~/n8n/backup.sh
Wklej następujący tekst:
#!/bin/bash
BACKUP_DIR="/home/n8nuser/backups"
DATE=$(date +%Y-%m-%d_%H-%M)
LOG_FILE="$BACKUP_DIR/backup.log"
# Najpierw upewnij się, że katalog kopii zapasowej istnieje
mkdir -p "$BACKUP_DIR"
# Zrób zrzut bazy danych PostgreSQL
DUMP_FILE="$BACKUP_DIR/n8n_db_$DATE.sql"
docker compose -f /home/n8nuser/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n > "$DUMP_FILE"
# Sprawdź, czy zrzut zakończył się powodzeniem i nie jest pusty
if [ $? -ne 0 ] || [ ! -s "$DUMP_FILE" ]; then
echo "BŁĄD: Nie udało się wykonać kopii zapasowej bazy danych w dniu $DATE" >> "$LOG_FILE"
rm -f "$DUMP_FILE"
exit 1
fi
# Utwórz kopię zapasową klucza szyfrującego i zmiennych środowiskowych
cp /home/n8nuser/n8n/.env "$BACKUP_DIR/n8n_env_$DATE.bak"
# Utwórz kopię zapasową woluminu n8n_data (konfiguracja instancji i zainstalowane węzły społecznościowe)
docker run --rm -v n8n_n8n_data:/data -v "$BACKUP_DIR":/backup alpine \
tar czf /backup/n8n_data_$DATE.tar.gz -C /data .
# Kompresja zrzutu bazy danych
gzip "$DUMP_FILE"
# Zachowaj tylko kopie zapasowe z ostatnich 7 dni
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.bak" -mtime +7 -delete
find "$BACKUP_DIR" -name "n8n_data_*.tar.gz" -mtime +7 -delete
echo "Kopia zapasowa zakończona: n8n_db_$DATE.sql.gz" >> "$LOG_FILE"
Nazwa woluminu n8n_n8n_data pochodzi z Docker Compose, który dodaje przedrostek nazwy folderu projektu (n8n) do nazwy woluminu. Sprawdź swoją nazwę za pomocą polecenia docker volume ls.
Nadaj skryptowi uprawnienia do wykonywania i zaplanuj jego uruchamianie za pomocą crona:
chmod +x ~/n8n/backup.sh
crontab -e
Dodaj ten wiersz, aby kopia zapasowa była uruchamiana codziennie o 2:00 w nocy:
0 2 * * * /home/n8nuser/n8n/backup.sh >> /home/n8nuser/backups/backup.log 2>&1
Aby zapewnić redundancję poza lokalizacją, rozważ zsynchronizowanie katalogu kopii zapasowych z dostawcą pamięci obiektowej zgodnej z S3 za pomocą rclone lub aws s3 sync.
Krok 10: Włącz podstawowe zabezpieczenia
Skonfiguruj zaporę sieciową
Zainstaluj UFW i zezwól tylko na te porty, których potrzebuje serwer:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Sprawdź, czy reguły są aktywne:
sudo ufw status verbose
Powinieneś zobaczyć, że porty 22 (SSH), 80 (HTTP) i 443 (HTTPS) są dozwolone. Jedno zastrzeżenie: Docker tworzy własne reguły zapory i omija UFW w przypadku opublikowanych portów kontenerów. Port 5678 pozostaje prywatny, ponieważ plik compose wiąże go z adresem 127.0.0.1, a nie z powodu UFW, więc nigdy nie zmieniaj tego powiązania na 0.0.0.0.
Wyłącz uwierzytelnianie hasłem dla SSH
Jeśli korzystasz z kluczy SSH (a powinieneś), całkowicie wyłącz logowanie do SSH za pomocą hasła. Najpierw upewnij się, że konto n8nuser może zalogować się za pomocą Twojego klucza. Na komputerze lokalnym uruchom:
ssh-copy-id n8nuser@adres_IP_serwera
Następnie edytuj konfigurację serwera SSH:
sudo nano /etc/ssh/sshd_config
Ustaw następujące wartości:
PasswordAuthentication no
PermitRootLogin no
sudo systemctl restart ssh
W wielu obrazach chmury Ubuntu plik w katalogu /etc/ssh/sshd_config.d/ (często 50-cloud-init.conf) ustawia PasswordAuthentication na yes i to właśnie ta wartość ma pierwszeństwo, ponieważ sshd stosuje pierwszą odczytaną wartość. Sprawdź, które ustawienie faktycznie obowiązuje:
sudo sshd -T | grep -i passwordauthentication
Powinno wyświetlić się „passwordauthentication no”. Jeśli tak nie jest, zmień wartość w pliku nadpisującym i ponownie uruchom SSH.
Nie zamykaj bieżącej sesji SSH, dopóki nie upewnisz się, że logowanie za pomocą klucza działa w nowym oknie terminala.
Ograniczanie przepustowości strony logowania n8n
Dodaj ograniczenie szybkości, aby spowolnić ataki metodą brute force na punkt końcowy logowania n8n.
Platforma "wszystko w jednym" dla skutecznego SEO
Za każdym udanym biznesem stoi silna kampania SEO. Ale z niezliczonych narzędzi optymalizacji i technik tam do wyboru, może być trudno wiedzieć, gdzie zacząć. Cóż, nie obawiaj się więcej, ponieważ mam właśnie coś, co może pomóc. Przedstawiamy Ranktracker - platformę all-in-one dla skutecznego SEO.
W końcu otworzyliśmy rejestrację do Ranktrackera całkowicie za darmo!
Załóż darmowe kontoLub Zaloguj się używając swoich danych uwierzytelniających
**Ważne: **Dyrektywa `limit_req_zone` musi znajdować się wewnątrz bloku `http {}` w głównej konfiguracji Nginx — a nie wewnątrz bloku serwera. Otwórz główną konfigurację:
sudo nano /etc/nginx/nginx.conf
Dodaj ten wiersz wewnątrz istniejącego bloku http {}:
http {
...
limit_req_zone $binary_remote_addr zone=n8n_login:10m rate=5r/m;
...
}
Następnie w konfiguracji serwisu n8n (/etc/nginx/sites-available/n8n) dodaj ten blok `location` wewnątrz bloku `server`, który nasłuchuje na porcie 443 (utworzonym przez Certbot w kroku 6), obok istniejącej lokalizacji `/`. Nginx nie przenosi nagłówków proxy z lokalizacji `/`, więc są one tutaj powtórzone:
location /rest/login {
limit_req zone=n8n_login burst=5 nodelay;
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Aby zastosować zmiany, należy ponownie uruchomić Nginx:
sudo nginx -t && sudo systemctl reload nginx
Ogranicza to liczbę prób logowania z każdego adresu IP do około 5 na minutę, z niewielkim marginesem na chwilowy wzrost aktywności.
Aktualizuj n8n i PostgreSQL
Regularnie pobieraj najnowsze obrazy i uruchamiaj je ponownie:
cd ~/n8n
docker compose pull
docker compose up -d
Docker pobierze najnowsze obrazy n8nio/n8n i postgres oraz zrestartuje tylko te kontenery, dla których dostępna jest nowsza wersja.
W środowisku produkcyjnym warto rozważyć przypisanie obrazu n8n do konkretnego tagu wersji (docker.n8n.io/n8nio/n8n:<wersja>, zaczerpniętego z informacji o wydaniu n8n) i celowe aktualizowanie, tak aby rutynowe pobieranie nigdy nie powodowało przejścia na nowszą wersję główną, zanim zapoznasz się z dziennikiem zmian.
Rozwiązywanie typowych problemów
Kontener n8n ciągle się restartuje
Sprawdź logi kontenera natychmiast po rozpoczęciu pętli restartów:
docker compose logs n8n --tail=100
Typowe przyczyny:
- Błąd połączenia z bazą danych: Upewnij się, że PostgreSQL działa poprawnie, korzystając z polecenia `docker compose ps`. Sprawdź, czy wartość `POSTGRES_PASSWORD` w pliku `.env` jest zgodna z hasłem używanym podczas inicjalizacji bazy danych.
- Brakujący lub zmieniony klucz szyfrujący: Jeśli zmienna N8N_ENCRYPTION_KEY nie jest ustawiona lub została zmieniona po pierwszym uruchomieniu, n8n nie będzie w stanie odszyfrować zapisanych danych uwierzytelniających i ulegnie awarii.
- Niewystarczająca ilość pamięci RAM: PostgreSQL i n8n łącznie mogą zużywać 1–1,5 GB pamięci RAM. Sprawdź dostępną pamięć za pomocą polecenia `free -h`.
Webhooki nie działają
Aby webhooki działały, n8n musi być dostępny z Internetu w Twojej domenie. Sprawdź:
- Rekord DNS typu A Twojej domeny wskazuje na adres IP Twojego serwera VPS: dig n8n.twojadomena.com
- Nginx działa: sudo systemctl status nginx
- Port 443 jest otwarty: sudo ufw status
- Zmienna środowiskowa WEBHOOK_URL dokładnie odpowiada Twojej domenie publicznej, łącznie z końcowym ukośnikiem
Edytor n8n nie ładuje się poprawnie
Jeśli edytor wizualny ładuje się, ale wyświetla puste pole robocze przepływu pracy lub aktualizacje w czasie rzeczywistym przestają działać, oznacza to, że połączenie WebSocket nie działa. Sprawdź, czy w konfiguracji Nginx znajduje się blok map $http_upgrade oraz czy w linii proxy_set_header Connection używasz zmiennej $connection_upgrade — a nie dosłownego ciągu znaków „upgrade”.
Błędy certyfikatu SSL
Jeśli Certbot zakończy się niepowodzeniem z powodu błędu walidacji domeny, sprawdź, czy port 80 jest dostępny z Internetu:
curl -I http://n8n.yourdomain.com
Jeśli żądanie przekroczy limit czasu, zapora sieciowa dostawcy serwera VPS może blokować port 80. Oprócz UFW sprawdź również reguły zapory w konsoli chmury.
Wnioski
Samodzielne hostowanie n8n na serwerze VPS z systemem Linux zapewnia gotową do użycia w środowisku produkcyjnym platformę do automatyzacji przepływu pracy bez ograniczeń wykonawczych, z pełną prywatnością danych oraz elastycznością pozwalającą na uruchamianie dowolnych integracji. Konfiguracja opisana w tym przewodniku — Docker, PostgreSQL, odwrotny serwer proxy Nginx, certyfikat SSL Let’s Encrypt, automatyczne kopie zapasowe oraz wzmocnienie zabezpieczeń — to ten sam stos używany w środowiskach produkcyjnych, który zapewnia stabilną i bezpieczną podstawę do dalszego rozwoju.
W przeciwieństwie do minimalnej instalacji za pomocą polecenia `docker run`, ta konfiguracja została zaprojektowana tak, aby przetrwać restart serwera, obsługiwać równoczesne wykonywanie przepływów pracy oraz płynnie odzyskiwać działanie po awariach. Twoje dane uwierzytelniające są szyfrowane, co noc tworzone są kopie zapasowe danych, a punkt końcowy logowania jest chroniony przed atakami brute force poprzez ograniczenie częstotliwości prób.
Gdy instancja już działa, zapoznaj się z wbudowanymi w n8n węzłami do obsługi baz danych, interfejsów API, webhooków i integracji z AI, aby natychmiast rozpocząć automatyzację swoich przepływów pracy. Samodzielnie hostowane forum społecznościowe pod adresem community.n8n.io jest również doskonałym źródłem pomysłów na przepływy pracy, rozwiązywania problemów z węzłami oraz wskazówek dotyczących wdrażania.

