#!/bin/sh set -e # If running as root, fix permissions on volumes if [ "$(id -u)" = "0" ]; then mkdir -p /var/www/html/storage/framework/cache/data mkdir -p /var/www/html/storage/framework/sessions mkdir -p /var/www/html/storage/framework/testing mkdir -p /var/www/html/storage/framework/views mkdir -p /var/www/html/storage/logs mkdir -p /var/www/html/storage/app/public mkdir -p /var/www/html/storage/app/temp mkdir -p /var/www/html/public/photos chown -R app:app /var/www/html/storage /var/www/html/public/photos fi # 1. Wait for MySQL echo "Waiting for MySQL..." for i in $(seq 1 30); do php -r " \$pdo = @new PDO( 'mysql:host=' . getenv('DB_HOST') . ';port=' . getenv('DB_PORT') . ';dbname=' . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'), [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); echo 'OK'; " 2>/dev/null | grep -q 'OK' && break echo " attempt $i/30 — MySQL not ready, retrying in 2s..." sleep 2 done # Verify connection was established php -r " \$pdo = @new PDO( 'mysql:host=' . getenv('DB_HOST') . ';port=' . getenv('DB_PORT') . ';dbname=' . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'), [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] ); " || { echo "Failed to connect to MySQL after 60s"; exit 1; } echo "MySQL is ready." # 2. Generate APP_KEY if missing if [ -z "$(php -r "echo getenv('APP_KEY') ?: '';")" ]; then echo "Generating APP_KEY..." php artisan key:generate --force fi # 3. Import SQL dump if tables don't exist TABLE_COUNT=$(php -r " \$pdo = @new PDO( 'mysql:host=' . getenv('DB_HOST') . ';port=' . getenv('DB_PORT') . ';dbname=' . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD') ); \$stmt = \$pdo->query('SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = DATABASE()'); echo \$stmt->fetchColumn(); ") if [ "$TABLE_COUNT" -eq 0 ]; then echo "Importing SQL dump..." mysql -h "$DB_HOST" --ssl=0 -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" < /var/www/html/humicpro_cleftlipdata.sql echo "SQL dump imported." fi # 4. Run migrations echo "Running migrations..." php artisan migrate --force # 5. Cache echo "Optimizing cache..." php artisan config:cache php artisan route:cache php artisan view:cache # 6. Storage link php artisan storage:link 2>/dev/null || true # 7. Switch to app user and start PHP-FPM if [ "$(id -u)" = "0" ]; then exec su-exec app php-fpm else exec php-fpm fi