Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e9c5ffb60 | ||
|
|
34b147260e | ||
|
|
d5fa817ee9 | ||
|
|
4af6b2d45f | ||
|
|
2d9f134bed | ||
|
|
07bb71b93d | ||
|
|
3d48cbf696 | ||
|
|
57751c9fe9 | ||
|
|
ad9a1ad532 | ||
|
|
d26aad6059 | ||
|
|
cc3b5196c6 | ||
|
|
12cdd4064b | ||
|
|
10d9765154 | ||
|
|
a4a06cafce | ||
|
|
f6bf303795 | ||
|
|
fd1269b121 | ||
|
|
2872db4fa6 | ||
|
|
220b0d52d3 | ||
|
|
2bc19acbec | ||
|
|
dabd9d3f2c | ||
|
|
41aefa6b55 | ||
|
|
9fbd05dd0d | ||
|
|
09131543f4 | ||
|
|
f8315dfcbe | ||
|
|
faae81971d | ||
|
|
c97bdf012a | ||
|
|
9305808872 |
38
.gitea/build.yml.template
Normal file
38
.gitea/build.yml.template
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# This file is generated automatically when running './update.sh'
|
||||||
|
# Please do not edit it directly!
|
||||||
|
# Instead perform any modifications in .gitea/build.yml.template
|
||||||
|
|
||||||
|
name: build
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
on:
|
||||||
|
# can run job manually
|
||||||
|
workflow_dispatch:
|
||||||
|
# Run once a week
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * 6'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-docker-images:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
dolibarr_version: [ %DOLIBARR_VERSIONS% ]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: https://${{ secrets.DOCKER_REGISTRY_HOST }}
|
||||||
|
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
||||||
|
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
||||||
|
- uses: docker/setup-qemu-action@v3
|
||||||
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
- env:
|
||||||
|
DOCKER_BUILD: 1
|
||||||
|
DOCKER_PUSH: 1
|
||||||
|
DOCKER_NAMESPACE: "wavyzz"
|
||||||
|
DOCKER_REGISTRY_HOST: registry.wavyzz.com
|
||||||
|
run: |
|
||||||
|
./update.sh ${{ matrix.dolibarr_version }}
|
||||||
|
|
||||||
38
.gitea/workflows/build.yml
Normal file
38
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# This file is generated automatically when running './update.sh'
|
||||||
|
# Please do not edit it directly!
|
||||||
|
# Instead perform any modifications in .gitea/build.yml.template
|
||||||
|
|
||||||
|
name: build
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
on:
|
||||||
|
# can run job manually
|
||||||
|
workflow_dispatch:
|
||||||
|
# Run once a week
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * 6'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-docker-images:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
dolibarr_version: [ 22.0.2_wavyzz, develop ]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
- uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: https://${{ secrets.DOCKER_REGISTRY_HOST }}
|
||||||
|
username: ${{ secrets.DOCKER_REGISTRY_USER }}
|
||||||
|
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
||||||
|
- uses: docker/setup-qemu-action@v3
|
||||||
|
- uses: docker/setup-buildx-action@v3
|
||||||
|
- env:
|
||||||
|
DOCKER_BUILD: 1
|
||||||
|
DOCKER_PUSH: 1
|
||||||
|
DOCKER_NAMESPACE: "wavyzz"
|
||||||
|
DOCKER_REGISTRY_HOST: registry.wavyzz.com
|
||||||
|
run: |
|
||||||
|
./update.sh ${{ matrix.dolibarr_version }}
|
||||||
|
|
||||||
69
.gitea/workflows/test.yml
Normal file
69
.gitea/workflows/test.yml
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
name: test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-update:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Test the update was run, files will differ if not
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
./update.sh
|
||||||
|
git diff --exit-code
|
||||||
|
|
||||||
|
- name: Display error message on failure
|
||||||
|
if: failure()
|
||||||
|
run: echo "The diff after running update.sh shows it wasn't run before committing the PR."
|
||||||
|
|
||||||
|
check-build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
env:
|
||||||
|
DOCKER_NAMESPACE: wavyzz
|
||||||
|
CONTAINER_NAME: dolibarr_build
|
||||||
|
DOLI_PORT: "8085"
|
||||||
|
DOLI_INSTALL_AUTO: "0" # passed into the container if your image uses it
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Build and run container
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Regenerate all the image files
|
||||||
|
./update.sh
|
||||||
|
|
||||||
|
# Remove old container if it exists
|
||||||
|
if [ "$(docker ps -aq -f name=^/${CONTAINER_NAME}$)" ]; then
|
||||||
|
echo "Removing existing ${CONTAINER_NAME}..."
|
||||||
|
docker rm -f "${CONTAINER_NAME}" || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building image ${DOCKER_NAMESPACE}/dolibarr:develop..."
|
||||||
|
docker build -t "${DOCKER_NAMESPACE}/dolibarr:develop" images/develop
|
||||||
|
|
||||||
|
echo "Starting ${CONTAINER_NAME} on 127.0.0.1:${DOLI_PORT}..."
|
||||||
|
docker run -d \
|
||||||
|
-p "127.0.0.1:${DOLI_PORT}:80" \
|
||||||
|
--name "${CONTAINER_NAME}" \
|
||||||
|
-e DOLI_INSTALL_AUTO="${DOLI_INSTALL_AUTO}" \
|
||||||
|
"${DOCKER_NAMESPACE}/dolibarr:develop"
|
||||||
|
|
||||||
|
- name: Cleanup container
|
||||||
|
if: always()
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
docker rm -f "${CONTAINER_NAME}" || true
|
||||||
|
|
||||||
51
.github/build.yml.template
vendored
51
.github/build.yml.template
vendored
@@ -1,51 +0,0 @@
|
|||||||
# This file is generated automatically when running './update.sh'
|
|
||||||
# Please do not edit it directly!
|
|
||||||
# Instead perform any modifications in .github/build.yml.template
|
|
||||||
|
|
||||||
name: build
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: read
|
|
||||||
on:
|
|
||||||
# can run job manually
|
|
||||||
workflow_dispatch:
|
|
||||||
# Run once a week
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * 6'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-docker-images:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
dolibarr_version: [ %DOLIBARR_VERSIONS% ]
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
|
||||||
- uses: docker/setup-qemu-action@v3
|
|
||||||
- uses: docker/setup-buildx-action@v3
|
|
||||||
- env:
|
|
||||||
DOCKER_BUILD: 1
|
|
||||||
DOCKER_PUSH: 1
|
|
||||||
run: |
|
|
||||||
./update.sh ${{ matrix.dolibarr_version }}
|
|
||||||
|
|
||||||
update-readme:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- run: |
|
|
||||||
echo secrets.DOCKER_HUB_USERNAME=${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
docker run --rm -t \
|
|
||||||
-v $(pwd):/src \
|
|
||||||
-e DOCKER_USER=${{ secrets.DOCKER_HUB_USERNAME }} \
|
|
||||||
-e DOCKER_PASS=${{ secrets.DOCKER_HUB_PASSWORD }} \
|
|
||||||
-e PUSHRM_PROVIDER=dockerhub \
|
|
||||||
-e PUSHRM_FILE=/src/README.md \
|
|
||||||
-e PUSHRM_SHORT='Docker image for Dolibarr ERP CRM Open source web suite.' \
|
|
||||||
-e PUSHRM_TARGET=docker.io/dolibarr/dolibarr \
|
|
||||||
-e PUSHRM_DEBUG=1 \
|
|
||||||
chko/docker-pushrm:1
|
|
||||||
51
.github/workflows/build.yml
vendored
51
.github/workflows/build.yml
vendored
@@ -1,51 +0,0 @@
|
|||||||
# This file is generated automatically when running './update.sh'
|
|
||||||
# Please do not edit it directly!
|
|
||||||
# Instead perform any modifications in .github/build.yml.template
|
|
||||||
|
|
||||||
name: build
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: read
|
|
||||||
on:
|
|
||||||
# can run job manually
|
|
||||||
workflow_dispatch:
|
|
||||||
# Run once a week
|
|
||||||
schedule:
|
|
||||||
- cron: '0 0 * * 6'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-docker-images:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
dolibarr_version: [ 15.0.3, 16.0.5, 17.0.4, 18.0.8, 19.0.4, 20.0.4, 21.0.4, 22.0.2, develop ]
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
|
||||||
- uses: docker/setup-qemu-action@v3
|
|
||||||
- uses: docker/setup-buildx-action@v3
|
|
||||||
- env:
|
|
||||||
DOCKER_BUILD: 1
|
|
||||||
DOCKER_PUSH: 1
|
|
||||||
run: |
|
|
||||||
./update.sh ${{ matrix.dolibarr_version }}
|
|
||||||
|
|
||||||
update-readme:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- run: |
|
|
||||||
echo secrets.DOCKER_HUB_USERNAME=${{ secrets.DOCKER_HUB_USERNAME }}
|
|
||||||
docker run --rm -t \
|
|
||||||
-v $(pwd):/src \
|
|
||||||
-e DOCKER_USER=${{ secrets.DOCKER_HUB_USERNAME }} \
|
|
||||||
-e DOCKER_PASS=${{ secrets.DOCKER_HUB_PASSWORD }} \
|
|
||||||
-e PUSHRM_PROVIDER=dockerhub \
|
|
||||||
-e PUSHRM_FILE=/src/README.md \
|
|
||||||
-e PUSHRM_SHORT='Docker image for Dolibarr ERP CRM Open source web suite.' \
|
|
||||||
-e PUSHRM_TARGET=docker.io/dolibarr/dolibarr \
|
|
||||||
-e PUSHRM_DEBUG=1 \
|
|
||||||
chko/docker-pushrm:1
|
|
||||||
40
.github/workflows/test.yml
vendored
40
.github/workflows/test.yml
vendored
@@ -1,40 +0,0 @@
|
|||||||
name: test
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-update:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v5
|
|
||||||
|
|
||||||
- name: Test the update was run, files will differ if not
|
|
||||||
run: |
|
|
||||||
./update.sh
|
|
||||||
git diff --exit-code
|
|
||||||
|
|
||||||
- name: Display error message on failure
|
|
||||||
if: failure() # This condition ensures the step runs only if the previous step failed
|
|
||||||
run: echo "The diff after running the update.sh shows that the update.sh was not run before committing the PR."
|
|
||||||
|
|
||||||
check-build:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v5
|
|
||||||
- env:
|
|
||||||
DOLI_INSTALL_AUTO: 0
|
|
||||||
run: |
|
|
||||||
# Regenerate all the image files
|
|
||||||
./update.sh
|
|
||||||
# Try to build the image inimages/develop
|
|
||||||
docker build -t dolibarr/dolibarr:develop images/develop
|
|
||||||
docker run -d -p 127.0.0.1:80:80 --name dolibarr dolibarr/dolibarr:develop
|
|
||||||
docker ps | grep -q dolibarr
|
|
||||||
@@ -17,6 +17,8 @@ ENV DOLI_VERSION=%DOLI_VERSION%
|
|||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=%DOLI_VERSION_FOR_INIT_DEMO%
|
ENV DOLI_VERSION_FOR_INIT_DEMO=%DOLI_VERSION_FOR_INIT_DEMO%
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
ENV DOLI_INSTALL_AUTO=1
|
||||||
ENV DOLI_PROD=1
|
ENV DOLI_PROD=1
|
||||||
|
ENV DOLI_GIT_BASE_URL=https://gitea.wavyzz.com/Wavyzz/dolibarr-fork
|
||||||
|
ENV DOLI_ARCHIVE_BASE_DIR=dolibarr-fork
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
ENV DOLI_DB_TYPE=mysqli
|
||||||
ENV DOLI_DB_HOST=mysql
|
ENV DOLI_DB_HOST=mysql
|
||||||
@@ -93,11 +95,11 @@ RUN a2disconf serve-cgi-bin \
|
|||||||
&& a2dismod -f autoindex
|
&& a2dismod -f autoindex
|
||||||
|
|
||||||
# Get Dolibarr
|
# Get Dolibarr
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
RUN curl -fLSs ${DOLI_GIT_BASE_URL}/archive/${DOLI_VERSION}.tar.gz |\
|
||||||
tar -C /tmp -xz && \
|
tar -C /tmp -xz && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/htdocs/* /var/www/html/ && \
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
ln -s /var/www/html /var/www/htdocs && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/scripts /var/www/ && \
|
||||||
rm -rf /tmp/* && \
|
rm -rf /tmp/* && \
|
||||||
mkdir -p /var/www/documents && \
|
mkdir -p /var/www/documents && \
|
||||||
mkdir -p /var/www/html/custom && \
|
mkdir -p /var/www/html/custom && \
|
||||||
|
|||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:7.4-apache-bullseye
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=15.0.3
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=15.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.1-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=16.0.5
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=16.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.1-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=17.0.4
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=17.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.1-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=18.0.8
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=18.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.2-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=19.0.4
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=19.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.2-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=20.0.4
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=20.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,115 +0,0 @@
|
|||||||
ARG ARCH=
|
|
||||||
|
|
||||||
# Use a PHP image
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-buster
|
|
||||||
# Example: PHP_BASE_IMAGE=x.y-apache-bullseye
|
|
||||||
# Note: Version of the PHP image must be a compatible version according to https://wiki.dolibarr.org/index.php?title=Versions
|
|
||||||
FROM ${ARCH}php:8.2-apache-bookworm
|
|
||||||
|
|
||||||
# Credit/Initial maintainer: Garcia MICHEL <garcia@soamichel.fr>
|
|
||||||
# Modified according to the GPL license by developers of the Dolibarr community:
|
|
||||||
# 2024 Alois Micard
|
|
||||||
# 2024 Laurent Destailleur
|
|
||||||
# 2025 Renato de Castro Ferreira
|
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
|
||||||
|
|
||||||
ENV DOLI_VERSION=21.0.4
|
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=21.0
|
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
|
||||||
ENV DOLI_PROD=1
|
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
|
||||||
ENV DOLI_DB_HOST=mysql
|
|
||||||
ENV DOLI_DB_HOST_PORT=3306
|
|
||||||
ENV DOLI_DB_NAME=dolidb
|
|
||||||
ENV DOLI_DB_SSL=false
|
|
||||||
|
|
||||||
ENV DOLI_URL_ROOT='http://localhost'
|
|
||||||
|
|
||||||
ENV DOLI_AUTH=dolibarr
|
|
||||||
ENV DOLI_LDAP_HOST=127.0.0.1
|
|
||||||
ENV DOLI_LDAP_PORT=389
|
|
||||||
ENV DOLI_LDAP_VERSION=3
|
|
||||||
ENV DOLI_LDAP_SERVER_TYPE=openldap
|
|
||||||
ENV DOLI_LDAP_LOGIN_ATTRIBUTE=uid
|
|
||||||
ENV DOLI_LDAP_DN='ou=users,dc=my-domain,dc=com'
|
|
||||||
ENV DOLI_LDAP_FILTER=''
|
|
||||||
ENV DOLI_LDAP_BIND_DN=''
|
|
||||||
ENV DOLI_LDAP_BIND_PASS=''
|
|
||||||
ENV DOLI_LDAP_DEBUG=false
|
|
||||||
|
|
||||||
ENV DOLI_CRON=0
|
|
||||||
|
|
||||||
ENV WWW_USER_ID=33
|
|
||||||
ENV WWW_GROUP_ID=33
|
|
||||||
|
|
||||||
ENV PHP_INI_DATE_TIMEZONE='UTC'
|
|
||||||
ENV PHP_INI_MEMORY_LIMIT=256M
|
|
||||||
ENV PHP_INI_UPLOAD_MAX_FILESIZE=20M
|
|
||||||
ENV PHP_INI_POST_MAX_SIZE=22M
|
|
||||||
ENV PHP_INI_ALLOW_URL_FOPEN=0
|
|
||||||
|
|
||||||
RUN sed -i \
|
|
||||||
-e 's/^\(ServerSignature On\)$/#\1/g' \
|
|
||||||
-e 's/^#\(ServerSignature Off\)$/\1/g' \
|
|
||||||
-e 's/^\(ServerTokens\) OS$/\1 Prod/g' \
|
|
||||||
/etc/apache2/conf-available/security.conf
|
|
||||||
|
|
||||||
RUN apt-get update -y \
|
|
||||||
&& apt-get dist-upgrade -y \
|
|
||||||
&& apt-get install -y --no-install-recommends \
|
|
||||||
libc-client-dev \
|
|
||||||
libfreetype6-dev \
|
|
||||||
libjpeg62-turbo-dev \
|
|
||||||
libkrb5-dev \
|
|
||||||
libldap2-dev \
|
|
||||||
libldap-common \
|
|
||||||
libpng-dev \
|
|
||||||
libpq-dev \
|
|
||||||
libxml2-dev \
|
|
||||||
libzip-dev \
|
|
||||||
libtidy-dev \
|
|
||||||
default-mysql-client \
|
|
||||||
postgresql-client \
|
|
||||||
vim-tiny \
|
|
||||||
cron \
|
|
||||||
&& apt-get autoremove -y
|
|
||||||
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
|
|
||||||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip opcache tidy \
|
|
||||||
&& docker-php-ext-configure pgsql -with-pgsql \
|
|
||||||
&& docker-php-ext-install pdo_pgsql pgsql \
|
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/$(gcc -dumpmachine)/ \
|
|
||||||
&& docker-php-ext-install -j$(nproc) ldap \
|
|
||||||
&& docker-php-ext-configure imap --with-kerberos --with-imap-ssl \
|
|
||||||
&& docker-php-ext-install imap \
|
|
||||||
&& mv ${PHP_INI_DIR}/php.ini-production ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& sed -i 's/expose_php = On/expose_php = Off/g' ${PHP_INI_DIR}/php.ini \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Disable useless Apache modules to provide safe defaults
|
|
||||||
RUN a2disconf serve-cgi-bin \
|
|
||||||
&& a2dismod status \
|
|
||||||
&& a2dismod -f alias \
|
|
||||||
&& a2dismod -f autoindex
|
|
||||||
|
|
||||||
# Get Dolibarr
|
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
|
||||||
tar -C /tmp -xz && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
|
||||||
rm -rf /tmp/* && \
|
|
||||||
mkdir -p /var/www/documents && \
|
|
||||||
mkdir -p /var/www/html/custom && \
|
|
||||||
chown -R www-data:www-data /var/www && \
|
|
||||||
chmod -R u-w /var/www/html
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
VOLUME /var/www/documents
|
|
||||||
VOLUME /var/www/html/custom
|
|
||||||
|
|
||||||
COPY docker-init.php /var/www/scripts/
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
|
||||||
ENTRYPOINT ["docker-run.sh"]
|
|
||||||
|
|
||||||
CMD ["apache2-foreground"]
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
# This script is called by the docker-run.sh script to enabled modules during Dolibarr first installation.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
|
|
||||||
require_once '../htdocs/master.inc.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|
||||||
|
|
||||||
printf("Activating module User... ");
|
|
||||||
activateModule('modUser');
|
|
||||||
printf("OK\n");
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_COUNTRYCODE'))) {
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/ccountry.class.php';
|
|
||||||
$countryCode = getenv('DOLI_COMPANY_COUNTRYCODE');
|
|
||||||
$country = new Ccountry($db);
|
|
||||||
$res = $country->fetch(0,$countryCode);
|
|
||||||
if ($res > 0 ) {
|
|
||||||
$s = $country->id.':'.$country->code.':'.$country->label;
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_COUNTRY", $s, 'chaine', 0, '', $conf->entity);
|
|
||||||
printf('Configuring for country : '.$s."\n");
|
|
||||||
activateModulesRequiredByCountry($country->code);
|
|
||||||
} else {
|
|
||||||
printf('Unable to find country '.$countryCode."\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_COMPANY_NAME'))) {
|
|
||||||
$compname = getenv('DOLI_COMPANY_NAME');
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", $compname, 'chaine', 0, '', $conf->entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty(getenv('DOLI_ENABLE_MODULES'))) {
|
|
||||||
$mods = explode(',', getenv('DOLI_ENABLE_MODULES'));
|
|
||||||
foreach ($mods as $mod) {
|
|
||||||
printf("Activating module ".$mod." ...");
|
|
||||||
try {
|
|
||||||
$res = activateModule('mod' . $mod);
|
|
||||||
if ($res < 0) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
} else {
|
|
||||||
printf(" OK\n");
|
|
||||||
}
|
|
||||||
} catch (Throwable $t) {
|
|
||||||
print(" FAILED. Unable to load module. Be sure to check the case\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,499 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# This script is run when the Docker web container is started.
|
|
||||||
# It is embedded into the Docker image of dolibarr/dolibarr.
|
|
||||||
#
|
|
||||||
|
|
||||||
# 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 to create directories, create conf.php file and set permissions on files
|
|
||||||
function initDolibarr()
|
|
||||||
{
|
|
||||||
if [[ ! -d /var/www/documents ]]; then
|
|
||||||
echo "[INIT] => create volume directory /var/www/documents ..."
|
|
||||||
mkdir -p /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update PHP Config ..."
|
|
||||||
cat > ${PHP_INI_DIR}/conf.d/dolibarr-php.ini << EOF
|
|
||||||
date.timezone = ${PHP_INI_DATE_TIMEZONE}
|
|
||||||
sendmail_path = /usr/sbin/sendmail -t -i
|
|
||||||
memory_limit = ${PHP_INI_MEMORY_LIMIT}
|
|
||||||
upload_max_filesize = ${PHP_INI_UPLOAD_MAX_FILESIZE}
|
|
||||||
post_max_size = ${PHP_INI_POST_MAX_SIZE}
|
|
||||||
allow_url_fopen = ${PHP_INI_ALLOW_URL_FOPEN}
|
|
||||||
session.use_strict_mode = 1
|
|
||||||
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,passthru,shell_exec,system,proc_open,popen,dl,apache_note,apache_setenv,show_source,virtual
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/html/conf/conf.php ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config ..."
|
|
||||||
mkdir /var/www/html/conf
|
|
||||||
cat > /var/www/html/conf/conf.php << EOF
|
|
||||||
<?php
|
|
||||||
\$dolibarr_main_url_root='${DOLI_URL_ROOT}';
|
|
||||||
\$dolibarr_main_document_root='/var/www/html';
|
|
||||||
\$dolibarr_main_url_root_alt='/custom';
|
|
||||||
\$dolibarr_main_document_root_alt='/var/www/html/custom';
|
|
||||||
\$dolibarr_main_data_root='/var/www/documents';
|
|
||||||
\$dolibarr_main_db_port='${DOLI_DB_HOST_PORT}';
|
|
||||||
\$dolibarr_main_db_name='${DOLI_DB_NAME}';
|
|
||||||
\$dolibarr_main_db_prefix='llx_';
|
|
||||||
\$dolibarr_main_db_user='${DOLI_DB_USER}';
|
|
||||||
\$dolibarr_main_db_pass='${DOLI_DB_PASSWORD}';
|
|
||||||
\$dolibarr_main_db_type='${DOLI_DB_TYPE}';
|
|
||||||
\$dolibarr_main_authentication='${DOLI_AUTH}';
|
|
||||||
\$dolibarr_main_prod=${DOLI_PROD};
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Check if SSL is enabled for the database
|
|
||||||
if [[ "${DOLI_DB_SSL}" == "true" && "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_host='ssl://${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
echo "\$dolibarr_main_db_host='${DOLI_DB_HOST}';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z ${DOLI_INSTANCE_UNIQUE_ID} ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='${DOLI_INSTANCE_UNIQUE_ID}';" >> /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
# It is better to have a generic value than no value
|
|
||||||
echo "[INIT] => update Dolibarr Config with instance unique id ..."
|
|
||||||
echo "\$dolibarr_main_instance_unique_id='myinstanceuniquekey';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
if [[ ${DOLI_AUTH} =~ .*ldap.* ]]; then
|
|
||||||
echo "[INIT] => update Dolibarr Config with LDAP entries ..."
|
|
||||||
cat >> /var/www/html/conf/conf.php << EOF
|
|
||||||
\$dolibarr_main_auth_ldap_host='${DOLI_LDAP_HOST}';
|
|
||||||
\$dolibarr_main_auth_ldap_port='${DOLI_LDAP_PORT}';
|
|
||||||
\$dolibarr_main_auth_ldap_version='${DOLI_LDAP_VERSION}';
|
|
||||||
\$dolibarr_main_auth_ldap_servertype='${DOLI_LDAP_SERVER_TYPE}';
|
|
||||||
\$dolibarr_main_auth_ldap_login_attribute='${DOLI_LDAP_LOGIN_ATTRIBUTE}';
|
|
||||||
\$dolibarr_main_auth_ldap_dn='${DOLI_LDAP_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_filter='${DOLI_LDAP_FILTER}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_login='${DOLI_LDAP_BIND_DN}';
|
|
||||||
\$dolibarr_main_auth_ldap_admin_pass='${DOLI_LDAP_BIND_PASS}';
|
|
||||||
\$dolibarr_main_auth_ldap_debug='${DOLI_LDAP_DEBUG}';
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "mysqli" ]]; then
|
|
||||||
echo "\$dolibarr_main_db_character_set='utf8mb4';" >> /var/www/html/conf/conf.php
|
|
||||||
echo "\$dolibarr_main_db_collation='utf8mb4_unicode_ci';" >> /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[INIT] => update ownership for file in Dolibarr Config ..."
|
|
||||||
chown www-data:www-data /var/www/html/conf/conf.php
|
|
||||||
if [[ "${DOLI_DB_TYPE}" == "pgsql" && ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
chmod 600 /var/www/html/conf/conf.php
|
|
||||||
else
|
|
||||||
chmod 400 /var/www/html/conf/conf.php
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Wait that container database is running
|
|
||||||
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}" --connect-timeout=5 -e "status" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Waiting that SQL database is up ..."
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Lock any new upgrade
|
|
||||||
function lockInstallation()
|
|
||||||
{
|
|
||||||
touch /var/www/documents/install.lock
|
|
||||||
chown www-data:www-data /var/www/documents/install.lock
|
|
||||||
chmod 400 /var/www/documents/install.lock
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Run SQL files into /scripts directory.
|
|
||||||
function runScripts()
|
|
||||||
{
|
|
||||||
if [ -d /var/www/scripts/$1 ] ; then
|
|
||||||
for file in /var/www/scripts/$1/*; do
|
|
||||||
[ ! -f $file ] && continue
|
|
||||||
|
|
||||||
# If extension is not in PHP SQL SH, we loop
|
|
||||||
isExec=$(echo "PHP SQL SH" | grep -wio ${file##*.})
|
|
||||||
[ -z "$isExec" ] && continue
|
|
||||||
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..."
|
|
||||||
echo "Importing custom ${isExec} from `basename ${file}` ..." >> /var/www/documents/initdb.log
|
|
||||||
if [ "$isExec" == "SQL" ] ; then
|
|
||||||
sed -i 's/^--.*//g;' ${file}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${file}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${file} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
elif [ "$isExec" == "PHP" ] ; then
|
|
||||||
php $file
|
|
||||||
elif [ "$isExec" == "SH" ] ; then
|
|
||||||
/bin/bash $file
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Function called to initialize the database (creation of database tables and init data)
|
|
||||||
function initializeDatabase()
|
|
||||||
{
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do
|
|
||||||
if [[ ${fileSQL} != *.key.sql ]]; then
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment because comments into create sql crash the load
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing table key from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do
|
|
||||||
echo "Importing `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do
|
|
||||||
if [[ $fileSQL =~ llx_accounting_account_ ]]; then
|
|
||||||
echo "Do not import data from `basename ${fileSQL}` ..."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..."
|
|
||||||
echo "Importing data from `basename ${fileSQL}` ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/^--.*//g;' ${fileSQL}
|
|
||||||
sed -i 's/__ENTITY__/1/g;' ${fileSQL}
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Set some default const ..."
|
|
||||||
echo "Set some default const ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_VERSION_LAST_INSTALL';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_NOT_INSTALLED';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_LANG_DEFAULT';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_VERSION_LAST_INSTALL', '${DOLI_VERSION}', 'chaine', 0, 'Dolibarr version when install', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_LANG_DEFAULT', 'auto', 'chaine', 0, 'Default language', 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('SYSTEMTOOLS_MYSQLDUMP', '/usr/bin/mysqldump', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
if [[ ${DOLI_INIT_DEMO} -eq 1 ]]; then
|
|
||||||
mkdir -p /var/www/dev/initdemo/
|
|
||||||
|
|
||||||
echo "DOLI_VERSION=$DOLI_VERSION"
|
|
||||||
|
|
||||||
# Set DOLI_TAG to a number "x.y", even if value is "develop"
|
|
||||||
DOLI_TAG=${DOLI_VERSION}
|
|
||||||
if [ ${DOLI_TAG} == "develop" ]; then
|
|
||||||
echo "DOLI_TAG is develop that does not exists, so we will use the github demo file for version ${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
DOLI_TAG="${DOLI_VERSION_FOR_INIT_DEMO}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Convert version x.y.z into x.y.0
|
|
||||||
versiondemo=`echo "${DOLI_TAG}" | sed "s/^\([0-9]*\.[0-9]*\).*/\1.0/"` # Convert vesion x.y.z into x.y.0
|
|
||||||
|
|
||||||
echo "Get demo data with: curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql"
|
|
||||||
curl -fLSs -o /var/www/dev/initdemo/initdemo.sql https://raw.githubusercontent.com/Dolibarr/dolibarr/${DOLI_TAG}/dev/initdemo/mysqldump_dolibarr_$versiondemo.sql
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done."
|
|
||||||
echo "ERROR: failed to get the online init demo file. No demo init will be done." >>/var/www/documents/initdb.log 2>&1
|
|
||||||
else
|
|
||||||
for fileSQL in /var/www/dev/initdemo/*.sql; do
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..."
|
|
||||||
echo "Found demo data file, so we first drop tables llx_accounting_xxx ..." >> /var/www/documents/initdb.log
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_account\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_account" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\""
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"DROP TABLE llx_accounting_system\"" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DROP TABLE llx_accounting_system" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Then we load demo data ${fileSQL} ..."
|
|
||||||
echo "Then we load demo data ${fileSQL} ..." >> /var/www/documents/initdb.log
|
|
||||||
sed -i 's/\/\*!999999\\- enable the sandbox mode \*\///g;' ${fileSQL}
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}"
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < ${fileSQL} >> /var/www/documents/initdb.log 2>&1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do."
|
|
||||||
echo "DOLI_INIT_DEMO is off. No demo data load to do." >> /var/www/documents/initdb.log
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Create SuperAdmin account ..."
|
|
||||||
echo "Create SuperAdmin account ..." >> /var/www/documents/initdb.log
|
|
||||||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $1}'`
|
|
||||||
# TODO Generate pass_crypted using PHP password_hash and set MAIN_SECURITY_HASH_ALGO=password_hash into llx_const
|
|
||||||
#pass_crypted2=`php -r "echo password_hash(${DOLI_ADMIN_PASSWORD}, PASSWORD_BCRYPT);"`
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "DELETE FROM llx_const WHERE name='MAIN_SECURITY_HASH_ALGO';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
#mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_const(name,value,type,visible,note,entity) VALUES ('MAIN_SECURITY_HASH_ALGO', 'password_hash', 'chaine', 0, '', 0);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Try insert into llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "INSERT INTO llx_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
# Insert may fails if record already exists
|
|
||||||
echo "Now do update llx_user ..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_user SET pass_crypted = '${pass_crypted}' WHERE login = '${DOLI_ADMIN_LOGIN}';" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
echo "Enable user module ..."
|
|
||||||
echo "Enable user module ..." >> /var/www/documents/initdb.log
|
|
||||||
php /var/www/scripts/docker-init.php
|
|
||||||
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..."
|
|
||||||
echo "Set cron key to ${DOLI_CRON_KEY}..." >> /var/www/documents/initdb.log
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "UPDATE llx_const set value = '${DOLI_CRON_KEY}' WHERE name = 'CRON_KEY'" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
# Run init scripts
|
|
||||||
echo "Run scripts into docker-init.d if there is ..."
|
|
||||||
echo "Run scripts into docker-init.d if there is ..." >> /var/www/documents/initdb.log
|
|
||||||
runScripts "docker-init.d"
|
|
||||||
|
|
||||||
# Update ownership after initialisation of modules
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Migrate database to the new version
|
|
||||||
function migrateDatabase()
|
|
||||||
{
|
|
||||||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0"
|
|
||||||
echo "Dumping Database into /var/www/documents/backup-before-upgrade.sql ..."
|
|
||||||
|
|
||||||
mysqldump -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" > /var/www/documents/backup-before-upgrade.sql
|
|
||||||
r=${?}
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Dump failed ... Aborting migration ..."
|
|
||||||
return ${r}
|
|
||||||
fi
|
|
||||||
echo "Dump done ... Starting Migration ..."
|
|
||||||
|
|
||||||
echo "Create unlock file with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
> /var/www/documents/migration_error.html
|
|
||||||
pushd /var/www/htdocs/install > /dev/null
|
|
||||||
php upgrade.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php upgrade2.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1 && \
|
|
||||||
php step5.php ${INSTALLED_VERSION} ${TARGET_VERSION} >> /var/www/documents/migration_error.html 2>&1
|
|
||||||
r=$?
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
echo "Remove unlock file with: rm -f /var/www/documents/upgrade.unlock"
|
|
||||||
rm -f /var/www/documents/upgrade.unlock
|
|
||||||
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
echo "Migration failed ... Restoring DB ... check file /var/www/documents/migration_error.html for more info on error ..."
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" < /var/www/documents/backup-before-upgrade.sql
|
|
||||||
echo "DB Restored ..."
|
|
||||||
return ${r}
|
|
||||||
else
|
|
||||||
echo "Migration successful ... Enjoy !"
|
|
||||||
fi
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function run()
|
|
||||||
{
|
|
||||||
> /var/www/documents/initdb.log 2>&1
|
|
||||||
|
|
||||||
initDolibarr
|
|
||||||
echo "Current Version of files is : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
# If install of mysql database (and not install of cron) is requested
|
|
||||||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && "${DOLI_DB_TYPE}" != "pgsql" ]]; then
|
|
||||||
echo "DOLI_INSTALL_AUTO is on, so we check to initialize or upgrade mariadb database"
|
|
||||||
|
|
||||||
waitForDataBase
|
|
||||||
|
|
||||||
# Check if DB exists (even if empty)
|
|
||||||
DB_EXISTS=0
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} -e \"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '${DOLI_DB_NAME}';\" > /tmp/docker-run-checkdb.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" -e "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '"${DOLI_DB_NAME}"';" > /tmp/docker-run-checkdb.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -eq 0 ]]; then
|
|
||||||
DB_EXISTS=`grep "${DOLI_DB_NAME}" /tmp/docker-run-checkdb.result`
|
|
||||||
fi
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "DB Exists is : ${DB_EXISTS}"
|
|
||||||
|
|
||||||
if [[ ! -f /var/www/documents/install.lock ]]; then
|
|
||||||
echo "Install.lock Exists is : no" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : no"
|
|
||||||
else
|
|
||||||
echo "Install.lock Exists is : yes" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "Install.lock Exists is : yes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If install.lock does not exists, or if db does not exists, we launch the initializeDatabase, then upgrade if required.
|
|
||||||
if [[ ! -f /var/www/documents/install.lock || "${DB_EXISTS}" = "" ]]; then
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
r=$?
|
|
||||||
if [[ ${r} -ne 0 ]]; then
|
|
||||||
# If test fails, it means tables does not exists, so we create them
|
|
||||||
echo "No table found, we launch initializeDatabase" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
echo "No table found, we launch initializeDatabase"
|
|
||||||
|
|
||||||
initializeDatabase
|
|
||||||
|
|
||||||
# Regenerate the /tmp/docker-run-lastinstall.result
|
|
||||||
echo "mysql -u ${DOLI_DB_USER} -pxxxxxx -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} -e \"SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1\" > /tmp/docker-run-lastinstall.result 2>&1" >> /var/www/documents/initdb.log 2>&1
|
|
||||||
mysql -u "${DOLI_DB_USER}" -p"${DOLI_DB_PASSWORD}" -h "${DOLI_DB_HOST}" -P "${DOLI_DB_HOST_PORT}" "${DOLI_DB_NAME}" -e "SELECT Q.LAST_INSTALLED_VERSION FROM (SELECT INET_ATON(REPLACE(REPLACE(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', '')))), '-beta', ''), '-alpha', '')) as VERSION_ATON, value as LAST_INSTALLED_VERSION FROM llx_const WHERE name IN ('MAIN_VERSION_LAST_INSTALL', 'MAIN_VERSION_LAST_UPGRADE') and entity=0) Q ORDER BY VERSION_ATON DESC LIMIT 1" > /tmp/docker-run-lastinstall.result 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Now database exists. Do we have to upgrade it ?
|
|
||||||
if [ -f /tmp/docker-run-lastinstall.result ]; then
|
|
||||||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/docker-run-lastinstall.result`
|
|
||||||
echo "Database Version is : ${INSTALLED_VERSION}"
|
|
||||||
echo "Files Version are : ${DOLI_VERSION}"
|
|
||||||
|
|
||||||
if [[ ${DOLI_VERSION} != "develop" ]]; then
|
|
||||||
# Test if x in INSTALLED_VERSION is lower than X of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then
|
|
||||||
echo "Database version is a major lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if y in INSTALLED_VERSION is lower than Y of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f2)" ]]; then
|
|
||||||
echo "Database version is a middle lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
# Test if z in INSTALLED_VERSION is lower than Z of DOLI_VERSION (in x.y.z)
|
|
||||||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f1)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f2)" -eq "$(echo ${DOLI_VERSION} | cut -d. -f2)" && "$(echo ${INSTALLED_VERSION} | cut -d. -f3 | sed -e 's/\-(beta|alpha)//')" -lt "$(echo ${DOLI_VERSION} | cut -d. -f3)" ]]; then
|
|
||||||
echo "Database version is a minor lower version, so we must run the upgrade process"
|
|
||||||
migrateDatabase
|
|
||||||
else
|
|
||||||
echo "Schema update is not required ... Enjoy !"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
lockInstallation
|
|
||||||
else
|
|
||||||
# Create the upgrade.unlock file to allow upgrade for develop
|
|
||||||
echo "Create the file to allow upgrade with: touch /var/www/documents/upgrade.unlock"
|
|
||||||
touch /var/www/documents/upgrade.unlock
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "File /var/www/documents/install.lock exists and database exists so we cancel database init"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set permission
|
|
||||||
local CURRENT_UID=$(id -u www-data)
|
|
||||||
local CURRENT_GID=$(id -g www-data)
|
|
||||||
usermod -u ${WWW_USER_ID} www-data
|
|
||||||
groupmod -g ${WWW_GROUP_ID} www-data
|
|
||||||
|
|
||||||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then
|
|
||||||
# Refresh file ownership cause it has changed
|
|
||||||
echo "As UID / GID have changed from default, update ownership for files in /var/ww ..."
|
|
||||||
chown -R www-data:www-data /var/www
|
|
||||||
else
|
|
||||||
# Reducing load on init : change ownership only for volumes declared in docker
|
|
||||||
echo "Update ownership for files in /var/www/documents ..."
|
|
||||||
chown -R www-data:www-data /var/www/documents
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Run scripts before starting
|
|
||||||
runScripts "before-starting.d"
|
|
||||||
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Mariadb with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-mariadb-1 bash"
|
|
||||||
echo "mariadb -uroot -p'MYSQL_ROOT_PASSWORD' -h localhost"
|
|
||||||
echo "or"
|
|
||||||
echo "mariadb -uxxx -p'yyy' -h mariadb with xxx in /run/secrets/mysql-user and yyy in /run/secrets/mysql-password if these files were used in docker-compose.yml"
|
|
||||||
echo "ls /var/lib/mysql"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the docker Dolibarr with:"
|
|
||||||
echo "sudo docker exec -it nameofwebcontainer-web-1 bash"
|
|
||||||
echo "ls /var/www/documents"
|
|
||||||
echo "ls /var/www/html"
|
|
||||||
echo
|
|
||||||
echo "*** You can access persistent directory from the host with:"
|
|
||||||
echo "ls /home/dolibarr_mariadb_latest"
|
|
||||||
echo "ls /home/dolibarr_documents_latest"
|
|
||||||
echo "ls /home/dolibarr_custom_latest"
|
|
||||||
echo
|
|
||||||
echo "*** You can connect to the running Dolibarr web application with:"
|
|
||||||
echo "http://127.0.0.1:port"
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# main script
|
|
||||||
|
|
||||||
echo "docker-run.sh started"
|
|
||||||
|
|
||||||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'dolidbuser')
|
|
||||||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'dolidbpass')
|
|
||||||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin')
|
|
||||||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin')
|
|
||||||
DOLI_CRON_KEY=$(get_env_value 'DOLI_CRON_KEY' '')
|
|
||||||
DOLI_CRON_USER=$(get_env_value 'DOLI_CRON_USER' '')
|
|
||||||
DOLI_INSTANCE_UNIQUE_ID=$(get_env_value 'DOLI_INSTANCE_UNIQUE_ID' '')
|
|
||||||
|
|
||||||
# Launch the run function
|
|
||||||
run
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${DOLI_CRON} -eq 1 ]]; then
|
|
||||||
echo "PATH=\$PATH:/usr/local/bin" > /etc/cron.d/dolibarr
|
|
||||||
echo "*/5 * * * * root /bin/su www-data -s /bin/sh -c '/var/www/scripts/cron/cron_run_jobs.php ${DOLI_CRON_KEY} ${DOLI_CRON_USER}' > /proc/1/fd/1 2> /proc/1/fd/2" >> /etc/cron.d/dolibarr
|
|
||||||
cron -f
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${1#-}" != "$1" ]; then
|
|
||||||
set -- apache2-foreground "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec "$@"
|
|
||||||
|
|
||||||
echo "docker-run.sh stopped."
|
|
||||||
@@ -13,10 +13,12 @@ FROM ${ARCH}php:8.2-apache-bookworm
|
|||||||
# 2025 Renato de Castro Ferreira
|
# 2025 Renato de Castro Ferreira
|
||||||
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
LABEL maintainer="The Dolibarr foundation <contact@dolibarr.org>"
|
||||||
|
|
||||||
ENV DOLI_VERSION=22.0.2
|
ENV DOLI_VERSION=22.0.2_wavyzz
|
||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=22.0
|
ENV DOLI_VERSION_FOR_INIT_DEMO=22.0
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
ENV DOLI_INSTALL_AUTO=1
|
||||||
ENV DOLI_PROD=1
|
ENV DOLI_PROD=1
|
||||||
|
ENV DOLI_GIT_BASE_URL=https://gitea.wavyzz.com/Wavyzz/dolibarr-fork
|
||||||
|
ENV DOLI_ARCHIVE_BASE_DIR=dolibarr-fork
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
ENV DOLI_DB_TYPE=mysqli
|
||||||
ENV DOLI_DB_HOST=mysql
|
ENV DOLI_DB_HOST=mysql
|
||||||
@@ -93,11 +95,11 @@ RUN a2disconf serve-cgi-bin \
|
|||||||
&& a2dismod -f autoindex
|
&& a2dismod -f autoindex
|
||||||
|
|
||||||
# Get Dolibarr
|
# Get Dolibarr
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
RUN curl -fLSs ${DOLI_GIT_BASE_URL}/archive/${DOLI_VERSION}.tar.gz |\
|
||||||
tar -C /tmp -xz && \
|
tar -C /tmp -xz && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/htdocs/* /var/www/html/ && \
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
ln -s /var/www/html /var/www/htdocs && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/scripts /var/www/ && \
|
||||||
rm -rf /tmp/* && \
|
rm -rf /tmp/* && \
|
||||||
mkdir -p /var/www/documents && \
|
mkdir -p /var/www/documents && \
|
||||||
mkdir -p /var/www/html/custom && \
|
mkdir -p /var/www/html/custom && \
|
||||||
@@ -17,6 +17,8 @@ ENV DOLI_VERSION=develop
|
|||||||
ENV DOLI_VERSION_FOR_INIT_DEMO=22.0
|
ENV DOLI_VERSION_FOR_INIT_DEMO=22.0
|
||||||
ENV DOLI_INSTALL_AUTO=1
|
ENV DOLI_INSTALL_AUTO=1
|
||||||
ENV DOLI_PROD=1
|
ENV DOLI_PROD=1
|
||||||
|
ENV DOLI_GIT_BASE_URL=https://gitea.wavyzz.com/Wavyzz/dolibarr-fork
|
||||||
|
ENV DOLI_ARCHIVE_BASE_DIR=dolibarr-fork
|
||||||
|
|
||||||
ENV DOLI_DB_TYPE=mysqli
|
ENV DOLI_DB_TYPE=mysqli
|
||||||
ENV DOLI_DB_HOST=mysql
|
ENV DOLI_DB_HOST=mysql
|
||||||
@@ -93,11 +95,11 @@ RUN a2disconf serve-cgi-bin \
|
|||||||
&& a2dismod -f autoindex
|
&& a2dismod -f autoindex
|
||||||
|
|
||||||
# Get Dolibarr
|
# Get Dolibarr
|
||||||
RUN curl -fLSs https://github.com/Dolibarr/dolibarr/archive/${DOLI_VERSION}.tar.gz |\
|
RUN curl -fLSs ${DOLI_GIT_BASE_URL}/archive/${DOLI_VERSION}.tar.gz |\
|
||||||
tar -C /tmp -xz && \
|
tar -C /tmp -xz && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/htdocs/* /var/www/html/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/htdocs/* /var/www/html/ && \
|
||||||
ln -s /var/www/html /var/www/htdocs && \
|
ln -s /var/www/html /var/www/htdocs && \
|
||||||
cp -r /tmp/dolibarr-${DOLI_VERSION}/scripts /var/www/ && \
|
cp -r /tmp/${DOLI_ARCHIVE_BASE_DIR}/scripts /var/www/ && \
|
||||||
rm -rf /tmp/* && \
|
rm -rf /tmp/* && \
|
||||||
mkdir -p /var/www/documents && \
|
mkdir -p /var/www/documents && \
|
||||||
mkdir -p /var/www/html/custom && \
|
mkdir -p /var/www/html/custom && \
|
||||||
|
|||||||
29
update.sh
29
update.sh
@@ -8,22 +8,39 @@ set -e
|
|||||||
|
|
||||||
DOCKER_BUILD=${DOCKER_BUILD:-0}
|
DOCKER_BUILD=${DOCKER_BUILD:-0}
|
||||||
DOCKER_PUSH=${DOCKER_PUSH:-0}
|
DOCKER_PUSH=${DOCKER_PUSH:-0}
|
||||||
|
DOCKER_NAMESPACE=${DOCKER_NAMESPACE:-wavyzz}
|
||||||
|
DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST:-""} # e.g. registry.example.com
|
||||||
|
|
||||||
BASE_DIR="$( cd "$(dirname "$0")" && pwd )"
|
BASE_DIR="$( cd "$(dirname "$0")" && pwd )"
|
||||||
|
|
||||||
source "${BASE_DIR}/versions.sh"
|
source "${BASE_DIR}/versions.sh"
|
||||||
|
|
||||||
|
# Fail if we push to hub
|
||||||
|
if [ "${DOCKER_BUILD}" = "1" ] && [ "${DOCKER_PUSH}" = "1" ] && [ -z "${DOCKER_REGISTRY_HOST}" ]; then
|
||||||
|
echo "ERROR: DOCKER_REGISTRY_HOST is empty but DOCKER_PUSH=1. This would push to Docker Hub (docker.io)."
|
||||||
|
echo "Set DOCKER_REGISTRY_HOST to your registry or log in to Docker Hub explicitly if that is intended."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# If a target version is provided to the build script, only build this one
|
# If a target version is provided to the build script, only build this one
|
||||||
if [ "$#" -ge "1" ]
|
if [ "$#" -ge "1" ]
|
||||||
then
|
then
|
||||||
DOLIBARR_VERSIONS=("$1")
|
DOLIBARR_VERSIONS=("$1")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "${DOCKER_REGISTRY_HOST}" ]; then
|
||||||
|
# Remove protocol if accidentally provided (e.g. "https://registry.example.com")
|
||||||
|
DOCKER_REGISTRY_HOST="${DOCKER_REGISTRY_HOST#https://}"
|
||||||
|
DOCKER_REGISTRY_HOST="${DOCKER_REGISTRY_HOST#http://}"
|
||||||
|
REGISTRY_PREFIX="${DOCKER_REGISTRY_HOST}/"
|
||||||
|
else
|
||||||
|
REGISTRY_PREFIX=""
|
||||||
|
fi
|
||||||
|
|
||||||
tags=""
|
tags=""
|
||||||
|
|
||||||
# Generate an up-to-date copy of .github/workflows/build.yml using the Dolibarr versions as defined in versions.sh
|
# Generate an up-to-date copy of .gitea/workflows/build.yml using the Dolibarr versions as defined in versions.sh
|
||||||
FORMATTED_DOLIBARR_VERSIONS=$(IFS=","; echo "${DOLIBARR_VERSIONS[*]}")
|
FORMATTED_DOLIBARR_VERSIONS=$(IFS=","; echo "${DOLIBARR_VERSIONS[*]}")
|
||||||
sed 's/%DOLIBARR_VERSIONS%/'"$FORMATTED_DOLIBARR_VERSIONS"'/g' "${BASE_DIR}/.github/build.yml.template" | sed 's/,/, /g' > "${BASE_DIR}/.github/workflows/build.yml"
|
sed 's/%DOLIBARR_VERSIONS%/'"$FORMATTED_DOLIBARR_VERSIONS"'/g' "${BASE_DIR}/.gitea/build.yml.template" | sed 's/,/, /g' > "${BASE_DIR}/.gitea/workflows/build.yml"
|
||||||
|
|
||||||
# Clean the directory /images
|
# Clean the directory /images
|
||||||
if [ -f "${BASE_DIR}/images/README.md" ]; then
|
if [ -f "${BASE_DIR}/images/README.md" ]; then
|
||||||
@@ -57,12 +74,12 @@ for dolibarrVersion in "${DOLIBARR_VERSIONS[@]}"; do
|
|||||||
tags="${tags} ${currentTag}"
|
tags="${tags} ${currentTag}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
buildOptionTags="--tag dolibarr/dolibarr:${currentTag}"
|
buildOptionTags="--tag ${REGISTRY_PREFIX}${DOCKER_NAMESPACE}/dolibarr:${currentTag}"
|
||||||
if [ "${dolibarrVersion}" != "develop" ]; then
|
if [ "${dolibarrVersion}" != "develop" ]; then
|
||||||
buildOptionTags="${buildOptionTags} --tag dolibarr/dolibarr:${dolibarrVersion} --tag dolibarr/dolibarr:${dolibarrMajor}"
|
buildOptionTags="${buildOptionTags} --tag ${REGISTRY_PREFIX}${DOCKER_NAMESPACE}/dolibarr:${dolibarrVersion} --tag ${REGISTRY_PREFIX}${DOCKER_NAMESPACE}/dolibarr:${dolibarrMajor}"
|
||||||
fi
|
fi
|
||||||
if [ "${dolibarrVersion}" = "${DOLIBARR_LATEST_TAG}" ]; then
|
if [ "${dolibarrVersion}" = "${DOLIBARR_LATEST_TAG}" ]; then
|
||||||
buildOptionTags="${buildOptionTags} --tag dolibarr/dolibarr:latest"
|
buildOptionTags="${buildOptionTags} --tag ${REGISTRY_PREFIX}${DOCKER_NAMESPACE}/dolibarr:latest"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dir="${BASE_DIR}/images/${currentTag}"
|
dir="${BASE_DIR}/images/${currentTag}"
|
||||||
|
|||||||
@@ -3,10 +3,10 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
# The list of version to build docker packages for
|
# The list of version to build docker packages for
|
||||||
DOLIBARR_VERSIONS=("15.0.3" "16.0.5" "17.0.4" "18.0.8" "19.0.4" "20.0.4" "21.0.4" "22.0.2" "develop")
|
DOLIBARR_VERSIONS=("22.0.2_wavyzz" "develop")
|
||||||
|
|
||||||
# The version to use when installing dolibarr/dolibarr:latest
|
# The version to use when installing dolibarr/dolibarr:latest
|
||||||
DOLIBARR_LATEST_TAG="22.0.2"
|
DOLIBARR_LATEST_TAG="22.0.2_wavyzz"
|
||||||
|
|
||||||
# The version to use to find the dump file for the init of demo with branch "develop"
|
# The version to use to find the dump file for the init of demo with branch "develop"
|
||||||
DOLIBARR_VERSION_FOR_INIT_DEMO="22.0"
|
DOLIBARR_VERSION_FOR_INIT_DEMO="22.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user