diff --git a/Dockerfile b/Dockerfile index f465b0d..d1d756c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,48 @@ -FROM ubuntu:22.04 as tomcat +FROM tomcat:9.0.85-jre11-temurin-jammy +LABEL vendor="osgeo.org" -ARG TOMCAT_VERSION=9.0.84 -ARG CORS_ENABLED=false -ARG CORS_ALLOWED_ORIGINS=* -ARG CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,HEAD,OPTIONS +# Build arguments +ARG ADDITIONAL_FONTS_PATH=./additional_fonts/ +ARG ADDITIONAL_LIBS_PATH=./additional_libs/ +ARG COMMUNITY_PLUGIN_URL='' ARG CORS_ALLOWED_HEADERS=* +ARG CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,HEAD,OPTIONS +ARG CORS_ALLOWED_ORIGINS=* ARG CORS_ALLOW_CREDENTIALS=false +ARG CORS_ENABLED=false +ARG GS_BUILD=release +ARG GS_DATA_PATH=./geoserver_data/ +ARG GS_VERSION=2.24.2 +ARG STABLE_PLUGIN_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/extensions +ARG WAR_ZIP_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/geoserver-${GS_VERSION}-war.zip # Environment variables -ENV CATALINA_HOME=/opt/apache-tomcat-${TOMCAT_VERSION} -ENV EXTRA_JAVA_OPTS="-Xms256m -Xmx1g" -ENV CORS_ENABLED=$CORS_ENABLED -ENV CORS_ALLOWED_ORIGINS=$CORS_ALLOWED_ORIGINS -ENV CORS_ALLOWED_METHODS=$CORS_ALLOWED_METHODS +ENV ADDITIONAL_FONTS_DIR=/opt/additional_fonts/ +ENV ADDITIONAL_LIBS_DIR=/opt/additional_libs/ +ENV CATALINA_HOME=$CATALINA_HOME +ENV COMMUNITY_EXTENSIONS='' +ENV COMMUNITY_PLUGIN_URL=$COMMUNITY_PLUGIN_URL +ENV CONFIG_DIR=/opt/config +ENV CONFIG_OVERRIDES_DIR=/opt/config_overrides ENV CORS_ALLOWED_HEADERS=$CORS_ALLOWED_HEADERS +ENV CORS_ALLOWED_METHODS=$CORS_ALLOWED_METHODS +ENV CORS_ALLOWED_ORIGINS=$CORS_ALLOWED_ORIGINS ENV CORS_ALLOW_CREDENTIALS=$CORS_ALLOW_CREDENTIALS -ENV DEBIAN_FRONTEND=noninteractive +ENV CORS_ENABLED=$CORS_ENABLED +ENV EXTRA_JAVA_OPTS="-Xms256m -Xmx1g" +ENV GEOSERVER_BUILD=$GS_BUILD +ENV GEOSERVER_DATA_DIR=/opt/geoserver_data/ +ENV GEOSERVER_LIB_DIR=$CATALINA_HOME/webapps/geoserver/WEB-INF/lib/ +ENV GEOSERVER_REQUIRE_FILE=$GEOSERVER_DATA_DIR/global.xml +ENV GEOSERVER_VERSION=$GS_VERSION +ENV HEALTHCHECK_URL=http://localhost:8080/geoserver/web/wicket/resource/org.geoserver.web.GeoServerBasePage/img/logo.png +ENV INSTALL_EXTENSIONS=false +ENV POSTGRES_JNDI_ENABLED=false +ENV ROOT_WEBAPP_REDIRECT=false +ENV SKIP_DEMO_DATA=false +ENV STABLE_EXTENSIONS='' +ENV STABLE_PLUGIN_URL=$STABLE_PLUGIN_URL +ENV WAR_ZIP_URL=$WAR_ZIP_URL # see https://docs.geoserver.org/stable/en/user/production/container.html ENV CATALINA_OPTS="\$EXTRA_JAVA_OPTS \ @@ -28,98 +55,32 @@ ENV CATALINA_OPTS="\$EXTRA_JAVA_OPTS \ -Dsun.java2d.renderer=sun.java2d.marlin.DMarlinRenderingEngine \ -Dorg.geotools.coverage.jaiext.enabled=true" -# init -RUN apt update \ - && apt -y upgrade \ - && 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/* - -WORKDIR /opt/ - -RUN wget -q https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz \ - && tar xf apache-tomcat-${TOMCAT_VERSION}.tar.gz \ - && rm apache-tomcat-${TOMCAT_VERSION}.tar.gz \ - && rm -rf /opt/apache-tomcat-${TOMCAT_VERSION}/webapps/ROOT \ - && rm -rf /opt/apache-tomcat-${TOMCAT_VERSION}/webapps/docs \ - && rm -rf /opt/apache-tomcat-${TOMCAT_VERSION}/webapps/examples \ - && rm -rf /opt/apache-tomcat-${TOMCAT_VERSION}/webapps/host-manager \ - && rm -rf /opt/apache-tomcat-${TOMCAT_VERSION}/webapps/manager - -# cleanup -RUN apt purge -y \ - && apt autoremove --purge -y \ - && rm -rf /var/lib/apt/lists/* \ - && rm -rf /tmp/* - -FROM tomcat as download - -ARG GS_VERSION=2.24.1 -ARG GS_BUILD=release -ARG WAR_ZIP_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/geoserver-${GS_VERSION}-war.zip -ENV GEOSERVER_VERSION=$GS_VERSION -ENV GEOSERVER_BUILD=$GS_BUILD - WORKDIR /tmp -RUN echo "Downloading GeoServer ${GS_VERSION} ${GS_BUILD}" \ +# Install dependencies and download geoserver +RUN set -eux \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install -y --no-install-recommends openssl unzip curl gettext \ + && apt-get clean \ + && rm -rf /var/cache/apt/* \ + && rm -rf /var/lib/apt/lists/* \ + && echo "Downloading GeoServer ${GS_VERSION} ${GS_BUILD}" \ && wget -q -O /tmp/geoserver.zip $WAR_ZIP_URL \ && unzip geoserver.zip geoserver.war -d /tmp/ \ && unzip -q /tmp/geoserver.war -d /tmp/geoserver \ - && rm /tmp/geoserver.war - -FROM tomcat as install - -ARG GS_VERSION=2.24.1 -ARG GS_BUILD=release -ARG STABLE_PLUGIN_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/extensions -ARG COMMUNITY_PLUGIN_URL='' - -ARG GS_DATA_PATH=./geoserver_data/ -ARG ADDITIONAL_LIBS_PATH=./additional_libs/ -ARG ADDITIONAL_FONTS_PATH=./additional_fonts/ - -ENV GEOSERVER_VERSION=$GS_VERSION -ENV GEOSERVER_BUILD=$GS_BUILD -ENV GEOSERVER_DATA_DIR=/opt/geoserver_data/ -ENV GEOSERVER_REQUIRE_FILE=$GEOSERVER_DATA_DIR/global.xml -ENV GEOSERVER_LIB_DIR=$CATALINA_HOME/webapps/geoserver/WEB-INF/lib/ -ENV INSTALL_EXTENSIONS=false -ENV WAR_ZIP_URL=$WAR_ZIP_URL -ENV STABLE_EXTENSIONS='' -ENV STABLE_PLUGIN_URL=$STABLE_PLUGIN_URL -ENV COMMUNITY_EXTENSIONS='' -ENV COMMUNITY_PLUGIN_URL=$COMMUNITY_PLUGIN_URL -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 -ENV HEALTHCHECK_URL=http://localhost:8080/geoserver/web/wicket/resource/org.geoserver.web.GeoServerBasePage/img/logo.png - -EXPOSE 8080 - -WORKDIR /tmp - -RUN echo "Installing GeoServer $GS_VERSION $GS_BUILD" - -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/ + && rm /tmp/geoserver.war \ + && echo "Installing GeoServer $GS_VERSION $GS_BUILD" \ + && mv /tmp/geoserver $CATALINA_HOME/webapps/geoserver \ + && mv $CATALINA_HOME/webapps/geoserver/WEB-INF/lib/marlin-*.jar $CATALINA_HOME/lib/marlin.jar \ + && mv $CATALINA_HOME/webapps/geoserver/WEB-INF/lib/postgresql-*.jar $CATALINA_HOME/lib/ \ + && mkdir -p $GEOSERVER_DATA_DIR +# Copy data and additional libs / fonts COPY $GS_DATA_PATH $GEOSERVER_DATA_DIR COPY $ADDITIONAL_LIBS_PATH $GEOSERVER_LIB_DIR COPY $ADDITIONAL_FONTS_PATH /usr/share/fonts/truetype/ -# cleanup -RUN rm -rf /tmp/* - # Add default configs COPY config $CONFIG_DIR @@ -151,9 +112,21 @@ RUN chmod +x /opt/*.sh \ USER geoserver -ENTRYPOINT ["/opt/startup.sh"] +# cleanup +RUN apt purge -y \ + && apt autoremove --purge -y \ + && rm -rf /tmp/ \ + && rm -rf $CATALINA_HOME/webapps/ROOT \ + && rm -rf $CATALINA_HOME/webapps/docs \ + && rm -rf $CATALINA_HOME/webapps/examples \ + && rm -rf $CATALINA_HOME/webapps/host-manager \ + && rm -rf $CATALINA_HOME/webapps/manager WORKDIR /opt +ENTRYPOINT ["/opt/startup.sh"] + +EXPOSE 8080 + HEALTHCHECK --interval=1m --timeout=20s --retries=3 \ CMD curl --fail $HEALTHCHECK_URL || exit 1 diff --git a/README.md b/README.md index 01a809e..44bbbb5 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,6 @@ Following is the list of the all the environment variables that can be passed do | VAR NAME | DESCRIPTION | SAMPLE VALUE | |--------------|-----------|------------| | PATH | Used by geoserver internally to find all the libs | `/usr/local/sbin:/usr/local/bin:` | -| CATALINA_HOME | CATALINA home path | `/opt/apache-tomcat-9.0.75` | | EXTRA_JAVA_OPTS | Used to pass params to the JAVA environment. Check [ref](https://docs.oracle.com/en/java/javase/11/tools/java.html) | `-Xms256m -Xmx1g` | | CORS_ENABLED | CORS enabled configuration | `false` | | CORS_ALLOWED_ORIGINS | CORS origins configuration | `*` |