++ Primo Caricamento
This commit is contained in:
112
docker/php/entrypoint.sh
Normal file
112
docker/php/entrypoint.sh
Normal 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 "$@"
|
||||
Reference in New Issue
Block a user