mirror of
https://github.com/invoiceninja/dockerfiles.git
synced 2026-02-04 13:17:12 +01:00
Built multi stage image for v5
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 "$@"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user