ARG PHP_VERSION=7.4 ARG BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/ ARG BAK_PUBLIC_PATH=/var/www/app/docker-backup-public/ # Get Invoice Ninja and install nodejs packages FROM node:lts-alpine as frontend ARG INVOICENINJA_VERSION ARG BAK_STORAGE_PATH ARG BAK_PUBLIC_PATH # Install dependencies RUN set -eux; \ apk add --no-cache \ curl # Download Invoice Ninja RUN curl -o /tmp/ninja.tar.gz -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \ && mkdir -p /var/www/app \ && tar --strip-components=1 -xf /tmp/ninja.tar.gz -C /var/www/app/ \ && mkdir -p /var/www/app/public/logo /var/www/app/storage \ && mv /var/www/app/.env.example /var/www/app/.env \ && rm -rf /var/www/app/docs /var/www/app/tests WORKDIR /var/www/app/ # Install node packages RUN npm install --production \ && npm run production \ && rm -rf node_modules \ && mv /var/www/app/storage $BAK_STORAGE_PATH \ && mv /var/www/app/public $BAK_PUBLIC_PATH # Prepare php image FROM php:${PHP_VERSION}-fpm-alpine ARG INVOICENINJA_VERSION ARG BAK_STORAGE_PATH ARG BAK_PUBLIC_PATH ENV INVOICENINJA_VERSION $INVOICENINJA_VERSION ENV BAK_STORAGE_PATH $BAK_STORAGE_PATH ENV BAK_PUBLIC_PATH $BAK_PUBLIC_PATH LABEL maintainer="David Bomba " WORKDIR /var/www/app COPY --from=frontend /var/www/app /var/www/app COPY entrypoint.sh /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint RUN set -eux; \ apk add --no-cache \ mysql-client \ freetype-dev \ gmp-dev \ libjpeg-turbo-dev \ libpng-dev \ libzip-dev \ # oniguruma-dev \ git \ # busybox-suid \ zip \ chromium \ harfbuzz \ ttf-freefont \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ bcmath \ exif \ gd \ gmp \ mysqli \ opcache \ 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 ARG UID=1500 ENV INVOICENINJA_USER=invoiceninja RUN addgroup --gid=$UID -S "$INVOICENINJA_USER" \ && adduser --uid=$UID \ --disabled-password \ --gecos "" \ --home "$(pwd)" \ --ingroup "$INVOICENINJA_USER" \ --no-create-home \ "$INVOICENINJA_USER" \ && addgroup "$INVOICENINJA_USER" www-data \ && chown -R "$INVOICENINJA_USER":"$INVOICENINJA_USER" /var/www/app # Install Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; USER $UID RUN /usr/local/bin/composer install --no-dev --quiet # Override the environment settings from projects .env file ENV APP_ENV production ENV LOG errorlog ENV SNAPPDF_EXECUTABLE_PATH /usr/bin/chromium-browser ENTRYPOINT ["docker-entrypoint"] CMD ["php-fpm"]