Files
karim 272d30357f 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>
2026-06-01 23:47:35 +02:00

56 lines
2.1 KiB
Bash
Executable File

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