From 2b5a510e30941c9ed7d10108a6622e32a70f2a73 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Sun, 25 Jan 2026 15:10:43 +0100 Subject: [PATCH] . --- README.md | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/README.md b/README.md index e69de29..8604c65 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,183 @@ +# Portainer Stack Backup Script + +Dieses Skript sichert **alle Docker-Compose-Stacks aus Portainer** über die Portainer-API. +Es exportiert **immer die aktuell aktive Compose-Version** jedes Stacks und speichert sie +übersichtlich nach Stack-Namen. + +Optional kann das Ergebnis zusätzlich als `tar.gz` archiviert werden. + +--- + +## Features + +- Backup **aller Portainer Stacks** +- Export der **aktuellen** `docker-compose.yml` je Stack +- Ruhige, übersichtliche Konsolen-Ausgabe +- Vollständiges Logfile (`backup.log`) +- Optionales `tar.gz`-Archiv +- Automatisches Aufräumen bei Archiv-Erstellung +- Geeignet für: + - manuelle Nutzung + - Cronjobs + - Server / Docker-Hosts + +--- + +## Voraussetzungen + +Auf dem System müssen folgende Tools vorhanden sein: + +| Tool | Benötigt | +|----|----| +| `bash` | ja | +| `curl` | ja | +| `jq` | ja | +| `tar` | **nur wenn** `CREATE_ARCHIVE=1` | + +Getestet u. a. mit: +- Fedora +- Debian / Ubuntu +- Proxmox Host + +--- + +## Installation + +Repository klonen oder Skript manuell ablegen: + +```bash +git clone +cd shell_portainer_stack_backup +``` + +Skript ausführbar machen: + +```bash +chmod +x shell_portainer_stack_backup.sh +``` + +--- + +## Konfiguration (`settings.env`) + +Die Datei `settings.env` muss **im selben Verzeichnis** wie das Skript liegen. + +### Beispiel: + +```bash +# Portainer connection +PORTAINER_URL="https://192.168.178.25:9443" + +# Portainer API key +API_KEY="ptr_xxxxxxxxxxxxxxxxxxxxxx" + +# Base output directory +OUT_DIR="/home/thorsten/Schreibtisch/Backup" + +# Create archive? +# 1 = create tar.gz and remove directory afterwards +# 0 = keep directory only +CREATE_ARCHIVE=1 +``` + +**Hinweis:** +- API-Keys niemals ins Git-Repository committen +- Empfohlene Rechte: + ```bash + chmod 600 settings.env + ``` + +--- + +## Nutzung + +```bash +./shell_portainer_stack_backup.sh +``` + +Beispiel-Ausgabe: + +``` +Portainer Stack Backup started +Target: /home/thorsten/Schreibtisch/Backup/portainer-stack-backup-2026-01-25_15-00-00 + +Portainer reachable +API key valid +Stacks found: 57 + +Starting backup + +[OK] jellyfin +[OK] paperless +[FAIL] test-stack + +Backup finished: OK=56 FAIL=1 +Archive created: portainer-stack-backup-2026-01-25_15-00-00.tar.gz +Cleanup done: removed /home/thorsten/Schreibtisch/Backup/portainer-stack-backup-2026-01-25_15-00-00 +Done. +``` + +--- + +## Ergebnisstruktur + +### Wenn `CREATE_ARCHIVE=0` + +``` +portainer-stack-backup-YYYY-MM-DD_HHMMSS/ +├── backup.log +└── stacks/ + ├── jellyfin/ + │ ├── docker-compose.yml + │ └── meta.json + └── paperless/ + ├── docker-compose.yml + └── meta.json +``` + +### Wenn `CREATE_ARCHIVE=1` + +``` +portainer-stack-backup-YYYY-MM-DD_HHMMSS.tar.gz +``` + +(Der temporäre Ordner wird nach erfolgreicher Archiv-Erstellung gelöscht.) + +--- + +## Logfile + +Während der Laufzeit wird **jede Ausgabe** gleichzeitig: + +- im Terminal angezeigt +- in `backup.log` gespeichert + +Das Logfile liegt: +- bei `CREATE_ARCHIVE=0` im Backup-Ordner +- bei `CREATE_ARCHIVE=1` im Archiv + +--- + +## Hinweise & Einschränkungen + +- Das Skript sichert **nur die Stack-Definitionen**, **keine Volumes / Daten** +- Git-basierte Stacks werden als **aktuelle, aufgelöste Compose-Datei** gesichert +- Der API-Key benötigt mindestens: + - Zugriff auf Stacks + - Zugriff auf das jeweilige Endpoint + +--- + +## Typische Einsatzszenarien + +- Versionierung von Compose-Files in Git +- Dokumentation der aktuellen Portainer-Konfiguration +- Vorbereitung für Migration / Rebuild +- Regelmäßige Sicherung per Cron + +--- + +## Lizenz + +Privates / internes Tool +Keine Garantie – Nutzung auf eigene Verantwortung.