184 lines
3.5 KiB
Markdown
184 lines
3.5 KiB
Markdown
# 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.
|