forked from tuxgasy/docker-dolibarr
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'tuxgasy:master' into master
- Loading branch information
Showing
8 changed files
with
360 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: test | ||
on: | ||
push: | ||
branches: | ||
- master | ||
pull_request: | ||
|
||
jobs: | ||
check-update: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- run: | | ||
./update.sh | ||
git diff --exit-code | ||
check-build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- env: | ||
DOLI_INSTALL_AUTO: 0 | ||
run: | | ||
./update.sh | ||
docker build -t tuxgasy/dolibarr:develop images/develop | ||
docker run -d -p 127.0.0.1:80:80 --name dolibarr tuxgasy/dolibarr:develop | ||
docker ps | grep -q dolibarr |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
ARG ARCH= | ||
|
||
FROM ${ARCH}php:8.1-apache-buster | ||
|
||
LABEL maintainer="Garcia MICHEL <[email protected]>" | ||
|
||
ENV DOLI_VERSION 17.0.0 | ||
ENV DOLI_INSTALL_AUTO 1 | ||
|
||
ENV DOLI_DB_TYPE mysqli | ||
ENV DOLI_DB_HOST mysql | ||
ENV DOLI_DB_HOST_PORT 3306 | ||
ENV DOLI_DB_NAME dolidb | ||
|
||
ENV DOLI_URL_ROOT 'http://localhost' | ||
ENV DOLI_NOCSRFCHECK 0 | ||
|
||
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 | ||
|
||
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 \ | ||
libpng-dev \ | ||
libpq-dev \ | ||
libxml2-dev \ | ||
libzip-dev \ | ||
default-mysql-client \ | ||
postgresql-client \ | ||
cron \ | ||
&& apt-get autoremove -y \ | ||
&& docker-php-ext-configure gd --with-freetype --with-jpeg \ | ||
&& docker-php-ext-install -j$(nproc) calendar intl mysqli pdo_mysql gd soap zip \ | ||
&& 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 \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
# 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 | ||
|
||
EXPOSE 80 | ||
VOLUME /var/www/documents | ||
VOLUME /var/www/html/custom | ||
|
||
COPY docker-run.sh /usr/local/bin/ | ||
ENTRYPOINT ["docker-run.sh"] | ||
|
||
CMD ["apache2-foreground"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
#!/bin/bash | ||
|
||
# usage: get_env_value VAR [DEFAULT] | ||
# ie: get_env_value 'XYZ_DB_PASSWORD' 'example' | ||
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of | ||
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) | ||
function get_env_value() { | ||
local varName="${1}" | ||
local fileVarName="${varName}_FILE" | ||
local defaultValue="${2:-}" | ||
|
||
if [ "${!varName:-}" ] && [ "${!fileVarName:-}" ]; then | ||
echo >&2 "error: both ${varName} and ${fileVarName} are set (but are exclusive)" | ||
exit 1 | ||
fi | ||
|
||
local value="${defaultValue}" | ||
if [ "${!varName:-}" ]; then | ||
value="${!varName}" | ||
elif [ "${!fileVarName:-}" ]; then | ||
value="$(< "${!fileVarName}")" | ||
fi | ||
|
||
echo ${value} | ||
exit 0 | ||
} | ||
|
||
function initDolibarr() | ||
{ | ||
local CURRENT_UID=$(id -u www-data) | ||
local CURRENT_GID=$(id -g www-data) | ||
usermod -u ${WWW_USER_ID} www-data | ||
groupmod -g ${WWW_GROUP_ID} www-data | ||
|
||
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} | ||
EOF | ||
|
||
if [[ ! -f /var/www/html/conf/conf.php ]]; then | ||
echo "[INIT] => update Dolibarr Config ..." | ||
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_host='${DOLI_DB_HOST}'; | ||
\$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}'; | ||
EOF | ||
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 | ||
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 | ||
|
||
if [[ ${CURRENT_UID} -ne ${WWW_USER_ID} || ${CURRENT_GID} -ne ${WWW_GROUP_ID} ]]; then | ||
# Refresh file ownership cause it has changed | ||
echo "[INIT] => 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 "[INIT] => update ownership for files in /var/www/documents ..." | ||
chown -R www-data:www-data /var/www/documents | ||
fi | ||
} | ||
|
||
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" > /dev/null 2>&1 | ||
r=$? | ||
if [[ ${r} -ne 0 ]]; then | ||
echo "Waiting that SQL database is up ..." | ||
sleep 2 | ||
fi | ||
done | ||
} | ||
|
||
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 | ||
} | ||
|
||
function initializeDatabase() | ||
{ | ||
for fileSQL in /var/www/html/install/mysql/tables/*.sql; do | ||
if [[ ${fileSQL} != *.key.sql ]]; then | ||
echo "Importing table from `basename ${fileSQL}` ..." | ||
sed -i 's/--.*//g;' ${fileSQL} # remove all comment | ||
mysql -u ${DOLI_DB_USER} -p${DOLI_DB_PASSWORD} -h ${DOLI_DB_HOST} -P ${DOLI_DB_HOST_PORT} ${DOLI_DB_NAME} < ${fileSQL} | ||
fi | ||
done | ||
|
||
for fileSQL in /var/www/html/install/mysql/tables/*.key.sql; do | ||
echo "Importing table key from `basename ${fileSQL}` ..." | ||
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} > /dev/null 2>&1 | ||
done | ||
|
||
for fileSQL in /var/www/html/install/mysql/functions/*.sql; do | ||
echo "Importing `basename ${fileSQL}` ..." | ||
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} > /dev/null 2>&1 | ||
done | ||
|
||
for fileSQL in /var/www/html/install/mysql/data/*.sql; do | ||
echo "Importing data from `basename ${fileSQL}` ..." | ||
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} > /dev/null 2>&1 | ||
done | ||
|
||
echo "Create SuperAdmin account ..." | ||
pass_crypted=`echo -n ${DOLI_ADMIN_PASSWORD} | md5sum | awk '{print $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_user (entity, login, pass_crypted, lastname, admin, statut) VALUES (0, '${DOLI_ADMIN_LOGIN}', '${pass_crypted}', 'SuperAdmin', 1, 1);" > /dev/null 2>&1 | ||
|
||
echo "Set some default const ..." | ||
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';" > /dev/null 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';" > /dev/null 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';" > /dev/null 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);" > /dev/null 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);" > /dev/null 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);" > /dev/null 2>&1 | ||
} | ||
|
||
function migrateDatabase() | ||
{ | ||
TARGET_VERSION="$(echo ${DOLI_VERSION} | cut -d. -f1).$(echo ${DOLI_VERSION} | cut -d. -f2).0" | ||
echo "Schema update is required ..." | ||
echo "Dumping Database into /var/www/documents/dump.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/dump.sql | ||
r=${?} | ||
if [[ ${r} -ne 0 ]]; then | ||
echo "Dump failed ... Aborting migration ..." | ||
return ${r} | ||
fi | ||
echo "Dump done ... Starting Migration ..." | ||
|
||
echo "" > /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 | ||
|
||
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/dump.sql | ||
echo "DB Restored ..." | ||
return ${r} | ||
else | ||
echo "Migration successful ... Enjoy !!" | ||
fi | ||
|
||
return 0 | ||
} | ||
|
||
function run() | ||
{ | ||
initDolibarr | ||
echo "Current Version is : ${DOLI_VERSION}" | ||
|
||
if [[ ${DOLI_INSTALL_AUTO} -eq 1 && ${DOLI_CRON} -ne 1 && ! -f /var/www/documents/install.lock && ${DOLI_DB_TYPE} != "pgsql" ]]; then | ||
waitForDataBase | ||
|
||
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(CONCAT(value, REPEAT('.0', 3 - CHAR_LENGTH(value) + CHAR_LENGTH(REPLACE(value, '.', ''))))) 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/lastinstall.result 2>&1 | ||
r=$? | ||
if [[ ${r} -ne 0 ]]; then | ||
initializeDatabase | ||
else | ||
INSTALLED_VERSION=`grep -v LAST_INSTALLED_VERSION /tmp/lastinstall.result` | ||
echo "Last installed Version is : ${INSTALLED_VERSION}" | ||
if [[ "$(echo ${INSTALLED_VERSION} | cut -d. -f1)" -lt "$(echo ${DOLI_VERSION} | cut -d. -f1)" ]]; then | ||
migrateDatabase | ||
else | ||
echo "Schema update is not required ... Enjoy !!" | ||
fi | ||
fi | ||
|
||
if [[ ${DOLI_VERSION} != "develop" ]]; then | ||
lockInstallation | ||
fi | ||
fi | ||
} | ||
|
||
DOLI_DB_USER=$(get_env_value 'DOLI_DB_USER' 'doli') | ||
DOLI_DB_PASSWORD=$(get_env_value 'DOLI_DB_PASSWORD' 'doli_pass') | ||
DOLI_ADMIN_LOGIN=$(get_env_value 'DOLI_ADMIN_LOGIN' 'admin') | ||
DOLI_ADMIN_PASSWORD=$(get_env_value 'DOLI_ADMIN_PASSWORD' 'admin') | ||
|
||
run | ||
|
||
set -e | ||
|
||
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 "$@" |
Oops, something went wrong.