Compare commits

...

14 Commits

Author SHA1 Message Date
David Bomba
486d38d6e1 Merge pull request #263 from turbo124/master
Remove sys_admin, add application variable
2021-01-19 07:39:15 +11:00
David Bomba
89ae36315d Remove sys_admin, add application variable 2021-01-19 07:38:54 +11:00
David Bomba
0c3237d3b9 Merge pull request #258 from lwj5/dockerfile
Enhancement and Fixes for Dockerfile
2021-01-11 16:11:52 +11:00
Lee Ween Jiann
e29f786b34 Revert 'git' dependency comment 2021-01-11 11:01:52 +08:00
Lee Ween Jiann
bfc5625687 Update entrypoint.sh to use ENV username 2021-01-10 22:34:49 +08:00
Lee Ween Jiann
4b5abbbd5e Add public missing folder condition for quick move 2021-01-10 22:16:34 +08:00
Lee Ween Jiann
a12f18836a Use uid to allow running in k8s with non-root PSP 2021-01-10 21:34:53 +08:00
Lee Ween Jiann
d59d534ac5 Update entrypoint.sh to use ENV paths + cleanup 2021-01-10 21:32:59 +08:00
Lee Ween Jiann
35d9ee80b7 Update Dockerfiles to use ENV for BAK paths 2021-01-10 21:31:05 +08:00
Lee Ween Jiann
115b997cab Move BAK to after npm run prod 2021-01-10 21:29:56 +08:00
Lee Ween Jiann
8ca8e459be Update cron to depend on app
- prevents race to copy files
2021-01-10 21:18:30 +08:00
David Bomba
15625f41f9 Merge pull request #257 from lwj5/patch-2
Remove node_modules and clean up
2021-01-10 09:17:18 +11:00
Ween Jiann
9dc1fec1fb Reinsert fonts 2021-01-08 22:13:06 +08:00
Ween Jiann
2342fd8cbb Remove node_modules and clean up 2021-01-08 21:28:43 +08:00
5 changed files with 92 additions and 89 deletions

View File

@@ -1,4 +1,6 @@
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
@@ -8,6 +10,10 @@ LABEL maintainer="David Bomba <turbo124@gmail.com>"
# SYSTEM REQUIREMENT
#####
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
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
# 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 \
--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" .
USER $IN_USER
USER $INVOICENINJA_USER
# Download and install IN
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 \
&& 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 \
&& mv /var/www/app/storage $BAK_STORAGE_PATH \
&& mv /var/www/app/public $BAK_PUBLIC_PATH \
&& mkdir -p /var/www/app/public/logo /var/www/app/storage \
&& chmod -R 755 /var/www/app/storage \
&& rm -rf /var/www/app/docs /var/www/app/tests

View File

@@ -1,37 +1,43 @@
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
FROM alpine:latest as base
# 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 \
mysql-client \
libarchive-tools; \
mkdir -p /var/www/app
curl
# Download Invoice Ninja
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 \
&& tar --strip-components=1 -xf /tmp/ninja.tar.gz -C /var/www/app/ \
&& 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
# 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
# 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
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>"
@@ -43,66 +49,55 @@ RUN chmod +x /usr/local/bin/docker-entrypoint
RUN set -eux; \
apk add --no-cache \
nodejs \
npm \
mysql-client \
freetype-dev \
gmp-dev \
libjpeg-turbo-dev \
libpng-dev \
libzip-dev \
oniguruma-dev \
# oniguruma-dev \
git \
busybox-suid \
zip; \
docker-php-ext-configure gd --with-freetype --with-jpeg; \
docker-php-ext-install -j$(nproc) \
# 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 \
# mbstring \
mysqli \
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
RUN apk add --no-cache \
chromium \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
nodejs \
yarn
## Separate user
ARG UID=1500
ENV INVOICENINJA_USER=invoiceninja
RUN addgroup --gid=1500 -S "$INVOICENINJA_USER" && \
adduser --uid=1500 \
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
"$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 $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
ENV APP_ENV production

View File

