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

3.5 KiB
Raw Blame History

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:

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.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.