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:
@@ -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.
|
||||
`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)
|
||||
|
||||
1. `cp .env.example .env`
|
||||
|
||||
Executable
+55
@@ -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
|
||||
Reference in New Issue
Block a user