diff --git a/.env.dist b/.env.dist index 3d3432078e46c524174043ddf0d81c54a6fdbdbd..bd056b43b9f3e81e5892cf4d303bac748e037548 100644 --- a/.env.dist +++ b/.env.dist @@ -3,7 +3,7 @@ # https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration ###> DOCKER ### -DOCKER_IMAGE_PHP=registry.gitlab.com/soluris/madis/php:1.0 +DOCKER_IMAGE_PHP=registry.gitlab.com/soluris/madis/php:1.1 DOCKER_IMAGE_NGINX=registry.gitlab.com/soluris/madis/nginx:1.0 HTTPD_PORT=8888 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ea621aa1312be96ef3909f8a52c0d62ec11b8851..1bd77ee1934432e8f53021d10ec1ab0e72ab63f8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ variables: DOCKER_DRIVER: overlay2 - DOCKER_IMAGE_PHP: registry.gitlab.com/soluris/madis/php:1.0 + DOCKER_IMAGE_PHP: registry.gitlab.com/soluris/madis/php:1.1 DOCKER_IMAGE_NGINX: registry.gitlab.com/soluris/madis/nginx:1.0 stages: diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 8f5afa518015206e4f56376b68bf379c0a1aee31..4c182edc302669a72401aa792d1d34ff75e1d809 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -15,15 +15,15 @@ services: - ./docker/nginx/default:/etc/nginx/sites-available/default:ro - .:/var/www/gestion-rgpd/:delegated depends_on: - - php-fpm + - php - php-fpm: - build: docker/php-fpm - container_name: php-fpm + php: + build: docker/php + container_name: php ports: - ${PHP_FPM_PORT}:9000 volumes: - - ./docker/php-fpm/fpm-pool.conf:/etc/php/7.1/fpm/pool.d/www.conf:ro + - ./docker/php/fpm-pool.conf:/etc/php/7.1/fpm/pool.d/www.conf:ro - .:/var/www/gestion-rgpd/:delegated working_dir: /var/www/gestion-rgpd/ depends_on: diff --git a/docker-compose.yml b/docker-compose.yml index 5d32b81e7e7336ea197ae688f654517629086707..28d85bf52c91e3eeda08951e26d395d865696a9e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,16 +16,16 @@ services: - ./docker/nginx/default:/etc/nginx/sites-available/default:ro - .:/var/www/gestion-rgpd/:delegated depends_on: - - php-fpm + - php - php-fpm: - build: docker/php-fpm + php: + build: docker/php image: $DOCKER_IMAGE_PHP - container_name: php-fpm + container_name: php ports: - ${PHP_FPM_PORT}:9000 volumes: - - ./docker/php-fpm/fpm-pool.conf:/etc/php/7.1/fpm/pool.d/www.conf:ro + - ./docker/php/fpm-pool.conf:/etc/php/7.1/fpm/pool.d/www.conf:ro - .:/var/www/gestion-rgpd/:delegated working_dir: /var/www/gestion-rgpd/ depends_on: diff --git a/docker-service b/docker-service index 4e2083b79c0e50db1f207a41b29f19267775317c..a81db7aee855c51f0fa5d364d4ed142e85e93b87 100755 --- a/docker-service +++ b/docker-service @@ -48,7 +48,7 @@ initialize() { build() { docker build docker/nginx -t nginx - docker build docker/php-fpm -t php-fpm + docker build docker/php -t php docker-compose -f docker-compose"$env".yml build } @@ -61,25 +61,25 @@ start() { install() { - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm 'until nc -z db 3306; do sleep 1; echo "Waiting for DB to come up..."; done' - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm "composer install --prefer-dist --no-interaction --optimize-autoloader && + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php 'until nc -z db 3306; do sleep 1; echo "Waiting for DB to come up..."; done' + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php "composer install --prefer-dist --no-interaction --optimize-autoloader && bin/console doctrine:database:create --if-not-exists && bin/console doctrine:migration:migrate -n && bin/console cache:clear --env=prod --no-debug && bin/console cache:warmup --env=prod --no-debug" # Load CSS & JS compilation - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm "yarn && yarn run encore production" + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php "yarn && yarn run encore production" } populate() { - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm "bin/console hautelook:fixtures:load -n" + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php "bin/console hautelook:fixtures:load -n" } serve() { if [ "$#" -ge 1 ]; then - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm "yarn && yarn run encore dev --$1" + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php "yarn && yarn run encore dev --$1" fi - docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php-fpm "yarn && yarn run encore dev" + docker-compose -f docker-compose"$env".yml run -T --rm --user=www-data --no-deps --entrypoint="/bin/bash -c" php "yarn && yarn run encore dev" } stop() { @@ -115,30 +115,30 @@ tests() { unitTests() { echo -e "\n\n\nUnit Test : Apps/benevoles-back/" - docker run --rm --user www-data --env-file=.env.test -v ${PWD}/:/var/www/gestion-rgpd/ -w /var/www/gestion-rgpd/ php-fpm bash -c "vendor/bin/phpunit" + docker run --rm --user www-data --env-file=.env.test -v ${PWD}/:/var/www/gestion-rgpd/ -w /var/www/gestion-rgpd/ php bash -c "vendor/bin/phpunit" } qualityTests() { - docker-compose -f docker-compose.test.yml up -d php-fpm + docker-compose -f docker-compose.test.yml up -d php # Code Style echo -e "\n\n\nCs Fixer :" - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm vendor/bin/php-cs-fixer fix --config=.php_cs.dist --dry-run --diff -vv + docker-compose -f docker-compose.test.yml exec -T --user www-data php vendor/bin/php-cs-fixer fix --config=.php_cs.dist --dry-run --diff -vv # Lint PHP files - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm php -l src/ - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm php -l features/ + docker-compose -f docker-compose.test.yml exec -T --user www-data php php -l src/ + docker-compose -f docker-compose.test.yml exec -T --user www-data php php -l features/ # Lint YAML files - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bin/console lint:yaml --env=prod config/ - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bin/console lint:yaml --env=prod src/ + docker-compose -f docker-compose.test.yml exec -T --user www-data php bin/console lint:yaml --env=prod config/ + docker-compose -f docker-compose.test.yml exec -T --user www-data php bin/console lint:yaml --env=prod src/ # Lint Twig files - #docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bin/console lint:twig --env=prod app/Resources/views/ + #docker-compose -f docker-compose.test.yml exec -T --user www-data php bin/console lint:twig --env=prod app/Resources/views/ # Bundles security check - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bin/console security:check + docker-compose -f docker-compose.test.yml exec -T --user www-data php bin/console security:check docker-compose -f docker-compose.test.yml down } @@ -156,17 +156,17 @@ functionalTests() { docker-compose -f docker-compose.test.yml up -d benevoles-back docker-compose -f docker-compose.test.yml ps - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bash -c 'until nc -z db 3306; do sleep 1; echo "Waiting for DB to come up..."; done' - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bash -c "bin/console doctrine:database:create --if-not-exists" - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bash -c "bin/console doctrine:schema:update --force" - docker-compose -f docker-compose.test.yml exec -T --user www-data php-fpm bash -c "vendor/bin/behat $paths -v --format=$format" + docker-compose -f docker-compose.test.yml exec -T --user www-data php bash -c 'until nc -z db 3306; do sleep 1; echo "Waiting for DB to come up..."; done' + docker-compose -f docker-compose.test.yml exec -T --user www-data php bash -c "bin/console doctrine:database:create --if-not-exists" + docker-compose -f docker-compose.test.yml exec -T --user www-data php bash -c "bin/console doctrine:schema:update --force" + docker-compose -f docker-compose.test.yml exec -T --user www-data php bash -c "vendor/bin/behat $paths -v --format=$format" docker-compose -f docker-compose.test.yml down } debug(){ - docker-compose -f docker-compose"$env".yml run -T --user=www-data --no-deps --entrypoint="/bin/bash -c" -e XDEBUG_CONFIG="idekey=PHPSTORM" -e PHP_IDE_CONFIG="serverName=localhost" php-fpm "php -dxdebug.remote_host=docker.for.mac.host.internal $@" + docker-compose -f docker-compose"$env".yml run -T --user=www-data --no-deps --entrypoint="/bin/bash -c" -e XDEBUG_CONFIG="idekey=PHPSTORM" -e PHP_IDE_CONFIG="serverName=localhost" php "php -dxdebug.remote_host=docker.for.mac.host.internal $@" } # Images management @@ -177,7 +177,7 @@ pushImages() { pushImagePhp() { docker pull $DOCKER_IMAGE_PHP || true - docker build --cache-from $DOCKER_IMAGE_PHP -t $DOCKER_IMAGE_PHP docker/php-fpm + docker build --cache-from $DOCKER_IMAGE_PHP -t $DOCKER_IMAGE_PHP docker/php docker push $DOCKER_IMAGE_PHP } diff --git a/docker/nginx/default b/docker/nginx/default index 2e7a185236b5ecd89d82a197c7bdad755bc43af0..3aa786a37d32d57d31d0e047cb569892a6a1926e 100644 --- a/docker/nginx/default +++ b/docker/nginx/default @@ -24,7 +24,7 @@ server { } # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default) - fastcgi_pass php-fpm:9000; + fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/gestion-rgpd/public$fastcgi_script_name; fastcgi_intercept_errors on; diff --git a/docker/php-fpm/Dockerfile b/docker/php-fpm/Dockerfile deleted file mode 100755 index b8f65954ca67f0700639c553ca1c2b904faa5245..0000000000000000000000000000000000000000 --- a/docker/php-fpm/Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -FROM ubuntu:16.04 - -ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update && apt-get -y upgrade && apt-get install -y software-properties-common python-software-properties apt-transport-https -RUN export LANG=C.UTF-8;add-apt-repository -y ppa:ondrej/php && apt-get update -RUN apt-get install -y libssl-dev php7.1-apcu php7.1-common php-fdomdocument php7.1-xml php7.1-cli \ - php7.1-common php7.1-curl php7.1-fpm php7.1-gd php7.1-intl php7.1-json \ - php7.1-mbstring php7.1-mysql php7.1-opcache php7.1-readline php7.1-soap \ - php7.1-xml php7.1-xdebug curl npm git zip sqlite3 php7.1-sqlite netcat - -RUN apt-get update && apt-get install -y php7.1-zip - -RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \ - apt-get install -y nodejs && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - apt-get update && apt-get install -y yarn - -RUN usermod -s /bin/bash www-data - -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ - chmod +x /usr/local/bin/composer && \ - composer global require hirak/prestissimo - -COPY fpm-pool.conf /etc/php/7.1/fpm/pool.d/www.conf -RUN touch /var/log/php7.1-fpm.log && chown www-data:www-data /var/log/php7.1-fpm.log -RUN mkdir -p /run/php/ /var/www/.composer/ -RUN chown www-data:www-data -R /run/php/ /var/www -RUN su www-data -c "composer global require hirak/prestissimo" - -RUN echo "xdebug.remote_enable=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.idekey=PHPSTORM" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.default_enable=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.remote_connect_back=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.remote_autostart=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.remote_enable=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.remote_host=docker.for.mac.host.internal" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.profiler_enable=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.profiler_enable_trigger=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini \ - && echo "xdebug.profiler_output_dir=/var/www/html/var/log" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini - -RUN echo "export PATH=$PATH\":$HOME/bin\"" >> /root/.bashrc - -RUN mkdir -p /var/www/gestion-grpd - -USER www-data - -WORKDIR /var/www/gestion-rgpd - -CMD ["/usr/sbin/php-fpm7.1", "-F"] diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile new file mode 100755 index 0000000000000000000000000000000000000000..e0e03bc9996bbe8c06920a3f3ae005e0616f248f --- /dev/null +++ b/docker/php/Dockerfile @@ -0,0 +1,95 @@ +FROM debian:stretch + +ENV DEBIAN_FRONTEND noninteractive + + +# BASIC INSTALL +# ============= + +RUN apt-get update && apt-get -y upgrade && apt-get install -y \ + apt-transport-https \ + apt-utils \ + ca-certificates \ + curl \ + git \ + gnupg2 \ + lsb-release \ + netcat \ + nodejs \ + wget \ + zip + +RUN usermod -s /bin/bash www-data + + +# PHP INSTALL +# =========== + +# Add PHP repository +RUN wget https://packages.sury.org/php/apt.gpg +RUN apt-key add apt.gpg +RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.list + +# Install PHP-FPM +RUN apt update && apt install -y \ + php7.1 \ + php7.1-common \ + php7.1-curl \ + php7.1-fpm \ + php7.1-intl \ + php7.1-json \ + php7.1-mbstring \ + php7.1-mysql \ + php7.1-opcache \ +# Uncomment in order to enable xdebug +# php7.1-xdebug \ + php7.1-xml \ + php7.1-zip + +# Configure PHP +COPY fpm-pool.conf /etc/php/7.1/fpm/pool.d/www.conf +RUN touch /var/log/php7.1-fpm.log && chown www-data:www-data /var/log/php7.1-fpm.log +RUN mkdir -p /run/php/ /var/www/.composer/ +RUN chown www-data:www-data -R /run/php/ /var/www + +# Configure XDebug +# Uncomment in order to enable xdebug +#RUN echo "xdebug.remote_enable=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.idekey=PHPSTORM" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.default_enable=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.remote_connect_back=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.remote_autostart=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.remote_enable=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.remote_host=docker.for.mac.host.internal" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.profiler_enable=0" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.profiler_enable_trigger=1" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini && \ +# echo "xdebug.profiler_output_dir=/var/www/html/var/log" >> /etc/php/7.1/fpm/conf.d/20-xdebug.ini + +# Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN chmod +x /usr/local/bin/composer +RUN su www-data -c "composer global require hirak/prestissimo" + + +# YARN INSTALL (used for webpack-encore) +# ====================================== + +RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - +RUN apt-get install -y nodejs +RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - +RUN apt-get update && apt-get install -y yarn + + +# FINISH CONFIGURATION +# ==================== + +# Clean APT +RUN rm -rf /var/lib/apt/lists/* + +# Define Projet configuration +USER www-data +WORKDIR /var/www/gestion-rgpd + +# Launch PHP-FPM +CMD ["/usr/sbin/php-fpm7.1", "-F"] diff --git a/docker/php-fpm/fpm-pool.conf b/docker/php/fpm-pool.conf similarity index 100% rename from docker/php-fpm/fpm-pool.conf rename to docker/php/fpm-pool.conf diff --git a/docker/php-fpm/php.ini b/docker/php/php.ini similarity index 100% rename from docker/php-fpm/php.ini rename to docker/php/php.ini