diff --git a/alpine/Dockerfile b/alpine/Dockerfile index 0b828d4..3e63bae 100644 --- a/alpine/Dockerfile +++ b/alpine/Dockerfile @@ -1,69 +1,85 @@ -ARG PHP_IMAGE_TAG=7.2-fpm-alpine -FROM php:${PHP_IMAGE_TAG} +ARG PHP_VERSION=7.2 +ARG INVOICENINJA_VERSION -LABEL maintainer="Samuel Laulhau " +FROM php:${PHP_VERSION}-fpm-alpine + +LABEL maintainer="Samuel Laulhau , Holger Lösken " ##### # SYSTEM REQUIREMENT ##### -ENV PHANTOMJS phantomjs-2.1.1-linux-x86_64 -RUN apk update \ - && apk add --no-cache git gmp-dev freetype-dev libjpeg-turbo-dev \ - coreutils chrpath fontconfig libpng-dev +WORKDIR /var/www/app -RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ - && docker-php-ext-configure gmp \ - && docker-php-ext-install iconv mbstring pdo pdo_mysql zip gd gmp opcache \ - && echo "php_admin_value[error_reporting] = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED">>/usr/local/etc/php-fpm.d/www.conf +COPY ./alpine/entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + +ENV PHANTOMJS="phantomjs-2.1.1-linux-x86_64" + +RUN set -eux; \ + apk add --no-cache \ + gmp-dev \ + freetype-dev \ + libarchive-tools \ + libjpeg-turbo-dev \ + libpng-dev \ + libwebp-dev\ + libzip-dev + +RUN docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include --with-webp-dir=/usr/include --with-freetype-dir=/usr/include/; \ + docker-php-ext-configure zip --with-libzip; \ + docker-php-ext-install -j$(nproc) \ + iconv \ + gd \ + gmp \ + mbstring \ + opcache \ + pdo \ + pdo_mysql \ + zip RUN cd /usr/share \ - && curl -L https://github.com/Overbryd/docker-phantomjs-alpine/releases/download/2.11/phantomjs-alpine-x86_64.tar.bz2 | tar xj \ + && curl -s -L https://github.com/Overbryd/docker-phantomjs-alpine/releases/download/2.11/phantomjs-alpine-x86_64.tar.bz2 | tar xj \ && ln -s /usr/share/phantomjs/phantomjs /usr/local/bin/phantomjs - -# set recommended PHP.ini settings -# see https://secure.php.net/manual/en/opcache.installation.php -RUN { \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=4000'; \ - echo 'opcache.revalidate_freq=60'; \ - echo 'opcache.fast_shutdown=1'; \ - echo 'opcache.enable_cli=1'; \ -} > /usr/local/etc/php/conf.d/opcache-recommended.ini +COPY ./config/php/php.ini /usr/local/etc/php/php.ini +COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini -##### -# DOWNLOAD AND INSTALL INVOICE NINJA -##### +# Separate user +ENV IN_USER=invoiceninja -ENV INVOICENINJA_VERSION 4.5.18 +RUN addgroup -S "$IN_USER" && \ + adduser \ + --disabled-password \ + --gecos "" \ + --home "$(pwd)" \ + --ingroup "$IN_USER" \ + --no-create-home \ + "$IN_USER"; \ + addgroup "$IN_USER" www-data; \ + chown -R "$IN_USER":"$IN_USER" . -RUN curl -o ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \ - && unzip ninja.zip -d /var/www/ \ - && rm ninja.zip \ - && mv /var/www/ninja /var/www/app \ +USER $IN_USER + +# Download and install IN +ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}" + +RUN curl -s -o /tmp/ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \ + && bsdtar --strip-components=1 -C /var/www/app -xf /tmp/ninja.zip \ + && rm /tmp/ninja.zip \ && mv /var/www/app/storage /var/www/app/docker-backup-storage \ && mv /var/www/app/public /var/www/app/docker-backup-public \ && mkdir -p /var/www/app/public/logo /var/www/app/storage \ && cp /var/www/app/.env.example /var/www/app/.env \ && chmod -R 755 /var/www/app/storage \ - && rm -rf /var/www/app/docs /var/www/app/tests /var/www/ninja + && rm -rf /var/www/app/docs /var/www/app/tests -###### -# DEFAULT ENV -###### +# Override the environment settings from projects .env file ENV LOG errorlog ENV SELF_UPDATER_SOURCE '' ENV PHANTOMJS_BIN_PATH /usr/local/bin/phantomjs - -#use to be mounted into nginx for exemple +# Use to be mounted into nginx VOLUME /var/www/app/public -WORKDIR /var/www/app - -COPY entrypoint.sh /usr/local/bin/invoice-entrypoint -# RUN chmod +x /usr/local/bin/invoice-entrypoint - -ENTRYPOINT ["invoice-entrypoint"] -CMD ["php-fpm"] +ENTRYPOINT ["docker-entrypoint"] +CMD ["php-fpm"] \ No newline at end of file diff --git a/alpine/entrypoint.sh b/alpine/entrypoint.sh index d79ff50..3cfe00b 100755 --- a/alpine/entrypoint.sh +++ b/alpine/entrypoint.sh @@ -1,47 +1,44 @@ -#!/bin/sh +#!/usr/bin/env sh set -e -if [ ! -d /var/www/app/storage ]; then - cp -Rp /var/www/app/docker-backup-storage /var/www/app/storage -else - IN_STORAGE_BACKUP="$(ls /var/www/app/docker-backup-storage/)" - for path in $IN_STORAGE_BACKUP; do - if [ ! -e "/var/www/app/storage/$path" ]; then - cp -Rp "/var/www/app/docker-backup-storage/$path" "/var/www/app/storage/" - fi - done +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" fi -if [ ! -d /var/www/app/public/logo ]; then - cp -Rp /var/www/app/docker-backup-public/logo /var/www/app/public/logo -else - IN_LOGO_BACKUP="$(ls /var/www/app/docker-backup-public/logo/)" - for path in $IN_LOGO_BACKUP; do - if [ ! -e "/var/www/app/public/logo/$path" ]; then - cp -Rp "/var/www/app/docker-backup-public/logo/$path" "/var/www/app/public/logo/" - fi - done + +if [ "$1" = 'php-fpm' ] || [ "$1" = 'bin/console' ]; then + if [ ! -d /var/www/app/storage ]; then + cp -Rp /var/www/app/docker-backup-storage /var/www/app/storage + else + IN_STORAGE_BACKUP="$(ls /var/www/app/docker-backup-storage/)" + for path in $IN_STORAGE_BACKUP; do + if [ ! -e "/var/www/app/storage/$path" ]; then + cp -Rp "/var/www/app/docker-backup-storage/$path" "/var/www/app/storage/" + fi + done + fi + + if [ ! -d /var/www/app/public/logo ]; then + cp -Rp /var/www/app/docker-backup-public/logo /var/www/app/public/logo + else + IN_LOGO_BACKUP="$(ls /var/www/app/docker-backup-public/logo/)" + for path in $IN_LOGO_BACKUP; do + if [ ! -e "/var/www/app/public/logo/$path" ]; then + cp -Rp "/var/www/app/docker-backup-public/logo/$path" "/var/www/app/public/logo/" + fi + done + fi + + # compare public volume version with image version + if [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then + cp -au /var/www/app/docker-backup-public/* /var/www/app/public/ + echo $INVOICENINJA_VERSION > /var/www/app/public/version + fi + + # Set permission for mounted directories + chown invoiceninja:www-data /var/www/app/storage + chown invoiceninja:www-data /var/www/app/public fi -# compare public volume version with image version -if [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then - echo 'clone public directory' - cp -Rp /var/www/app/docker-backup-public/* /var/www/app/public/ - echo $INVOICENINJA_VERSION > /var/www/app/public/version -fi - -# fix permission for monted directories -chown www-data:www-data /var/www/app/storage -chown www-data:www-data /var/www/app/public/logo - - -#php artisan optimize --force -#php artisan migrate --force - -#if [ ! -e "/var/www/app/is-seeded" ]; then - #php artisan db:seed --force - #touch "/var/www/app/is-seeded" -#fi - -echo 'start' -exec "$@" +exec docker-php-entrypoint "$@" diff --git a/config/php/php-cli.ini b/config/php/php-cli.ini new file mode 100644 index 0000000..7017527 --- /dev/null +++ b/config/php/php-cli.ini @@ -0,0 +1,18 @@ +session.auto_start = Off +short_open_tag = Off + +error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED + +opcache.enable_cli=1 +opcache.fast_shutdown=1 +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=4000 +opcache.revalidate_freq=60 +# http://symfony.com/doc/current/performance.html +realpath_cache_size = 4096K +realpath_cache_ttl = 600 + +memory_limit = 2G +post_max_size = 6M +upload_max_filesize = 5M \ No newline at end of file diff --git a/config/php/php.ini b/config/php/php.ini new file mode 100644 index 0000000..bb919d3 --- /dev/null +++ b/config/php/php.ini @@ -0,0 +1,17 @@ +session.auto_start = Off +short_open_tag = Off + +error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED + +opcache.enable_cli=1 +opcache.fast_shutdown=1 +opcache.memory_consumption=128 +opcache.interned_strings_buffer=8 +opcache.max_accelerated_files=4000 +opcache.revalidate_freq=60 +# http://symfony.com/doc/current/performance.html +realpath_cache_size = 4096K +realpath_cache_ttl = 600 + +post_max_size = 6M +upload_max_filesize = 5M \ No newline at end of file diff --git a/Dockerfile b/debian/Dockerfile similarity index 77% rename from Dockerfile rename to debian/Dockerfile index 2a28f18..e9161e7 100644 --- a/Dockerfile +++ b/debian/Dockerfile @@ -1,11 +1,16 @@ -ARG PHP_IMAGE_TAG=7.2-fpm-stretch -FROM php:${PHP_IMAGE_TAG} +ARG PHP_VERSION=7.2 +ARG INVOICENINJA_VERSION + +FROM php:${PHP_VERSION}-fpm-stretch LABEL maintainer="Samuel Laulhau " ##### # SYSTEM REQUIREMENT ##### +COPY ./alpine/entrypoint.sh /usr/local/bin/docker-entrypoint +RUN chmod +x /usr/local/bin/docker-entrypoint + ENV BUILD_DEPS \ zlib1g-dev \ git \ @@ -38,22 +43,11 @@ RUN curl -o ${PHANTOMJS}.tar.bz2 -SL https://bitbucket.org/ariya/phantomjs/downl && ln -sf /usr/local/share/${PHANTOMJS}/bin/phantomjs /usr/local/bin \ && rm -rf /var/lib/apt/lists/* -# set recommended PHP.ini settings -# see https://secure.php.net/manual/en/opcache.installation.php -RUN { \ - echo 'opcache.memory_consumption=128'; \ - echo 'opcache.interned_strings_buffer=8'; \ - echo 'opcache.max_accelerated_files=4000'; \ - echo 'opcache.revalidate_freq=60'; \ - echo 'opcache.fast_shutdown=1'; \ - echo 'opcache.enable_cli=1'; \ -} > /usr/local/etc/php/conf.d/opcache-recommended.ini +COPY ./config/php/php.ini /usr/local/etc/php/php.ini +COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini -##### -# DOWNLOAD AND INSTALL INVOICE NINJA -##### - -ENV INVOICENINJA_VERSION 4.5.18 +# Download and install IN +ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}" RUN curl -o ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \ && unzip -q ninja.zip -d /var/www/ \ @@ -67,9 +61,7 @@ RUN curl -o ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJ && chown -R www-data:www-data /var/www/app/storage /var/www/app/bootstrap /var/www/app/public/logo /var/www/app/.env /var/www/app/docker-backup-storage /var/www/app/docker-backup-public\ && rm -rf /var/www/app/docs /var/www/app/tests /var/www/ninja -###### -# DEFAULT ENV -###### +# Override the environment settings from projects .env file ENV LOG errorlog ENV SELF_UPDATER_SOURCE '' ENV PHANTOMJS_BIN_PATH /usr/local/bin/phantomjs @@ -80,7 +72,5 @@ VOLUME /var/www/app/public WORKDIR /var/www/app -COPY entrypoint.sh /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["docker-entrypoint"] CMD ["php-fpm"] diff --git a/entrypoint.sh b/debian/entrypoint.sh similarity index 100% rename from entrypoint.sh rename to debian/entrypoint.sh