Zpět na domů

Migrace n8n na Traefik 3.3 a Postgres 16: technická příručka

Příručka k migraci n8n z Traefik 1.x a Postgres 11 na aktuální verze. Podrobné řešení problémů s klíčem šifrování, nekompatibilitou Docker API a právy v Postgres 16. Zachování dat a účtů bez downtime.

Jak převést n8n na Traefik 3.3 a Postgres 16 bez ztráty dat
Advertisement 728x90

# Bezpečná migrace n8n: aktualizace Traefik na 3.3 a Postgres na 16 bez ztráty dat

Migrace n8n z zastaralých verzí Traefik a Postgres na moderní stack vyžaduje řešení kritických problémů kompatibility. V tomto článku najdete technický návod na zachování dat a účtů při přechodu z Traefik 1.x a Postgres 11 na aktuální verze.

Příprava: záloha a klíč šifrování

Klíčovým krokem migrace je správný export dat a uchování klíče šifrování. Bez něj se přihlašovací údaje (Credentials) po přenosu stanou nepřístupnými. Pro n8n je to kritické: systém používá symetrické šifrování pro ukládání tokenů a hesel.

Proveďte dvě povinné akce:

Google AdInline article slot
  • Vytvořte dump databáze ve formátu custom pro správné obnovení:
docker exec -t postgres_db pg_dump -U root -d n8n -Fc > /tmp/n8n_backup.dump
docker cp postgres_db:/tmp/n8n_backup.dump ./n8n_backup.dump
  • Získejte aktuální klíč šifrování z konfigurace. Zdroj může být dvojí:

- Proměnná N8N_ENCRYPTION_KEY v docker-compose.yml

- Parametr encryptionKey v souboru ~/.n8n/config

Přehlížení tohoto kroku vede k chybě Needs first setup po spuštění. Systém databázi rozpozná, ale nebude schopen dešifrovat uložené přihlašovací údaje.

Google AdInline article slot

Nasazení stacku: past Traefik 3.3

Při nasazování Traefik 3.3 vzniká kritický problém nekompatibility s Docker API. Router ve výchozím nastavení používá zastaralou verzi API (1.24), zatímco moderní docker démony vyžadují verzi 1.41 a vyšší. To se projevuje chybami 404 při pokusu o detekci kontejnerů.

Řešení spočívá v nuceném nastavení verze API v proměnných prostředí:

environment:
  - DOCKER_API_VERSION=1.41

Tato změna nutí Traefik správně komunikovat s Docker Engine. Bez ní router nevidí kontejnery n8n a Postgres, což znemožňuje automatické nastavení tras přes Docker Provider.

Google AdInline article slot

Všimněte si síťové izolace: všechny služby musí být ve společné uživatelské síti (n8n_net). To zaručuje stabilní komunikaci mezi kontejnery bez konfliktů směrování. Příklad správné konfigurace:

networks:
  n8n_net:
    name: n8n_net

services:
  traefik:
    networks:
      - n8n_net
  n8n:
    networks:
      - n8n_net
  postgres_db:
    networks:
      - n8n_net

Obnovení databáze v Postgres 16: řešení problémů s právy

Postgres 16 přináší změny v výchozí bezpečnostní politice. Schéma public nyní má omezená práva, což způsobuje chybu permission denied for schema public při spuštění n8n.

Po obnovení dumpu proveďte:

docker cp n8n_backup.dump postgres_db:/tmp/
docker exec -i postgres_db pg_restore -U root -d n8n -1 /tmp/n8n_backup.dump

Poté přiřaďte vlastníkovi databáze plná práva na schéma:

docker exec -it postgres_db psql -U root -d n8n -c "GRANT ALL ON SCHEMA public TO root;"

Tento krok je nezbytný, protože n8n aktivně používá schéma public pro ukládání metadat. Přeskočení vede k cyklickému pádu kontejneru n8n.

Oprava Credentials: vyhýbáme se chybě "Needs first setup"

I při správném předání N8N_ENCRYPTION_KEY přes proměnné prostředí může n8n klíč ignorovat. Důvod je konflikt mezi proměnnou prostředí a lokálním konfiguračním souborem. Při prvním spuštění systém generuje nový soubor ~/.n8n/config, který přepíše klíč z proměnných.

Řešení:

  • Smažte konfigurační soubor uvnitř kontejneru:
docker exec -it n8n rm /home/node/.n8n/config
  • Restartujte službu:
docker compose restart n8n

Tento krok nutí n8n používat klíč z proměnných prostředí místo lokálního souboru. Ujistěte se, že v docker-compose.yml je uvedena původní proměnná N8N_ENCRYPTION_KEY.

Další nuance: pozadí procesy a SQLite

Při migraci mohou vzniknout problémy s úlohy na pozadí používajícími SQLite (např. Telegram parsery na Telethon). Po přenosu se objeví chyba sqlite3.OperationalError: database is locked.

Důvod jsou zbytkové soubory logování (.session-journal, .session-wal), které blokují databázi. Řešení:

  • Nainstalujte utilitu psmisc:
apt install psmisc -y
  • Nuceně ukončete procesy držící zámek:
fuser -k -v /root/parser_folder/session_name.session
  • Smažte dočasné soubory:
rm -f /root/parser_folder/session_name.session-journal
rm -f /root/parser_folder/session_name.session-wal
  • Restartujte službu:
systemctl restart jméno_služby.service

Důležité: mazání logů neovlivní hlavní soubor relace. Autorizace v Telegram zůstane zachována.

Co je důležité

  • Klíč šifrování je povinný — bez původního N8N_ENCRYPTION_KEY se všechny Credentials stanou nepřístupnými.
  • Traefik vyžaduje explicitní uvedení API — parametr DOCKER_API_VERSION=1.41 je kritický pro detekci kontejnerů.
  • Postgres 16 omezuje práva — nutné ručně udělit GRANT ALL ON SCHEMA public.
  • Lokální konfigurace n8n konfliktuje — smazání ~/.n8n/config řeší problém s klíčem šifrování.
  • SQLite zámky vyžadují čištění — smazání souborů .journal a .wal obnoví fungování procesů na pozadí.

Po provedení všech kroků se n8n spustí se zachováním všech pracovních procesů, webhooků a přihlašovacích údajů. Migrace mezi hlavními verzemi softwaru vždy nese rizika, ale dodržení těchto postupů minimalizuje výpadky a ztráty dat.

— Editorial Team

Advertisement 728x90

Číst dál