diff --git a/DEPLOYMENT_ADMIN.md b/DEPLOYMENT_ADMIN.md index 6035411..b60dbb6 100644 --- a/DEPLOYMENT_ADMIN.md +++ b/DEPLOYMENT_ADMIN.md @@ -240,6 +240,43 @@ cd ~/stack && docker compose build admin && docker compose up -d admin `content/site.json`, `content/theme.json` und hochgeladene Bilder bleiben unangetastet (liegen auf eigenen Volumes, nicht im Image). +## Content-Updates über Git/Claude Code, ohne den Editor zu überschreiben + +Seit es den Editor gibt, liegt der **echte Live-Inhalt** (`content/site.json`, +`content/theme.json`) auf eigenen Volumes auf dem Server, nicht mehr im +Git-Image – ein einfaches `git pull` + `docker compose build website` +ändert an den Live-Inhalten deshalb **nichts** mehr (das Seed-Skript befüllt +die Volumes nur einmalig, wenn sie leer sind). + +Damit Claude Code trotzdem Content-Änderungen pushen kann, ohne Änderungen +zu überschreiben, die zwischenzeitlich über den Editor gemacht wurden, gibt +es zwei Skripte im Repo (auf dem Server, aus `~/stack` ausführen): + +1. **Vor** einer Content-Änderung durch Claude Code: aktuellen Live-Stand + nach Git holen (nur nötig, falls seit dem letzten Mal über den Editor was + geändert wurde – bei keiner Änderung passiert nichts): + ```bash + cd ~/stack + ~/sites/larpaso-website/sync-content-from-live.sh + ``` +2. Im Chat mit Claude Code die gewünschte Änderung beschreiben – Claude + Code ändert `content/site.json`/`theme.json` lokal auf Basis des gerade + synchronisierten Stands, testet den Build und pusht nach `main`. +3. **Nach** dem Push: Git-Stand auf den Server holen und live veröffentlichen + (baut über denselben Weg wie „Speichern & veröffentlichen" im Editor, + ohne den `website`- oder `admin`-Dienst neu zu bauen): + ```bash + cd ~/sites/larpaso-website && git pull + cd ~/stack + ./sync-content-from-live.sh # kann man sich sparen, falls Schritt 1 schon frisch war + ~/sites/larpaso-website/publish-content-to-live.sh + ``` + +**Wichtig:** Das gilt nur für `content/site.json`/`theme.json` (Texte, +Bilder-Referenzen, Design-Werte). Änderungen am Code selbst (`admin/`, +`src/`) laufen weiterhin über den normalen Weg (`docker compose build +website`/`admin` + `up -d`, siehe oben). + ## Bekannte Grenzen - Mehrere feste Logins möglich (`ADMIN_USERNAME`/`ADMIN_PASSWORD_HASH`, `_2`, `_3`, ...), diff --git a/publish-content-to-live.sh b/publish-content-to-live.sh new file mode 100644 index 0000000..28773c8 --- /dev/null +++ b/publish-content-to-live.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Spielt content/site.json + theme.json aus dem (frisch gepullten) Git-Stand +# zurück ins Admin-Volume und stößt denselben Build/Publish an, den auch der +# "Speichern & veröffentlichen"-Knopf im Editor auslöst. Auf dem Server +# ausführen, aus ~/stack, NACHDEM in ~/sites/larpaso-website ein +# `git pull` gemacht wurde: +# ./publish-content-to-live.sh ~/sites/larpaso-website +set -euo pipefail + +REPO="${1:-$HOME/sites/larpaso-website}" + +docker compose cp "$REPO/content/site.json" admin:/app/content/site.json +docker compose cp "$REPO/content/theme.json" admin:/app/content/theme.json + +docker compose exec admin node -e " +require('/app/admin/lib/build.js').runBuild().then((r) => { + console.log(r.ok ? 'Veröffentlicht.' : ('Fehler: ' + r.error)); + process.exit(r.ok ? 0 : 1); +}); +" diff --git a/sync-content-from-live.sh b/sync-content-from-live.sh new file mode 100644 index 0000000..f26a523 --- /dev/null +++ b/sync-content-from-live.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Holt den aktuellen Live-Content (vom Admin-Editor bearbeitet) aus dem +# Server-Volume zurück nach Git, bevor Claude Code eine Content-Änderung +# macht. So geht nichts verloren, was seit dem letzten Sync über den +# Editor geändert wurde. Auf dem Server ausführen, aus ~/stack: +# ./sync-content-from-live.sh ~/sites/larpaso-website +set -euo pipefail + +REPO="${1:-$HOME/sites/larpaso-website}" + +docker compose cp admin:/app/content/site.json "$REPO/content/site.json" +docker compose cp admin:/app/content/theme.json "$REPO/content/theme.json" + +cd "$REPO" +if git diff --quiet -- content/site.json content/theme.json; then + echo "Keine Änderungen – Git hat bereits den aktuellen Live-Stand." +else + git add content/site.json content/theme.json + git commit -m "Sync live content from admin panel" + git push + echo "Live-Inhalte wurden nach Git übernommen und gepusht." +fi