Files
shell_portainer_stack_backup/README.md
2026-01-25 15:10:43 +01:00

184 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.