From b190c8e6337a8e5b868158ce59b889bddb67481a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20Lo=CC=88sken?= Date: Wed, 27 May 2020 19:08:42 +0200 Subject: [PATCH] Built multi stage image for v5 --- alpine/Dockerfile_v5 | 91 +++++++++++++++++++++++++---------------- alpine/entrypoint_v5.sh | 8 +++- docker-compose.yml | 5 ++- 3 files changed, 66 insertions(+), 38 deletions(-) diff --git a/alpine/Dockerfile_v5 b/alpine/Dockerfile_v5 index 440dbb1..3bff415 100644 --- a/alpine/Dockerfile_v5 +++ b/alpine/Dockerfile_v5 @@ -1,68 +1,87 @@ ARG PHP_VERSION=7.3 +# Get Invoice Ninja +FROM alpine:latest as base +ARG INVOICENINJA_VERSION + +RUN set -eux; \ + apk add --no-cache \ + curl \ + libarchive-tools; \ + mkdir -p /var/www/app + +RUN curl -o /tmp/ninja.tar.gz -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \ + && bsdtar --strip-components=1 -C /var/www/app -xf /tmp/ninja.tar.gz \ + && rm /tmp/ninja.tar.gz \ + && cp -R /var/www/app/storage /var/www/app/docker-backup-storage \ + && cp -R /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 \ + && cp /var/www/app/.env.dusk.example /var/www/app/.env.dusk.local \ + && rm -rf /var/www/app/docs /var/www/app/tests + +# Install nodejs packages +FROM node:12-alpine as frontend + +COPY --from=base /var/www/app /var/www/app +WORKDIR /var/www/app/ + +RUN npm install + +# Prepare php image FROM php:${PHP_VERSION}-fpm-alpine +ARG INVOICENINJA_VERSION LABEL maintainer="Samuel Laulhau , Holger Lösken " -##### -# SYSTEM REQUIREMENT -##### -ARG INVOICENINJA_VERSION WORKDIR /var/www/app +COPY --from=frontend /var/www/app /var/www/app COPY ./alpine/entrypoint_v5.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint RUN set -eux; \ apk add --no-cache \ gmp-dev \ - libarchive-tools \ - libzip-dev - -RUN docker-php-ext-configure zip --with-libzip; \ - docker-php-ext-install -j$(nproc) \ - bcmath \ - gmp \ - mbstring \ - opcache \ - pdo \ - pdo_mysql \ - zip + libzip-dev; \ + docker-php-ext-configure zip --with-libzip; \ + docker-php-ext-install -j$(nproc) \ + bcmath \ + exif \ + gmp \ + mbstring \ + opcache \ + pdo \ + pdo_mysql \ + zip COPY ./config/php/php.ini /usr/local/etc/php/php.ini COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini -# Separate user -ENV IN_USER=invoiceninja +## Separate user +ENV INVOICENINJA_USER=invoiceninja -RUN addgroup -S "$IN_USER" && \ +RUN addgroup -S "$INVOICENINJA_USER" && \ adduser \ --disabled-password \ --gecos "" \ --home "$(pwd)" \ - --ingroup "$IN_USER" \ + --ingroup "$INVOICENINJA_USER" \ --no-create-home \ - "$IN_USER"; \ - addgroup "$IN_USER" www-data; \ - chown -R "$IN_USER":"$IN_USER" . + "$INVOICENINJA_USER"; \ + addgroup "$INVOICENINJA_USER" www-data; \ + chown -R "$INVOICENINJA_USER":"$INVOICENINJA_USER" /var/www/app -USER $IN_USER +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; \ + composer global require hirak/prestissimo; -# Download and install IN -ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}" +USER $INVOICENINJA_USER -RUN curl -o /tmp/ninja.zip -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \ - && 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 \ - && cp .env.dusk.example .env.dusk.local \ - && chmod -R 755 /var/www/app/storage \ - && rm -rf /var/www/app/docs /var/www/app/tests +RUN composer install --no-dev --no-suggest --no-progress # Override the environment settings from projects .env file +ENV APP_ENV production ENV LOG errorlog # Use to be mounted into nginx diff --git a/alpine/entrypoint_v5.sh b/alpine/entrypoint_v5.sh index fa35eb3..e25fa78 100755 --- a/alpine/entrypoint_v5.sh +++ b/alpine/entrypoint_v5.sh @@ -12,7 +12,7 @@ BAK_LOGO_PATH=/var/www/app/docker-backup-public/logo/ if [ ! -d /var/www/app/storage ]; then cp -Rp $BAK_STORAGE_PATH /var/www/app/storage else - if [ -d $BAK_STORAGE_PATH]; then + if [ -d $BAK_STORAGE_PATH ]; then IN_STORAGE_BACKUP="$(ls $BAK_STORAGE_PATH)" for path in $IN_STORAGE_BACKUP; do if [ ! -e "/var/www/app/storage/$path" ]; then @@ -45,4 +45,10 @@ fi chown invoiceninja:www-data /var/www/app/storage chown invoiceninja:www-data /var/www/app/public +# Database migrations and seeding +php artisan migrate --force +php artisan db:seed --force + +php artisan optimize + exec docker-php-entrypoint "$@" diff --git a/docker-compose.yml b/docker-compose.yml index 17cc1fd..5cde5db 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,12 +28,15 @@ services: - invoiceninja app: - image: invoiceninja/invoiceninja:alpine + image: invoiceninja/invoiceninja:5 restart: always environment: - APP_URL=https://localhost - APP_KEY= - DB_HOST=db + - MULTI_DB_ENABLED=false + - DB_HOST1=db + - DB_DATABASE1=ninja volumes: # Configure your mounted directories, make sure the folder 'public' and 'storage' # exist, before mounting them