deploy.sh: Vite-Build EACCES vermeiden, chown nur storage/bootstrap/public/build
Made-with: Cursor
This commit is contained in:
parent
1de5d089e9
commit
d77a1b1181
50
deploy.sh
50
deploy.sh
@ -2,7 +2,8 @@
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Usage:
|
||||
# ./deploy.sh
|
||||
# ./deploy.sh (benoetigt sudo fuer chown; npm/composer als dein User)
|
||||
# sudo ./deploy.sh (empfohlen: SUDO_USER bekommt public/build vor dem Vite-Build)
|
||||
# Optional env vars:
|
||||
# APP_DIR=/web/einkauf (Standard; anpassen wenn die App woanders liegt)
|
||||
# PHP_BIN=/usr/bin/php
|
||||
@ -10,10 +11,9 @@ set -Eeuo pipefail
|
||||
# NPM_BIN=/usr/bin/npm
|
||||
# RUN_SEED=true
|
||||
#
|
||||
# Rechte: Am Ende wird chown www-data gesetzt. Dann kann ein normaler User
|
||||
# composer.lock nicht schreiben — composer update ggf. mit:
|
||||
# sudo chown -R "$(whoami):$(whoami)" "${APP_DIR}" # oder nur composer.json + composer.lock
|
||||
# oder: sudo -u www-data composer update (wenn Composer fuer www-data erreichbar ist).
|
||||
# Rechte: Nur storage, bootstrap/cache und public/build gehen an www-data.
|
||||
# Code + vendor bleiben beim Deploy-User — sonst schlagen npm/vite/composer fehl (EACCES).
|
||||
# Bei sudo ./deploy.sh ist der Build-User SUDO_USER (z. B. stefanz).
|
||||
|
||||
APP_DIR="${APP_DIR:-/web/einkauf}"
|
||||
PHP_BIN="${PHP_BIN:-/usr/bin/php}"
|
||||
@ -36,6 +36,24 @@ fi
|
||||
|
||||
cd "${APP_DIR}"
|
||||
|
||||
if [ "$(id -u)" -eq 0 ] && [ -n "${SUDO_USER:-}" ]; then
|
||||
DEPLOY_OWNER="${SUDO_USER}"
|
||||
else
|
||||
DEPLOY_OWNER="$(id -un)"
|
||||
fi
|
||||
|
||||
chown_path_for_build() {
|
||||
local p="${1:?}"
|
||||
[ -e "$p" ] || return 0
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
chown -R "${DEPLOY_OWNER}:${DEPLOY_OWNER}" "$p"
|
||||
elif command -v sudo >/dev/null 2>&1; then
|
||||
sudo chown -R "${DEPLOY_OWNER}:${DEPLOY_OWNER}" "$p"
|
||||
else
|
||||
echo "Warnung: kann ${p} nicht chownen — ggf. sudo nutzen oder manuell: chown -R ${DEPLOY_OWNER} ${p}" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
echo "==> Deploy startet in ${APP_DIR}"
|
||||
|
||||
if [ ! -f "artisan" ]; then
|
||||
@ -59,6 +77,11 @@ git reset --hard origin/main
|
||||
echo "==> PHP-Abhaengigkeiten installieren"
|
||||
"${COMPOSER_BIN}" install --no-dev --prefer-dist --optimize-autoloader --no-interaction
|
||||
|
||||
echo "==> Frontend: Schreibrechte (Vite leert public/build)"
|
||||
mkdir -p "${APP_DIR}/public/build"
|
||||
chown_path_for_build "${APP_DIR}/public/build"
|
||||
chown_path_for_build "${APP_DIR}/node_modules"
|
||||
|
||||
echo "==> Frontend-Abhaengigkeiten installieren"
|
||||
"${NPM_BIN}" ci
|
||||
|
||||
@ -82,8 +105,19 @@ echo "==> Caches aufbauen"
|
||||
"${PHP_BIN}" artisan route:cache
|
||||
"${PHP_BIN}" artisan view:cache
|
||||
|
||||
echo "==> Rechte setzen"
|
||||
chown -R www-data:www-data "${APP_DIR}"
|
||||
chmod -R 775 "${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache"
|
||||
echo "==> Rechte setzen (www-data nur wo noetig)"
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
DO_CHOWN=(chown -R)
|
||||
DO_CHMOD=(chmod -R)
|
||||
DO_FIND=(find)
|
||||
else
|
||||
DO_CHOWN=(sudo chown -R)
|
||||
DO_CHMOD=(sudo chmod -R)
|
||||
DO_FIND=(sudo find)
|
||||
fi
|
||||
"${DO_CHOWN[@]}" www-data:www-data "${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache" "${APP_DIR}/public/build"
|
||||
"${DO_CHMOD[@]}" 775 "${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache"
|
||||
"${DO_FIND[@]}" "${APP_DIR}/public/build" -type d -exec chmod 755 {} + 2>/dev/null || true
|
||||
"${DO_FIND[@]}" "${APP_DIR}/public/build" -type f -exec chmod 644 {} + 2>/dev/null || true
|
||||
|
||||
echo "==> Deploy erfolgreich"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user