#!/usr/bin/env bash set -Eeuo pipefail # Usage: # ./deploy.sh # Optional env vars: # APP_DIR=/var/www/einkauf # PHP_BIN=/usr/bin/php # COMPOSER_BIN=/usr/local/bin/composer # NPM_BIN=/usr/bin/npm # RUN_SEED=true APP_DIR="${APP_DIR:-/var/www/einkauf}" PHP_BIN="${PHP_BIN:-/usr/bin/php}" COMPOSER_BIN="${COMPOSER_BIN:-/usr/local/bin/composer}" NPM_BIN="${NPM_BIN:-/usr/bin/npm}" RUN_SEED="${RUN_SEED:-false}" 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 ug+rwX "${APP_DIR}/storage" "${APP_DIR}/bootstrap/cache" echo "==> Deploy erfolgreich"