.
This commit is contained in:
183
README.md
183
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 <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.
|
||||||
|
|||||||
Reference in New Issue
Block a user