++ Primo Caricamento

This commit is contained in:
2026-03-30 19:15:13 +02:00
commit 663a68d59b
47 changed files with 3561 additions and 0 deletions

112
docker/php/entrypoint.sh Normal file
View File

@@ -0,0 +1,112 @@
#!/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 "$@"