mirror of
https://github.com/invoiceninja/dockerfiles.git
synced 2026-01-06 14:37:26 +01:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1af469cf04 | ||
|
|
2d934fd703 | ||
|
|
a7668325e8 | ||
|
|
7aef08794b | ||
|
|
001c922e45 | ||
|
|
85161446e9 | ||
|
|
14c0fd89eb | ||
|
|
7b08926961 | ||
|
|
a5e41d3072 | ||
|
|
72e07679eb |
6
.github/workflows/build_push.yml
vendored
6
.github/workflows/build_push.yml
vendored
@@ -31,11 +31,5 @@ jobs:
|
|||||||
- name: Push alpine-based image - v4
|
- name: Push alpine-based image - v4
|
||||||
run: make push-alpine TAG="${{steps.vars.outputs.tag}}"
|
run: make push-alpine TAG="${{steps.vars.outputs.tag}}"
|
||||||
|
|
||||||
- name: Build image from debian - v4
|
|
||||||
run: make build-debian TAG="${{steps.vars.outputs.tag}}"
|
|
||||||
|
|
||||||
- name: Push debian-based image - v4
|
|
||||||
run: make push-debian TAG="${{steps.vars.outputs.tag}}"
|
|
||||||
|
|
||||||
- name: Logout from DockerHub
|
- name: Logout from DockerHub
|
||||||
run: docker logout
|
run: docker logout
|
||||||
42
Makefile
42
Makefile
@@ -11,6 +11,9 @@ IMAGE="invoiceninja"
|
|||||||
# Check if v5 tag is passed, so that a v5 version should be built
|
# Check if v5 tag is passed, so that a v5 version should be built
|
||||||
IS_V5=$(shell echo ${TAG} | egrep ^5)
|
IS_V5=$(shell echo ${TAG} | egrep ^5)
|
||||||
|
|
||||||
|
# Version of Invoice Ninja. As the tag can be something like 5.0.4-p1, the version is 5.0.4.
|
||||||
|
# This supports changes to the Dockerfiles with always the same Invoice Ninja version
|
||||||
|
VERSION=$(shell echo ${TAG} | sed "s/-.*//")
|
||||||
|
|
||||||
# Building docker images based on alpine.
|
# Building docker images based on alpine.
|
||||||
# Assigned tags:
|
# Assigned tags:
|
||||||
@@ -19,10 +22,10 @@ IS_V5=$(shell echo ${TAG} | egrep ^5)
|
|||||||
.PHONY: build-alpine
|
.PHONY: build-alpine
|
||||||
build-alpine:
|
build-alpine:
|
||||||
ifeq ($(IS_V5),)
|
ifeq ($(IS_V5),)
|
||||||
$(info Make: Building "$(TAG)" tagged images from alpine.)
|
$(info Make: Building "$(VERSION)" tagged images from alpine.)
|
||||||
@docker build -t ${HUB_NAMESPACE}/${IMAGE}:alpine-${TAG} --build-arg INVOICENINJA_VERSION=${TAG} --file ./alpine/Dockerfile .
|
@docker build -t ${HUB_NAMESPACE}/${IMAGE}:alpine-${VERSION} --build-arg INVOICENINJA_VERSION=${VERSION} --file ./alpine/Dockerfile .
|
||||||
# Tag as alpine-4
|
# Tag as alpine-4
|
||||||
@docker tag ${HUB_NAMESPACE}/${IMAGE}:alpine-${TAG} ${HUB_NAMESPACE}/${IMAGE}:alpine-4
|
@docker tag ${HUB_NAMESPACE}/${IMAGE}:alpine-${VERSION} ${HUB_NAMESPACE}/${IMAGE}:alpine-4
|
||||||
$(info Make: Done.)
|
$(info Make: Done.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -30,7 +33,7 @@ endif
|
|||||||
push-alpine:
|
push-alpine:
|
||||||
ifeq ($(IS_V5),)
|
ifeq ($(IS_V5),)
|
||||||
$(info Make: Pushing tagged images from alpine.)
|
$(info Make: Pushing tagged images from alpine.)
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:alpine-${TAG}
|
@docker push ${HUB_NAMESPACE}/${IMAGE}:alpine-${VERSION}
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:alpine-4
|
@docker push ${HUB_NAMESPACE}/${IMAGE}:alpine-4
|
||||||
$(info Make: Done.)
|
$(info Make: Done.)
|
||||||
endif
|
endif
|
||||||
@@ -38,10 +41,10 @@ endif
|
|||||||
.PHONY: build-alpine-v5
|
.PHONY: build-alpine-v5
|
||||||
build-alpine-v5:
|
build-alpine-v5:
|
||||||
ifneq ($(IS_V5),)
|
ifneq ($(IS_V5),)
|
||||||
$(info Make: Building "$(TAG)" tagged images from alpine.)
|
$(info Make: Building "$(VERSION)" tagged images from alpine.)
|
||||||
@docker build -t ${HUB_NAMESPACE}/${IMAGE}:${TAG} --build-arg INVOICENINJA_VERSION=${TAG} --file ./alpine/Dockerfile_v5 .
|
@docker build -t ${HUB_NAMESPACE}/${IMAGE}:${VERSION} --build-arg INVOICENINJA_VERSION=${VERSION} --file ./alpine/Dockerfile_v5 .
|
||||||
@docker tag ${HUB_NAMESPACE}/${IMAGE}:${TAG} ${HUB_NAMESPACE}/${IMAGE}:5
|
@docker tag ${HUB_NAMESPACE}/${IMAGE}:${VERSION} ${HUB_NAMESPACE}/${IMAGE}:5
|
||||||
@docker tag ${HUB_NAMESPACE}/${IMAGE}:${TAG} ${HUB_NAMESPACE}/${IMAGE}:latest
|
@docker tag ${HUB_NAMESPACE}/${IMAGE}:${VERSION} ${HUB_NAMESPACE}/${IMAGE}:latest
|
||||||
$(info Make: Done.)
|
$(info Make: Done.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -49,28 +52,7 @@ endif
|
|||||||
push-alpine-v5:
|
push-alpine-v5:
|
||||||
ifneq ($(IS_V5),)
|
ifneq ($(IS_V5),)
|
||||||
$(info Make: Pushing tagged images from alpine.)
|
$(info Make: Pushing tagged images from alpine.)
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:${TAG}
|
@docker push ${HUB_NAMESPACE}/${IMAGE}:${VERSION}
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:5
|
@docker push ${HUB_NAMESPACE}/${IMAGE}:5
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:latest
|
@docker push ${HUB_NAMESPACE}/${IMAGE}:latest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Building docker images based on debian.
|
|
||||||
# Assigned tags:
|
|
||||||
# - :latest
|
|
||||||
# - :<RELEASE VERSION>
|
|
||||||
.PHONY: build-debian
|
|
||||||
build-debian:
|
|
||||||
ifeq ($(IS_V5),)
|
|
||||||
$(info Make: Building "$(TAG)" tagged images from debian.)
|
|
||||||
@docker build -t ${HUB_NAMESPACE}/${IMAGE}:${TAG} --build-arg INVOICENINJA_VERSION=${TAG} --file ./debian/Dockerfile .
|
|
||||||
$(info Make: Done.)
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: push-debian
|
|
||||||
push-debian:
|
|
||||||
ifeq ($(IS_V5),)
|
|
||||||
$(info Make: Pushing tagged images from debian.)
|
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:${TAG}
|
|
||||||
@docker push ${HUB_NAMESPACE}/${IMAGE}:latest
|
|
||||||
$(info Make: Done.)
|
|
||||||
endif
|
|
||||||
@@ -20,7 +20,7 @@ If you feel your question is directly related to a code change or you want to se
|
|||||||
|
|
||||||
Before starting Invoice Ninja via Docker make sure you generate a valid application key. If you are not sure what an application key is, please visit [this blog post](https://tighten.co/blog/app-key-and-you/).
|
Before starting Invoice Ninja via Docker make sure you generate a valid application key. If you are not sure what an application key is, please visit [this blog post](https://tighten.co/blog/app-key-and-you/).
|
||||||
|
|
||||||
To generate an application just run
|
To generate an application key just run
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show
|
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show
|
||||||
@@ -74,6 +74,7 @@ docker run -d \
|
|||||||
-e DB_USERNAME='ninja' \
|
-e DB_USERNAME='ninja' \
|
||||||
-e DB_PASSWORD='ninja' \
|
-e DB_PASSWORD='ninja' \
|
||||||
-p '9000:9000' \
|
-p '9000:9000' \
|
||||||
|
--name invoiceninja \
|
||||||
invoiceninja/invoiceninja:alpine-4
|
invoiceninja/invoiceninja:alpine-4
|
||||||
```
|
```
|
||||||
A list of environment variables can be found [here](https://github.com/invoiceninja/invoiceninja/blob/master/.env.example).
|
A list of environment variables can be found [here](https://github.com/invoiceninja/invoiceninja/blob/master/.env.example).
|
||||||
|
|||||||
@@ -2,6 +2,5 @@
|
|||||||
root * /var/www/app/public
|
root * /var/www/app/public
|
||||||
php_fastcgi app:9000
|
php_fastcgi app:9000
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
templates
|
|
||||||
file_server browse
|
file_server browse
|
||||||
}
|
}
|
||||||
|
|||||||
76
debian/Dockerfile
vendored
76
debian/Dockerfile
vendored
@@ -1,76 +0,0 @@
|
|||||||
ARG PHP_VERSION=7.2
|
|
||||||
|
|
||||||
FROM php:${PHP_VERSION}-fpm-stretch
|
|
||||||
|
|
||||||
LABEL maintainer="Samuel Laulhau <sam@lalop.co>, Holger Lösken <holger.loesken@codedge.de>"
|
|
||||||
|
|
||||||
#####
|
|
||||||
# SYSTEM REQUIREMENT
|
|
||||||
#####
|
|
||||||
ARG INVOICENINJA_VERSION
|
|
||||||
COPY ./debian/entrypoint.sh /usr/local/bin/docker-entrypoint
|
|
||||||
RUN chmod +x /usr/local/bin/docker-entrypoint
|
|
||||||
|
|
||||||
ENV BUILD_DEPS \
|
|
||||||
zlib1g-dev \
|
|
||||||
git \
|
|
||||||
libgmp-dev \
|
|
||||||
unzip \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libpng-dev \
|
|
||||||
build-essential \
|
|
||||||
chrpath \
|
|
||||||
libssl-dev \
|
|
||||||
libxft-dev \
|
|
||||||
libfreetype6 \
|
|
||||||
libfontconfig1 \
|
|
||||||
libfontconfig1-dev
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends $BUILD_DEPS \
|
|
||||||
&& ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/local/include/ \
|
|
||||||
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
|
|
||||||
&& docker-php-ext-configure gmp \
|
|
||||||
&& docker-php-ext-install iconv mbstring pdo pdo_mysql zip gd gmp opcache
|
|
||||||
|
|
||||||
ENV PHANTOMJS phantomjs-2.1.1-linux-x86_64
|
|
||||||
# Install PHANTOMJS
|
|
||||||
RUN curl -o ${PHANTOMJS}.tar.bz2 -SL https://bitbucket.org/ariya/phantomjs/downloads/${PHANTOMJS}.tar.bz2 \
|
|
||||||
&& tar xvjf ${PHANTOMJS}.tar.bz2 \
|
|
||||||
&& rm ${PHANTOMJS}.tar.bz2 \
|
|
||||||
&& mv ${PHANTOMJS} /usr/local/share \
|
|
||||||
&& ln -sf /usr/local/share/${PHANTOMJS}/bin/phantomjs /usr/local/bin \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
COPY ./config/php/php.ini /usr/local/etc/php/php.ini
|
|
||||||
COPY ./config/php/php-cli.ini /usr/local/etc/php/php-cli.ini
|
|
||||||
|
|
||||||
# Download and install IN
|
|
||||||
ENV INVOICENINJA_VERSION="${INVOICENINJA_VERSION}"
|
|
||||||
|
|
||||||
RUN curl -o ninja.zip -SL https://download.invoiceninja.com/ninja-v${INVOICENINJA_VERSION}.zip \
|
|
||||||
&& unzip -q ninja.zip -d /var/www/ \
|
|
||||||
&& rm ninja.zip \
|
|
||||||
&& mv /var/www/ninja /var/www/app \
|
|
||||||
&& 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 \
|
|
||||||
&& chmod -R 755 /var/www/app/storage \
|
|
||||||
&& chown -R www-data:www-data /var/www/app/storage /var/www/app/bootstrap /var/www/app/public/logo /var/www/app/.env /var/www/app/docker-backup-storage /var/www/app/docker-backup-public\
|
|
||||||
&& rm -rf /var/www/app/docs /var/www/app/tests /var/www/ninja
|
|
||||||
|
|
||||||
# Override the environment settings from projects .env file
|
|
||||||
ENV LOG errorlog
|
|
||||||
ENV SELF_UPDATER_SOURCE ''
|
|
||||||
ENV PHANTOMJS_BIN_PATH /usr/local/bin/phantomjs
|
|
||||||
|
|
||||||
|
|
||||||
# use to be mounted into nginx for example
|
|
||||||
VOLUME /var/www/app/public
|
|
||||||
|
|
||||||
WORKDIR /var/www/app
|
|
||||||
|
|
||||||
ENTRYPOINT ["docker-entrypoint"]
|
|
||||||
CMD ["php-fpm"]
|
|
||||||
46
debian/entrypoint.sh
vendored
46
debian/entrypoint.sh
vendored
@@ -1,46 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ ! -d /var/www/app/storage ]; then
|
|
||||||
cp -Rp /var/www/app/docker-backup-storage /var/www/app/storage
|
|
||||||
else
|
|
||||||
IN_STORAGE_BACKUP="$(ls /var/www/app/docker-backup-storage/)"
|
|
||||||
for path in $IN_STORAGE_BACKUP; do
|
|
||||||
if [ ! -e "/var/www/app/storage/$path" ]; then
|
|
||||||
cp -Rp "/var/www/app/docker-backup-storage/$path" "/var/www/app/storage/"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d /var/www/app/public/logo ]; then
|
|
||||||
cp -Rp /var/www/app/docker-backup-public/logo /var/www/app/public/logo
|
|
||||||
else
|
|
||||||
IN_LOGO_BACKUP="$(ls /var/www/app/docker-backup-public/logo/)"
|
|
||||||
for path in $IN_LOGO_BACKUP; do
|
|
||||||
if [ ! -e "/var/www/app/public/logo/$path" ]; then
|
|
||||||
cp -Rp "/var/www/app/docker-backup-public/logo/$path" "/var/www/app/public/logo/"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# compare public volume version with image version
|
|
||||||
if [ ! -e /var/www/app/public/version ] || [ "$INVOICENINJA_VERSION" != "$(cat /var/www/app/public/version)" ]; then
|
|
||||||
echo 'clone public directory'
|
|
||||||
cp -Rp /var/www/app/docker-backup-public/* /var/www/app/public/
|
|
||||||
echo $INVOICENINJA_VERSION > /var/www/app/public/version
|
|
||||||
fi
|
|
||||||
|
|
||||||
# fix permission for mounted directories
|
|
||||||
chown www-data:www-data /var/www/app/storage
|
|
||||||
chown www-data:www-data /var/www/app/public/logo
|
|
||||||
|
|
||||||
#php artisan optimize --force
|
|
||||||
#php artisan migrate --force
|
|
||||||
|
|
||||||
#if [ ! -e "/var/www/app/is-seeded" ]; then
|
|
||||||
#php artisan db:seed --force
|
|
||||||
#touch "/var/www/app/is-seeded"
|
|
||||||
#fi
|
|
||||||
|
|
||||||
echo 'start'
|
|
||||||
exec "$@"
|
|
||||||
@@ -12,16 +12,9 @@ in_error() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Indirect expansion (ie) is not supported in bourne shell. That's why we are using this clunkiness here.
|
# Indirect expansion (ie) is not supported in bourne shell. That's why we are using this "magic" here.
|
||||||
ie_gv() {
|
ie_gv() {
|
||||||
local line name value
|
eval "echo \$$1"
|
||||||
set | \
|
|
||||||
while read line; do
|
|
||||||
name=${line%=*} value=${line#*=\'}
|
|
||||||
if [ "$name" = "$1" ]; then
|
|
||||||
echo ${value%\'}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# usage: file_env VAR [DEFAULT]
|
# usage: file_env VAR [DEFAULT]
|
||||||
@@ -37,7 +30,7 @@ file_env() {
|
|||||||
in_error "Both $var and $fileVar are set (but are exclusive)"
|
in_error "Both $var and $fileVar are set (but are exclusive)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local val="$def"
|
local val="$def"
|
||||||
if [ "$(ie_gv ${var})" != "" ]; then
|
if [ "$(ie_gv ${var})" != "" ]; then
|
||||||
val=$(ie_gv ${var})
|
val=$(ie_gv ${var})
|
||||||
elif [ "$(ie_gv ${fileVar})" != "" ]; then
|
elif [ "$(ie_gv ${fileVar})" != "" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user