From 4a634070d1f1c4db52a5b93e2917adffa86bbe6e Mon Sep 17 00:00:00 2001 From: Arthur de Moulins Date: Fri, 28 Feb 2020 15:46:19 +0100 Subject: [PATCH] optimize docker build --- .dockerignore | 35 +++++++++++++------ .env | 2 +- Dockerfile | 12 +++---- docker-compose.override.yml | 14 ++++---- docker/nginx/entrypoint.sh | 7 ---- docker/nginx/root/entrypoint.sh | 7 ++++ docker/nginx/{ => root}/etc/nginx/nginx.conf | 0 docker/nginx/{ => root}/nginx.conf.sample | 0 docker/phraseanet-debug/entrypoint.sh | 9 ----- .../usr/bin/docker-get-host-ip | 4 --- .../usr/bin/docker-xdebug-disable | 5 --- .../usr/bin/docker-xdebug-enable | 9 ----- .../{phraseanet => }/auto-install.sh | 5 ++- docker/phraseanet/entrypoint.sh | 29 +++++++++++++++ docker/phraseanet/phraseanet/entrypoint.sh | 25 ------------- .../phraseanet/worker/entrypoint.sh | 16 --------- .../phraseanet/worker/scheduler-run.sh | 3 -- .../usr/local/etc/php-fpm.d/www.conf.default | 0 .../usr/local/etc/php-fpm.d/zz-docker.conf | 0 docker/phraseanet/worker/entrypoint.sh | 18 ++++++++++ docker/phraseanet/worker/scheduler-run.sh | 3 ++ ..._CG__AlchemyPhraseaModelEntitiesBasket.php | 11 ++++++ ...AlchemyPhraseaModelEntitiesLazaretFile.php | 11 ++++++ 23 files changed, 119 insertions(+), 106 deletions(-) delete mode 100755 docker/nginx/entrypoint.sh create mode 100755 docker/nginx/root/entrypoint.sh rename docker/nginx/{ => root}/etc/nginx/nginx.conf (100%) rename docker/nginx/{ => root}/nginx.conf.sample (100%) delete mode 100644 docker/phraseanet-debug/entrypoint.sh delete mode 100644 docker/phraseanet-debug/usr/bin/docker-get-host-ip delete mode 100644 docker/phraseanet-debug/usr/bin/docker-xdebug-disable delete mode 100644 docker/phraseanet-debug/usr/bin/docker-xdebug-enable rename docker/phraseanet/{phraseanet => }/auto-install.sh (96%) create mode 100755 docker/phraseanet/entrypoint.sh delete mode 100755 docker/phraseanet/phraseanet/entrypoint.sh delete mode 100755 docker/phraseanet/phraseanet/worker/entrypoint.sh delete mode 100755 docker/phraseanet/phraseanet/worker/scheduler-run.sh rename docker/phraseanet/{ => root}/usr/local/etc/php-fpm.d/www.conf.default (100%) rename docker/phraseanet/{ => root}/usr/local/etc/php-fpm.d/zz-docker.conf (100%) create mode 100755 docker/phraseanet/worker/entrypoint.sh create mode 100755 docker/phraseanet/worker/scheduler-run.sh diff --git a/.dockerignore b/.dockerignore index 3498e547ad..e72dba2406 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,18 +1,33 @@ -/.circleci -/.git +.idea .settings -/nodes_modules -/vendor -/docker-compose.* -/Dockerfile +/*.md +/.circleci +/.dockerignore /.env /.env.* -/*.md +/.git /.travis.yml +/AUTHORS /CONTRIBUTORS +/Dockerfile /LICENSE -/www/thumbnails -/www/assets -/www/custom +/bin +!/bin/console +!/bin/developer +!/bin/setup +/cache /config/configuration.yml /config/configuration-compiled.php +!/config/configuration.sample.yml +/datas +/docker-compose.* +/logs +/nodes_modules +/plugins +/tmp +/vendor +/www/assets +/www/custom +/www/plugins +/www/thumbnails +npm-debug.log diff --git a/.env b/.env index fd5dd19ca2..c314382e24 100644 --- a/.env +++ b/.env @@ -52,7 +52,7 @@ MYSQL_MAX_ALLOWED_PACKET=16M # --- DEV purpose --- # PhpMyAdmin port -PHPMYADMIN_PORT=8089 +PHRASEANET_PHPMYADMIN_PORT=8089 # Xdebug XDEBUG_ENABLED=1 diff --git a/Dockerfile b/Dockerfile index e24a6154b4..c905097a4f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -93,7 +93,7 @@ RUN composer install --prefer-dist --no-dev --no-progress --no-suggest --classma COPY --chown=app . . -RUN rm -rf docker \ +RUN rm -rf docker/phraseanet/root \ && make install ADD docker/phraseanet/ / @@ -105,9 +105,9 @@ ADD docker/phraseanet/ / FROM phraseanet-system as phraseanet-fpm COPY --from=builder --chown=app /var/alchemy/Phraseanet /var/alchemy/Phraseanet -ADD ./docker/phraseanet/ / +ADD ./docker/phraseanet/root / WORKDIR /var/alchemy/Phraseanet -ENTRYPOINT ["/phraseanet/entrypoint.sh"] +ENTRYPOINT ["docker/phraseanet/entrypoint.sh"] CMD ["php-fpm", "-F"] ######################################################################### @@ -115,8 +115,8 @@ CMD ["php-fpm", "-F"] ######################################################################### FROM phraseanet-fpm as phraseanet-worker -ENTRYPOINT ["/phraseanet/worker/entrypoint.sh"] -CMD ["/phraseanet/worker/scheduler-run.sh"] +ENTRYPOINT ["docker/phraseanet/worker/entrypoint.sh"] +CMD ["docker/phraseanet/worker/scheduler-run.sh"] ######################################################################### # phraseanet-nginx @@ -124,7 +124,7 @@ CMD ["/phraseanet/worker/scheduler-run.sh"] FROM nginx:1.17.8-alpine as phraseanet-nginx RUN adduser --uid 1000 --disabled-password app -ADD ./docker/nginx/ / +ADD ./docker/nginx/root / COPY --from=builder /var/alchemy/Phraseanet/www /var/alchemy/Phraseanet/www ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 55338824df..b1a5de201c 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -4,7 +4,7 @@ services: image: phpmyadmin/phpmyadmin restart: on-failure ports: - - ${PHPMYADMIN_PORT}:80 + - ${PHRASEANET_PHPMYADMIN_PORT}:80 depends_on: - db @@ -13,7 +13,7 @@ services: - .:/var/alchemy/Phraseanet - ./datas:/var/alchemy/Phraseanet/datas:rw - ./www/thumbnails:/var/alchemy/Phraseanet/www/thumbnails:rw - - ./docker/nginx/entrypoint.sh:/entrypoint.sh + - ./docker/nginx/root/entrypoint.sh:/entrypoint.sh builder: build: @@ -22,6 +22,10 @@ services: command: exit 0 volumes: - .:/var/alchemy/Phraseanet + - ./config:/var/alchemy/Phraseanet/config:rw + - ./logs:/var/alchemy/Phraseanet/logs:rw + - ./datas:/var/alchemy/Phraseanet/datas:rw + - ./www/thumbnails:/var/alchemy/Phraseanet/www/thumbnails:rw phraseanet: environment: @@ -34,8 +38,6 @@ services: - ./logs:/var/alchemy/Phraseanet/logs:rw - ./datas:/var/alchemy/Phraseanet/datas:rw - ./www/thumbnails:/var/alchemy/Phraseanet/www/thumbnails:rw - - ./docker/phraseanet/phraseanet/entrypoint.sh:/phraseanet/entrypoint.sh - - ./docker/phraseanet/phraseanet/auto-install.sh:/phraseanet/auto-install.sh worker: volumes: @@ -44,9 +46,6 @@ services: - ./logs:/var/alchemy/Phraseanet/logs:rw - ./datas:/var/alchemy/Phraseanet/datas:rw - ./www/thumbnails:/var/alchemy/Phraseanet/www/thumbnails:rw - - ./docker/phraseanet/phraseanet/entrypoint.sh:/phraseanet/entrypoint.sh - - ./docker/phraseanet/phraseanet/worker/entrypoint.sh:/phraseanet/worker/entrypoint.sh - - ./docker/phraseanet/phraseanet/worker/scheduler-run.sh:/phraseanet/worker/scheduler-run.sh rabbitmq: ports: @@ -67,4 +66,3 @@ networks: ipam: config: - subnet: $PHRASEANET_SUBNET_IPS - diff --git a/docker/nginx/entrypoint.sh b/docker/nginx/entrypoint.sh deleted file mode 100755 index 0a43a70c5b..0000000000 --- a/docker/nginx/entrypoint.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -set -xe - -cat nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/conf.d/default.conf - -exec "$@" diff --git a/docker/nginx/root/entrypoint.sh b/docker/nginx/root/entrypoint.sh new file mode 100755 index 0000000000..e46ea44296 --- /dev/null +++ b/docker/nginx/root/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -xe + +cat /nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/conf.d/default.conf + +exec "$@" diff --git a/docker/nginx/etc/nginx/nginx.conf b/docker/nginx/root/etc/nginx/nginx.conf similarity index 100% rename from docker/nginx/etc/nginx/nginx.conf rename to docker/nginx/root/etc/nginx/nginx.conf diff --git a/docker/nginx/nginx.conf.sample b/docker/nginx/root/nginx.conf.sample similarity index 100% rename from docker/nginx/nginx.conf.sample rename to docker/nginx/root/nginx.conf.sample diff --git a/docker/phraseanet-debug/entrypoint.sh b/docker/phraseanet-debug/entrypoint.sh deleted file mode 100644 index a7a9f915b1..0000000000 --- a/docker/phraseanet-debug/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -if [ ! -z ${DOCKER_XDEBUG_ENABLED} ]; then - . usr-bin/docker-xdebug-enable -fi - -exec "$@" diff --git a/docker/phraseanet-debug/usr/bin/docker-get-host-ip b/docker/phraseanet-debug/usr/bin/docker-get-host-ip deleted file mode 100644 index 752c1566ea..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-get-host-ip +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -/sbin/ip route|awk '/default/ { print $3 }' -# TODO support MacOS & Windows host IP diff --git a/docker/phraseanet-debug/usr/bin/docker-xdebug-disable b/docker/phraseanet-debug/usr/bin/docker-xdebug-disable deleted file mode 100644 index 7d9de59329..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-xdebug-disable +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -unset HOST_IP -unset XDEBUG_CONFIG -unset XDEBUG_REMOTE_HOST diff --git a/docker/phraseanet-debug/usr/bin/docker-xdebug-enable b/docker/phraseanet-debug/usr/bin/docker-xdebug-enable deleted file mode 100644 index 24b7fcd97b..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-xdebug-enable +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -HOST_IP=$(docker-get-host-ip); - -export HOST_IP -export XDEBUG_CONFIG="remote_enable=1 remote_host=${HOST_IP} idekey=PHPSTORM"; -export XDEBUG_REMOTE_HOST="${HOST_IP}"; diff --git a/docker/phraseanet/phraseanet/auto-install.sh b/docker/phraseanet/auto-install.sh similarity index 96% rename from docker/phraseanet/phraseanet/auto-install.sh rename to docker/phraseanet/auto-install.sh index 00e8601edb..6a0e04d424 100755 --- a/docker/phraseanet/phraseanet/auto-install.sh +++ b/docker/phraseanet/auto-install.sh @@ -2,12 +2,12 @@ set -xe -if [ $INSTALL_ACCOUNT_EMAIL = ""]; then +if [ -z "$INSTALL_ACCOUNT_EMAIL" ]; then echo "INSTALL_ACCOUNT_EMAIL var is not set." exit 1 fi -if [ $INSTALL_ACCOUNT_PASSWORD = ""]; then +if [ -z "$INSTALL_ACCOUNT_PASSWORD" ]; then echo "INSTALL_ACCOUNT_PASSWORD var is not set." exit 1 fi @@ -39,7 +39,6 @@ fi /var/alchemy/Phraseanet/bin/setup system:config set main.cache.type redis # RabbitMQ - bin/setup system:config set rabbitmq.server.host rabbitmq bin/setup system:config set rabbitmq.server.port 5672 bin/setup system:config set rabbitmq.server.user $INSTALL_RABBITMQ_USER diff --git a/docker/phraseanet/entrypoint.sh b/docker/phraseanet/entrypoint.sh new file mode 100755 index 0000000000..1d1fecb989 --- /dev/null +++ b/docker/phraseanet/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +envsubst < "docker/phraseanet/php.ini.sample" > /usr/local/etc/php/php.ini +envsubst < "docker/phraseanet/php-fpm.conf.sample" > /usr/local/etc/php-fpm.conf + +chown -R app:app \ + config \ + datas \ + tmp \ + logs \ + www/thumbnails + +FILE=config/configuration.yml + +if [ -f "$FILE" ]; then + echo "$FILE exists, skip setup." +else + echo "$FILE doesn't exist, entering setup..." + runuser app -c docker/phraseanet/auto-install.sh +fi + +if [ ${XDEBUG_ENABLED} == "1" ]; then + echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." + docker-php-ext-enable xdebug +fi + +bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/phraseanet/entrypoint.sh b/docker/phraseanet/phraseanet/entrypoint.sh deleted file mode 100755 index 2d2977a411..0000000000 --- a/docker/phraseanet/phraseanet/entrypoint.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -envsubst < /php.ini.sample > /usr/local/etc/php/php.ini -envsubst < /php-fpm.conf.sample > /usr/local/etc/php-fpm.conf - -chown -R app:app /var/alchemy/Phraseanet/config -chown -R app:app /var/alchemy/Phraseanet/datas -chown -R app:app /var/alchemy/Phraseanet/tmp -chown -R app:app /var/alchemy/Phraseanet/www/thumbnails -FILE=/var/alchemy/Phraseanet/config/configuration.yml -if [ -f "$FILE" ]; then - echo "$FILE exists, skip setup." -else - echo "$FILE doesn't exist, entering setup..." - runuser app -c '/phraseanet/auto-install.sh' -fi - -if [ ${XDEBUG_ENABLED} == "1" ]; then - echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." - docker-php-ext-enable xdebug -fi - -bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/phraseanet/worker/entrypoint.sh b/docker/phraseanet/phraseanet/worker/entrypoint.sh deleted file mode 100755 index 8e296b0046..0000000000 --- a/docker/phraseanet/phraseanet/worker/entrypoint.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -mkdir -p /var/alchemy/Phraseanet/tmp/locks \ - && chown -R app:app /var/alchemy/Phraseanet/tmp - -envsubst < /php.ini.sample > /usr/local/etc/php/php.ini -envsubst < /php-fpm.conf.sample > /usr/local/etc/php-fpm.conf - -if [ ${XDEBUG_ENABLED} == "1" ]; then - echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." - docker-php-ext-enable xdebug -fi - -bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/phraseanet/worker/scheduler-run.sh b/docker/phraseanet/phraseanet/worker/scheduler-run.sh deleted file mode 100755 index 1b972c6cdb..0000000000 --- a/docker/phraseanet/phraseanet/worker/scheduler-run.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -runuser app -c 'php /var/alchemy/Phraseanet/bin/console task-manager:scheduler:run' diff --git a/docker/phraseanet/usr/local/etc/php-fpm.d/www.conf.default b/docker/phraseanet/root/usr/local/etc/php-fpm.d/www.conf.default similarity index 100% rename from docker/phraseanet/usr/local/etc/php-fpm.d/www.conf.default rename to docker/phraseanet/root/usr/local/etc/php-fpm.d/www.conf.default diff --git a/docker/phraseanet/usr/local/etc/php-fpm.d/zz-docker.conf b/docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf similarity index 100% rename from docker/phraseanet/usr/local/etc/php-fpm.d/zz-docker.conf rename to docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf diff --git a/docker/phraseanet/worker/entrypoint.sh b/docker/phraseanet/worker/entrypoint.sh new file mode 100755 index 0000000000..c73a924ebc --- /dev/null +++ b/docker/phraseanet/worker/entrypoint.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e + +DOCKER_DIR="./docker/phraseanet" + +mkdir -p "${APP_DIR}/tmp/locks" \ + && chown -R app:app "${APP_DIR}/tmp" + +envsubst < "${DOCKER_DIR}/php.ini.sample" > /usr/local/etc/php/php.ini +envsubst < "${DOCKER_DIR}/php-fpm.conf.sample" > /usr/local/etc/php-fpm.conf + +if [ ${XDEBUG_ENABLED} == "1" ]; then + echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." + docker-php-ext-enable xdebug +fi + +bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/worker/scheduler-run.sh b/docker/phraseanet/worker/scheduler-run.sh new file mode 100755 index 0000000000..651ae42ee5 --- /dev/null +++ b/docker/phraseanet/worker/scheduler-run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +runuser app -c 'php bin/console task-manager:scheduler:run' diff --git a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php index aedc9247ff..318a58e2cf 100644 --- a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php +++ b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php @@ -474,6 +474,17 @@ class Basket extends \Alchemy\Phrasea\Model\Entities\Basket implements \Doctrine return parent::hasRecord($app, $record); } + /** + * {@inheritDoc} + */ + public function getElementByRecord(\Alchemy\Phrasea\Application $app, \record_adapter $record) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getElementByRecord', [$app, $record]); + + return parent::getElementByRecord($app, $record); + } + /** * {@inheritDoc} */ diff --git a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php index dab6e47808..57cb4cd042 100644 --- a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php +++ b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php @@ -518,4 +518,15 @@ class LazaretFile extends \Alchemy\Phrasea\Model\Entities\LazaretFile implements return parent::getRecordsToSubstitute($app, $includeReason); } + /** + * {@inheritDoc} + */ + public function getStatus(\Alchemy\Phrasea\Application $app) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getStatus', [$app]); + + return parent::getStatus($app); + } + }