mirror of
https://github.com/invoiceninja/dockerfiles.git
synced 2026-01-06 14:37:26 +01:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c3237d3b9 | ||
|
|
e29f786b34 | ||
|
|
bfc5625687 | ||
|
|
4b5abbbd5e | ||
|
|
a12f18836a | ||
|
|
d59d534ac5 | ||
|
|
35d9ee80b7 | ||
|
|
115b997cab | ||
|
|
8ca8e459be | ||
|
|
15625f41f9 | ||
|
|
9dc1fec1fb | ||
|
|
2342fd8cbb |
@@ -1,4 +1,6 @@
|
|||||||
ARG PHP_VERSION=7.2
|
ARG PHP_VERSION=7.2
|
||||||
|
ARG BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/
|
||||||
|
ARG BAK_PUBLIC_PATH=/var/www/app/docker-backup-public/
|
||||||
|
|
||||||
FROM php:${PHP_VERSION}-fpm-alpine
|
FROM php:${PHP_VERSION}-fpm-alpine
|
||||||
|
|
||||||
@@ -8,6 +10,10 @@ LABEL maintainer="David Bomba <turbo124@gmail.com>"
|
|||||||
# SYSTEM REQUIREMENT
|
# SYSTEM REQUIREMENT
|
||||||
#####
|
#####
|
||||||
ARG INVOICENINJA_VERSION
|
ARG INVOICENINJA_VERSION
|
||||||
|
ARG BAK_STORAGE_PATH
|
||||||
|
ARG BAK_PUBLIC_PATH
|
||||||
|
ENV BAK_STORAGE_PATH $BAK_STORAGE_PATH
|
||||||
|
ENV BAK_PUBLIC_PATH $BAK_PUBLIC_PATH
|
||||||
WORKDIR /var/www/app
|
WORKDIR /var/www/app
|
||||||
|
|
||||||
COPY entrypoint.sh /usr/local/bin/docker-entrypoint
|
COPY entrypoint.sh /usr/local/bin/docker-entrypoint
|
||||||
@@ -39,20 +45,20 @@ 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 --gid=1500 -S "$IN_USER" && \
|
RUN addgroup --gid=1500 -S "$INVOICENINJA_USER" && \
|
||||||
adduser --uid=1500 \
|
adduser --uid=1500 \
|
||||||
--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" .
|
||||||
|
|
||||||
USER $IN_USER
|
USER $INVOICENINJA_USER
|
||||||
|
|
||||||
# Download and install IN
|
# Download and install IN
|
||||||
ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
|
ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
|
||||||
@@ -60,8 +66,8 @@ ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
|
|||||||
RUN curl -s -o /tmp/ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \
|
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 \
|
&& bsdtar --strip-components=1 -C /var/www/app -xf /tmp/ninja.zip \
|
||||||
&& rm /tmp/ninja.zip \
|
&& rm /tmp/ninja.zip \
|
||||||
&& mv /var/www/app/storage /var/www/app/docker-backup-storage \
|
&& mv /var/www/app/storage $BAK_STORAGE_PATH \
|
||||||
&& mv /var/www/app/public /var/www/app/docker-backup-public \
|
&& mv /var/www/app/public $BAK_PUBLIC_PATH \
|
||||||
&& mkdir -p /var/www/app/public/logo /var/www/app/storage \
|
&& mkdir -p /var/www/app/public/logo /var/www/app/storage \
|
||||||
&& chmod -R 755 /var/www/app/storage \
|
&& chmod -R 755 /var/www/app/storage \
|
||||||
&& rm -rf /var/www/app/docs /var/www/app/tests
|
&& rm -rf /var/www/app/docs /var/www/app/tests
|
||||||
|
|||||||
@@ -1,37 +1,43 @@
|
|||||||
ARG PHP_VERSION=7.4
|
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
|
# Get Invoice Ninja and install nodejs packages
|
||||||
FROM alpine:latest as base
|
FROM node:lts-alpine as frontend
|
||||||
ARG INVOICENINJA_VERSION
|
ARG INVOICENINJA_VERSION
|
||||||
|
ARG BAK_STORAGE_PATH
|
||||||
|
ARG BAK_PUBLIC_PATH
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
curl \
|
curl
|
||||||
mysql-client \
|
|
||||||
libarchive-tools; \
|
|
||||||
mkdir -p /var/www/app
|
|
||||||
|
|
||||||
|
# Download Invoice Ninja
|
||||||
RUN curl -o /tmp/ninja.tar.gz -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \
|
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 \
|
&& mkdir -p /var/www/app \
|
||||||
&& rm /tmp/ninja.tar.gz \
|
&& tar --strip-components=1 -xf /tmp/ninja.tar.gz -C /var/www/app/ \
|
||||||
&& 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 \
|
&& mkdir -p /var/www/app/public/logo /var/www/app/storage \
|
||||||
&& cp /var/www/app/.env.example /var/www/app/.env \
|
&& mv /var/www/app/.env.example /var/www/app/.env \
|
||||||
&& rm -rf /var/www/app/docs /var/www/app/tests
|
&& 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/
|
WORKDIR /var/www/app/
|
||||||
|
|
||||||
RUN npm install
|
# 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
|
# Prepare php image
|
||||||
FROM php:${PHP_VERSION}-fpm-alpine
|
FROM php:${PHP_VERSION}-fpm-alpine
|
||||||
ARG INVOICENINJA_VERSION
|
ARG INVOICENINJA_VERSION
|
||||||
ENV INVOICENINJA_VERSION=$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 <turbo124@gmail.com>"
|
LABEL maintainer="David Bomba <turbo124@gmail.com>"
|
||||||
|
|
||||||
@@ -43,66 +49,55 @@ RUN chmod +x /usr/local/bin/docker-entrypoint
|
|||||||
|
|
||||||
RUN set -eux; \
|
RUN set -eux; \
|
||||||
apk add --no-cache \
|
apk add --no-cache \
|
||||||
nodejs \
|
|
||||||
npm \
|
|
||||||
mysql-client \
|
mysql-client \
|
||||||
freetype-dev \
|
freetype-dev \
|
||||||
gmp-dev \
|
gmp-dev \
|
||||||
libjpeg-turbo-dev \
|
libjpeg-turbo-dev \
|
||||||
libpng-dev \
|
libpng-dev \
|
||||||
libzip-dev \
|
libzip-dev \
|
||||||
oniguruma-dev \
|
# oniguruma-dev \
|
||||||
git \
|
git \
|
||||||
busybox-suid \
|
# busybox-suid \
|
||||||
zip; \
|
zip \
|
||||||
docker-php-ext-configure gd --with-freetype --with-jpeg; \
|
chromium \
|
||||||
docker-php-ext-install -j$(nproc) \
|
harfbuzz \
|
||||||
|
ttf-freefont \
|
||||||
|
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
|
||||||
|
&& docker-php-ext-install -j$(nproc) \
|
||||||
bcmath \
|
bcmath \
|
||||||
exif \
|
exif \
|
||||||
gd \
|
gd \
|
||||||
gmp \
|
gmp \
|
||||||
# mbstring \
|
|
||||||
mysqli \
|
mysqli \
|
||||||
opcache \
|
opcache \
|
||||||
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
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
|
||||||
chromium \
|
|
||||||
nss \
|
|
||||||
freetype \
|
|
||||||
freetype-dev \
|
|
||||||
harfbuzz \
|
|
||||||
ca-certificates \
|
|
||||||
ttf-freefont \
|
|
||||||
nodejs \
|
|
||||||
yarn
|
|
||||||
|
|
||||||
## Separate user
|
## Separate user
|
||||||
|
ARG UID=1500
|
||||||
ENV INVOICENINJA_USER=invoiceninja
|
ENV INVOICENINJA_USER=invoiceninja
|
||||||
|
|
||||||
RUN addgroup --gid=1500 -S "$INVOICENINJA_USER" && \
|
RUN addgroup --gid=$UID -S "$INVOICENINJA_USER" \
|
||||||
adduser --uid=1500 \
|
&& adduser --uid=$UID \
|
||||||
--disabled-password \
|
--disabled-password \
|
||||||
--gecos "" \
|
--gecos "" \
|
||||||
--home "$(pwd)" \
|
--home "$(pwd)" \
|
||||||
--ingroup "$INVOICENINJA_USER" \
|
--ingroup "$INVOICENINJA_USER" \
|
||||||
--no-create-home \
|
--no-create-home \
|
||||||
"$INVOICENINJA_USER"; \
|
"$INVOICENINJA_USER" \
|
||||||
addgroup "$INVOICENINJA_USER" www-data; \
|
&& addgroup "$INVOICENINJA_USER" www-data \
|
||||||
chown -R "$INVOICENINJA_USER":"$INVOICENINJA_USER" /var/www/app
|
&& chown -R "$INVOICENINJA_USER":"$INVOICENINJA_USER" /var/www/app
|
||||||
|
|
||||||
|
|
||||||
# Install Composer
|
# Install Composer
|
||||||
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer;
|
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer;
|
||||||
|
|
||||||
USER $INVOICENINJA_USER
|
USER $UID
|
||||||
|
|
||||||
RUN /usr/local/bin/composer install --no-dev --no-suggest --no-progress --quiet
|
RUN /usr/local/bin/composer install --no-dev --quiet
|
||||||
|
|
||||||
# Override the environment settings from projects .env file
|
# Override the environment settings from projects .env file
|
||||||
ENV APP_ENV production
|
ENV APP_ENV production
|
||||||
|
|||||||
@@ -70,7 +70,9 @@ services:
|
|||||||
- ./docker/app/public:/var/www/app/public:rw,delegated
|
- ./docker/app/public:/var/www/app/public:rw,delegated
|
||||||
- ./docker/app/storage:/var/www/app/storage:rw,delegated
|
- ./docker/app/storage:/var/www/app/storage:rw,delegated
|
||||||
command:
|
command:
|
||||||
- cron.sh
|
- cron.sh
|
||||||
|
depends_on:
|
||||||
|
- app
|
||||||
networks:
|
networks:
|
||||||
- invoiceninja
|
- invoiceninja
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
|
|||||||
@@ -47,43 +47,43 @@ if [ "${1#-}" != "$1" ]; then
|
|||||||
set -- php-fpm "$@"
|
set -- php-fpm "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/
|
# create storage volume
|
||||||
BAK_LOGO_PATH=/var/www/app/docker-backup-public/logo/
|
if [ ! -d /var/www/app/storage ] && [ -d "$BAK_STORAGE_PATH" ]; then
|
||||||
|
mv "$BAK_STORAGE_PATH" /var/www/app/storage
|
||||||
if [ ! -d /var/www/app/storage ]; then
|
elif [ -d "$BAK_STORAGE_PATH" ]; then
|
||||||
cp -Rp $BAK_STORAGE_PATH /var/www/app/storage
|
# copy missing folders in storage
|
||||||
else
|
IN_STORAGE_BACKUP="$(ls "$BAK_STORAGE_PATH")"
|
||||||
if [ -d $BAK_STORAGE_PATH ]; then
|
for path in $IN_STORAGE_BACKUP; do
|
||||||
IN_STORAGE_BACKUP="$(ls $BAK_STORAGE_PATH)"
|
if [ ! -e "/var/www/app/storage/$path" ]; then
|
||||||
for path in $IN_STORAGE_BACKUP; do
|
cp -Rp "$BAK_STORAGE_PATH/$path" "/var/www/app/storage/"
|
||||||
if [ ! -e "/var/www/app/storage/$path" ]; then
|
fi
|
||||||
cp -Rp "$BAK_STORAGE_PATH/$path" "/var/www/app/storage/"
|
done
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
rm -rf "$BAK_STORAGE_PATH"
|
||||||
|
|
||||||
if [ ! -d /var/www/app/public/logo ] && [ -d $BAK_LOGO_PATH ]; then
|
# create public volume
|
||||||
cp -Rp $BAK_LOGO_PATH /var/www/app/public/logo
|
if [ ! -d /var/www/app/public ] && [ -d "$BAK_PUBLIC_PATH" ]; then
|
||||||
else
|
mv "$BAK_PUBLIC_PATH" /var/www/app/public
|
||||||
if [ -d $BAK_LOGO_PATH ]; then
|
elif [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then
|
||||||
IN_LOGO_BACKUP="$(ls $BAK_LOGO_PATH)"
|
# version mismatch, update all
|
||||||
for path in $IN_LOGO_BACKUP; do
|
cp -au "$BAK_PUBLIC_PATH/"* /var/www/app/public
|
||||||
if [ ! -e "/var/www/app/public/logo/$path" ]; then
|
echo "$INVOICENINJA_VERSION" > /var/www/app/public/version
|
||||||
cp -Rp "$BAK_LOGO_PATH/$path" "/var/www/app/public/logo/"
|
elif [ ! -d /var/www/app/public/logo ] && [ -d "$BAK_PUBLIC_PATH/logo" ]; then
|
||||||
fi
|
# missing logo folder only, copy folder
|
||||||
done
|
cp -a "$BAK_PUBLIC_PATH/logo" /var/www/app/public/logo
|
||||||
fi
|
elif [ -d "$BAK_PUBLIC_PATH/logo" ]; then
|
||||||
fi
|
# copy missing folders in logo
|
||||||
|
IN_LOGO_BACKUP="$(ls "$BAK_PUBLIC_PATH/logo")"
|
||||||
# compare public volume version with image version
|
for path in $IN_LOGO_BACKUP; do
|
||||||
if [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then
|
if [ ! -e "/var/www/app/public/logo/$path" ]; then
|
||||||
cp -au /var/www/app/docker-backup-public/* /var/www/app/public/
|
cp -a "$BAK_PUBLIC_PATH/logo/$path" "/var/www/app/public/logo/"
|
||||||
echo $INVOICENINJA_VERSION > /var/www/app/public/version
|
fi
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
rm -rf "$BAK_PUBLIC_PATH"
|
||||||
|
|
||||||
# Set permission for web server to create/update files
|
# Set permission for web server to create/update files
|
||||||
chown -R invoiceninja:www-data /var/www/app/storage /var/www/app/public /var/www/app/bootstrap
|
chown -R "$INVOICENINJA_USER":www-data /var/www/app/storage /var/www/app/public /var/www/app/bootstrap
|
||||||
|
|
||||||
# Initialize values that might be stored in a file
|
# Initialize values that might be stored in a file
|
||||||
file_env 'APP_KEY'
|
file_env 'APP_KEY'
|
||||||
|
|||||||
Reference in New Issue
Block a user