This commit is contained in:
2026-01-25 15:10:43 +01:00
parent 996148410d
commit 2b5a510e30

183
README.md
View File

@@ -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 <dein-repo>
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.