# 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.