1c7bfdf421
Add end-to-end migration scripts for inventory, precopy, cutover, smoke tests, rollback, and post-migration checks. Include an operational runbook and Proxmox env template to move Hördle behind Nginx Proxy Manager while preserving persistent volumes safely.
74 lines
2.0 KiB
Bash
Executable File
74 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Cutover-Skript fuer kurzes Wartungsfenster.
|
|
# Auf QUELLSYSTEM ausfuehren:
|
|
# 1) stoppt lokale Hördle-App
|
|
# 2) finaler Delta-Sync data/ + uploads/
|
|
# 3) startet Ziel-App im Proxmox-LXC
|
|
|
|
TARGET_HOST="${TARGET_HOST:-root@10.0.0.19}"
|
|
TARGET_APP_DIR="${TARGET_APP_DIR:-/opt/hoerdle}"
|
|
SOURCE_APP_DIR="${SOURCE_APP_DIR:-$(pwd)}"
|
|
SOURCE_COMPOSE_FILE="${SOURCE_COMPOSE_FILE:-docker-compose.yml}"
|
|
TARGET_COMPOSE_FILE="${TARGET_COMPOSE_FILE:-docker-compose.yml}"
|
|
SSH_OPTS="${SSH_OPTS:-}"
|
|
|
|
cd "$SOURCE_APP_DIR"
|
|
|
|
require_cmd() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "Fehlend: $1"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_cmd docker
|
|
require_cmd rsync
|
|
require_cmd ssh
|
|
require_cmd sha256sum
|
|
|
|
echo "== Hördle Cutover =="
|
|
echo "Quelle: $(pwd)"
|
|
echo "Ziel: $TARGET_HOST:$TARGET_APP_DIR"
|
|
echo
|
|
|
|
echo "Wartungsfenster starten. Enter zum Fortfahren, Ctrl+C zum Abbruch."
|
|
read -r
|
|
|
|
echo "-- Quelle stoppen --"
|
|
docker compose -f "$SOURCE_COMPOSE_FILE" down
|
|
echo
|
|
|
|
echo "-- Finaler Delta-Sync data/ --"
|
|
rsync -aHAX --numeric-ids --delete \
|
|
-e "ssh $SSH_OPTS" \
|
|
"./data/" "$TARGET_HOST:$TARGET_APP_DIR/data/"
|
|
echo
|
|
|
|
echo "-- Finaler Delta-Sync public/uploads/ --"
|
|
rsync -aHAX --numeric-ids --delete \
|
|
-e "ssh $SSH_OPTS" \
|
|
"./public/uploads/" "$TARGET_HOST:$TARGET_APP_DIR/public/uploads/"
|
|
echo
|
|
|
|
if [ -f "./data/prod.db" ]; then
|
|
echo "-- Konsistenzcheck DB --"
|
|
LOCAL_HASH="$(sha256sum ./data/prod.db | awk '{print $1}')"
|
|
REMOTE_HASH="$(ssh $SSH_OPTS "$TARGET_HOST" "sha256sum '$TARGET_APP_DIR/data/prod.db' | awk '{print \$1}'")"
|
|
echo "local prod.db sha256: $LOCAL_HASH"
|
|
echo "remote prod.db sha256: $REMOTE_HASH"
|
|
|
|
if [ "$LOCAL_HASH" != "$REMOTE_HASH" ]; then
|
|
echo "DB Hash mismatch. Abbruch vor Start auf Ziel."
|
|
exit 1
|
|
fi
|
|
fi
|
|
echo
|
|
|
|
echo "-- Ziel-App starten --"
|
|
ssh $SSH_OPTS "$TARGET_HOST" "cd '$TARGET_APP_DIR' && docker compose -f '$TARGET_COMPOSE_FILE' up -d --build"
|
|
echo
|
|
|
|
echo "Cutover abgeschlossen. Bitte jetzt scripts/migration-smoke-test.sh ausfuehren."
|