Einkaufsliste/deploy.sh
Stefan Zwischenbrugger 1de5d089e9 composer.lock: doctrine/dbal und Abhaengigkeiten eintragen
Behebt composer install auf dem Server (Lock passt zu composer.json).

deploy.sh: Hinweis zu Rechten nach chown www-data.

Made-with: Cursor
2026-03-30 21:15:56 +02:00

90 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
# Usage:
# ./deploy.sh
# Optional env vars:
# APP_DIR=/web/einkauf (Standard; anpassen wenn die App woanders liegt)
# PHP_BIN=/usr/bin/php
# COMPOSER_BIN=/usr/bin/composer (optional; sonst PATH oder uebliche Pfade)
# 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).
APP_DIR="${APP_DIR:-/web/einkauf}"
PHP_BIN="${PHP_BIN:-/usr/bin/php}"
NPM_BIN="${NPM_BIN:-/usr/bin/npm}"
RUN_SEED="${RUN_SEED:-false}"
if [ -n "${COMPOSER_BIN:-}" ]; then
:
elif command -v composer >/dev/null 2>&1; then
COMPOSER_BIN="$(command -v composer)"
elif [ -x /usr/bin/composer ]; then
COMPOSER_BIN=/usr/bin/composer
elif [ -x /usr/local/bin/composer ]; then
COMPOSER_BIN=/usr/local/bin/composer
else
echo "Fehler: composer nicht gefunden (PATH, /usr/bin/composer, /usr/local/bin/composer)." >&2
echo "Installiere Composer oder setze z. B. COMPOSER_BIN=/pfad/zu/composer" >&2
exit 1
fi
cd "${APP_DIR}"
echo "==> Deploy startet in ${APP_DIR}"
if [ ! -f "artisan" ]; then
echo "Fehler: artisan nicht gefunden in ${APP_DIR}" >&2
exit 1
fi
echo "==> Wartungsmodus aktivieren"
"${PHP_BIN}" artisan down --refresh=15 --retry=60 --secret="deploy-bypass" || true
cleanup() {
echo "==> Wartungsmodus deaktivieren"
"${PHP_BIN}" artisan up || true
}
trap cleanup EXIT
echo "==> Code aktualisieren"
git fetch --all --prune
git reset --hard origin/main
echo "==> PHP-Abhaengigkeiten installieren"
"${COMPOSER_BIN}" install --no-dev --prefer-dist --optimize-autoloader --no-interaction
echo "==> Frontend-Abhaengigkeiten installieren"
"${NPM_BIN}" ci
echo "==> Frontend builden"
"${NPM_BIN}" run build
echo "==> Datenbank migrieren"
"${PHP_BIN}" artisan migrate --force
if [ "${RUN_SEED}" = "true" ]; then
echo "==> Seeder ausfuehren"
"${PHP_BIN}" artisan db:seed --force
fi
echo "==> Storage-Link sicherstellen"
"${PHP_BIN}" artisan storage:link || true
echo "==> Caches aufbauen"
"${PHP_BIN}" artisan optimize:clear
"${PHP_BIN}" artisan config:cache
"${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 "==> Deploy erfolgreich"