You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.8 KiB
75 lines
2.8 KiB
#!/bin/sh |
|
set -e |
|
|
|
if [ "$1" = 'frankenphp' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then |
|
# Install the project the first time PHP is started |
|
# After the installation, the following block can be deleted |
|
if [ ! -f composer.json ]; then |
|
rm -Rf tmp/ |
|
composer create-project "symfony/skeleton $SYMFONY_VERSION" tmp --stability="$STABILITY" --prefer-dist --no-progress --no-interaction --no-install |
|
|
|
cd tmp |
|
cp -Rp . .. |
|
cd - |
|
rm -Rf tmp/ |
|
|
|
composer require "php:>=$PHP_VERSION" runtime/frankenphp-symfony |
|
composer config --json extra.symfony.docker 'true' |
|
|
|
if grep -q ^DATABASE_URL= .env; then |
|
echo 'To finish the installation please press Ctrl+C to stop Docker Compose and run: docker compose up --build -d --wait' |
|
sleep infinity |
|
fi |
|
fi |
|
|
|
if [ -z "$(ls -A 'vendor/' 2>/dev/null)" ]; then |
|
composer install --prefer-dist --no-progress --no-interaction --no-scripts |
|
# Run composer scripts manually, but skip importmap:install (we use npm instead) |
|
if [ "$APP_ENV" = "dev" ]; then |
|
php bin/console cache:clear --no-interaction || true |
|
php bin/console assets:install public --no-interaction || true |
|
fi |
|
fi |
|
|
|
# Importmap packages are installed via npm during Docker build |
|
# In dev mode with volume mounts, install npm packages if node_modules is missing |
|
if [ "$APP_ENV" = "dev" ] && [ -z "$(ls -A 'node_modules/' 2>/dev/null)" ] && [ -f "package.json" ]; then |
|
echo 'Installing npm packages for dev environment...' |
|
npm ci --prefer-offline --no-audit --no-fund 2>&1 || npm install --prefer-offline --no-audit --no-fund 2>&1 |
|
if [ -f "scripts/npm-to-importmap.php" ]; then |
|
php scripts/npm-to-importmap.php || echo 'Warning: npm-to-importmap.php failed' |
|
fi |
|
fi |
|
|
|
if grep -q ^DATABASE_URL= .env; then |
|
echo 'Waiting for database to be ready...' |
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=60 |
|
until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(php bin/console dbal:run-sql -q "SELECT 1" 2>&1); do |
|
if [ $? -eq 255 ]; then |
|
# If the Doctrine command exits with 255, an unrecoverable error occurred |
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=0 |
|
break |
|
fi |
|
sleep 1 |
|
ATTEMPTS_LEFT_TO_REACH_DATABASE=$((ATTEMPTS_LEFT_TO_REACH_DATABASE - 1)) |
|
echo "Still waiting for database to be ready... Or maybe the database is not reachable. $ATTEMPTS_LEFT_TO_REACH_DATABASE attempts left." |
|
done |
|
|
|
if [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ]; then |
|
echo 'The database is not up or not reachable:' |
|
echo "$DATABASE_ERROR" |
|
exit 1 |
|
else |
|
echo 'The database is now ready and reachable' |
|
fi |
|
|
|
if [ "$( find ./migrations -iname '*.php' -print -quit )" ]; then |
|
php bin/console doctrine:migrations:migrate --no-interaction --all-or-nothing |
|
fi |
|
fi |
|
|
|
setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX var |
|
setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX var |
|
fi |
|
|
|
exec docker-php-entrypoint "$@"
|
|
|