diff --git a/.dockerignore b/.dockerignore index 5331a360a7..3498e547ad 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,6 +6,7 @@ /docker-compose.* /Dockerfile /.env +/.env.* /*.md /.travis.yml /CONTRIBUTORS @@ -13,3 +14,5 @@ /www/thumbnails /www/assets /www/custom +/config/configuration.yml +/config/configuration-compiled.php diff --git a/.gitignore b/.gitignore index dc81372af0..c5cce4bb70 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,5 @@ playbook.retry npm-debug.log /Phrasea_datas + +.env.* diff --git a/Dockerfile b/Dockerfile index 10443b9f88..e24a6154b4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -107,15 +107,16 @@ FROM phraseanet-system as phraseanet-fpm COPY --from=builder --chown=app /var/alchemy/Phraseanet /var/alchemy/Phraseanet ADD ./docker/phraseanet/ / WORKDIR /var/alchemy/Phraseanet -ENTRYPOINT ["/phraseanet-entrypoint.sh"] -CMD ["/boot.sh"] +ENTRYPOINT ["/phraseanet/entrypoint.sh"] +CMD ["php-fpm", "-F"] ######################################################################### # Phraseanet worker application image ######################################################################### FROM phraseanet-fpm as phraseanet-worker -CMD ["/worker-boot.sh"] +ENTRYPOINT ["/phraseanet/worker/entrypoint.sh"] +CMD ["/phraseanet/worker/scheduler-run.sh"] ######################################################################### # phraseanet-nginx @@ -125,4 +126,7 @@ FROM nginx:1.17.8-alpine as phraseanet-nginx RUN adduser --uid 1000 --disabled-password app ADD ./docker/nginx/ / COPY --from=builder /var/alchemy/Phraseanet/www /var/alchemy/Phraseanet/www -CMD ["/boot.sh"] + +ENTRYPOINT ["/entrypoint.sh"] + +CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index 3a3971614a..c2a4b6ed45 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,16 @@ export INSTALL_ACCOUNT_PASSWORD=$3cr3t! export PHRASEANET_APP_PORT=8082 ``` +### Using a .env.local + +It may be easier to deal with a local file to manage our env variables. + +You can add your `.env.local` at the root of this project and define a command alias in your `~/.bashrc`: + +```bash +alias dc="env $(cat .env.local | grep -v '#' | tr '\n' ' ') docker-compose" +``` + ### Running the application If you are not interested in the development of Phraseanet, you can ignore everything in `.env` after the `DEV Purpose` part. @@ -103,15 +113,6 @@ For PhpStorm, you can follow this example: > Configure the `Absolute path on the server` to `/var/alchemy/Phraseanet` at the project root path (i.e. `~/projects/Phraseanet`). -### How to change volumes location - -Before moving all the files, or to use a different location, you have to remove all containers and volume definitions with the following command : - - docker-compose down --volumes - -Then move the files and set the `VOLUMES_DIR` to the new location. - - # With Vagrant (deprecated) ## Development : diff --git a/docker-compose.override.yml b/docker-compose.override.yml index b2e730babc..55338824df 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -13,6 +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 builder: build: @@ -33,6 +34,8 @@ 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: @@ -41,6 +44,9 @@ 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: diff --git a/docker-compose.yml b/docker-compose.yml index 6746832fbf..4c6f435ee7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,6 @@ services: - phraseanet environment: - MAX_BODY_SIZE - ports: - ${PHRASEANET_APP_PORT}:80 diff --git a/docker/nginx/boot.sh b/docker/nginx/entrypoint.sh similarity index 83% rename from docker/nginx/boot.sh rename to docker/nginx/entrypoint.sh index c25c541c71..0a43a70c5b 100755 --- a/docker/nginx/boot.sh +++ b/docker/nginx/entrypoint.sh @@ -3,4 +3,5 @@ set -xe cat nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/conf.d/default.conf -nginx -g "daemon off;" + +exec "$@" diff --git a/docker/phraseanet/boot.sh b/docker/phraseanet/boot.sh deleted file mode 100755 index 578da3a8da..0000000000 --- a/docker/phraseanet/boot.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -xe - -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 exist, skip setup." -else - echo "$FILE doesn't exist, entering setup..." - runuser app -c '/auto-install.sh' -fi - -php-fpm -F diff --git a/docker/phraseanet/auto-install.sh b/docker/phraseanet/phraseanet/auto-install.sh similarity index 100% rename from docker/phraseanet/auto-install.sh rename to docker/phraseanet/phraseanet/auto-install.sh diff --git a/docker/phraseanet/phraseanet/entrypoint.sh b/docker/phraseanet/phraseanet/entrypoint.sh new file mode 100755 index 0000000000..2d2977a411 --- /dev/null +++ b/docker/phraseanet/phraseanet/entrypoint.sh @@ -0,0 +1,25 @@ +#!/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-entrypoint.sh b/docker/phraseanet/phraseanet/worker/entrypoint.sh similarity index 76% rename from docker/phraseanet/phraseanet-entrypoint.sh rename to docker/phraseanet/phraseanet/worker/entrypoint.sh index f786adb251..8e296b0046 100755 --- a/docker/phraseanet/phraseanet-entrypoint.sh +++ b/docker/phraseanet/phraseanet/worker/entrypoint.sh @@ -2,6 +2,9 @@ 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 diff --git a/docker/phraseanet/phraseanet/worker/scheduler-run.sh b/docker/phraseanet/phraseanet/worker/scheduler-run.sh new file mode 100755 index 0000000000..1b972c6cdb --- /dev/null +++ b/docker/phraseanet/phraseanet/worker/scheduler-run.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +runuser app -c 'php /var/alchemy/Phraseanet/bin/console task-manager:scheduler:run' diff --git a/docker/phraseanet/worker-boot.sh b/docker/phraseanet/worker-boot.sh deleted file mode 100755 index bcc76c96eb..0000000000 --- a/docker/phraseanet/worker-boot.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -if [ ${XDEBUG_ENABLED} == "1" ]; then - echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." - docker-php-ext-enable xdebug -fi - -mkdir /var/alchemy/Phraseanet/tmp/locks && chown -R app:app /var/alchemy/Phraseanet/tmp -runuser app -c 'php /var/alchemy/Phraseanet/bin/console task-manager:scheduler:run'