Compare commits

...

43 Commits

Author SHA1 Message Date
David Bomba
c6e122b81f Merge pull request #282 from turbo124/master
Remove redis queue worker from defaults
2021-02-03 09:32:29 +11:00
David Bomba
421a1f10e6 Remove redis queue worker from defaults 2021-02-03 09:31:14 +11:00
David Bomba
84db77cde8 Merge pull request #281 from turbo124/master
Improve supervisor configuration
2021-02-01 08:31:32 +11:00
David Bomba
e8706de11c Improve supervisor configuration 2021-02-01 08:30:50 +11:00
David Bomba
960a85d8a7 Merge pull request #278 from turbo124/master
fix for defaults of supervisor
2021-01-28 21:03:28 +11:00
David Bomba
6cd85f48cd fix for defaults of supervisor 2021-01-28 21:03:09 +11:00
David Bomba
eca3af3da5 Merge pull request #277 from turbo124/master
Adjustments for supervisor
2021-01-28 20:38:28 +11:00
David Bomba
b141cfe449 Adjustments for supervisor 2021-01-28 20:38:03 +11:00
David Bomba
3104ec0be9 Merge pull request #276 from turbo124/master
Adjustments for supervisor
2021-01-28 20:18:21 +11:00
David Bomba
acd778f815 Adjustments for supervisor 2021-01-28 20:18:03 +11:00
David Bomba
0641860c3f Merge pull request #275 from turbo124/master
Adjustments for supervisor
2021-01-28 20:09:27 +11:00
David Bomba
f6564ffb14 Adjustments for supervisor 2021-01-28 20:09:11 +11:00
David Bomba
d751217d9a Merge pull request #274 from turbo124/master
Adjustments for supervisor
2021-01-28 19:59:24 +11:00
David Bomba
9bd40b98df Adjustments for supervisor 2021-01-28 19:59:07 +11:00
David Bomba
54f789d5a1 Merge pull request #273 from turbo124/master
Add supervisor to DockerFile
2021-01-28 19:55:39 +11:00
David Bomba
a6644abaa2 Add supervisor to DockerFile 2021-01-28 19:55:20 +11:00
David Bomba
d42e333248 Merge pull request #272 from turbo124/master
Change from queue:listen to queue:work.
2021-01-28 19:36:01 +11:00
David Bomba
2e4ccb920b Adjustments for supervisor 2021-01-28 19:35:29 +11:00
David Bomba
ebe353ca52 Adjustments for supervisor 2021-01-28 19:34:48 +11:00
David Bomba
1af91f451d Merge pull request #271 from turbo124/master
Remove cron container
2021-01-28 19:31:52 +11:00
David Bomba
386f6ed8c1 Remove cron container 2021-01-28 19:31:20 +11:00
David Bomba
73e88f6042 Merge pull request #270 from tms0/supervisor_v5
Add example to run php-fpm, scheduler and queue worker in the same container with supervisor
2021-01-28 19:30:25 +11:00
Valentin Day
758709a796 Change supervisord logging options 2021-01-28 09:05:50 +01:00
Valentin Day
a67de32b6e Move supervisor example into an examples folder 2021-01-27 15:43:45 +01:00
Valentin Day
49d3e562de Add example to run php-fpm, scheduler and queue worker in the same container with supervisor 2021-01-27 15:30:14 +01:00
David Bomba
7d4afadbb5 Merge pull request #268 from turbo124/master
Add mysql-client back in
2021-01-26 17:13:07 +11:00
David Bomba
3709355309 Add mysql-client back in 2021-01-26 17:12:52 +11:00
David Bomba
4b63e1f76d Merge pull request #265 from lwj5/php
Added install-php-extensions
2021-01-21 13:55:48 +11:00
Lee Ween Jiann
5118eac0ea Added install-php-extensions 2021-01-20 22:56:32 +08:00
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
12 changed files with 235 additions and 202 deletions

View File

