ops: update.sh — Update im LXC in einem Befehl

Kapselt git pull + Deploy-Config + Neustart, damit die Migrationsschritte
nicht mehr per Hand nötig sind:
- kong.yml vor dem Pull auf die Vorlage zurücksetzen (kein Konflikt), danach
  CORS-Origin aus SITE_URL rendern
- chown -R 1000:1000 (non-root-Container darf schreiben)
- git safe.directory für root auf dem uid-1000-Repo
- docker compose up -d --build + kong reload + Healthcheck

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-01 23:47:35 +02:00
parent f97999c3c0
commit 272d30357f
2 changed files with 68 additions and 0 deletions
+13
View File
@@ -66,6 +66,19 @@ bash <(curl -fsSL https://git.kgva.ch/karim/OPENBUREAU/raw/branch/main/cms/proxm
Fragt interaktiv nur Storage/Bridge/IP ab (Enter = Default). Kein Token nötig. Fragt interaktiv nur Storage/Bridge/IP ab (Enter = Default). Kein Token nötig.
`GIT_TOKEN` nur setzen, wenn das CMS per `GIT_PUBLISH` nach Gitea zurückschreiben soll. `GIT_TOKEN` nur setzen, wenn das CMS per `GIT_PUBLISH` nach Gitea zurückschreiben soll.
### Updaten (bestehender LXC)
Nicht `git pull` von Hand — das vergisst CORS-Origin (kong.yml), Dateirechte
(non-root) und den Neustart. Stattdessen im Container:
```bash
bash /opt/openbureau/cms/update.sh
```
Das macht: `git pull` → CORS-Origin aus `SITE_URL` in `kong.yml` rendern →
`chown -R 1000:1000``docker compose up -d --build` + kong neu laden →
Healthcheck. (Beim allerersten Mal das Skript per einmaligem `git pull` holen.)
### Manuell (oder im Container) ### Manuell (oder im Container)
1. `cp .env.example .env` 1. `cp .env.example .env`
Executable
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env bash
# OPENBUREAU — Update im LXC in einem Rutsch.
# Statt `git pull` direkt: holt den Code, rendert die Deploy-Config, setzt die
# Dateirechte für den non-root-Container und startet den Stack neu.
#
# Im Container (als root) ausführen:
# bash /opt/openbureau/cms/update.sh
set -euo pipefail
# Repo-Root = eine Ebene über diesem Skript (cms/..).
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$ROOT"
# Git läuft hier als root auf einem Repo, das dem Container-User (uid 1000)
# gehört → ohne das meckert Git über „dubious ownership".
git config --global --add safe.directory "$ROOT" 2>/dev/null || true
echo "→ git pull…"
# kong.yml wird beim Deploy lokal gerendert (CORS-Origin eingesetzt). Vor dem
# Pull auf die versionierte Vorlage (mit __CORS_ORIGIN__) zurücksetzen, sonst
# kollidiert der Pull mit der lokalen Änderung.
git checkout -- cms/kong.yml 2>/dev/null || true
git pull --ff-only
cd "$ROOT/cms"
# CORS-Origin aus SITE_URL (.env) in kong.yml einsetzen — eine Quelle der Wahrheit.
ORIGIN="$(grep -E '^SITE_URL=' .env | head -1 | cut -d= -f2-)"
if [ -n "${ORIGIN:-}" ]; then
sed -i "s|__CORS_ORIGIN__|${ORIGIN}|g" kong.yml
echo "✓ CORS-Origin gesetzt: ${ORIGIN}"
else
echo "WARN: SITE_URL in .env nicht gefunden — kong.yml-Origin bleibt Platzhalter."
fi
# Der CMS-Container läuft als uid 1000 und muss das ganze Repo schreiben können
# (Hugo baut public/, schreibt content/). git pull als root zieht neue Dateien
# als root → hier wieder geradeziehen.
chown -R 1000:1000 "$ROOT"
echo "✓ Dateirechte (uid 1000) gesetzt."
echo "→ docker compose up…"
docker compose up -d --build
# kong liest die declarative config nur beim Start — nach kong.yml-Änderung neu.
docker compose restart kong
echo "✓ Stack neu gestartet."
# Kurzer Healthcheck (localhost im LXC, unabhängig von BIND_ADDR).
PORT="$(grep -E '^APP_PORT=' .env | head -1 | cut -d= -f2-)"; PORT="${PORT:-8080}"
sleep 2
if curl -fsS -I "http://127.0.0.1:${PORT}/" >/dev/null 2>&1; then
echo "✓ Seite antwortet auf :${PORT}."
else
echo "WARN: Seite antwortet (noch) nicht auf :${PORT} — 'docker compose ps' prüfen."
fi