From 6d5bf66804a28b197542fea637071640d1612eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 6 Jul 2017 00:28:13 +0200 Subject: [PATCH] Just type "docker-compose up" to install a Flex project (major refactoring) --- docker/nginx/.dockerignore => .dockerignore | 3 +- .gitattributes | 1 - Dockerfile | 30 ++++++------- Dockerfile.nginx | 4 ++ composer.json | 49 --------------------- docker-compose.yml | 37 +++------------- docker/app/docker-entrypoint.sh | 11 ++--- docker/app/install-composer.sh | 2 +- docker/db/.dockerignore | 10 ----- docker/db/.gitignore | 1 - docker/db/Dockerfile | 6 --- docker/db/docker-healthcheck.sh | 30 ------------- docker/nginx/Dockerfile | 3 -- docker/nginx/conf.d/default.conf | 6 +-- public/.gitignore | 0 15 files changed, 34 insertions(+), 159 deletions(-) rename docker/nginx/.dockerignore => .dockerignore (68%) create mode 100644 Dockerfile.nginx delete mode 100644 composer.json delete mode 100644 docker/db/.dockerignore delete mode 100644 docker/db/.gitignore delete mode 100644 docker/db/Dockerfile delete mode 100755 docker/db/docker-healthcheck.sh delete mode 100644 docker/nginx/Dockerfile create mode 100644 public/.gitignore diff --git a/docker/nginx/.dockerignore b/.dockerignore similarity index 68% rename from docker/nginx/.dockerignore rename to .dockerignore index e99352e..92d73c3 100644 --- a/docker/nginx/.dockerignore +++ b/.dockerignore @@ -1,8 +1,9 @@ **/*.log -**/*.md **/._* **/.DS_Store **/.gitignore +**/.gitattributes **/Thumbs.db .dockerignore Dockerfile +docker-compose.yml diff --git a/.gitattributes b/.gitattributes index c36a3ba..efdba87 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,2 @@ * text=auto *.sh text eol=lf -docker/apache/start_safe_perms text eol=lf diff --git a/Dockerfile b/Dockerfile index c99546a..71fc7be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,6 @@ RUN set -xe \ zlib-dev \ && docker-php-ext-install \ intl \ - pdo_mysql \ zip \ && pecl install \ apcu-${APCU_VERSION} \ @@ -23,16 +22,17 @@ RUN set -xe \ && docker-php-ext-enable --ini-name 05-opcache.ini opcache \ && apk del .build-deps +###> recipes ### +###< recipes ### + COPY docker/app/php.ini /usr/local/etc/php/php.ini COPY docker/app/install-composer.sh /usr/local/bin/docker-app-install-composer RUN chmod +x /usr/local/bin/docker-app-install-composer RUN set -xe \ - && apk add --no-cache --virtual .fetch-deps openssl \ && docker-app-install-composer \ - && mv composer.phar /usr/local/bin/composer \ - && apk del .fetch-deps + && mv composer.phar /usr/local/bin/composer # https://getcomposer.org/doc/03-cli.md#composer-allow-superuser ENV COMPOSER_ALLOW_SUPERUSER 1 @@ -42,24 +42,20 @@ RUN composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress WORKDIR /srv/app -COPY composer.* ./ +COPY . . +# Cleanup unneeded files +RUN rm -Rf docker/ -RUN mkdir -p \ - var/cache \ - var/logs \ - var/sessions \ - && composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest \ +# Download the Symfony skeleton +ENV SKELETON_COMPOSER_JSON https://raw.githubusercontent.com/symfony/skeleton/v3.3.2/composer.json +RUN [ -f composer.json ] || php -r "copy('$SKELETON_COMPOSER_JSON', 'composer.json');" + +RUN mkdir -p var/cache var/logs var/sessions \ + && composer install --prefer-dist --no-dev --no-progress --no-suggest --optimize-autoloader --classmap-authoritative --no-interaction \ && composer clear-cache \ # Permissions hack because setfacl does not work on Mac and Windows && chown -R www-data var -COPY etc etc/ -COPY src src/ -COPY var var/ -COPY web web/ - -RUN composer dump-autoload --optimize --classmap-authoritative --no-dev - COPY docker/app/docker-entrypoint.sh /usr/local/bin/docker-app-entrypoint RUN chmod +x /usr/local/bin/docker-app-entrypoint diff --git a/Dockerfile.nginx b/Dockerfile.nginx new file mode 100644 index 0000000..b691cb0 --- /dev/null +++ b/Dockerfile.nginx @@ -0,0 +1,4 @@ +FROM nginx:1.13-alpine + +COPY docker/nginx/conf.d /etc/nginx/conf.d/ +COPY public /srv/app/public/ diff --git a/composer.json b/composer.json deleted file mode 100644 index 7312976..0000000 --- a/composer.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "dunglas/symfony-docker-skeleton", - "type": "project", - "license": "proprietary", - "description": "Project description", - "require": { - "php": "^7.1.3", - "symfony/flex": "^1.0", - "symfony/framework-bundle": "^3.3", - "symfony/yaml": "^3.3" - }, - "config": { - "preferred-install": { - "*": "dist" - }, - "sort-packages": true - }, - "autoload": { - "psr-4": { - "App\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "App\\Tests\\": "tests/" - } - }, - "scripts": { - "auto-scripts": [ - ], - "post-install-cmd": [ - "@auto-scripts" - ], - "post-update-cmd": [ - "@auto-scripts" - ] - }, - "conflict": { - "symfony/symfony": "*", - "symfony/twig-bundle": "<3.3", - "symfony/debug": "<3.3" - }, - "extra": { - "symfony": { - "id": "", - "allow-contrib": false - } - } -} diff --git a/docker-compose.yml b/docker-compose.yml index 15ae999..706e2d7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,16 +4,9 @@ services: app: build: context: . - dockerfile: ./Dockerfile - #depends_on: - # - db - env_file: - - .env volumes: # Comment out the next line in production - - ./:/srv/app/:rw - # This is for assets:install - - ./web/:/srv/app/web/:rw + - ./:/srv/app:rw # If you develop on Linux, comment out the following volumes to just use bind-mounted project directory from host - /srv/app/var/ - /srv/app/var/cache/ @@ -23,31 +16,11 @@ services: nginx: build: - context: ./docker/nginx - dockerfile: ./Dockerfile + context: . + dockerfile: ./Dockerfile.nginx volumes: # Comment out the next line in production - ./docker/nginx/conf.d:/etc/nginx/conf.d:ro - - ./web:/srv/app/web:ro + - ./public:/srv/app/public:ro ports: - - "80:80" - - # Uncomment the following lines to add a MySQL container - #db: - # build: - # context: ./docker/db - # dockerfile: ./Dockerfile - # environment: - # - MYSQL_DATABASE=app - # # You should definitely change the password in production - # - MYSQL_PASSWORD=symfony - # - MYSQL_RANDOM_ROOT_PASSWORD=true - # - MYSQL_USER=symfony - # volumes: - # - db-data:/var/lib/mysql:rw - # # You may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data! - # # - ./docker/db/data:/var/lib/mysql:rw - -volumes: - app-web: {} - #db-data: {} + - '80:80' diff --git a/docker/app/docker-entrypoint.sh b/docker/app/docker-entrypoint.sh index c7d107e..23258c6 100755 --- a/docker/app/docker-entrypoint.sh +++ b/docker/app/docker-entrypoint.sh @@ -7,11 +7,12 @@ if [ "${1#-}" != "$1" ]; then fi if [ "$1" = 'php-fpm' ] || [ "$1" = 'bin/console' ]; then - if [ "$APP_ENV" = 'prod' ]; then - composer install --prefer-dist --no-dev --no-progress --no-suggest --optimize-autoloader --classmap-authoritative --no-interaction - else - composer install --prefer-dist --no-progress --no-suggest --no-interaction - fi + # The first time volumes are mounted, dependencies need to be reinstalled + if [ ! -f composer.json ]; then + rm -Rf vendor/* + php -r "copy('$SKELETON_COMPOSER_JSON', 'composer.json');" + composer install --prefer-dist --no-progress --no-suggest --no-interaction + fi # Permissions hack because setfacl does not work on Mac and Windows chown -R www-data var diff --git a/docker/app/install-composer.sh b/docker/app/install-composer.sh index f4ad41b..63c525e 100755 --- a/docker/app/install-composer.sh +++ b/docker/app/install-composer.sh @@ -4,7 +4,7 @@ # Origin: https://github.com/composer/composer/blob/master/doc/faqs/how-to-install-composer-programmatically.md # Licence: MIT -EXPECTED_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) +EXPECTED_SIGNATURE=$(php -r "echo trim(file_get_contents('https://composer.github.io/installer.sig'));") php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_SIGNATURE=$(php -r "echo hash_file('SHA384', 'composer-setup.php');") diff --git a/docker/db/.dockerignore b/docker/db/.dockerignore deleted file mode 100644 index c430d8b..0000000 --- a/docker/db/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -**/*.log -**/*.md -**/*.sql.gz -**/._* -**/.DS_Store -**/.gitignore -**/Thumbs.db -.dockerignore -data/ -Dockerfile diff --git a/docker/db/.gitignore b/docker/db/.gitignore deleted file mode 100644 index 8fce603..0000000 --- a/docker/db/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data/ diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile deleted file mode 100644 index aa56256..0000000 --- a/docker/db/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM mysql:5.7 - -COPY docker-healthcheck.sh /usr/local/bin/docker-healthcheck -RUN chmod +x /usr/local/bin/docker-healthcheck - -HEALTHCHECK CMD ["docker-healthcheck"] diff --git a/docker/db/docker-healthcheck.sh b/docker/db/docker-healthcheck.sh deleted file mode 100755 index 52e0903..0000000 --- a/docker/db/docker-healthcheck.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2014-2016 Docker, Inc. -# Origin: https://github.com/docker-library/healthcheck/blob/master/mysql/docker-healthcheck -# Licence: MIT - -set -eo pipefail - -if [ "$MYSQL_RANDOM_ROOT_PASSWORD" ] && [ -z "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then - # there's no way we can guess what the random MySQL password was - echo >&2 'healthcheck error: cannot determine random root password (and MYSQL_USER and MYSQL_PASSWORD were not set)' - exit 0 -fi - -host="$(hostname --ip-address || echo '127.0.0.1')" -user="${MYSQL_USER:-root}" -export MYSQL_PWD="${MYSQL_PASSWORD:-$MYSQL_ROOT_PASSWORD}" - -args=( - # force mysql to not use the local "mysqld.sock" (test "external" connectibility) - -h"$host" - -u"$user" - --silent -) - -if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then - exit 0 -fi - -exit 1 diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile deleted file mode 100644 index 73b0e4f..0000000 --- a/docker/nginx/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM nginx:1.13-alpine - -COPY conf.d /etc/nginx/conf.d/ diff --git a/docker/nginx/conf.d/default.conf b/docker/nginx/conf.d/default.conf index cd87e84..b02ae95 100644 --- a/docker/nginx/conf.d/default.conf +++ b/docker/nginx/conf.d/default.conf @@ -1,9 +1,9 @@ server { - root /srv/app/web; + root /srv/app/public; resolver 127.0.0.11; location / { - # try to serve file directly, fallback to app.php + # try to serve file directly, fallback to index.php try_files $uri /index.php$is_args$args; } location ~ ^/index\.php(/|$) { @@ -20,7 +20,7 @@ server { fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; # Prevents URIs that include the front controller. This will 404: - # http://domain.tld/app.php/some-path + # http://domain.tld/index.php/some-path # Remove the internal directive to allow URIs like this internal; } diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 0000000..e69de29