Fix: Frontend-Build-Sicherung + Auto-Rebuild bei fehlendem manifest.json
- frontend_build_quiet: altes public/build/ als .bak sichern, bei npm-Fehler wiederherstellen → Site bleibt immer erreichbar - fix_permissions: wenn manifest.json fehlt, automatisch neu bauen → kein manueller Eingriff nach fehlgeschlagenem Update nötig Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main v1.1.315
parent
1d18e80749
commit
09f9cf3553
|
|
@ -113,21 +113,25 @@ frontend_build_quiet() {
|
||||||
chmod 0644 "$LOG"
|
chmod 0644 "$LOG"
|
||||||
|
|
||||||
echo "[i] Frontend: vorbereiten …"
|
echo "[i] Frontend: vorbereiten …"
|
||||||
# Build-Ziele & Temp besitzbar machen
|
|
||||||
as_app "mkdir -p '${APP_DIR}/public/build' '${APP_DIR}/node_modules' '${APP_DIR}/.vite' '${APP_DIR}/.npm-cache'"
|
as_app "mkdir -p '${APP_DIR}/public/build' '${APP_DIR}/node_modules' '${APP_DIR}/.vite' '${APP_DIR}/.npm-cache'"
|
||||||
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/public/build" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" "${APP_DIR}/.npm-cache" || true
|
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" "${APP_DIR}/.npm-cache" 2>/dev/null || true
|
||||||
chmod -R g+rwX "${APP_DIR}/public/build" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" || true
|
|
||||||
|
|
||||||
# evtl. störrische Reste entfernen (vermeidet EACCES beim Unlink/Rimraf)
|
# Altes Build-Verzeichnis sichern — wird erst nach erfolgreichem Build ersetzt
|
||||||
rm -rf "${APP_DIR}/node_modules/.vite" "${APP_DIR}/public/build/"* 2>/dev/null || true
|
local BUILD_DIR="${APP_DIR}/public/build"
|
||||||
|
local BUILD_BAK="${APP_DIR}/public/build.bak"
|
||||||
|
rm -rf "${BUILD_BAK}" 2>/dev/null || true
|
||||||
|
[[ -d "${BUILD_DIR}" ]] && cp -a "${BUILD_DIR}" "${BUILD_BAK}" 2>/dev/null || true
|
||||||
|
|
||||||
|
rm -rf "${APP_DIR}/node_modules/.vite" "${BUILD_DIR}/"* 2>/dev/null || true
|
||||||
|
chown -R "$APP_USER":"$APP_GROUP" "${BUILD_DIR}" 2>/dev/null || true
|
||||||
|
|
||||||
# npm Config (kein Fund/Audit, eigener Cache unter App-User)
|
|
||||||
as_app "printf 'fund=false\naudit=false\ncache=${APP_DIR}/.npm-cache\n' > ~/.npmrc" >>"$LOG" 2>&1 || true
|
as_app "printf 'fund=false\naudit=false\ncache=${APP_DIR}/.npm-cache\n' > ~/.npmrc" >>"$LOG" 2>&1 || true
|
||||||
|
|
||||||
echo "[i] Frontend: Dependencies … (Details: $LOG)"
|
echo "[i] Frontend: Dependencies … (Details: $LOG)"
|
||||||
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm ci --no-audit --no-fund --no-progress" >>"$LOG" 2>&1; then
|
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm ci --no-audit --no-fund --no-progress" >>"$LOG" 2>&1; then
|
||||||
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm install --no-audit --no-fund --no-progress" >>"$LOG" 2>&1; then
|
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm install --no-audit --no-fund --no-progress" >>"$LOG" 2>&1; then
|
||||||
echo "[!] npm install fehlgeschlagen. Letzte 60 Zeilen:"
|
echo "[!] npm install fehlgeschlagen — altes Build wird wiederhergestellt."
|
||||||
|
[[ -d "${BUILD_BAK}" ]] && cp -a "${BUILD_BAK}/." "${BUILD_DIR}/" 2>/dev/null || true
|
||||||
tail -n 60 "$LOG" || true
|
tail -n 60 "$LOG" || true
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
@ -135,16 +139,16 @@ frontend_build_quiet() {
|
||||||
|
|
||||||
echo "[i] Frontend: Build … (Details: $LOG)"
|
echo "[i] Frontend: Build … (Details: $LOG)"
|
||||||
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm run build --silent --loglevel=warn" >>"$LOG" 2>&1; then
|
if ! as_app "cd '${APP_DIR}' && ${NPM_ENV} npm run build --silent --loglevel=warn" >>"$LOG" 2>&1; then
|
||||||
echo "[!] Build fehlgeschlagen. Letzte 80 Zeilen:"
|
echo "[!] Build fehlgeschlagen — altes Build wird wiederhergestellt."
|
||||||
|
[[ -d "${BUILD_BAK}" ]] && cp -a "${BUILD_BAK}/." "${BUILD_DIR}/" 2>/dev/null || true
|
||||||
tail -n 80 "$LOG" || true
|
tail -n 80 "$LOG" || true
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Nach dem Build noch einmal Rechte begradigen
|
rm -rf "${BUILD_BAK}" 2>/dev/null || true
|
||||||
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/public/build" || true
|
chown -R "$APP_USER":"$APP_GROUP" "${BUILD_DIR}" || true
|
||||||
find "${APP_DIR}/public/build" -type d -exec chmod 2775 {} \; 2>/dev/null || true
|
find "${BUILD_DIR}" -type d -exec chmod 2775 {} \; 2>/dev/null || true
|
||||||
find "${APP_DIR}/public/build" -type f -exec chmod 0664 {} \; 2>/dev/null || true
|
find "${BUILD_DIR}" -type f -exec chmod 0664 {} \; 2>/dev/null || true
|
||||||
|
|
||||||
echo "[✓] Frontend gebaut."
|
echo "[✓] Frontend gebaut."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,21 +167,25 @@ _sudoers_add(){
|
||||||
chmod 440 "$file"
|
chmod 440 "$file"
|
||||||
}
|
}
|
||||||
fix_permissions(){
|
fix_permissions(){
|
||||||
# Eigentümer + Gruppe korrigieren
|
|
||||||
chown -R "${APP_USER}:${APP_GROUP}" \
|
chown -R "${APP_USER}:${APP_GROUP}" \
|
||||||
"${APP_DIR}/bootstrap/cache" \
|
"${APP_DIR}/bootstrap/cache" \
|
||||||
"${APP_DIR}/storage" \
|
"${APP_DIR}/storage" \
|
||||||
"${APP_DIR}/public/build" 2>/dev/null || true
|
"${APP_DIR}/public/build" 2>/dev/null || true
|
||||||
# Gruppe Schreibrecht + setgid (neue Dateien erben Gruppe automatisch)
|
|
||||||
chmod -R ug+rwX \
|
chmod -R ug+rwX \
|
||||||
"${APP_DIR}/bootstrap/cache" \
|
"${APP_DIR}/bootstrap/cache" \
|
||||||
"${APP_DIR}/storage" 2>/dev/null || true
|
"${APP_DIR}/storage" 2>/dev/null || true
|
||||||
find "${APP_DIR}/bootstrap/cache" "${APP_DIR}/storage" \
|
find "${APP_DIR}/bootstrap/cache" "${APP_DIR}/storage" \
|
||||||
-type d -exec chmod g+s {} \; 2>/dev/null || true
|
-type d -exec chmod g+s {} \; 2>/dev/null || true
|
||||||
# Cache als www-data (PHP-FPM-User) neu aufbauen → keine Rechteprobleme
|
|
||||||
|
# Frontend-Assets fehlen → automatisch neu bauen (z.B. nach fehlgeschlagenem Update)
|
||||||
|
if [[ ! -f "${APP_DIR}/public/build/manifest.json" ]]; then
|
||||||
|
echo "[!] manifest.json fehlt — Frontend wird neu gebaut …"
|
||||||
|
frontend_build_quiet || true
|
||||||
|
fi
|
||||||
|
|
||||||
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" optimize:clear --quiet 2>/dev/null || true
|
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" optimize:clear --quiet 2>/dev/null || true
|
||||||
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" config:cache --quiet 2>/dev/null || true
|
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" config:cache --quiet 2>/dev/null || true
|
||||||
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" route:cache --quiet 2>/dev/null || true
|
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" route:cache --quiet 2>/dev/null || true
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_system(){
|
ensure_system(){
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue