diff --git a/Dockerfile b/Dockerfile index 85a6c96..ae2bf6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,6 @@ RUN apk add --no-cache \ gettext \ git \ gnu-libiconv \ - jq \ ; # install gnu-libiconv and set LD_PRELOAD env to make iconv work fully on Alpine image. @@ -82,12 +81,17 @@ ENV PATH="${PATH}:/root/.composer/vendor/bin" WORKDIR /srv/app +# Allow to choose skeleton +ARG SKELETON="symfony/skeleton" +ENV SKELETON ${SKELETON} + # Allow to use development versions of Symfony ARG STABILITY="stable" -ENV STABILITY ${STABILITY:-stable} +ENV STABILITY ${STABILITY} # Allow to select skeleton version ARG SYMFONY_VERSION="" +ENV SYMFONY_VERSION ${SYMFONY_VERSION} # Download the Symfony skeleton and leverage Docker cache layers RUN composer create-project "symfony/skeleton ${SYMFONY_VERSION}" . --stability=$STABILITY --prefer-dist --no-dev --no-progress --no-interaction; \ diff --git a/docker-compose.yml b/docker-compose.yml index 7a096c5..c51c74e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: target: symfony_php args: SYMFONY_VERSION: ${SYMFONY_VERSION:-} + SKELETON: ${SKELETON:-symfony/skeleton} STABILITY: ${STABILITY:-stable} restart: unless-stopped volumes: @@ -23,7 +24,6 @@ services: MERCURE_URL: ${CADDY_MERCURE_URL:-http://caddy/.well-known/mercure} MERCURE_PUBLIC_URL: https://${SERVER_NAME:-localhost}/.well-known/mercure MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!} - SYMFONY_VERSION: caddy: build: diff --git a/docker/php/docker-entrypoint.sh b/docker/php/docker-entrypoint.sh index 4dd185e..d78ccc4 100755 --- a/docker/php/docker-entrypoint.sh +++ b/docker/php/docker-entrypoint.sh @@ -17,19 +17,27 @@ if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'bin/console' ]; then # The first time volumes are mounted, the project needs to be recreated if [ ! -f composer.json ]; then - composer create-project "symfony/skeleton $SYMFONY_VERSION" tmp --stability=$STABILITY --prefer-dist --no-progress --no-interaction - jq '.extra.symfony.docker=true' tmp/composer.json >tmp/composer.tmp.json - rm tmp/composer.json - mv tmp/composer.tmp.json tmp/composer.json + CREATION=1 + composer create-project "$SKELETON $SYMFONY_VERSION" tmp --stability="$STABILITY" --prefer-dist --no-progress --no-interaction --no-install + + cd tmp + composer config --json extra.symfony.docker 'true' + cp -Rp . .. + cd - - cp -Rp tmp/. . rm -Rf tmp/ elif [ "$APP_ENV" != 'prod' ]; then rm -f .env.local.php - composer install --prefer-dist --no-progress --no-interaction fi + composer install --prefer-dist --no-progress --no-interaction + if grep -q ^DATABASE_URL= .env; then + if [ "$CREATION" = "1" ]; then + echo "To finish the installation please press Ctrl+C to stop Docker Compose and run: docker-compose up --build" + sleep infinity + fi + echo "Waiting for db to be ready..." ATTEMPTS_LEFT_TO_REACH_DATABASE=60 until [ $ATTEMPTS_LEFT_TO_REACH_DATABASE -eq 0 ] || DATABASE_ERROR=$(bin/console dbal:run-sql "SELECT 1" 2>&1); do diff --git a/docs/build.md b/docs/build.md index b6a6a10..71a88fa 100644 --- a/docs/build.md +++ b/docs/build.md @@ -1,24 +1,33 @@ # Build Options +## Selecting a Symfony Skeleton + +By default, Symfony Docker will install the minimalist skeleton. +To install the ["website skeleton"](https://symfony.com/doc/current/setup.html#creating-symfony-applications), use the following command: + + SKELETON=symfony/website-skeleton docker-compose up --build + ## Selecting a Specific Symfony Version Use the `SYMFONY_VERSION` environment variable to select a specific Symfony version. For instance, use the following command to install Symfony 4.4: - $ SYMFONY_VERSION=4.4.* docker-compose up --build + SYMFONY_VERSION=4.4.* docker-compose up --build + +## Installing Development Versions of Symfony To install a non-stable version of Symfony, use the `STABILITY` environment variable during the build. The value must be [a valid Composer stability option](https://getcomposer.org/doc/04-schema.md#minimum-stability)) . For instance, use the following command to use the `master` branch of Symfony: - $ STABILITY=dev docker-compose up --build + STABILITY=dev docker-compose up --build ## Customizing the Server Name Use the `SERVER_NAME` environment variable to define your custom server name(s). - $ SERVER_NAME="symfony.wip, caddy:80" docker-compose up --build + SERVER_NAME="symfony.wip, caddy:80" docker-compose up --build If you use Mercure, keep `caddy:80` in the list to allow the PHP container to request the caddy service. diff --git a/docs/production.md b/docs/production.md index 37a19d7..3858be0 100644 --- a/docs/production.md +++ b/docs/production.md @@ -82,7 +82,7 @@ Alternatively, if you don't want to expose an HTTPS server but only an HTTP one, SERVER_NAME=:80 \ APP_SECRET=ChangeMe \ CADDY_MERCURE_JWT_SECRET=ChangeMe \ --docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d +docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` ## Deploying on Multiple Nodes diff --git a/docs/xdebug.md b/docs/xdebug.md index 63563ea..6c7938c 100644 --- a/docs/xdebug.md +++ b/docs/xdebug.md @@ -51,13 +51,17 @@ services: Then run: - $ docker-compose -f docker-compose.yml -f docker-compose.debug.yml up -d +```console +docker-compose -f docker-compose.yml -f docker-compose.debug.yml up -d +``` ## Troubleshooting Inspect the installation with the following command. The requested Xdebug version should be displayed in the output. - $ docker-compose exec php php --version - - PHP ... - with Xdebug v3.0.4 ... +```console +$ docker-compose exec php php --version + +PHP ... + with Xdebug v3.0.4 ... +```