Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
480d45c
Refactor code
NyakudyaA Jan 8, 2026
5043319
fix scripts
NyakudyaA Jan 8, 2026
25e1cb0
update to use functions
NyakudyaA Jan 12, 2026
a74e13e
remove functions
NyakudyaA Jan 12, 2026
e4551d3
fix sourcing of env files
NyakudyaA Jan 12, 2026
30469b9
fix version upgade
NyakudyaA Jan 13, 2026
fbd5dc0
fix sourcing script
NyakudyaA Jan 13, 2026
63f624c
add directories
NyakudyaA Jan 13, 2026
acfe99c
add utils code
NyakudyaA Jan 13, 2026
e7c22c0
fix startup order
NyakudyaA Jan 16, 2026
6584292
update password (#784)
NyakudyaA Jan 25, 2026
dca322a
update github action to use simple curl (#785)
NyakudyaA Jan 26, 2026
c89f833
upgrade to 2.28.1 (#786)
NyakudyaA Jan 26, 2026
ccc80f2
Upgraded the GeoServer instance from version 2.28.1 to 2.28.2 (#787)
NyakudyaA Jan 27, 2026
50b2f1a
fix build action (#788)
NyakudyaA Jan 31, 2026
f91df3d
Refactor code
NyakudyaA Jan 8, 2026
7ea4f5d
fix scripts
NyakudyaA Jan 8, 2026
2a5fd7b
update to use functions
NyakudyaA Jan 12, 2026
d6885ba
remove functions
NyakudyaA Jan 12, 2026
42b9425
fix sourcing of env files
NyakudyaA Jan 12, 2026
1f29f2d
fix version upgade
NyakudyaA Jan 13, 2026
fecc4f6
fix sourcing script
NyakudyaA Jan 13, 2026
f0eb6c1
add directories
NyakudyaA Jan 13, 2026
57e13ea
add utils code
NyakudyaA Jan 13, 2026
4d3d745
Merge remote-tracking branch 'origin/refactor' into refactor
NyakudyaA Feb 1, 2026
6ed9b14
fix creating directories
NyakudyaA Feb 1, 2026
fd620a7
refactor: remove create_required_dirs function
NyakudyaA Feb 1, 2026
18f287e
fix build
NyakudyaA Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ COMPOSE_PROJECT_NAME=kartozageoserver
# ###############
# Build Arguments
# ###############
IMAGE_VERSION=9.0.109-jdk17-temurin-noble
GS_VERSION=2.28.0
IMAGE_VERSION=9.0.115-jdk17-temurin-noble
GS_VERSION=2.28.2
JAVA_HOME=/opt/java/openjdk
WAR_URL=http://downloads.sourceforge.net/project/geoserver/GeoServer/2.28.0/geoserver-2.28.0-war.zip
WAR_URL=http://downloads.sourceforge.net/project/geoserver/GeoServer/2.28.2/geoserver-2.28.2-war.zip
STABLE_PLUGIN_BASE_URL=https://sourceforge.net/projects/geoserver/files/GeoServer
GEOSERVER_UID=2000
GEOSERVER_GID=2001
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build-latest.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ jobs:
geoserverMajorVersion:
- 2
imageVersion:
- image: 9.0.109-jdk17-temurin-noble
- image: 9.0.115-jdk17-temurin-noble
javaHome: /opt/java/openjdk
geoserverMinorVersion:
- minor: 28
patch: 0
patch: 2
stablePluginBaseURL:
- https://sourceforge.net/projects/geoserver/files/GeoServer
steps:
Expand Down
25 changes: 16 additions & 9 deletions .github/workflows/deploy-image.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,20 @@ jobs:
geoserverMajorVersion:
- 2
imageVersion:
- image: 9.0.109-jdk17-temurin-noble
- image: 9.0.115-jdk17-temurin-noble
javaHome: /opt/java/openjdk
geoserverMinorVersion:
- minor: 28
patch: 0
patch: 2
stablePluginBaseURL:
# empty because it often changes, so it's better
# to use the default one described in the Dockerfile
# to make it consistent. How-ever we keep this in GH Action
# to make it easy to pass overrides in the future.
- https://sourceforge.net/projects/geoserver/files/GeoServer
geoserverPatchMajorVersionBugs:
# useful to also update existing broken image, defaults to no
- no
steps:
- uses: actions/checkout@v6
- name: Set up QEMU
Expand All @@ -55,12 +58,18 @@ jobs:
id: current_date
run: echo "formatted=$(date -u +%Y.%m.%d)" >> $GITHUB_OUTPUT


- name: Check if image exists on Docker Hub
id: check_hub_image_exists
shell: bash
run: |
docker login --username ${{ secrets.DOCKERHUB_USERNAME }} --password ${{ secrets.DOCKERHUB_PASSWORD }}
TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d '{"username": "'${{ secrets.DOCKERHUB_USERNAME }}'", "password": "'${{ secrets.DOCKERHUB_PASSWORD }}'"}' https://hub.docker.com/v2/users/login/ | jq -r .token)
check_image=$(curl --silent -f --head -lL https://hub.docker.com/v2/repositories/kartoza/geoserver/tags/${{ matrix.geoserverMajorVersion }}-${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}/ | head -n 1 | cut -d ' ' -f2) >> $GITHUB_OUTPUT
set -e

status=$(curl -s -o /dev/null -w "%{http_code}" \
https://hub.docker.com/v2/repositories/kartoza/geoserver/tags/${{ matrix.geoserverMajorVersion }}-${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}/
)

echo "check_image=$status" >> "$GITHUB_OUTPUT"

- name: Build prod image
if: |
Expand All @@ -79,7 +88,7 @@ jobs:
push: true
tags: |
${{ secrets.DOCKERHUB_REPO }}/geoserver
${{ steps.check_hub_image_exists.outputs.check_image == 200 && format('{0}/geoserver:{1}.{2}.{3}', secrets.DOCKERHUB_REPO, matrix.geoserverMajorVersion, matrix.geoserverMinorVersion.minor, matrix.geoserverMinorVersion.patch) || null}}
${{ ( steps.check_hub_image_exists.outputs.check_image != 200 || matrix.geoserverPatchMajorVersionBugs == 'yes' ) && format('{0}/geoserver:{1}.{2}.{3}', secrets.DOCKERHUB_REPO, matrix.geoserverMajorVersion, matrix.geoserverMinorVersion.minor, matrix.geoserverMinorVersion.patch) || null}}
${{ secrets.DOCKERHUB_REPO }}/geoserver:${{ matrix.geoserverMajorVersion }}.${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}
${{ secrets.DOCKERHUB_REPO }}/geoserver:${{ matrix.geoserverMajorVersion }}.${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}--v${{ steps.current_date.outputs.formatted }}
build-args: |
Expand All @@ -89,9 +98,7 @@ jobs:
WAR_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${{ matrix.geoserverMajorVersion }}.${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}/geoserver-${{ matrix.geoserverMajorVersion }}.${{ matrix.geoserverMinorVersion.minor }}.${{ matrix.geoserverMinorVersion.patch }}-war.zip
STABLE_PLUGIN_BASE_URL=${{ matrix.stablePluginBaseURL }}
cache-from: |
type=gha,scope=test
type=gha,scope=prod
cache-to: type=gha,scope=prod
target: geoserver-prod

publish_release_artifacts:
Expand All @@ -110,7 +117,7 @@ jobs:
- 2
geoserverMinorVersion:
- minor: 28
patch: 0
patch: 2
steps:
- name: Checkout code
id: git_checkout
Expand Down
9 changes: 4 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

#--------- Generic stuff all our Dockerfiles should start with so we get caching ------------
ARG IMAGE_VERSION=9.0.109-jdk17-temurin-noble
ARG IMAGE_VERSION=9.0.115-jdk17-temurin-noble
ARG JAVA_HOME=/opt/java/openjdk
#TODO we need a way to predetermine the gdal version in the tomcat image so as to match it
ARG GDAL_VERSION=3.8.4
Expand Down Expand Up @@ -28,7 +28,7 @@ FROM --platform=$BUILDPLATFORM ghcr.io/osgeo/gdal:ubuntu-full-${GDAL_VERSION} AS
# alpine because it's smaller.

FROM --platform=$BUILDPLATFORM python:alpine3.20 AS geoserver-plugin-downloader
ARG GS_VERSION=2.28.0
ARG GS_VERSION=2.28.2
ARG STABLE_PLUGIN_BASE_URL=https://sourceforge.net/projects/geoserver/files/GeoServer
ARG WAR_URL=https://downloads.sourceforge.net/project/geoserver/GeoServer/${GS_VERSION}/geoserver-${GS_VERSION}-war.zip
ENV OTEL_VERSION=v2.17.1
Expand Down Expand Up @@ -57,7 +57,7 @@ RUN /work/plugin_download.sh
FROM tomcat:$IMAGE_VERSION AS geoserver-prod

LABEL maintainer="Tim Sutton<tim@linfiniti.com>"
ARG GS_VERSION=2.28.0
ARG GS_VERSION=2.28.2
ARG STABLE_PLUGIN_BASE_URL=https://sourceforge.net/projects/geoserver/files/GeoServer
ARG HTTPS_PORT=8443
ARG GDAL_LIBS_PATH="/usr/lib/x86_64-linux-gnu"
Expand All @@ -75,7 +75,6 @@ RUN set -eux; \
dpkg-divert --local --rename --add /sbin/initctl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*; \
# verify that the binary works
gosu nobody true

# copy gdal java bindings
Expand Down Expand Up @@ -136,7 +135,7 @@ RUN ldconfig


RUN echo ${GS_VERSION} > /scripts/geoserver_version.txt && echo ${STABLE_PLUGIN_BASE_URL} > /scripts/geoserver_gs_url.txt ;\
chmod +x /scripts/*.sh;/scripts/setup.sh \
chmod +x /scripts/*.sh;chmod +x /scripts/lib/*.sh;/scripts/lib/setup.sh \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*


Expand Down
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ The preferred way (but using the most bandwidth for the initial image) is to
get our docker-trusted build like this:

```shell
VERSION=2.28.0
VERSION=2.28.2
docker pull kartoza/geoserver:$VERSION
```

Expand Down Expand Up @@ -105,15 +105,15 @@ See the [dockerhub tomcat](https://hub.docker.com/_/tomcat/)
for available tags.

```
VERSION=2.28.0
VERSION=2.28.2
IMAGE_VERSION=9.0.99-jdk11-temurin-noble
docker build --build-arg IMAGE_VERSION=${IMAGE_VERSION} --build-arg GS_VERSION=${VERSION} -t kartoza/geoserver:${VERSION} .
```

For some recent builds, it is necessary to set the JAVA_PATH as well (e.g. Apache Tomcat/9.0.36)

```
docker build --build-arg IMAGE_VERSION=9.0.99-jdk11-temurin-noble --build-arg JAVA_HOME=/usr/local/openjdk-11/bin/java --build-arg GS_VERSION=2.28.0 -t kartoza/geoserver:2.28.0 .
docker build --build-arg IMAGE_VERSION=9.0.99-jdk11-temurin-noble --build-arg JAVA_HOME=/usr/local/openjdk-11/bin/java --build-arg GS_VERSION=2.28.2 -t kartoza/geoserver:2.28.2 .
```

**Note:** Please check the [GeoServer documentation](https://docs.geoserver.org/stable/en/user/production/index.html)
Expand Down Expand Up @@ -200,22 +200,22 @@ will be enabled : [list of default plugins](https://github.com/kartoza/docker-ge
#### Activate stable extensions during the contain startup

The environment variable `STABLE_EXTENSIONS` is used to activate extensions listed in
[stable_plugins](https://sourceforge.net/projects/geoserver/files/GeoServer/2.28.0/extensions/)
[stable_plugins](https://sourceforge.net/projects/geoserver/files/GeoServer/2.28.2/extensions/)

**Note:** The plugins listed in the url is of the format `geoserver-2.28.0-wps-plugin.zip`, but the env
**Note:** The plugins listed in the url is of the format `geoserver-2.28.2-wps-plugin.zip`, but the env
variable expects the env to be of the format `wps-plugin`. Always consult the url to see which plugins
are available. The text file [stable_plugins.txt](https://github.com/kartoza/docker-geoserver/blob/master/build_data/stable_plugins.txt)
contains a curated list of plugins but might be out of date in some cases.

Example

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -d -p 8600:8080 --name geoserver -e STABLE_EXTENSIONS=charts-plugin,db2-plugin kartoza/geoserver:${VERSION}

```

You can pass any comma-separated extensions as defined in [stable_plugins](https://sourceforge.net/projects/geoserver/files/GeoServer/2.28.0/extensions/)
You can pass any comma-separated extensions as defined in [stable_plugins](https://sourceforge.net/projects/geoserver/files/GeoServer/2.28.2/extensions/)

#### Activate community extensions during contain startup

Expand All @@ -230,7 +230,7 @@ contains a curated list of community plugins but might be out of date in some ca
Example

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -d -p 8600:8080 --name geoserver -e COMMUNITY_EXTENSIONS=gwc-sqlite-plugin,ogr-datastore-plugin kartoza/geoserver:${VERSION}
```

Expand All @@ -246,7 +246,7 @@ following the guidelines from [GeoServer develop guidelines](https://docs.geoser
The image ships with sample data. This can be used to familiarize yourself with GeoServer. This is not activated by default. You can activate it using the environment variable `boolean SAMPLE_DATA`.

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -d -p 8600:8080 --name geoserver -e SAMPLE_DATA=true kartoza/geoserver:${VERSION}
```

Expand Down Expand Up @@ -317,14 +317,14 @@ If you set the environment variable `SSL=true` but do not provide the pem files
the container will generate self-signed SSL certificates.

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -it --name geoserver -e PKCS12_PASSWORD=geoserver -e JKS_KEY_PASSWORD=geoserver -e JKS_STORE_PASSWORD=geoserver -e SSL=true -p 8443:8443 -p 8600:8080 kartoza/geoserver:${VERSION}
```

If you already have your pem files (`fullchain.pem` and `privkey.pem`) you can mount the directory containing your keys as:

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -it --name geoserver -v /etc/certs:/etc/certs -e PKCS12_PASSWORD=geoserver -e JKS_KEY_PASSWORD=geoserver -e JKS_STORE_PASSWORD=geoserver -e SSL=true -p 8443:8443 -p 8600:8080 kartoza/geoserver:${VERSION}

```
Expand Down Expand Up @@ -381,7 +381,7 @@ To include Tomcat extras including docs, examples, and the manager web app, set
to use a strong password otherwise a randomly generated password is used.

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -it --name geoserver -e TOMCAT_EXTRAS=true -p 8600:8080 kartoza/geoserver:${VERSION}
```

Expand All @@ -406,7 +406,7 @@ If you have downloaded extra fonts you can mount the folder to the path
path during initialisation. This is useful for styling layers i.e. labeling using specific fonts.

```
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -v fonts:/opt/fonts -p 8080:8080 -t kartoza/geoserver:${VERSION}
```

Expand All @@ -417,7 +417,7 @@ You can use the environment variable `GOOGLE_FONTS_NAMES` to activate fonts defi
i.e.

```bash
ie VERSION=2.28.0
ie VERSION=2.28.2
docker run -e GOOGLE_FONTS_NAMES=actor,akronim -p 8080:8080 -t kartoza/geoserver:${VERSION}
```

Expand Down
43 changes: 0 additions & 43 deletions build_data/broker.xml

This file was deleted.

15 changes: 0 additions & 15 deletions build_data/cluster.properties

This file was deleted.

10 changes: 0 additions & 10 deletions build_data/controlflow.properties

This file was deleted.

11 changes: 0 additions & 11 deletions build_data/embedded-broker.properties

This file was deleted.

13 changes: 0 additions & 13 deletions build_data/geowebcache-diskquota-jdbc.xml

This file was deleted.

12 changes: 0 additions & 12 deletions build_data/geowebcache-diskquota.xml

This file was deleted.

Loading
Loading