54 lines
2.7 KiB
Bash
Executable file
54 lines
2.7 KiB
Bash
Executable file
#!/bin/bash
|
||
# ────────────────────────────────────────────────────────────────────────
|
||
# Zweck: Automatisches Prüfen und Anwenden von Updates für alle
|
||
# Docker‑Compose‑Projekte unter /opt/docker/
|
||
# ────────────────────────────────────────────────────────────────────────
|
||
|
||
set -euo pipefail
|
||
IFS=$'\n\t'
|
||
|
||
# ---------- Konfiguration ----------
|
||
BASE_DIR="/opt/docker" # Verzeichnis mit allen Compose‑Projekten
|
||
LOG_DIR="/var/log/docker-update" # Ort für Log‑Dateien
|
||
COMPOSE_CMD="docker-compose" # docker‑compose v1
|
||
|
||
# ---------- Hilfsfunktion ----------
|
||
log() {
|
||
local lvl=${1:-INFO}
|
||
local msg=${2:-}
|
||
echo "$(date '+%Y-%m-%d %H:%M:%S') [$lvl] $msg"
|
||
}
|
||
|
||
# ---------- Log‑Verzeichnis anlegen ----------
|
||
mkdir -p "$LOG_DIR"
|
||
|
||
# ---------- Haupt‑Schleife ----------
|
||
for proj_dir in "$BASE_DIR"/*/; do
|
||
# Compose‑Datei vorhanden?
|
||
if [[ -f "$proj_dir/docker-compose.yml" || -f "$proj_dir/docker-compose.yaml" ]]; then
|
||
pushd "$proj_dir" >/dev/null
|
||
|
||
# ───── Log‑Datei für dieses Projekt ──────────────────────────────────────
|
||
# (ohne `local`, weil wir uns nicht in einer Funktion befinden)
|
||
log_file="${LOG_DIR}/$(basename "$proj_dir")-update.log"
|
||
|
||
log "INFO" "Starte Update in ${proj_dir%/}"
|
||
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] Update in ${proj_dir%/}" >> "$log_file"
|
||
|
||
# ───── 1. Container herunterfahren ─────────────────────────────────────────────
|
||
$COMPOSE_CMD down >> "$log_file" 2>&1 || true
|
||
|
||
# ───── 2. Images pullen ───────────────────────────────────────────────────────
|
||
$COMPOSE_CMD pull >> "$log_file" 2>&1
|
||
|
||
# ───── 3. Container neu starten ───────────────────────────────────────────────
|
||
$COMPOSE_CMD up -d >> "$log_file" 2>&1
|
||
|
||
popd >/dev/null
|
||
log "INFO" "Update für ${proj_dir%/} abgeschlossen."
|
||
else
|
||
log "INFO" "Keine docker-compose.yml in ${proj_dir%/} – überspringen."
|
||
fi
|
||
done
|
||
|
||
log "INFO" "Alle Projekte wurden aktualisiert."
|