Add some example of integrations (#44)

* Add some example of integrations
Update docker-run.sh to deal with docker secret for some vars.

* Update update.sh

Fix review

* Update .gitignore
This commit is contained in:
POTIER Mathieu
2021-03-15 17:07:47 +01:00
committed by GitHub
parent 14f2d2d2bf
commit ce9d9c483c
48 changed files with 832 additions and 114 deletions

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0

View File

@@ -17,11 +17,11 @@ Docker image for Dolibarr with auto installer on first boot.
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda, ...).
> [More informations](https://github.com/dolibarr/dolibarr)
> [More information](https://github.com/dolibarr/dolibarr)
## How to run this image ?
This image is based on the [officiel PHP repository](https://registry.hub.docker.com/_/php/).
This image is based on the [official PHP repository](https://registry.hub.docker.com/_/php/).
**Important**: This image don't contains database. So you need to link it with a database container.
@@ -56,6 +56,13 @@ services:
Then run all services `docker-compose up -d`. Now, go to http://0.0.0.0 to access to the new Dolibarr installation.
### Other examples
You can find several examples in the `examples` directory, such as:
- [Running Dolibarr with a mysql server](./examples/with-mysql/dolibarr-with-mysql.md)
- [Running Dolibarr with a Traefik reverse proxy](./examples/with-rp-traefik/dolibarr-with-traefik.md)
- [Running Dolibarr with secrets](./examples/with-secrets/dolibarr-with-secrets.md)
## Upgrading version and migrating DB
Remove the `install.lock` file and start an updated version container. Ensure that env `DOLI_INSTALL_AUTO` is set to `1`. It will migrate Database to the new version.
@@ -70,9 +77,16 @@ Remove the `install.lock` file and start an updated version container. Ensure th
| **DOLI_DB_PASSWORD** | *doli_pass* | Database user's password
| **DOLI_DB_NAME** | *dolidb* | Database name
| **DOLI_ADMIN_LOGIN** | *admin* | Admin's login create on the first boot
| **DOLI_ADMIN_PASSWORD** | *admin* | Admin'password
| **DOLI_ADMIN_PASSWORD** | *admin* | Admin's password
| **DOLI_URL_ROOT** | *http://localhost* | Url root of the Dolibarr installation
| **PHP_INI_DATE_TIMEZONE** | *UTC* | Default timezone on PHP
| **PHP_INI_MEMORY_LIMIT** | *256M* | PHP Memory limit
| **WWW_USER_ID** | | ID of user www-data. ID will not changed if leave empty. During a development, it is very practical to put the same ID as the host user.
| **WWW_GROUP_ID** | | ID of group www-data. ID will not changed if leave empty.
Some environment variables are compatible with docker secrets behaviour, just add the `_FILE` suffix to var name and point the value file to read.
Environment variables that are compatible with docker secrets:
- `DOLI_DB_USER` => `DOLI_DB_USER_FILE`
- `DOLI_DB_PASSWORD` => `DOLI_DB_PASSWORD_FILE`
- `DOLI_ADMIN_LOGIN` => `DOLI_ADMIN_LOGIN_FILE`
- `DOLI_ADMIN_PASSWORD` => `DOLI_ADMIN_PASSWORD_FILE`

View File

@@ -9,11 +9,11 @@ Docker image for Dolibarr with auto installer on first boot.
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda, ...).
> [More informations](https://github.com/dolibarr/dolibarr)
> [More information](https://github.com/dolibarr/dolibarr)
## How to run this image ?
This image is based on the [officiel PHP repository](https://registry.hub.docker.com/_/php/).
This image is based on the [official PHP repository](https://registry.hub.docker.com/_/php/).
**Important**: This image don't contains database. So you need to link it with a database container.
@@ -48,6 +48,13 @@ services:
Then run all services `docker-compose up -d`. Now, go to http://0.0.0.0 to access to the new Dolibarr installation.
### Other examples
You can find several examples in the `examples` directory, such as:
- [Running Dolibarr with a mysql server](./examples/with-mysql/dolibarr-with-mysql.md)
- [Running Dolibarr with a Traefik reverse proxy](./examples/with-rp-traefik/dolibarr-with-traefik.md)
- [Running Dolibarr with secrets](./examples/with-secrets/dolibarr-with-secrets.md)
## Upgrading version and migrating DB
Remove the `install.lock` file and start an updated version container. Ensure that env `DOLI_INSTALL_AUTO` is set to `1`. It will migrate Database to the new version.
@@ -62,9 +69,16 @@ Remove the `install.lock` file and start an updated version container. Ensure th
| **DOLI_DB_PASSWORD** | *doli_pass* | Database user's password
| **DOLI_DB_NAME** | *dolidb* | Database name
| **DOLI_ADMIN_LOGIN** | *admin* | Admin's login create on the first boot
| **DOLI_ADMIN_PASSWORD** | *admin* | Admin'password
| **DOLI_ADMIN_PASSWORD** | *admin* | Admin's password
| **DOLI_URL_ROOT** | *http://localhost* | Url root of the Dolibarr installation
| **PHP_INI_DATE_TIMEZONE** | *UTC* | Default timezone on PHP
| **PHP_INI_MEMORY_LIMIT** | *256M* | PHP Memory limit
| **WWW_USER_ID** | | ID of user www-data. ID will not changed if leave empty. During a development, it is very practical to put the same ID as the host user.
| **WWW_GROUP_ID** | | ID of group www-data. ID will not changed if leave empty.
Some environment variables are compatible with docker secrets behaviour, just add the `_FILE` suffix to var name and point the value file to read.
Environment variables that are compatible with docker secrets:
- `DOLI_DB_USER` => `DOLI_DB_USER_FILE`
- `DOLI_DB_PASSWORD` => `DOLI_DB_PASSWORD_FILE`
- `DOLI_ADMIN_LOGIN` => `DOLI_ADMIN_LOGIN_FILE`
- `DOLI_ADMIN_PASSWORD` => `DOLI_ADMIN_PASSWORD_FILE`

View File

@@ -1,4 +1,3 @@
version: '3'
# This docker-compose.yml file is used to build and test quickly
# a specific version of Dolibarr
#
@@ -8,18 +7,32 @@ version: '3'
# $ docker-compose up
#
# More informations about Docker-compose : https://docs.docker.com/compose/
version: "3.8"
networks:
internal-pod:
internal: true
external-pod:
internal: false
secrets:
mysql-user:
file: ./examples/with-secrets/secrets/mysql_user.secret
mysql-password:
file: ./examples/with-secrets/secrets/mysql_password.secret
services:
mariadb:
image: mariadb:latest
secrets:
- mysql-user
- mysql-password
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dolibarr
MYSQL_RANDOM_ROOT_PASSWORD: "1"
MYSQL_DATABASE: "dolibarr"
MYSQL_USER_FILE: "/run/secrets/mysql-user"
MYSQL_PASSWORD_FILE: "/run/secrets/mysql-password"
networks:
- internal-pod
@@ -27,12 +40,17 @@ services:
build:
context: ./docker-compose-links/${DOLI_VERSION}${PHP_VERSION}
image: tuxgasy/dolibarr:${DOLI_VERSION}${PHP_VERSION}
secrets:
- mysql-user
- mysql-password
depends_on:
- mariadb
environment:
DOLI_DB_USER_FILE: "/run/secrets/mysql-user"
DOLI_DB_PASSWORD_FILE: "/run/secrets/mysql-password"
DOLI_ADMIN_LOGIN: "administrator"
DOLI_ADMIN_PASSWORD: "admin456"
DOLI_DB_HOST: mariadb
DOLI_DB_USER: root
DOLI_DB_PASSWORD: root
DOLI_DB_NAME: dolibarr
DOLI_URL_ROOT: 'http://0.0.0.0'
WWW_USER_ID: 1000

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -0,0 +1,41 @@
version: "3.8"
networks:
internal-pod:
internal: true
external-pod:
internal: false
volumes:
dolibarr-docs:
mysql-data:
services:
dolibarr:
image: tuxgasy/dolibarr:latest
environment:
DOLI_DB_HOST: "mysql"
DOLI_DB_HOST_PORT: "3306"
DOLI_DB_USER: "dolibarr"
DOLI_DB_PASSWORD: "mysupersecretpasswordfordatabase"
DOLI_DB_NAME: "dolibarr"
DOLI_ADMIN_LOGIN: "admin"
DOLI_ADMIN_PASSWORD: "mysuperhypersecretpasswordforadminacount"
ports:
- 80:80
volumes:
- dolibarr-docs:/var/www/documents
networks:
- internal-pod
- external-pod
mysql:
image: library/mariadb:latest
environment:
MYSQL_DATABASE: "dolibarr"
MYSQL_USER: "dolibarr"
MYSQL_PASSWORD: "mysupersecretpasswordfordatabase"
volumes:
- mysql-data:/var/lib/mysql
networks:
- internal-pod

View File

@@ -0,0 +1,3 @@
# Dolibarr with mysql
Running a Dolibarr instance with a mysql server is a standard behaviour, this examples show you how to describe this architecture in a docker-compose way.

View File

@@ -0,0 +1,28 @@
api:
dashboard: true
debug: true
entryPoints:
traefik:
address: ":8080"
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
certificatesResolvers:
myresolver:
acme:
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false

View File

@@ -0,0 +1,74 @@
version: "3.8"
networks:
proxy-network:
name: proxy-network
driver: bridge
internal: false
backend-with-internet:
name: backend-with-internet
driver: bridge
internal: false
backend-isolated:
name: backend-isolated
internal: true
volumes:
dolibarr-docs:
mysql-data:
traefik-acme:
services:
proxy:
image: library/traefik:2.3
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- ./conf/traefik.yml:/etc/traefik/traefik.yml
- /var/run/docker.sock:/var/run/docker.sock
- traefik-acme:/letsencrypt/acme.json
labels:
- "traefik.enable=true"
- "traefik.http.routers.proxy.rule=PathPrefix(`/api`) || PathPrefix(`/dashboard`)"
- "traefik.http.routers.proxy.entrypoints=traefik"
- "traefik.http.routers.proxy.service=api@internal"
- "traefik.http.routers.proxy.tls=true"
- "traefik.http.routers.proxy.tls.certresolver=myresolver"
networks:
- proxy-network
- backend-with-internet
- backend-isolated
dolibarr:
image: tuxgasy/dolibarr:latest
environment:
DOLI_DB_HOST: "mysql"
DOLI_DB_USER: "dolibarr"
DOLI_DB_PASSWORD: "mysupersecretpasswordfordatabase"
DOLI_DB_NAME: "dolibarr"
DOLI_ADMIN_LOGIN: "admin"
DOLI_ADMIN_PASSWORD: "mysuperhypersecretpasswordforadminacount"
labels:
- "traefik.enable=true"
- "traefik.http.routers.dolibarr.tls=true"
- "traefik.http.routers.dolibarr.rule=Host(`mydolibarr.domain.tld`)"
- "traefik.http.services.dolibarr.loadbalancer.server.port=80"
- "traefik.http.services.dolibarr.loadbalancer.server.scheme=http"
volumes:
- dolibarr-docs:/var/www/documents
networks:
- backend-with-internet
- backend-isolated
mysql:
image: library/mariadb:latest
environment:
MYSQL_DATABASE: "dolibarr"
MYSQL_USER: "dolibarr"
MYSQL_PASSWORD: "mysupersecretpasswordfordatabase"
volumes:
- mysql-data:/var/lib/mysql
networks:
- backend-isolated

View File

@@ -0,0 +1,10 @@
# Adding a reverse proxy in front of Dolibarr such as Traefik
The Reverse proxy role is to handle the customer facing : SSL, load balancing, page caching, etc...
Traefik is a reverse proxy light, fast and reliable.
Here is the documentation for Traefik: https://doc.traefik.io/traefik/
## Networking
- The proxy is facing the customer and providing the SSL support in front of Dolibarr.
- The mysql server is isolated from the internet.
- Dolibarr needs internet access for some feature (mail, update checks, SIRET checks, etc..)

View File

@@ -0,0 +1,59 @@
version: "3.8"
networks:
internal-pod:
internal: true
external-pod:
internal: false
volumes:
dolibarr-docs:
mysql-data:
secrets:
mysql-user:
file: ./secrets/mysql_user.secret
mysql-password:
file: ./secrets/mysql_password.secret
dolibarr-admin-user:
file: ./secrets/dolibarr_admin_username.secret
dolibarr-admin-password:
file: ./secrets/dolibarr_admin_password.secret
services:
dolibarr:
image: tuxgasy/dolibarr:latest
secrets:
- dolibarr-admin-user
- dolibarr-admin-password
- mysql-user
- mysql-password
env_file:
- ./env/dolibarr.env
environment:
DOLI_DB_USER_FILE: "/run/secrets/mysql-user"
DOLI_DB_PASSWORD_FILE: "/run/secrets/mysql-password"
DOLI_ADMIN_LOGIN_FILE: "/run/secrets/dolibarr-admin-user"
DOLI_ADMIN_PASSWORD_FILE: "/run/secrets/dolibarr-admin-password"
ports:
- 80:80
volumes:
- dolibarr-docs:/var/www/documents
networks:
- internal-pod
- external-pod
mysql:
image: library/mariadb:latest
secrets:
- mysql-user
- mysql-password
env_file:
- ./env/mysql.env
environment:
MYSQL_USER_FILE: "/run/secrets/mysql-user"
MYSQL_PASSWORD_FILE: "/run/secrets/mysql-password"
volumes:
- mysql-data:/var/lib/mysql
networks:
- internal-pod

View File

@@ -0,0 +1,8 @@
# Running a dolibarr instance with secrets
The docker-compose secrets are an important feature in terms of securing and industrializing deployments.
Be sure to never commit your own secrets to a repository, and keep them ... secrets ^_^.
Files are committed here, but it's an example.
Here is the doc from docker : https://docs.docker.com/engine/swarm/secrets/

10
examples/with-secrets/env/dolibarr.env vendored Normal file
View File

@@ -0,0 +1,10 @@
DOLI_INSTALL_AUTO=1
DOLI_DB_HOST=mysql
DOLI_DB_HOST_PORT=3306
DOLI_DB_NAME=dolibarr
DOLI_URL_ROOT=http://localhost
DOLI_NOCSRFCHECK=0
WWW_USER_ID=33
WWW_GROUP_ID=33
PHP_INI_DATE_TIMEZONE=UTC
PHP_INI_MEMORY_LIMIT=256M

2
examples/with-secrets/env/mysql.env vendored Normal file
View File

@@ -0,0 +1,2 @@
MYSQL_DATABASE=dolibarr
MYSQL_RANDOM_ROOT_PASSWORD=1

View File

@@ -0,0 +1 @@
mysuperhypersecretpasswordforadminacount

View File

@@ -0,0 +1 @@
admin

View File

@@ -0,0 +1 @@
mysupersecretpasswordfordatabase

View File

@@ -0,0 +1 @@
dolibarr

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

View File

@@ -6,12 +6,8 @@ ENV DOLI_INSTALL_AUTO 1
ENV DOLI_DB_HOST mysql
ENV DOLI_DB_HOST_PORT 3306
ENV DOLI_DB_USER doli
ENV DOLI_DB_PASSWORD doli_pass
ENV DOLI_DB_NAME dolidb
ENV DOLI_ADMIN_LOGIN admin
ENV DOLI_ADMIN_PASSWORD admin
ENV DOLI_URL_ROOT 'http://localhost'
ENV DOLI_NOCSRFCHECK 0
@@ -51,6 +47,8 @@ RUN unzip -q /tmp/dolibarr.zip -d /tmp/dolibarr && \
mkdir -p /var/www/documents && \
chown -R www-data:www-data /var/www
RUN rm -rf /var/lib/apt/lists/*
EXPOSE 80
VOLUME /var/www/documents

View File

@@ -1,5 +1,30 @@
#!/bin/bash
# usage: get_env_value VAR [DEFAULT]
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
function get_env_value() {
local varName="${1}"
local fileVarName="${varName}_FILE"
local defaultValue="${2:-}"
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)"
exit 1
fi
local value="${defaultValue}"
if [ "${!varName:-}" ]; then
value="${!varName}"
elif [ "${!fileVarName:-}" ]; then
value="$(< "${!fileVarName}")"
fi
echo ${value}
exit 0
}
function initDolibarr()
{
local CURRENT_UID=$(id -u www-data)
@@ -56,6 +81,7 @@ EOF
function waitForDataBase()
{
r=1
while [[ ${r} -ne 0 ]]; do
mysql -u ${DOLI_DB_USER} --protocol tcp -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -e "status" > /dev/null 2>&1
r=$?
@@ -175,6 +201,11 @@ function run()
fi
}
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli')
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass')
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
run
set -e

33
test.sh
View File

@@ -7,18 +7,19 @@ BASE_DIR="$( cd "$(dirname "$0")" && pwd )"
DOLI_VER=${1}
PHP_VER=${2:-""}
rm -rf ${BASE_DIR}/docker-compose-links/ && mkdir ${BASE_DIR}/docker-compose-links
rm -rf "${BASE_DIR}/docker-compose-links/" && mkdir "${BASE_DIR}/docker-compose-links"
for directory in $(ls ${BASE_DIR}/images); do
dolibarrVersion=`echo ${directory} | cut -d\- -f1`
phpVersion=`echo ${directory} | cut -d\- -f2`
# shellcheck disable=SC2044
for directory in $(find "${BASE_DIR}/images" -maxdepth 1 -mindepth 1 -type d -printf '%f\n'); do
dolibarrVersion=$(echo "${directory}" | cut -d\- -f1)
phpVersion=$(echo "${directory}" | cut -d\- -f2)
dolibarrMajor=`echo ${dolibarrVersion} | cut -d. -f1`
phpMajor=`echo ${phpVersion} | cut -d. -f1`
#dolibarrMajor=$(echo "${dolibarrVersion}" | cut -d. -f1)
phpMajor=$(echo "${phpVersion}" | cut -d. -f1)
ln -nfs ${BASE_DIR}/images/${directory} ${BASE_DIR}/docker-compose-links/${directory}
ln -nfs "${BASE_DIR}/images/${directory}" "${BASE_DIR}/docker-compose-links/${directory}"
if [ "${phpMajor}" = "php7" ]; then
ln -nfs ${BASE_DIR}/images/${directory} ${BASE_DIR}/docker-compose-links/${dolibarrVersion}
ln -nfs "${BASE_DIR}/images/${directory}" "${BASE_DIR}/docker-compose-links/${dolibarrVersion}"
fi
done
@@ -27,15 +28,15 @@ echo " - Dolibarr ${DOLI_VER}"
if [ "${PHP_VER}" = "" ]; then
echo " - PHP most recent"
echo "Building image ..."
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f ${BASE_DIR}/docker-compose.yml down 1> /dev/null 2>/dev/null
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f ${BASE_DIR}/docker-compose.yml build web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f ${BASE_DIR}/docker-compose.yml up --force-recreate web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f ${BASE_DIR}/docker-compose.yml down
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f "${BASE_DIR}/docker-compose.yml" down 1> /dev/null 2>/dev/null
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f "${BASE_DIR}/docker-compose.yml" build web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f "${BASE_DIR}/docker-compose.yml" up --force-recreate web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="" docker-compose -f "${BASE_DIR}/docker-compose.yml" down
else
echo " - PHP ${PHP_VER}"
echo "Building image ..."
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f ${BASE_DIR}/docker-compose.yml down 1> /dev/null
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f ${BASE_DIR}/docker-compose.yml build web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f ${BASE_DIR}/docker-compose.yml up --force-recreate web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f ${BASE_DIR}/docker-compose.yml down
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f "${BASE_DIR}/docker-compose.yml" down 1> /dev/null
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f "${BASE_DIR}/docker-compose.yml" build web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f "${BASE_DIR}/docker-compose.yml" up --force-recreate web
DOLI_VERSION=${DOLI_VER} PHP_VERSION="-php${PHP_VER}" docker-compose -f "${BASE_DIR}/docker-compose.yml" down
fi

View File

@@ -11,13 +11,13 @@ source "${BASE_DIR}/versions.sh"
tags=""
rm -rf ${BASE_DIR}/images ${BASE_DIR}/docker-compose-links
rm -rf "${BASE_DIR}/images" "${BASE_DIR}/docker-compose-links"
for dolibarrVersion in ${DOLIBARR_VERSIONS[@]}; do
for dolibarrVersion in "${DOLIBARR_VERSIONS[@]}"; do
echo "Generate Dockerfile for Dolibarr ${dolibarrVersion}"
tags="${tags}\n\*"
dolibarrMajor=`echo ${dolibarrVersion} | cut -d. -f1`
dolibarrMajor=$(echo ${dolibarrVersion} | cut -d. -f1)
# Mapping version according https://wiki.dolibarr.org/index.php/Versions
# Regarding PHP Supported version : https://www.php.net/supported-versions.php
@@ -37,8 +37,8 @@ for dolibarrVersion in ${DOLIBARR_VERSIONS[@]}; do
php_base_images=( "7.4-apache" )
fi
for php_base_image in ${php_base_images[@]}; do
php_version=`echo ${php_base_image} | cut -d\- -f1`
for php_base_image in "${php_base_images[@]}"; do
php_version=$(echo "${php_base_image}" | cut -d\- -f1)
if [ "${dolibarrVersion}" = "develop" ]; then
currentTag="${dolibarrVersion}"
@@ -47,7 +47,7 @@ for dolibarrVersion in ${DOLIBARR_VERSIONS[@]}; do
tags="${tags} ${currentTag}"
fi
dir=${BASE_DIR}/"images/${currentTag}"
dir="${BASE_DIR}/images/${currentTag}"
if [ "${php_version}" = "7.4" ]; then
gd_config_args="\-\-with\-freetype\ \-\-with\-jpeg"
@@ -55,46 +55,45 @@ for dolibarrVersion in ${DOLIBARR_VERSIONS[@]}; do
gd_config_args="\-\-with\-png\-dir=\/usr\ \-\-with-jpeg-dir=\/usr"
fi
mkdir -p ${dir}
cat ${BASE_DIR}/Dockerfile.template | \
sed 's/%PHP_BASE_IMAGE%/'"${php_base_image}"'/;' | \
mkdir -p "${dir}"
sed 's/%PHP_BASE_IMAGE%/'"${php_base_image}"'/;' "${BASE_DIR}/Dockerfile.template" | \
sed 's/%DOLI_VERSION%/'"${dolibarrVersion}"'/;' | \
sed 's/%GD_CONFIG_ARG%/'"${gd_config_args}"'/;' \
> ${dir}/Dockerfile
> "${dir}/Dockerfile"
cp ${BASE_DIR}/docker-run.sh ${dir}/docker-run.sh
cp "${BASE_DIR}/docker-run.sh" "${dir}/docker-run.sh"
if [ ${DOCKER_BUILD} -eq 1 ]; then
docker build --compress --tag tuxgasy/dolibarr:${currentTag} ${dir}
if [ "${DOCKER_BUILD}" = "1" ]; then
docker build --compress --tag "tuxgasy/dolibarr:${currentTag}" "${dir}"
fi
if [ ${DOCKER_PUSH} -eq 1 ]; then
docker push tuxgasy/dolibarr:${currentTag}
if [ "${DOCKER_PUSH}" = "1" ]; then
docker push "tuxgasy/dolibarr:${currentTag}"
fi
done
if [ ${DOCKER_BUILD} -eq 1 ]; then
docker tag tuxgasy/dolibarr:${currentTag} tuxgasy/dolibarr:${dolibarrVersion}
docker tag tuxgasy/dolibarr:${currentTag} tuxgasy/dolibarr:${dolibarrMajor}
if [ "${dolibarrVersion}" = ${DOLIBARR_LATEST_TAG} ]; then
docker tag tuxgasy/dolibarr:${currentTag} tuxgasy/dolibarr:latest
if [ "${DOCKER_BUILD}" = "1" ]; then
docker tag "tuxgasy/dolibarr:${currentTag}" "tuxgasy/dolibarr:${dolibarrVersion}"
docker tag "tuxgasy/dolibarr:${currentTag}" "tuxgasy/dolibarr:${dolibarrMajor}"
if [ "${dolibarrVersion}" = "${DOLIBARR_LATEST_TAG}" ]; then
docker tag "tuxgasy/dolibarr:${currentTag}" tuxgasy/dolibarr:latest
fi
fi
if [ ${DOCKER_PUSH} -eq 1 ]; then
docker push tuxgasy/dolibarr:${dolibarrVersion}
docker push tuxgasy/dolibarr:${dolibarrMajor}
if [ "${dolibarrVersion}" = ${DOLIBARR_LATEST_TAG} ]; then
if [ "${DOCKER_PUSH}" = "1" ]; then
docker push "tuxgasy/dolibarr:${dolibarrVersion}"
docker push "tuxgasy/dolibarr:${dolibarrMajor}"
if [ "${dolibarrVersion}" = "${DOLIBARR_LATEST_TAG}" ]; then
docker push tuxgasy/dolibarr:latest
fi
fi
if [ ${dolibarrVersion} = "develop" ]; then
if [ "${dolibarrVersion}" = "develop" ]; then
tags="${tags} develop"
else
tags="${tags} ${dolibarrVersion} ${dolibarrMajor}"
fi
if [ "${dolibarrVersion}" = ${DOLIBARR_LATEST_TAG} ]; then
if [ "${dolibarrVersion}" = "${DOLIBARR_LATEST_TAG}" ]; then
tags="${tags} latest"
fi
done
sed 's/%TAGS%/'"${tags}"'/' ${BASE_DIR}/README.template > ${BASE_DIR}/README.md
sed 's/%TAGS%/'"${tags}"'/' "${BASE_DIR}/README.template" > "${BASE_DIR}/README.md"