@@ -28,8 +28,6 @@ services:
image: invoiceninja/invoiceninja:5
env_file: env
restart: always
cap_add:
- SYS_ADMIN
volumes:
# you may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
- ./config/hosts:/etc/hosts:ro
@@ -70,7 +68,9 @@ services:
- ./docker/app/public:/var/www/app/public:rw,delegated
- ./docker/app/storage:/var/www/app/storage:rw,delegated
command:
- cron.sh
- cron.sh
depends_on:
- app
networks:
- invoiceninja
extra_hosts:

View File

@@ -47,43 +47,43 @@ if [ "${1#-}" != "$1" ]; then
set -- php-fpm "$@"
fi
BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/
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
IN_STORAGE_BACKUP="$(ls $BAK_STORAGE_PATH)"
for path in $IN_STORAGE_BACKUP; do
if [ ! -e "/var/www/app/storage/$path" ]; then
cp -Rp "$BAK_STORAGE_PATH/$path" "/var/www/app/storage/"
fi
done
fi
# create storage volume
if [ ! -d /var/www/app/storage ] && [ -d "$BAK_STORAGE_PATH" ]; then
mv "$BAK_STORAGE_PATH" /var/www/app/storage
elif [ -d "$BAK_STORAGE_PATH" ]; then
# copy missing folders in storage
IN_STORAGE_BACKUP="$(ls "$BAK_STORAGE_PATH")"
for path in $IN_STORAGE_BACKUP; do
if [ ! -e "/var/www/app/storage/$path" ]; then
cp -Rp "$BAK_STORAGE_PATH/$path" "/var/www/app/storage/"
fi
done
fi
rm -rf "$BAK_STORAGE_PATH"
if [ ! -d /var/www/app/public/logo ] && [ -d $BAK_LOGO_PATH ]; then
cp -Rp $BAK_LOGO_PATH /var/www/app/public/logo
else
if [ -d $BAK_LOGO_PATH ]; then
IN_LOGO_BACKUP="$(ls $BAK_LOGO_PATH)"
for path in $IN_LOGO_BACKUP; do
if [ ! -e "/var/www/app/public/logo/$path" ]; then
cp -Rp "$BAK_LOGO_PATH/$path" "/var/www/app/public/logo/"
fi
done
fi
fi
# compare public volume version with image version
if [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then
cp -au /var/www/app/docker-backup-public/* /var/www/app/public/
echo $INVOICENINJA_VERSION > /var/www/app/public/version
# create public volume
if [ ! -d /var/www/app/public ] && [ -d "$BAK_PUBLIC_PATH" ]; then
mv "$BAK_PUBLIC_PATH" /var/www/app/public
elif [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then
# version mismatch, update all
cp -au "$BAK_PUBLIC_PATH/"* /var/www/app/public
echo "$INVOICENINJA_VERSION" > /var/www/app/public/version
elif [ ! -d /var/www/app/public/logo ] && [ -d "$BAK_PUBLIC_PATH/logo" ]; then
# missing logo folder only, copy folder
cp -a "$BAK_PUBLIC_PATH/logo" /var/www/app/public/logo
elif [ -d "$BAK_PUBLIC_PATH/logo" ]; then
# copy missing folders in logo
IN_LOGO_BACKUP="$(ls "$BAK_PUBLIC_PATH/logo")"
for path in $IN_LOGO_BACKUP; do
if [ ! -e "/var/www/app/public/logo/$path" ]; then
cp -a "$BAK_PUBLIC_PATH/logo/$path" "/var/www/app/public/logo/"
fi
done
fi
rm -rf "$BAK_PUBLIC_PATH"
# 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
file_env 'APP_KEY'

4
env
View File

@@ -6,7 +6,9 @@ DB_HOST1=db
DB_USERNAME1=ninja
DB_PASSWORD1=ninja
DB_DATABASE1=ninja
PHANTOMJS_PDF_GENERATION=false
#this is a system variable please do not remove
IS_DOCKER=true
#V4 env vars
DB_STRICT=false