@@ -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,60 +10,54 @@ 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
RUN chmod +x /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint \
&& mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
RUN set -eux; \ # Install PHP extensions
apk add --no-cache \ # https://hub.docker.com/r/mlocati/php-extension-installer/tags
gmp-dev \ COPY --from=mlocati/php-extension-installer:1.1.41 /usr/bin/install-php-extensions /usr/local/bin/
freetype-dev \
libarchive-tools \
libjpeg-turbo-dev \
libpng-dev \
libwebp-dev\
libzip-dev
RUN docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include --with-webp-dir=/usr/include --with-freetype-dir=/usr/include/; \ RUN install-php-extensions \
docker-php-ext-configure zip --with-libzip; \ gd \
docker-php-ext-install -j$(nproc) \ gmp \
iconv \ opcache \
gd \ pdo_mysql \
gmp \ zip
mbstring \
opcache \
pdo \
pdo_mysql \
zip
COPY ./config/php/php.ini /usr/local/etc/php/php.ini COPY ./config/php/php.ini /usr/local/etc/php/conf.d/in-php.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 1500
# Download and install IN # Download and install IN
ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}" ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
RUN curl -s -o /tmp/ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \ RUN curl -o /tmp/ninja.zip -L https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \
&& bsdtar --strip-components=1 -C /var/www/app -xf /tmp/ninja.zip \ && unzip -q /tmp/ninja.zip -d /tmp/ \
&& rm /tmp/ninja.zip \ && mv /tmp/ninja/* /var/www/app \
&& mv /var/www/app/storage /var/www/app/docker-backup-storage \ && rm -rf /tmp/ninja* \
&& 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 \ && 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

View File

@@ -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
RUN curl -o /tmp/ninja.tar.gz -LJ0 https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \ # Download Invoice Ninja
&& bsdtar --strip-components=1 -C /var/www/app -xf /tmp/ninja.tar.gz \ RUN curl -o /tmp/ninja.tar.gz -L https://github.com/invoiceninja/invoiceninja/tarball/v$INVOICENINJA_VERSION \
&& rm /tmp/ninja.tar.gz \ && mkdir -p /var/www/app \
&& cp -R /var/www/app/storage /var/www/app/docker-backup-storage \ && tar --strip-components=1 -xf /tmp/ninja.tar.gz -C /var/www/app/ \
&& 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>"
@@ -39,70 +45,56 @@ WORKDIR /var/www/app
COPY --from=frontend /var/www/app /var/www/app COPY --from=frontend /var/www/app /var/www/app
COPY entrypoint.sh /usr/local/bin/docker-entrypoint COPY entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint RUN chmod +x /usr/local/bin/docker-entrypoint \
&& mv /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini
# Install PHP extensions
# https://hub.docker.com/r/mlocati/php-extension-installer/tags
COPY --from=mlocati/php-extension-installer:1.1.41 /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions \
bcmath \
exif \
gd \
gmp \
mysqli \
opcache \
pdo_mysql \
zip \
@composer
# Install chromium
RUN set -eux; \ RUN set -eux; \
apk add --no-cache \ apk add --no-cache \
nodejs \ supervisor \
npm \
mysql-client \ mysql-client \
freetype-dev \
gmp-dev \
libjpeg-turbo-dev \
libpng-dev \
libzip-dev \
oniguruma-dev \
git \ git \
busybox-suid \ chromium \
zip; \ 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.ini /usr/local/etc/php/conf.d/in-php.ini
COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini COPY ./config/supervisor/supervisord.conf /
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 && mkdir /var/log/supervisord /var/run/supervisord \
&& chown -R "$INVOICENINJA_USER":"$INVOICENINJA_USER" /var/www/app \
&& chown $INVOICENINJA_USER:www-data /var/log/supervisord /var/run/supervisord
USER $UID
# Install Composer RUN /usr/local/bin/composer install --no-dev --quiet
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer;
USER $INVOICENINJA_USER
RUN /usr/local/bin/composer install --no-dev --no-suggest --no-progress --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
@@ -110,4 +102,4 @@ ENV LOG errorlog
ENV SNAPPDF_EXECUTABLE_PATH /usr/bin/chromium-browser ENV SNAPPDF_EXECUTABLE_PATH /usr/bin/chromium-browser
ENTRYPOINT ["docker-entrypoint"] ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"] CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]

View File

@@ -1,16 +0,0 @@
#!/bin/sh
echo "Early Entry"
cleanup ()
{
kill -s SIGTERM $!
exit 0
}
trap cleanup SIGINT SIGTERM
while :
do
sleep 60 ; cd /var/www/app/ && php artisan schedule:run;
done

View File

@@ -1,18 +0,0 @@
session.auto_start = Off
short_open_tag = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
# http://symfony.com/doc/current/performance.html
realpath_cache_size = 4096K
realpath_cache_ttl = 600
memory_limit = 2G
post_max_size = 6M
upload_max_filesize = 5M

View File

@@ -1,17 +1,17 @@
session.auto_start = Off ; How often (in seconds) to check file timestamps for changes to the shared
short_open_tag = Off ; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED ;opcache.revalidate_freq=2
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60 opcache.revalidate_freq=60
# http://symfony.com/doc/current/performance.html # http://symfony.com/doc/current/performance.html
realpath_cache_size = 4096K ; Duration of time, in seconds for which to cache realpath information for a given
; file or directory. For systems with rarely changing files, consider increasing this
; value.
; http://php.net/realpath-cache-ttl
;realpath_cache_ttl = 120
realpath_cache_ttl = 600 realpath_cache_ttl = 600
post_max_size = 6M ; Maximum allowed size for uploaded files.
upload_max_filesize = 5M ; http://php.net/upload-max-filesize
upload_max_filesize = 8M

8
config/shutdown.sh Normal file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
printf "READY\n";
while read line; do
echo "Processing Event: $line" >&2;
kill -SIGQUIT $PPID
done < /dev/stdin

View File

@@ -0,0 +1,47 @@
[supervisord]
nodaemon=true
user=invoiceninja
pidfile=/var/run/supervisord/supervisord.pid
logfile=/dev/null ; nodaemon will cause logs to go to stdout
logfile_maxbytes=0
loglevel=error
[program:php-fpm]
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=php-fpm
[program:scheduler]
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=php artisan schedule:work
[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
numprocs=2
command=php artisan queue:work --sleep=3 --tries=3 --memory=256
[eventlistener:shutdown]
command=/shutdown.sh
events=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

View File

@@ -9,7 +9,6 @@ services:
# Vhost configuration # Vhost configuration
#- ./config/caddy/Caddyfile:/etc/caddy/Caddyfiledocker-com #- ./config/caddy/Caddyfile:/etc/caddy/Caddyfiledocker-com
- ./config/nginx/in-vhost.conf:/etc/nginx/conf.d/in-vhost.conf:ro - ./config/nginx/in-vhost.conf:/etc/nginx/conf.d/in-vhost.conf:ro
# you may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
- ./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
depends_on: depends_on:
@@ -28,11 +27,9 @@ services:
image: invoiceninja/invoiceninja:5 image: invoiceninja/invoiceninja:5
env_file: env env_file: env
restart: always restart: always
cap_add:
- SYS_ADMIN
volumes: 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 - ./config/hosts:/etc/hosts:ro
- ./config/shutdown.sh:/usr/local/bin/shutdown.sh
- ./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
depends_on: depends_on:
@@ -53,29 +50,12 @@ services:
- MYSQL_PASSWORD=ninja - MYSQL_PASSWORD=ninja
- MYSQL_DATABASE=ninja - MYSQL_DATABASE=ninja
volumes: 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!
- ./docker/mysql/data:/var/lib/mysql:rw,delegated - ./docker/mysql/data:/var/lib/mysql:rw,delegated
networks: networks:
- invoiceninja - invoiceninja
extra_hosts: extra_hosts:
- "in5.localhost:192.168.0.124 " #host and ip - "in5.localhost:192.168.0.124 " #host and ip
# THIS IS ONLY A VALID CONFIGURATION FOR IN 5. DO NOT USE FOR IN 4.
cron:
image: invoiceninja/invoiceninja:5
env_file: env
volumes:
- ./config/cron.sh:/usr/local/bin/cron.sh
- ./config/hosts:/etc/hosts:ro
- ./docker/app/public:/var/www/app/public:rw,delegated
- ./docker/app/storage:/var/www/app/storage:rw,delegated
command:
- cron.sh
networks:
- invoiceninja
extra_hosts:
- "in5.localhost:192.168.0.124 " #host and ip
# THIS IS ONLY A VALID CONFIGURATION FOR IN 4. DO NOT USE FOR IN 5. # THIS IS ONLY A VALID CONFIGURATION FOR IN 4. DO NOT USE FOR IN 5.
# cron: # cron:
# image: invoiceninja/invoiceninja:alpine-4 # image: invoiceninja/invoiceninja:alpine-4

View File

@@ -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'

4
env
View File

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

View File

@@ -0,0 +1,13 @@
FROM invoiceninja/invoiceninja:5
USER root
RUN apk add --no-cache supervisor \
&& mkdir /var/log/supervisord /var/run/supervisord \
&& chown $INVOICENINJA_USER:www-data /var/log/supervisord /var/run/supervisord
COPY supervisord.conf /
USER $INVOICENINJA_USER
CMD ["/usr/bin/supervisord", "-c", "/supervisord.conf"]

View File

@@ -0,0 +1,29 @@
[supervisord]
nodaemon=true
user=invoiceninja
pidfile=/var/run/supervisord/supervisord.pid
logfile=/dev/null ; nodaemon will cause logs to go to stdout
logfile_maxbytes=0
loglevel=error
[program:php-fpm]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=php-fpm
[program:scheduler]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
command=php artisan schedule:work
[program:queue-worker]
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
numprocs=2
command=php artisan queue:work --sleep=3 --tries=1 --memory=1024 --timeout=3600 --daemon