87 lines
2.6 KiB
Bash
Executable File
87 lines
2.6 KiB
Bash
Executable File
#!/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
|