2b5a510e30941c9ed7d10108a6622e32a70f2a73
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.ymlje 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:
git clone <dein-repo>
cd shell_portainer_stack_backup
Skript ausführbar machen:
chmod +x shell_portainer_stack_backup.sh
Konfiguration (settings.env)
Die Datei settings.env muss im selben Verzeichnis wie das Skript liegen.
Beispiel:
# 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:
chmod 600 settings.env
Nutzung
./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.loggespeichert
Das Logfile liegt:
- bei
CREATE_ARCHIVE=0im Backup-Ordner - bei
CREATE_ARCHIVE=1im 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.
Description
Languages
Shell
100%