# 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 ```bash 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`): ```bash 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: ```bash 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: ```bash 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: ```bash ./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: ```bash cd /opt/hoerdle DOMAIN_URL=https://hoerdle.de ./scripts/migration-postcheck.sh ``` Beispiel fuer taegliches Backup (cron auf Ziel-LXC): ```bash 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: ```bash TARGET_HOST=root@10.0.0.19 TARGET_APP_DIR=/opt/hoerdle ./scripts/migration-rollback.sh ``` Danach sofort im NPM auf alte Instanz zurueckschalten.