From d688d24e7aeb444f4dc3eb9b1de52f26e5155878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mitchell=20B=C3=B6secke?= Date: Thu, 26 Oct 2023 15:04:34 -0600 Subject: [PATCH] Added support for a PostgreSQL JNDI resource. - Included a blurb on the README.md - Provides a default "context.xml" that a user can easily configure using environment variables. - Provides a mechanism for the user to override the default "context.xml" with their own version of the file for more advanced customization of the connection pool. Heavily inspired by the work done at https://github.com/kartoza/docker-geoserver. --- Dockerfile | 10 +++++++++- README.md | 16 ++++++++++++++++ config/context.xml | 20 ++++++++++++++++++++ startup.sh | 21 +++++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 config/context.xml diff --git a/Dockerfile b/Dockerfile index 2bc975b..27de96d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ ENV CATALINA_OPTS="\$EXTRA_JAVA_OPTS \ # init RUN apt update \ && apt -y upgrade \ -&& apt install -y --no-install-recommends openssl unzip gdal-bin wget curl openjdk-11-jdk \ +&& apt install -y --no-install-recommends openssl unzip gdal-bin wget curl openjdk-11-jdk gettext \ && apt clean \ && rm -rf /var/cache/apt/* \ && rm -rf /var/lib/apt/lists/* @@ -92,6 +92,9 @@ ENV ADDITIONAL_LIBS_DIR=/opt/additional_libs/ ENV ADDITIONAL_FONTS_DIR=/opt/additional_fonts/ ENV SKIP_DEMO_DATA=false ENV ROOT_WEBAPP_REDIRECT=false +ENV POSTGRES_JNDI_ENABLED=false +ENV CONFIG_DIR=/opt/config +ENV CONFIG_OVERRIDES_DIR=/opt/config_overrides EXPOSE 8080 @@ -104,6 +107,8 @@ COPY --from=download /tmp/geoserver $CATALINA_HOME/webapps/geoserver RUN mv $CATALINA_HOME/webapps/geoserver/WEB-INF/lib/marlin-*.jar $CATALINA_HOME/lib/marlin.jar \ && mkdir -p $GEOSERVER_DATA_DIR +RUN mv $CATALINA_HOME/webapps/geoserver/WEB-INF/lib/postgresql-*.jar $CATALINA_HOME/lib/ + COPY $GS_DATA_PATH $GEOSERVER_DATA_DIR COPY $ADDITIONAL_LIBS_PATH $GEOSERVER_LIB_DIR COPY $ADDITIONAL_FONTS_PATH /usr/share/fonts/truetype/ @@ -111,6 +116,9 @@ COPY $ADDITIONAL_FONTS_PATH /usr/share/fonts/truetype/ # cleanup RUN rm -rf /tmp/* +# Add default configs +ADD config $CONFIG_DIR + # copy scripts COPY *.sh /opt/ RUN chmod +x /opt/*.sh diff --git a/README.md b/README.md index 950f62a..436856b 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,22 @@ docker run -it -p 80:8080 \ **Note:** Do not change the target value! + +## How to enable a PostgreSQL JNDI resource? + +To enable a PostgreSQL JNDI resource, provide the following environment variables: + +* ``POSTGRES_JNDI_ENABLED`` to ``true`` +* ``POSTGRES_HOST`` +* ``POSTGRES_PORT`` (optional; defaults to 5432) +* ``POSTGRES_DB`` +* ``POSTGRES_USERNAME`` +* ``POSTGRES_PASSWORD`` +* ``POSTGRES_JNDI_RESOURCE_NAME`` (optional; defaults to ``java:comp/env/jdbc/postgres``) + +For advanced customization of the connection pool, you can provide your own customized "context.xml" +file to Apache Tomcat by mounting it to the container at ``/opt/config_overrides/context.xml``. + ## How to use the docker-compose demo? The ``docker-compose-demo.yml`` to build with your own data directory and extensions. diff --git a/config/context.xml b/config/context.xml new file mode 100644 index 0000000..4b1a5ff --- /dev/null +++ b/config/context.xml @@ -0,0 +1,20 @@ + + + \ No newline at end of file diff --git a/startup.sh b/startup.sh index 7f008b7..8578ecd 100755 --- a/startup.sh +++ b/startup.sh @@ -90,5 +90,26 @@ if [ "${CORS_ENABLED}" = "true" ]; then fi fi +if [ "${POSTGRES_JNDI_ENABLED}" = "true" ]; then + + # Set up some default values + if [ -z "${POSTGRES_JNDI_RESOURCE_NAME}" ]; then + export POSTGRES_JNDI_RESOURCE_NAME="java:comp/env/jdbc/postgres" + fi + if [ -z "${POSTGRES_PORT}" ]; then + export POSTGRES_PORT="5432" + fi + + # Use a custom "context.xml" if the user mounted one into the container + if [ -d "${CONFIG_OVERRIDES_DIR}" ] && [ -f "${CONFIG_OVERRIDES_DIR}/context.xml" ]; then + echo "Installing configuration override for context.xml with substituted environment variables" + envsubst < "${CONFIG_OVERRIDES_DIR}"/context.xml > "${CATALINA_HOME}/conf/context.xml" + else + # Otherwise use the default + echo "Installing default context.xml with substituted environment variables" + envsubst < "${CONFIG_DIR}"/context.xml > "${CATALINA_HOME}/conf/context.xml" + fi +fi + # start the tomcat exec $CATALINA_HOME/bin/catalina.sh run