From 483bd89d25f2f049b4cb2d941f2c22562f51e725 Mon Sep 17 00:00:00 2001 From: mhoennig Date: Wed, 22 Jul 2026 06:31:35 +0200 Subject: [PATCH] scripts/deploy-prod: web-taugliche Rechte erzwingen (--chmod=D755,F644) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mktemp -d legt das Staging-Verzeichnis mit 0700 an; rsync -a uebertrug diesen Modus auf das Ziel-Verzeichnis, sodass der Webserver es nicht betreten konnte (Apache 403 "Server unable to read htaccess file, denying access to be safe" — die .htaccess-Suche selbst ist normal, der Zugriff scheiterte an den Rechten). Fix: rsync mit --chmod=D755,F644, unabhaengig von lokalen mktemp-/umask-Rechten. Lokal verifiziert: Ziel wird 755, Dateien 644 (auch wenn das Ziel vorher 700 war). Co-Authored-By: Claude Opus 4.8 --- scripts/deploy-prod.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index a7b8a9c..0719a97 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -91,9 +91,14 @@ sed "${SED_ARGS[@]}" frontend/dist/index.html > "$STAGE/index.html" cp LICENSE "$STAGE/LICENSE" # ---- 3) Spiegeln (--delete: nichts Altes bleibt am Ziel) ---- +# --chmod=D755,F644 erzwingt web-taugliche Rechte am Ziel, unabhängig von den +# lokalen Rechten: `mktemp -d` legt $STAGE mit 0700 an, und `rsync -a` würde +# diesen Modus sonst auf das Ziel-Verzeichnis übertragen — dann kann der +# Webserver es nicht betreten (Apache 403 „unable to read htaccess file“). +RSYNC_OPTS=(-avz --delete --chmod=D755,F644) if [ "$YES" -ne 1 ]; then echo "==> Vorschau (rsync --dry-run --delete) nach ${TARGET}:" - rsync -avz --delete --dry-run "$STAGE"/ "$TARGET" + rsync "${RSYNC_OPTS[@]}" --dry-run "$STAGE"/ "$TARGET" printf '==> Wirklich spiegeln? --delete löscht am Ziel alles Fremde. [y/N] ' read -r ANS case "$ANS" in @@ -103,5 +108,5 @@ if [ "$YES" -ne 1 ]; then fi echo "==> rsync -> ${TARGET}" -rsync -avz --delete "$STAGE"/ "$TARGET" +rsync "${RSYNC_OPTS[@]}" "$STAGE"/ "$TARGET" echo "==> Fertig."