Files
hoerdle/docs/PROXMOX_MIGRATION_RUNBOOK.md
Hördle Bot 1c7bfdf421 Ops: add Proxmox migration tooling and runbook
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.
2026-04-25 09:46:52 +00:00

2.8 KiB

Hördle Migration Runbook (Proxmox-LXC + Nginx Proxy Manager)

Dieses Runbook setzt den Migrationsplan operativ um und priorisiert Datensicherheit fuer data/prod.db und public/uploads.

0) Voraussetzungen

  • Quelle (alt): VPS mit laufendem Hördle-Compose-Stack.
  • Ziel (neu): Proxmox-LXC unter root@10.0.0.19.
  • DNS ist bereits vorbereitet.
  • Ziel-LXC ist im internen Netz vom NPM-LXC erreichbar.

1) Inventur auf der Quelle

cd /home/docker/hoerdle
./scripts/migration-inventory.sh

Erwartung:

  • Persistenzpfade vorhanden: data, data/prod.db, public/uploads
  • Runtime-Variablen in docker-compose.yml referenzieren .env

2) Ziel-LXC vorbereiten

Auf dem Ziel-LXC (root@10.0.0.19):

mkdir -p /opt/hoerdle
# Repo nach /opt/hoerdle bringen (git clone oder rsync)
cd /opt/hoerdle
./scripts/migration-prepare-target.sh

Danach:

  • .env in /opt/hoerdle/.env produktiv ausfuellen
  • ADMIN_PASSWORD als bcrypt hash setzen
  • Caddy-Stack nicht verwenden (nur docker-compose.yml)

3) Vorabkopie der Daten (Quelle -> Ziel)

Auf der Quelle:

cd /home/docker/hoerdle
TARGET_HOST=root@10.0.0.19 TARGET_APP_DIR=/opt/hoerdle ./scripts/migration-precopy.sh

Das Skript synchronisiert:

  • data/
  • public/uploads/

und zeigt Dateizaehlung/Groessen als Plausibilitaetscheck.

4) Cutover im Wartungsfenster

Auf der Quelle:

cd /home/docker/hoerdle
TARGET_HOST=root@10.0.0.19 TARGET_APP_DIR=/opt/hoerdle ./scripts/migration-cutover.sh

Das Skript:

  1. stoppt die Quell-App,
  2. fuehrt Final-Sync aus,
  3. verifiziert prod.db per SHA256,
  4. startet die Ziel-App mit docker compose up -d --build.

5) NPM umschalten + Smoke-Test

Im Nginx Proxy Manager:

  • Proxy Host auf 10.0.0.19:3010 setzen
  • Scheme http, Websocket Support aktiv
  • SSL aktivieren (Let's Encrypt), Force SSL einschalten
  • Header-Weiterleitung aktiv lassen (X-Forwarded-*)

Smoke-Test:

./scripts/migration-smoke-test.sh https://hoerdle.de

Zusatzpruefungen manuell:

  • Admin-Login
  • Upload eines Testfiles
  • Abruf des Uploads im Frontend

6) Post-Migration (24h)

  • docker compose logs --since=24h auf Ziel auswerten
  • NPM Access/Error Logs pruefen
  • taegliches Backup sicherstellen:
    • data/prod.db
    • public/uploads/
  • Alte Instanz erst nach stabiler Beobachtungszeit stilllegen

Automatisierter Postcheck:

cd /opt/hoerdle
DOMAIN_URL=https://hoerdle.de ./scripts/migration-postcheck.sh

Beispiel fuer taegliches Backup (cron auf Ziel-LXC):

crontab -e
# taeglich 03:30
30 3 * * * cd /opt/hoerdle && ./scripts/backup-persistence.sh >> /opt/hoerdle/logs/backup-persistence.log 2>&1

7) Rollback

Wenn Tests fehlschlagen:

TARGET_HOST=root@10.0.0.19 TARGET_APP_DIR=/opt/hoerdle ./scripts/migration-rollback.sh

Danach sofort im NPM auf alte Instanz zurueckschalten.