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"
|
||||
|
||||
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'"
|
||||
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/public/build" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" "${APP_DIR}/.npm-cache" || true
|
||||
chmod -R g+rwX "${APP_DIR}/public/build" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" || true
|
||||
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/node_modules" "${APP_DIR}/.vite" "${APP_DIR}/.npm-cache" 2>/dev/null || true
|
||||
|
||||
# evtl. störrische Reste entfernen (vermeidet EACCES beim Unlink/Rimraf)
|
||||
rm -rf "${APP_DIR}/node_modules/.vite" "${APP_DIR}/public/build/"* 2>/dev/null || true
|
||||
# Altes Build-Verzeichnis sichern — wird erst nach erfolgreichem Build ersetzt
|
||||
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
|
||||
|
||||
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 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
|
||||
return 1
|
||||
fi
|
||||
|
|
@ -135,16 +139,16 @@ frontend_build_quiet() {
|
|||
|
||||
echo "[i] Frontend: Build … (Details: $LOG)"
|
||||
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
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Nach dem Build noch einmal Rechte begradigen
|
||||
chown -R "$APP_USER":"$APP_GROUP" "${APP_DIR}/public/build" || true
|
||||
find "${APP_DIR}/public/build" -type d -exec chmod 2775 {} \; 2>/dev/null || true
|
||||
find "${APP_DIR}/public/build" -type f -exec chmod 0664 {} \; 2>/dev/null || true
|
||||
|
||||
rm -rf "${BUILD_BAK}" 2>/dev/null || true
|
||||
chown -R "$APP_USER":"$APP_GROUP" "${BUILD_DIR}" || true
|
||||
find "${BUILD_DIR}" -type d -exec chmod 2775 {} \; 2>/dev/null || true
|
||||
find "${BUILD_DIR}" -type f -exec chmod 0664 {} \; 2>/dev/null || true
|
||||
echo "[✓] Frontend gebaut."
|
||||
}
|
||||
|
||||
|
|
@ -163,21 +167,25 @@ _sudoers_add(){
|
|||
chmod 440 "$file"
|
||||
}
|
||||
fix_permissions(){
|
||||
# Eigentümer + Gruppe korrigieren
|
||||
chown -R "${APP_USER}:${APP_GROUP}" \
|
||||
"${APP_DIR}/bootstrap/cache" \
|
||||
"${APP_DIR}/storage" \
|
||||
"${APP_DIR}/public/build" 2>/dev/null || true
|
||||
# Gruppe Schreibrecht + setgid (neue Dateien erben Gruppe automatisch)
|
||||
chmod -R ug+rwX \
|
||||
"${APP_DIR}/bootstrap/cache" \
|
||||
"${APP_DIR}/storage" 2>/dev/null || true
|
||||
find "${APP_DIR}/bootstrap/cache" "${APP_DIR}/storage" \
|
||||
-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" 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" config:cache --quiet 2>/dev/null || true
|
||||
sudo -u "${APP_GROUP}" php "${APP_DIR}/artisan" route:cache --quiet 2>/dev/null || true
|
||||
}
|
||||
|
||||
ensure_system(){
|
||||
|
|
|
|||
Loading…
Reference in New Issue