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.
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user