
Szybki sposób na automatyczny backup n8n w chmurze
Jeżeli masz swoje instalacje n8n – nieważne, czy to chmura, czy lokalny Docker – to słuchaj uważnie. Robienie kopii zapasowych to nie jest opcja, to instynkt przetrwania. Bardzo często zdarza się, że przy aktualizacji online albo nieprawidłowym zamknięciu kontenera tracisz wszystko. Niezależnie od tego, czy to projekt produkcyjny, czy piaskownica, szkoda czasu, który poświęciłeś na budowanie flow. Jeśli jeszcze nie straciłeś danych, to gratuluję – wszystko przed Tobą. Ale uwierz mi, taki widok potrafi doprowadzić do zawału.
Flow do backupu to absolutnie pierwszy proces, jaki powinieneś stawiać na nowej instalacji n8n. Bez dyskusji.
Poniżej opisuję, jak to działa u mnie. Zero lania wody, same fakty. To instrukcja dla kogoś, kto zna n8n na poziomie średniozaawansowanym, ale tłumaczę to jak koledze, który dopiero zaczyna i nie chce obudzić się z ręką w nocniku.
Zmuś n8n do pilnowania własnego tyłka na Google Drive
Cel jest prosty: automatycznie raz w miesiącu (lub na żądanie) workflow robi backup wszystkich aktywnych procesów i wysyła je na Google Drive. Nazwa pliku to backup_{ID}_{nazwa-workflow}.json. Dlaczego tak? ID gwarantuje unikalność, a nazwa pozwala Ci się połapać w tym śmietniku plików.
Logika działania jest pancerna: jeśli plik już jest na dysku, system go usuwa i wrzuca świeżą wersję. Jeśli go nie ma – po prostu tworzy nowy. Wszystko dzieje się powoli, po jednym workflow na raz z 3-sekundowymi przerwami, żeby nie dostać bana od Google za zbyt agresywne API.
Instrukcja budowy: Krok po kroku do świętego spokoju
1. Fundamenty i wyzwalacze
Zacznij od stworzenia nowego workflow o nazwie Backup aktywnych workflowów → Google Drive. Musisz mieć dwa sposoby na jego start:
- Manual Trigger: Żebyś mógł odpalić kopię "teraz", bo masz złe przeczucia.
- Schedule Trigger: Twój cyfrowy dozorca. Ustaw go na
Cron Expression:0 3 1 * *. To oznacza 1. dnia każdego miesiąca o 3:00 rano, kiedy normalni ludzie śpią.
2. Pobieranie danych i pętla
Dodaj węzeł n8n. Ustaw Resource na Workflow, Operation na Get Many i koniecznie wyfiltruj tylko aktywne (Active Workflows = true). Nie ma sensu trzymać kopii śmieci, których nie używasz.
Następnie wrzuć Split In Batches z rozmiarem 1. To klucz do stabilności. Nie pchaj wszystkiego naraz, bo system się zadławi.
3. Przygotowanie danych (Code Node)
Musisz sformatować dane tak, żeby Google Drive wiedział, co z nimi zrobić. Użyj poniższego kodu:
const wf = $input.item.json;
// Nazwa zawiera ID (niezmienne) + nazwę (czytelna)
const safeName = wf.name.replace(/[/:*?"<>|]/g, -).trim();
const fileName = `backup_${wf.id}_${safeName}.json`;
return [{
json: {
workflowId: wf.id,
workflowName: wf.name,
fileName: fileName,
jsonContent: JSON.stringify(wf, null, 2)
}
}];
4. Operacje na Google Drive
Teraz robi się ciekawiej. Użyj węzła Google Drive (Search), aby sprawdzić, czy plik już istnieje. W Query String wpisz:
={{ "name='" + $json.fileName + "' and 'TU_WSTAW_ID_FOLDERU' in parents and trashed=false" }}
Ważne: Po wyszukiwaniu musisz dodać kolejny Code Node, który "wyprostuje" wynik. Jeśli Google nic nie znajdzie, n8n potrafi zatrzymać cały flow. Ten mały skrypt zapewni, że proces pójdzie dalej niezależnie od wyniku:
const results = $input.all();
const prepared = $('Przygotuj dane backupu').item.json;
const found = results.length > 0 && results[0].json && results[0].json.id;
return [{
json: {
fileExists: found ? true : false,
driveFileId: found ? results[0].json.id : '',
fileName: prepared.fileName,
workflowId: prepared.workflowId,
workflowName: prepared.workflowName,
jsonContent: prepared.jsonContent
}
}];
5. Logika IF i finał
Dodaj węzeł IF sprawdzający czy fileExists jest true. Rozgałęź to na dwie drogi:
- Jeśli istnieje (TRUE): Najpierw węzeł Google Drive
Delete(usuń stary plik podriveFileId), a potemCreate from Text(zapisz nowy). - Jeśli nie istnieje (FALSE): Od razu
Create from Text.
Na końcu każdej ścieżki dodaj Wait (3 sekundy) przed powrotem do pętli. To Twoja polisa ubezpieczeniowa przeciwko limitom API.
Parametry techniczne setupu
| Element | Ustawienie / Wymaganie |
|---|---|
| Częstotliwość | 1. dzień miesiąca, 03:00 |
| Metoda autoryzacji | OAuth2 (Google) + n8n API Key |
| Format pliku | JSON (Indented 2 spaces) |
| Bezpieczeństwo | Pauza 3s między operacjami |
Bonus dla leniwych (Prompt do Claude)
Jeśli nie chcesz klikać tego ręcznie, wykorzystaj potęgę AI. Jeżeli czytałeś mój wpis o konfiguracji n8n-MCP z Claude, to poniższy prompt wygeneruje Ci gotowy plik JSON do zaimportowania:
Stwórz czysty workflow n8n do backupu wszystkich aktywnych workflowów na Google Drive (dla lokalnego n8n w Dockerze).
Logika dokładnie taka sama:
Triggery: Manual Trigger + Schedule Trigger (cron: 0 3 1 * *)
Pobierz tylko aktywne workflowy
Przetwarzaj po jednym (SplitInBatches = 1)
Dla każdego workflowu:
Przygotuj plik backup_{workflowId}_{bezpieczna_nazwa}.json
Wyszukaj czy istnieje na Google Drive w folderze backupów
Jeśli istnieje → usuń stary + zapisz nowy
Jeśli nie istnieje → zapisz nowy
Po każdym zapisie dodaj Wait 3 sekundy
Dodaj Sticky Note z krótkim opisem po polsku
Użyj placeholder TU_WSTAW_ID_FOLDERU dla folderu na Drive.
Zwróć tylko gotowy JSON w bloku json.