#!/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