-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GEOS-11555: fix installation of extensions in various configurations #102
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -98,7 +98,8 @@ The environment variable `ROOT_WEBAPP_REDIRECT` can be set to `true` to issue a | |
|
||
The ``startup.sh`` script allows some customization on startup: | ||
|
||
* ``INSTALL_EXTENSIONS`` to ``true`` to download and install extensions | ||
* ``DOWNLOAD_EXTENSIONS`` to ``true`` to download extensions from build server | ||
* ``INSTALL_EXTENSIONS`` to ``true`` to install extensions from the ``/opt/additional_libs`` directory | ||
* ``STABLE_EXTENSIONS`` list of extensions to download and install | ||
* ``CORS_ENABLED`` to ``true`` to enable CORS support. The following environment variables can be used to customize the CORS configuration. | ||
* ``CORS_ALLOWED_ORIGINS`` (default ``*``) | ||
|
@@ -115,7 +116,7 @@ Example installing wps and ysld extensions: | |
|
||
```shell | ||
docker run -it -p 80:8080 \ | ||
--env INSTALL_EXTENSIONS=true --env STABLE_EXTENSIONS="wps,ysld" \ | ||
--env DOWNLOAD_EXTENSIONS=true --env INSTALL_EXTENSIONS=true --env STABLE_EXTENSIONS="wps,ysld" \ | ||
docker.osgeo.org/geoserver:2.25.3 | ||
``` | ||
|
||
|
@@ -199,6 +200,19 @@ variables: | |
* ``HTTPS_KEYSTORE_PASSWORD`` (defaults to `changeit`) | ||
* ``HTTPS_KEY_ALIAS`` (defaults to `server`) | ||
|
||
## How to add community extensions? | ||
|
||
To add community extensions, set the `COMMUNITY_EXTENSIONS` environment variable to a comma-separated list of extensions to install. | ||
|
||
If you add community extensions on an official release you will see the following warning: | ||
|
||
`WARNING: Installing community extensions on an official release version. Be sure to check compatibility.` | ||
|
||
Community modules have not yet met the requirements for production use. Developers have shared these to attract participation, feedback and funding. | ||
You an add them on your own risk. Please make sure to check the compatibility of the community modules with the GeoServer version you are using. | ||
In case of an issue make sure to report the usage of community modules in the issue descriptions. | ||
|
||
|
||
## How to use the docker-compose demo? | ||
|
||
The ``docker-compose-demo.yml`` to build with your own data directory and extensions. | ||
|
@@ -226,25 +240,25 @@ Following is the list of the all the environment variables that can be passed do | |
| CATALINA_OPTS | Catalina options. Check [ref](https://www.baeldung.com/tomcat-catalina_opts-vs-java_opts) | `-Djava.awt.headless=true` | | ||
| GEOSERVER_DATA_DIR | Geoserver data directory location | `/opt/geoserver_data/` | | ||
| GEOSERVER_REQUIRE_FILE | Geoserver configuration used interally | `/opt/geoserver_data/global.xml` | | ||
| INSTALL_EXTENSIONS | Indicates whether additional GeoServer extensions should be installed | `false` | | ||
| DOWNLOAD_EXTENSIONS | Indicates whether additional GeoServer extensions should be installed | `false` | | ||
| INSTALL_EXTENSIONS | Indicates whether additional GeoServer extensions should be installed | `true` | | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The description of |
||
| WAR_ZIP_URL | Specifies the URL for a GeoServer Web Archive (WAR) file | | | ||
| STABLE_EXTENSIONS | Specifies stable GeoServer extensions | | | ||
| STABLE_PLUGIN_URL | Specifies the URL for downloading the latest stable GeoServer plugins | `https://build.geoserver.org/geoserver/2.25.x/ext-latest` | | ||
| COMMUNITY_EXTENSIONS | Specifies community-contributed GeoServer extensions | | | ||
| COMMUNITY_PLUGIN_URL | Specifies the URL for downloading the latest community-contributed GeoServer plugins | `https://build.geoserver.org/geoserver/2.25.x/community-latest` | | ||
| COMMUNITY_PLUGIN_BASE_URL | Specifies the **base** URL for downloading the latest community-contributed GeoServer plugins. | `https://build.geoserver.org/geoserver` | | | ||
| COMMUNITY_PLUGIN_URL | Specifies the URL for downloading the latest community-contributed GeoServer plugins defaults to `${COMMUNITY_PLUGIN_BASE_URL}/${GEOSERVER_RELEASE_BRANCH}/community-latest` | | ||
| ADDITIONAL_LIBS_DIR | Sets the directory for additional libraries used by GeoServer | `/opt/additional_libs/` | | ||
| ADDITIONAL_FONTS_DIR | Sets the directory for additional fonts used by GeoServer | `/opt/additional_fonts/` | | ||
| SKIP_DEMO_DATA | Indicates whether to skip the installation of demo data provided by GeoServer | `false` | | ||
| ROOT_WEBAPP_REDIRECT | Indicates whether to issue a permanent redirect to the web interface | `false` | | ||
| HEALTHCHECK_URL | URL to the resource / endpoint used for `docker` health checks | `http://localhost:8080/geoserver/web/wicket/resource/org.geoserver.web.GeoServerBasePage/img/logo.png` | | ||
| GEOSERVER_ADMIN_USER | Admin username | | | ||
| GEOSERVER_ADMIN_PASSWORD | Admin password | | | ||
|
||
The following values cannot really be safely changed (as they are used to download extensions and community modules as the docker image first starts up). | ||
| VAR NAME | DESCRIPTION | SAMPLE VALUE | | ||
|--------------|-----------|------------| | ||
| WGET_OPTS | Options for the `wget` command in case you need some (unset by default)| `--no-check-certificate` | | ||
| GEOSERVER_VERSION | Geoserver version (used internally) | `2.24-SNAPSHOT`| | ||
| GEOSERVER_BUILD | Geoserver build (used internally) | `1628` | | ||
| GEOSERVER_RELEASE_BRANCH | Geoserver release branch (used internally) is derived from GEOSERVER_VERSION | `2.24.x` or `main` | | ||
| GEOSERVER_BUILD | Geoserver build (used internally) must not be changed| `1628` | | ||
|
||
## Troubleshooting | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,51 +4,100 @@ | |
function download_extension() { | ||
URL=$1 | ||
EXTENSION=$2 | ||
DOWNLOAD_FILE="${ADDITIONAL_LIBS_DIR}geoserver-${GEOSERVER_VERSION}-${EXTENSION}-plugin.zip" | ||
VERSION=$3 | ||
DOWNLOAD_FILE="${ADDITIONAL_LIBS_DIR}geoserver-${VERSION}-${EXTENSION}-plugin.zip" | ||
|
||
if [ -e "$DOWNLOAD_FILE" ]; then | ||
echo "$DOWNLOAD_FILE already exists. Skipping download." | ||
else | ||
if curl --output /dev/null --silent --head --fail "${URL}"; then | ||
echo -e "\nDownloading ${EXTENSION} extension from ${URL} to ${DOWNLOAD_FILE}" | ||
wget --progress=bar:force:noscroll -c --no-check-certificate "${URL}" -O ${DOWNLOAD_FILE} | ||
else | ||
echo "URL does not exist: ${URL}" | ||
echo -e "\nDownloading ${EXTENSION} extension from ${URL} to ${DOWNLOAD_FILE}" | ||
wget --progress=bar:force:noscroll -c $WGET_OPTS "${URL}" -O ${DOWNLOAD_FILE} | ||
if [ "$?" != 0 ]; then | ||
echo "ERROR downloading: ${URL}" | ||
fi | ||
fi | ||
} | ||
|
||
# Download stable plugins only if INSTALL_EXTENSIONS is true | ||
if [ "$INSTALL_EXTENSIONS" = "true" ]; then | ||
function install_lib() { | ||
ADDITIONAL_LIB=$1 | ||
if [ ! -e "$ADDITIONAL_LIB" ]; then | ||
echo "Skipping ${ADDITIONAL_LIB}: file not found." | ||
return | ||
fi | ||
|
||
if [[ $ADDITIONAL_LIB == *.zip ]]; then | ||
unzip -q -o -d ${GEOSERVER_LIB_DIR} ${ADDITIONAL_LIB} "*.jar" | ||
echo "Installed all jar files from ${ADDITIONAL_LIB}" | ||
elif [[ $ADDITIONAL_LIB == *.jar ]]; then | ||
cp ${ADDITIONAL_LIB} ${GEOSERVER_LIB_DIR} | ||
echo "Installed ${ADDITIONAL_LIB}" | ||
else | ||
echo "Skipping ${ADDITIONAL_LIB}: unknown file extension." | ||
fi | ||
} | ||
|
||
# Download plugins only if DOWNLOAD_EXTENSIONS is true | ||
if [ "$DOWNLOAD_EXTENSIONS" = "true" ]; then | ||
echo "Starting download of extensions" | ||
if [ ! -d "$ADDITIONAL_LIBS_DIR" ]; then | ||
mkdir -p $ADDITIONAL_LIBS_DIR | ||
fi | ||
for EXTENSION in $(echo "${STABLE_EXTENSIONS}" | tr ',' ' '); do | ||
URL="${STABLE_PLUGIN_URL}/geoserver-${GEOSERVER_VERSION}-${EXTENSION}-plugin.zip" | ||
download_extension ${URL} ${EXTENSION} | ||
done | ||
for EXTENSION in $(echo "${COMMUNITY_EXTENSIONS}" | tr ',' ' '); do | ||
URL="${COMMUNITY_PLUGIN_URL}/geoserver-${GEOSERVER_VERSION}-${EXTENSION}-plugin.zip" | ||
download_extension ${URL} ${EXTENSION} | ||
download_extension ${URL} ${EXTENSION} ${GEOSERVER_VERSION} | ||
done | ||
if [ ${#COMMUNITY_EXTENSIONS} -gt 0 ]; then | ||
# build community version string from GEOSERVER_VERSION by removing the last part and adding SNAPSHOT | ||
if [ -z "$COMMUNITY_EXTENSIONS_VERSION" ]; then | ||
COMMUNITY_EXTENSIONS_VERSION="${GEOSERVER_VERSION/-SNAPSHOT/.x}" | ||
COMMUNITY_EXTENSIONS_VERSION="${COMMUNITY_EXTENSIONS_VERSION%.*}-SNAPSHOT" | ||
fi | ||
COMMUNITY_PLUGIN_BASE_URL=${COMMUNITY_PLUGIN_BASE_URL:-"https://build.geoserver.org/geoserver"} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unlike others (like |
||
if [ -z "$GEOSERVER_RELEASE_BRANCH" ]; then | ||
GEOSERVER_RELEASE_BRANCH="${GEOSERVER_VERSION/-SNAPSHOT/.x}" | ||
GEOSERVER_RELEASE_BRANCH="${GEOSERVER_RELEASE_BRANCH%.*}.x" | ||
|
||
fi | ||
COMMUNITY_PLUGIN_URL=${COMMUNITY_PLUGIN_URL:-"${COMMUNITY_PLUGIN_BASE_URL}/${GEOSERVER_RELEASE_BRANCH}/community-latest/"} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. In general: wouldn't it make sense to set the meaningful/working defaults for |
||
|
||
echo "installing community modules from COMMUNITY_PLUGIN_URL=${COMMUNITY_PLUGIN_URL} with GEOSERVER_RELEASE_BRANCH=${GEOSERVER_RELEASE_BRANCH} and COMMUNITY_EXTENSIONS_VERSION=${COMMUNITY_EXTENSIONS_VERSION} from GEOSERVER_VERSION=${GEOSERVER_VERSION}" | ||
|
||
|
||
|
||
for EXTENSION in $(echo "${COMMUNITY_EXTENSIONS}" | tr ',' ' '); do | ||
URL="${COMMUNITY_PLUGIN_URL}/geoserver-${COMMUNITY_EXTENSIONS_VERSION}-${EXTENSION}-plugin.zip" | ||
# remove double slashes | ||
URL=${URL/\/\//\/} | ||
download_extension ${URL} ${EXTENSION} ${COMMUNITY_EXTENSIONS_VERSION} | ||
done | ||
fi | ||
echo "Finished download of extensions" | ||
else | ||
echo "Skipping download of extensions as DOWNLOAD_EXTENSIONS is false" | ||
fi | ||
|
||
# Install the extensions | ||
echo "Starting installation of extensions" | ||
for EXTENSION in $(echo "${STABLE_EXTENSIONS},${COMMUNITY_EXTENSIONS}" | tr ',' ' '); do | ||
ADDITIONAL_LIB=${ADDITIONAL_LIBS_DIR}geoserver-${GEOSERVER_VERSION}-${EXTENSION}-plugin.zip | ||
[ -e "$ADDITIONAL_LIB" ] || continue | ||
|
||
if [[ $ADDITIONAL_LIB == *.zip ]]; then | ||
unzip -q -o -d ${GEOSERVER_LIB_DIR} ${ADDITIONAL_LIB} "*.jar" | ||
echo "Installed all jar files from ${ADDITIONAL_LIB}" | ||
elif [[ $ADDITIONAL_LIB == *.jar ]]; then | ||
cp ${ADDITIONAL_LIB} ${GEOSERVER_LIB_DIR} | ||
echo "Installed ${ADDITIONAL_LIB}" | ||
else | ||
echo "Skipping ${ADDITIONAL_LIB}: unknown file extension." | ||
# Install the extensions only if INSTALL_EXTENSIONS is true | ||
if [ "$INSTALL_EXTENSIONS" = "true" ]; then | ||
echo "Starting installation of extensions" | ||
for EXTENSION in $(echo "${STABLE_EXTENSIONS}" | tr ',' ' '); do | ||
ADDITIONAL_LIB=${ADDITIONAL_LIBS_DIR}geoserver-${GEOSERVER_VERSION}-${EXTENSION}-plugin.zip | ||
install_lib $ADDITIONAL_LIB | ||
done | ||
if [ ${#COMMUNITY_EXTENSIONS} -gt 0 ]; then | ||
# print warning if COMMUNITY extensions are installed on an official release (where GEOSERVER_VERSION is not ending with -SNAPSHOT) | ||
if [[ ! $GEOSERVER_VERSION == *-SNAPSHOT ]]; then | ||
echo "WARNING: Installing community extensions on an official release version. Be sure to check compatibility." | ||
fi | ||
|
||
for EXTENSION in $(echo "${COMMUNITY_EXTENSIONS}" | tr ',' ' '); do | ||
if [ -z "$COMMUNITY_EXTENSIONS_VERSION" ]; then | ||
COMMUNITY_EXTENSIONS_VERSION="${GEOSERVER_VERSION%.*}-SNAPSHOT" | ||
fi | ||
ADDITIONAL_LIB=${ADDITIONAL_LIBS_DIR}geoserver-${COMMUNITY_EXTENSIONS_VERSION}-${EXTENSION}-plugin.zip | ||
install_lib $ADDITIONAL_LIB | ||
done | ||
fi | ||
done | ||
echo "Finished installation of extensions" | ||
echo "Finished installation of extensions" | ||
else | ||
echo "Skipping installation of extensions as INSTALL_EXTENSIONS is false" | ||
fi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These examples do not (yet) work as there is not (yet) a
2.27.x
folder: See https://build.geoserver.org/geoserver