113 lines
6.2 KiB
Bash
113 lines
6.2 KiB
Bash
#!/bin/bash
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Entrypoint: eseguito ad ogni avvio del container.
|
|
# Si occupa di preparare l'applicazione la prima volta e ad ogni restart.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
set -e # Interrompi se un comando fallisce
|
|
|
|
echo "────────────────────────────────────────"
|
|
echo " Avvio Portale Clienti"
|
|
echo "────────────────────────────────────────"
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 1. Installa le dipendenze PHP con Composer
|
|
# --no-interaction → niente domande interattive
|
|
# --optimize-autoloader → più veloce in produzione
|
|
# ─────────────────────────────────────────────
|
|
if [ ! -d "vendor" ]; then
|
|
echo "→ vendor/ non trovata. Eseguo composer install..."
|
|
composer install --no-interaction --optimize-autoloader
|
|
else
|
|
echo "→ vendor/ già presente. Salto composer install."
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 2. Genera APP_KEY se non è impostata
|
|
# La chiave è usata per cifrare sessioni e cookie.
|
|
# ─────────────────────────────────────────────
|
|
if grep -q "^APP_KEY=$" .env 2>/dev/null || ! grep -q "^APP_KEY=" .env 2>/dev/null; then
|
|
echo "→ APP_KEY non trovata. La genero..."
|
|
php artisan key:generate --no-interaction
|
|
else
|
|
echo "→ APP_KEY già impostata."
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 3. Permessi sulle cartelle di storage
|
|
# Laravel deve poter scrivere qui (log, cache, sessioni…)
|
|
# ─────────────────────────────────────────────
|
|
echo "→ Imposto permessi su storage/ e bootstrap/cache/"
|
|
chmod -R 775 storage bootstrap/cache
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 4. Crea il link symbolico storage → public/storage
|
|
# Necessario per servire file caricati dall'utente
|
|
# ─────────────────────────────────────────────
|
|
if [ ! -L "public/storage" ]; then
|
|
echo "→ Creo symlink public/storage → storage/app/public"
|
|
php artisan storage:link --no-interaction
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 5. Attende che il database sia pronto
|
|
# MySQL impiega qualche secondo ad avviarsi.
|
|
# ─────────────────────────────────────────────
|
|
echo "→ Attendo che il database sia disponibile..."
|
|
MAX_TRIES=30
|
|
TRIES=0
|
|
until php artisan db:monitor 2>/dev/null || [ $TRIES -ge $MAX_TRIES ]; do
|
|
echo " Database non pronto, riprovo tra 2s... ($((TRIES+1))/$MAX_TRIES)"
|
|
sleep 2
|
|
TRIES=$((TRIES+1))
|
|
done
|
|
|
|
if [ $TRIES -ge $MAX_TRIES ]; then
|
|
echo "⚠ Database non raggiungibile dopo $MAX_TRIES tentativi."
|
|
echo " Continuo comunque (potresti essere in modalità manutenzione)."
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 6. Esegui le migration
|
|
# --force → necessario in ambiente non-TTY (es. Docker)
|
|
# Le migration vengono eseguite solo se ci sono nuove
|
|
# ─────────────────────────────────────────────
|
|
echo "→ Eseguo le migration del database..."
|
|
php artisan migrate --force --no-interaction
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 7. Esegui i seeder solo al primo avvio
|
|
# Controlla se la tabella settings è vuota
|
|
# ─────────────────────────────────────────────
|
|
SETTINGS_COUNT=$(php artisan tinker --execute="echo \App\Models\Setting::count();" 2>/dev/null | tail -1 || echo "0")
|
|
if [ "$SETTINGS_COUNT" = "0" ]; then
|
|
echo "→ Tabella settings vuota. Eseguo i seeder..."
|
|
php artisan db:seed --force --no-interaction
|
|
else
|
|
echo "→ Dati già presenti. Salto i seeder."
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────
|
|
# 8. Ottimizzazioni (cache config, routes, views)
|
|
# In development potrebbe essere più utile saltare questo,
|
|
# in produzione invece migliora le performance.
|
|
# ─────────────────────────────────────────────
|
|
if [ "${APP_ENV}" = "production" ]; then
|
|
echo "→ Ambiente produzione: ottimizzazione cache..."
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
php artisan view:cache
|
|
else
|
|
echo "→ Ambiente development: svuoto cache esistente..."
|
|
php artisan config:clear
|
|
php artisan route:clear
|
|
php artisan view:clear
|
|
fi
|
|
|
|
echo "────────────────────────────────────────"
|
|
echo " Portale Clienti pronto!"
|
|
echo " URL: http://localhost:${NGINX_PORT:-8080}"
|
|
echo "────────────────────────────────────────"
|
|
|
|
# Avvia il processo principale (php-fpm)
|
|
exec "$@"
|