feat: redid container update script to automatically update all under /opt/docker

This commit is contained in:
root 2025-12-14 22:25:38 +01:00
parent 18e8a7f87d
commit 6a7e308299

View file

@ -1,20 +1,54 @@
#!/bin/bash
cd /opt/docker/bentopdf
docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_bentopdf.log
# ────────────────────────────────────────────────────────────────────────
# Zweck: Automatisches Prüfen und Anwenden von Updates für alle
# DockerComposeProjekte unter /opt/docker/
# ────────────────────────────────────────────────────────────────────────
cd /opt/docker/ddns
docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_ddns.log
set -euo pipefail
IFS=$'\n\t'
cd /opt/docker/forgejo
docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_forgejo.log
# ---------- Konfiguration ----------
BASE_DIR="/opt/docker" # Verzeichnis mit allen ComposeProjekten
LOG_DIR="/var/log/docker-update" # Ort für LogDateien
COMPOSE_CMD="docker-compose" # dockercompose v1
cd /opt/docker/jellyfin
docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_jellyfin.log
# ---------- Hilfsfunktion ----------
log() {
local lvl=${1:-INFO}
local msg=${2:-}
echo "$(date '+%Y-%m-%d %H:%M:%S') [$lvl] $msg"
}
cd /opt/docker/nextcloud
docker-compose down && docker-compose pull && docker-compose build && docker-compose up -d >> /var/log/cron/update_nextcloud
# ---------- LogVerzeichnis anlegen ----------
mkdir -p "$LOG_DIR"
cd /opt/docker/vaultwarden
docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_vaultwarden
# ---------- HauptSchleife ----------
for proj_dir in "$BASE_DIR"/*/; do
# ComposeDatei vorhanden?
if [[ -f "$proj_dir/docker-compose.yml" || -f "$proj_dir/docker-compose.yaml" ]]; then
pushd "$proj_dir" >/dev/null
docker image prune -a -f >> /var/log/cron/docker_prune.log
# ───── LogDatei 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."