diff --git a/.gitignore b/.gitignore
index f16235a..1af21a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -109,3 +109,4 @@ venv.bak/
*.war
.flaskenv.secret
+bom.json
diff --git a/src/d2_docker/config/dhis2-core-start.sh b/src/d2_docker/config/dhis2-core-start.sh
index 508fcde..0a35fde 100755
--- a/src/d2_docker/config/dhis2-core-start.sh
+++ b/src/d2_docker/config/dhis2-core-start.sh
@@ -29,8 +29,13 @@ post_db_path="/data/db/post"
source_apps_path="/data/apps"
source_documents_path="/data/document"
source_datavalues_path="/data/dataValue"
-files_path="/DHIS2_home/files/"
-tomcat_conf_dir="/usr/local/tomcat/conf"
+home_path="/DHIS2_home"
+files_path="$home_path/files/"
+tomcatdir=/usr/local/tomcat
+tomcat_conf_dir="$tomcatdir/conf"
+approot="$tomcatdir/webapps/ROOT"
+flag_sql_error="$home_path/flag-sql-error"
+
debug() {
echo "[dhis2-core-start] $*" >&2
@@ -39,6 +44,10 @@ debug() {
run_sql_files() {
base_db_path=$(test "${LOAD_FROM_DATA}" = "yes" && echo "$root_db_path" || echo "$post_db_path")
debug "Files in data path"
+ if [[ ! -d "$base_db_path" ]] ; then
+ debug " -- NO FILES -- "
+ return 0
+ fi
find "$base_db_path" >&2
find "$base_db_path" -type f \( -name '*.dump' \) |
@@ -60,6 +69,12 @@ run_sql_files() {
run_psql_cmd "$path" || exit_code=$?
if [ "$exit_code" -gt 0 ]; then
echo "Exit code: $exit_code"
+ touch "$flag_sql_error"
+ rf -rvf $approot
+ mkdir -p -m 750 $approot
+ chown tomcat:tomcat $approot
+ echo '
Error
+ Error during preparation of the service' > $approot/index.html
exit "$exit_code"
fi
done
@@ -122,9 +137,9 @@ copy_non_empty_files() {
setup_tomcat() {
debug "Setup tomcat"
- cp -v $configdir/DHIS2_home/* "/DHIS2_home/"
- cp -v $homedir/* /DHIS2_home/ || true
- copy_non_empty_files "$configdir/override/dhis2/" "/DHIS2_home/"
+ cp -v $configdir/DHIS2_home/* "$home_path/"
+ cp -v $homedir/* $home_path/ || true
+ copy_non_empty_files "$configdir/override/dhis2/" "$home_path/"
cp -v "$configdir/server.xml" "$tomcat_conf_dir/server.xml"
copy_non_empty_files "$configdir/override/tomcat/" "$tomcat_conf_dir/"
@@ -149,6 +164,27 @@ wait_for_tomcat() {
done
}
+cleanup() {
+ debug "--- [SIGNAL RECEIVED] ---"
+ debug "Stopping tomcat"
+ catalina.sh stop &
+ STOP_PID=$!
+ count=0
+ # if need more than 10 seconds (default), remember to configure stop_grace_period in docker-compose.yml accordingly
+ while [ $count -lt 10 ]; do
+ if ! kill -0 $STOP_PID 2>/dev/null; then
+ debug "Tomcat has stopped."
+ exit 0
+ fi
+ sleep 1
+ count=$((count + 1))
+ done
+ exit 0
+}
+
+trap cleanup SIGTERM SIGINT
+
+
INIT_DONE_FILE="/tmp/dhis2-core-start.done"
is_init_done() {
@@ -178,10 +214,11 @@ run() {
fi
start_tomcat &
+ LAST_PID=$!
wait_for_tomcat
run_post_scripts || true
debug "DHIS2 instance ready"
- wait
+ wait $LAST_PID || true
}
env
diff --git a/src/d2_docker/docker-compose.yml b/src/d2_docker/docker-compose.yml
index f0f8d22..cc6afde 100644
--- a/src/d2_docker/docker-compose.yml
+++ b/src/d2_docker/docker-compose.yml
@@ -21,7 +21,8 @@ services:
DHIS2_AUTH: "${DHIS2_AUTH}"
entrypoint: bash /config/dhis2-core-entrypoint.sh
command: bash /config/dhis2-core-start.sh
- restart: "no"
+ stop_grace_period: 10s
+ restart: unless-stopped
depends_on:
- "db"
- "data"
diff --git a/src/d2_docker/images/dhis2-core/docker-entrypoint.sh b/src/d2_docker/images/dhis2-core/docker-entrypoint.sh
index 27844fb..3a387e3 100644
--- a/src/d2_docker/images/dhis2-core/docker-entrypoint.sh
+++ b/src/d2_docker/images/dhis2-core/docker-entrypoint.sh
@@ -8,10 +8,18 @@ WARFILE=/usr/local/tomcat/webapps/ROOT.war
TOMCATDIR=/usr/local/tomcat
DHIS2HOME=/DHIS2_home
DATA_DIR=/data
+FLAG_SQL_ERROR=$DHIS2HOME/flag_sql_error
+APPROOT=$TOMCATDIR/webapps/ROOT
if [ "$(id -u)" = "0" ]; then
- if [ -f $WARFILE ]; then
- unzip -q $WARFILE -d $TOMCATDIR/webapps/ROOT
+ if [ -f $FLAG_SQL_ERROR ]; then
+ rf -rvf $APPROOT
+ mkdir -p -m 750 $APPROOT
+ chown tomcat:tomcat $APPROOT
+ echo 'Error
+ Error during preparation of the service' > $APPROOT/index.html
+ elif [ -f $WARFILE ]; then
+ unzip -q $WARFILE -d $APPROOT
rm -v $WARFILE # just to save space
fi
diff --git a/src/d2_docker/images/dhis2-data/run.sh b/src/d2_docker/images/dhis2-data/run.sh
index 183a5c8..a283392 100755
--- a/src/d2_docker/images/dhis2-data/run.sh
+++ b/src/d2_docker/images/dhis2-data/run.sh
@@ -10,6 +10,8 @@ main() { local volume=$1
chmod -R u+rwX,go+rX,go-w $volume
else
rm -rf /$volume/*
+ # To avoid leaving dhis2-core without a path to /data/db/post after clearing up all /data
+ mkdir /$volume/db
fi
}