Du märker först att säkerhetskopiorna är trasiga när du behöver dem. Och med Gitea blir ”vi exporterar senare” snabbt till veckor av ospårade ändringar i arbetsflöden, saknade filer och panik när något går fel.
Den här Gitea-automationen för säkerhetskopiering träffar DevOps– och plattformsteam först, men byråägare som kör klientautomationer och driftansvariga som underhåller interna arbetsflöden känner samma stress. Resultatet är enkelt: versionshanterade säkerhetskopior som du kan återställa snabbt, med en historik du faktiskt kan lita på.
Nedan ser du hur arbetsflödet hämtar varje n8n-arbetsflöde enligt ett schema, konverterar det till Git-vänliga filer och sedan skapar eller uppdaterar dem i ett Gitea-repo endast när något har ändrats.
Så fungerar den här automationslösningen
Se hur detta löser problemet:
n8n Workflow Template: Gitea + Git: versionshanterade backuper du litar på
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Globals", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/n8n.svg' width='40' height='40' /></div><br/>n8n"]
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "SetDataUpdateNode", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "SetDataCreateNode", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Base64EncodeUpdate"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Base64EncodeCreate"]
n7@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Exist", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Changed", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>PutGitea"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>GetGitea"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>PostGitea"]
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "ForEach", pos: "b", h: 48 }
n1 --> n12
n7 --> n3
n7 --> n4
n8 --> n9
n8 --> n12
n12 --> n10
n0 --> n1
n10 --> n7
n9 --> n12
n11 --> n12
n2 --> n0
n4 --> n6
n3 --> n5
n6 --> n11
n5 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2 trigger
class n7,n8 decision
class n9,n10,n11 api
class n5,n6 code
classDef customIcon fill:none,stroke:none
class n1,n5,n6,n9,n10,n11 customIcon
Utmaningen: säkerhetskopior som inte går att återställa utan strul
Manuella exporter känns ”okej” tills de inte gör det. Någon glömmer att exportera efter en snabb fix, enda kopian ligger på en laptop, eller så hamnar den exporterade JSON:en på en delad disk med namn som workflow-final-v3-really-final.json. Sedan försöker du återskapa vad som ändrades, när det ändrades och vilken version som faktiskt körde i produktion. Det är ingen backupstrategi. Det är önsketänkande – och det skapar massor av dold risk för alla team som är beroende av n8n-automationer för att leverera.
Det eskalerar snabbt. Här är var det faller ihop.
- Arbetsflödesändringar sker i små ryck, så folk glömmer att exportera vid de tillfällen som betyder mest.
- Exporter ger dig ingen strukturerad, sökbar historik, vilket gör att återställningar blir rena gissningar.
- När ett arbetsflöde försvinner eller skrivs över betyder ”återställ” ofta att bygga om från minnet och Slack-skärmdumpar.
- Team undviker refaktorering eftersom de inte är trygga med att de kan backa säkert om något skapar fel.
Lösningen: schemalagda, versionshanterade arbetsflödesbackuper i Gitea
Det här arbetsflödet gör din n8n-instans till ett system som säkerhetskopierar sig självt. Enligt ett schema du styr hämtar det varje arbetsflöde via n8n API, loopar igenom dem ett i taget och sparar varje arbetsflöde som en fil i ett Git-repo som hostas i Gitea. För varje arbetsflöde kontrollerar det först om en fil redan finns i repot. Om den finns jämför arbetsflödet innehållet och commitar bara en uppdatering när något faktiskt har ändrats. Om den inte finns skapar det filen och commitar den. Resultatet är ett repo som fungerar både som revisionsspår och återställningspunkt – utan att någon behöver komma ihåg att göra ”en sista export”.
Arbetsflödet startar med en Scheduled Backup Trigger. Därefter hämtar det din arbetsflödeslista, delar upp objekten i hanterbara batchar och kontrollerar varje arbetsflödes motsvarande fil i ditt Gitea-repo via HTTP-anrop. Till sist skapar eller uppdaterar det repofiler (återigen via HTTP) så att Git-historiken förblir ren och meningsfull.
Vad som förändras: före vs. efter
| Vad detta eliminerar | Effekten du kommer att se |
|---|---|
|
|
Effekt i verkligheten
Säg att du underhåller 30 aktiva n8n-arbetsflöden och gör en ”veckovis export”. Även om export, namngivning och uppladdning av varje arbetsflöde bara tar cirka 2 minuter är det ungefär en timmes tråkjobb varje vecka – plus den helt verkliga risken att du missar just det arbetsflöde någon hotfixade på tisdagen. Med den här automationslösningen ställer du in det en gång och låter den schemalagda körningen hantera hela inventeringen. I praktiken lägger du cirka 5 minuter i veckan på att kontrollera repohistoriken, inte på exporter.
Krav
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Gitea för att lagra säkerhetskopior i ett Git-repo
- n8n API-åtkomst för att hämta arbetsflöden via API
- Gitea Personal Access Token (hämta den i dina användarinställningar i Gitea)
Svårighetsgrad: Nybörjare. Du klistrar in en token, redigerar tre variabler och kör ett manuellt test.
Behöver du hjälp att implementera detta? Prata med en automationsexpert (gratis 15-minuters konsultation).
Arbetsflödets flöde
Schemalagd backuprunda. Arbetsflödet startar på det intervall du väljer (dagligen, veckovis, vad som passar din risknivå). Inga mänskliga påminnelser behövs.
Arbetsflödesinventeringen hämtas från n8n. Det anropar ditt n8n API för att hämta alla arbetsflöden och använder sedan batching så att det kan bearbeta dem stabilt även när biblioteket växer.
Varje arbetsflöde kontrolleras mot repot. För varje arbetsflöde hämtar det matchande fil från ditt Gitea-repo via HTTP-anrop. Om filen finns förbereder det en uppdateringspayload; om den inte finns förbereder det en create-payload.
Endast verkliga ändringar commit:as. Arbetsflödet kodar arbetsflödesdata till ett Git-vänligt format, jämför aktuellt innehåll med det som redan är lagrat och skapar eller uppdaterar sedan filen i Gitea. Den här ”detektera ändring”-grinden är viktig eftersom den förhindrar brusiga commits.
Du kan enkelt justera schemaintervallet så att det matchar hur ofta dina arbetsflöden ändras, utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den schemalagda triggern
Det här arbetsflödet körs enligt ett återkommande schema för att säkerhetskopiera alla arbetsflöden.
- Lägg till noden Scheduled Backup Trigger som trigger.
- Ställ in schemaregeln så att den körs var 45:e minut genom att konfigurera interval → minutes med minutesInterval satt till
45. - Behåll den fästa anteckningen Flowpast Branding om ni vill bevara den inbäddade dokumentationsreferensen.
Steg 2: definiera repository-inställningar och anslut n8n
Ange repository-variablerna och anslut till er n8n-instans för att hämta arbetsflöden.
- I Global Variables lägger ni till strängvärden för repo.url, repo.name och repo.owner.
- Sätt repo.url till
https://git.vdm.dev, repo.name tillworkflowsoch repo.owner tilln8n(anpassa efter ert repository). - Öppna Retrieve Workflows och anslut inloggningsuppgifter. Credential Required: anslut era n8nApi-inloggningsuppgifter.
- Bekräfta att exekveringsflödet startar från Scheduled Backup Trigger → Global Variables → Retrieve Workflows.
Steg 3: iterera genom arbetsflöden och hämta repo-filer
Varje arbetsflöde bearbetas i batchar och kontrolleras mot repositoryt för att se om det finns.
- Använd Iterate Workflows för att bearbeta varje arbetsflödesobjekt; lämna options tomt för standardbeteende.
- I Fetch Repo File ställer ni in URL till
={{ $('Global Variables').item.json.repo.url }}/api/v1/repos/{{ encodeURIComponent($('Global Variables').item.json.repo.owner) }}/{{ encodeURIComponent($('Global Variables').item.json.repo.name) }}/contents/{{ encodeURIComponent($json.name) }}.json. - Aktivera authentication som
genericCredentialTypeoch sätt genericAuthType tillhttpHeaderAuth. - Credential Required: anslut era httpHeaderAuth-inloggningsuppgifter i Fetch Repo File.
Steg 4: routa mellan uppdatera- och skapa-spår
Filer uppdateras eller skapas beroende på om de redan finns i repositoryt.
- I Check File Presence behåller ni villkoret som kontrollerar
={{ $json.error }}med operatorn notExists för att identifiera saknade filer. - När filen finns, routa till Map Update Item och sätt item till
={{ $node["Iterate Workflows"].json }}. - När filen saknas, routa till Map Create Item och sätt item till
={{ $node["Iterate Workflows"].json }}.
Steg 5: koda och uppdatera befintliga repo-filer
Befintliga filer base64-kodas och uppdateras endast om innehållet har ändrats.
- I Encode Update Payload behåller ni language satt till
pythonoch bevarar base64-kodningsskriptet. - I Detect Content Change jämför ni
={{ $json.item }}med={{ $('Fetch Repo File').item.json.content }}med notEquals. - Konfigurera Update Repo File med method satt till
PUToch URL satt till={{ $('Global Variables').item.json.repo.url }}/api/v1/repos/{{ $('Global Variables').item.json.repo.owner }}/{{ $('Global Variables').item.json.repo.name }}/contents/{{ encodeURIComponent($('Fetch Repo File').item.json.name) }}. - Sätt bodyParameters → content till
={{ $('Encode Update Payload').item.json.item }}och sha till={{ $('Fetch Repo File').item.json.sha }}. - Credential Required: anslut era httpHeaderAuth-inloggningsuppgifter i Update Repo File.
Steg 6: koda och skapa saknade repo-filer
Saknade filer skapas med en base64-kodad payload.
- I Encode Create Payload behåller ni language satt till
pythonoch bevarar base64-kodningsskriptet. - Konfigurera Create Repo File med method satt till
POSToch URL satt till={{ $('Global Variables').item.json.repo.url }}/api/v1/repos/{{ $('Global Variables').item.json.repo.owner }}/{{ $('Global Variables').item.json.repo.name }}/contents/{{ encodeURIComponent($('Iterate Workflows').item.json.name) }}.json. - Sätt bodyParameters → content till
={{ $json.item }}. - Credential Required: anslut era httpHeaderAuth-inloggningsuppgifter i Create Repo File.
Steg 7: testa och aktivera ert arbetsflöde
Verifiera att uppdateringar och skapanden sker som förväntat, och aktivera sedan schemat.
- Klicka på Execute Workflow för att köra ett manuellt test från Scheduled Backup Trigger.
- Verifiera att Fetch Repo File hanterar både befintliga och saknade filer, och att antingen Update Repo File eller Create Repo File körs för varje arbetsflöde.
- Bekräfta lyckade uppdateringar i ert Git-repository genom att kontrollera att nyligen skapade
.json-arbetsflödesfiler finns. - Växla arbetsflödet till Active för att aktivera schemalagda säkerhetskopior var 45:e minut.
Saker att se upp med
- Gitea-autentisering kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera: kontrollera först scopes för din Personal Access Token i Gitea-inställningarna.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre ned i flödet fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera output i all evighet.
Vanliga frågor
Cirka 5 minuter om ditt Gitea-repo och din token är klara.
Ja, men någon behöver vara bekväm med att skapa tokens och klistra in autentiseringsuppgifter. Ingen kodning krävs, och uppsättningen är mest ”fyll i det som saknas”.
Ja. n8n har ett gratis alternativ för egen hosting och en gratis provperiod på n8n Cloud. Molnplaner startar på 20 $/månad för högre volym. Du behöver också räkna in hostingkostnader för Gitea om du kör det själv.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger dig obegränsade körningar, men kräver grundläggande serveradministration.
Du kan ändra backupdestination genom att redigera noden Global Variables (repo.url, repo.name, repo.owner) så att den pekar mot en annan Gitea-org eller ett annat repo. Vanliga anpassningar är att byta filnamn så att de följer era interna konventioner, exkludera inaktiverade arbetsflöden under steget Retrieve Workflows och ändra schemaläggningsfrekvensen i Scheduled Backup Trigger. Vill du ha en extra kopia kan du duplicera vägen ”create/update repo file” och även pusha till en annan Git-host.
Oftast handlar det om formatet på din Personal Access Token eller behörigheterna. Säkerställ att ditt credential-värde börjar med ”Bearer ” (med ett mellanslag), generera sedan en ny token i Gitea och uppdatera den i n8n om du har roterat den. Om det bara fallerar ibland kan du också slå i rate limits eller peka repo.url mot fel basdomän.
I praktiken skalar den med hur många arbetsflöden du har och hur ofta du kör den; de flesta små team kan säkerhetskopiera dussintals eller hundratals utan att behöva tänka på det. På n8n Cloud Starter begränsas du av antal körningar per månad, medan egen hosting inte har något tak (det beror på din server). Upplägget Split in Batches hjälper till att hålla körningarna stabila när antalet arbetsflöden växer.
För just det här arbetsflödet har n8n några fördelar: mer komplex logik med obegränsad branching utan extra kostnad, ett alternativ för egen hosting med obegränsade körningar och inbyggd HTTP- och datahantering som Zapier tar premiumpris för. Du får också mer kontroll över hur filer skapas vs. uppdateras, vilket är hela poängen med att hålla Git-historiken läsbar. Zapier eller Make kan fungera för enkla ”exportera till en mapp”-jobb, men de blir ofta klumpiga när du behöver villkorskontroller och innehållsjämförelser. Om du är osäker: prata med en automationsexpert och få en snabb rekommendation.
När detta väl rullar slutar backup att vara en uppgift och blir en baslinje. Du får en korrekt historik, snabba återställningar och färre ”vad ändrades?”-mysterier nästa gång något skapar fel.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.