Built multi stage image for v5

This commit is contained in:
Holger Lösken
2020-05-27 19:08:42 +02:00
parent 4350619c64
commit b190c8e633
3 changed files with 66 additions and 38 deletions

View File

@@ -1,68 +1,87 @@
ARG PHP_VERSION=7.3 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 FROM php:${PHP_VERSION}-fpm-alpine
ARG INVOICENINJA_VERSION
LABEL maintainer="Samuel Laulhau <sam@lalop.co>, Holger Lösken <holger.loesken@codedge.de>" LABEL maintainer="Samuel Laulhau <sam@lalop.co>, Holger Lösken <holger.loesken@codedge.de>"
#####
# SYSTEM REQUIREMENT
#####
ARG INVOICENINJA_VERSION
WORKDIR /var/www/app WORKDIR /var/www/app
COPY --from=frontend /var/www/app /var/www/app
COPY ./alpine/entrypoint_v5.sh /usr/local/bin/docker-entrypoint COPY ./alpine/entrypoint_v5.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint
RUN set -eux; \ RUN set -eux; \
apk add --no-cache \ apk add --no-cache \
gmp-dev \ gmp-dev \
libarchive-tools \ libzip-dev; \
libzip-dev docker-php-ext-configure zip --with-libzip; \
docker-php-ext-install -j$(nproc) \
RUN docker-php-ext-configure zip --with-libzip; \ bcmath \
docker-php-ext-install -j$(nproc) \ exif \
bcmath \ gmp \
gmp \ mbstring \
mbstring \ opcache \
opcache \ pdo \
pdo \ pdo_mysql \
pdo_mysql \ zip
zip
COPY ./config/php/php.ini /usr/local/etc/php/php.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 COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini
# Separate user ## Separate user
ENV IN_USER=invoiceninja ENV INVOICENINJA_USER=invoiceninja
RUN addgroup -S "$IN_USER" && \ RUN addgroup -S "$INVOICENINJA_USER" && \
adduser \ adduser \
--disabled-password \ --disabled-password \
--gecos "" \ --gecos "" \
--home "$(pwd)" \ --home "$(pwd)" \
--ingroup "$IN_USER" \ --ingroup "$INVOICENINJA_USER" \
--no-create-home \ --no-create-home \
"$IN_USER"; \ "$INVOICENINJA_USER"; \
addgroup "$IN_USER" www-data; \ addgroup "$INVOICENINJA_USER" www-data; \
chown -R "$IN_USER":"$IN_USER" . 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 USER $INVOICENINJA_USER
ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
RUN curl -o /tmp/ninja.zip -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \ RUN composer install --no-dev --no-suggest --no-progress
&& 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
# Override the environment settings from projects .env file # Override the environment settings from projects .env file
ENV APP_ENV production
ENV LOG errorlog ENV LOG errorlog
# Use to be mounted into nginx # Use to be mounted into nginx

View File

@@ -12,7 +12,7 @@ BAK_LOGO_PATH=/var/www/app/docker-backup-public/logo/
if [ ! -d /var/www/app/storage ]; then if [ ! -d /var/www/app/storage ]; then
cp -Rp $BAK_STORAGE_PATH /var/www/app/storage cp -Rp $BAK_STORAGE_PATH /var/www/app/storage
else else
if [ -d $BAK_STORAGE_PATH]; then if [ -d $BAK_STORAGE_PATH ]; then
IN_STORAGE_BACKUP="$(ls $BAK_STORAGE_PATH)" IN_STORAGE_BACKUP="$(ls $BAK_STORAGE_PATH)"
for path in $IN_STORAGE_BACKUP; do for path in $IN_STORAGE_BACKUP; do
if [ ! -e "/var/www/app/storage/$path" ]; then 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/storage
chown invoiceninja:www-data /var/www/app/public 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 "$@" exec docker-php-entrypoint "$@"

View File

@@ -28,12 +28,15 @@ services:
- invoiceninja - invoiceninja
app: app:
image: invoiceninja/invoiceninja:alpine image: invoiceninja/invoiceninja:5
restart: always restart: always
environment: environment:
- APP_URL=https://localhost - APP_URL=https://localhost
- APP_KEY=<INSERT THE GENERATED APPLICATION KEY HERE> - APP_KEY=<INSERT THE GENERATED APPLICATION KEY HERE>
- DB_HOST=db - DB_HOST=db
- MULTI_DB_ENABLED=false
- DB_HOST1=db
- DB_DATABASE1=ninja
volumes: volumes:
# Configure your mounted directories, make sure the folder 'public' and 'storage' # Configure your mounted directories, make sure the folder 'public' and 'storage'
# exist, before mounting them # exist, before mounting them