Migrating from GeoServer Cloud 2.28.x to 3.0.0¶
This guide outlines the key configuration changes when upgrading from GeoServer Cloud 2.28.x to 3.0.0.
Important Note: All configuration changes described in this document are already incorporated as the new defaults in each GeoServer Docker image's
/etc/geoserverexternalized configuration files. You only need to adjust these settings if you were using custom configurations that differ from the defaults.
Overview¶
This is a major version upgrade with significant changes:
| Component | 2.28.x | 3.0.0 |
|---|---|---|
| Spring Boot | 2.7.x | 3.5.x |
| GeoServer | 2.28.x | 3.0.x |
| Java (minimum) | 11 | 17+ |
Breaking Changes¶
Docker Compose Profile Configuration¶
Breaking Change: The config-first profile is no longer included by default in the base service templates.
If you are using the Spring Cloud Config Server (config-first bootstrap approach) with custom Docker Compose files, you must explicitly add the config-first profile:
This change affects all GeoServer microservices (wms, wfs, wcs, wps, gwc, restconfig, webui) and the gateway when using centralized configuration.
Example from the documentation compose files:
x-variables:
environment: &common_env
SPRING_PROFILES_INCLUDE: config-first
SPRING_PROFILES_ACTIVE: datadir
# ... other environment variables
Removed: JDBC Config Backend¶
The JDBC Config backend has been completely removed from GeoServer Cloud 3.0.0. If you are currently using the jdbcconfig profile, you must migrate to one of the supported backends:
- Data Directory (
datadirprofile): Traditional file-based configuration storage - PostgreSQL (
pgconfigprofile): Database-backed configuration with full clustering support
Migration path:
- Export your current configuration using the GeoServer REST API or Web UI
- Set up your new backend (datadir or pgconfig)
- Import the configuration into the new backend
- Update your Docker Compose or Kubernetes configuration to use the new profile
Configuration Property Changes¶
Spring Cloud Gateway Properties¶
Spring Boot 3 includes a major upgrade to Spring Cloud Gateway. The gateway configuration namespace has changed:
Old Structure (2.28.x)¶
spring:
cloud:
gateway:
routes:
- id: wms
uri: lb://wms-service
predicates:
- Path=/geoserver/wms/**
New Structure (3.0.0)¶
spring:
cloud:
gateway:
server:
webflux:
routes:
- id: wms
uri: lb://wms-service
predicates:
- Path=/geoserver/wms/**
ACL Client Configuration¶
The GeoServer ACL client configuration property has been renamed for consistency:
| Old Property (2.28.x) | New Property (3.0.0) |
|---|---|
geoserver.acl.enabled | geoserver.acl.client.enabled |
Example:
HTTP Client Migration¶
GeoServer Cloud 3.0.0 has migrated from commons-httpclient to Apache HttpClient 5. If you have custom HTTP proxy configurations or custom HTTP client code, update your imports:
| Old Package | New Package |
|---|---|
org.apache.commons.httpclient.* | org.apache.hc.client5.http.* |
Migration Steps¶
To migrate from GeoServer Cloud 2.28.x to 3.0.0:
-
Update Java Version: Ensure your deployment environment uses Java 17 or later.
-
Add Config-First Profile (if using Spring Cloud Config Server): Add
SPRING_PROFILES_INCLUDE: config-firstto all GeoServer service environment variables in your Docker Compose or Kubernetes configuration. -
Migrate from JDBC Config (if applicable): Export your configuration and migrate to either
datadirorpgconfigbackend. -
Update Gateway Configurations (if customized): Move gateway route configurations from
spring.cloud.gatewaytospring.cloud.gateway.server.webflux. -
Update ACL Configuration (if customized): Rename
geoserver.acl.enabledtogeoserver.acl.client.enabled. -
Update HTTP Client Code (if customized): Migrate any custom HTTP client code from commons-httpclient to Apache HttpClient 5.
-
Test Your Deployment: Verify all services start correctly and OWS endpoints respond as expected.
Known Issues¶
REST API Style Uploads¶
REST API style uploads using path extensions (.sld, .css, etc.) may not work correctly due to Spring Boot 3 removing suffix pattern matching by default. This requires an upstream GeoServer fix.
Workaround: Use the Content-Type header instead of file extensions when uploading styles via the REST API.
Developer Notes¶
For developers building custom extensions or running tests:
Test Framework Changes¶
Spring Boot 3 has deprecated @MockBean in favor of @MockitoBean:
// Old (2.28.x)
@MockBean
private SomeService someService;
// New (3.0.0)
@MockitoBean
private SomeService someService;
Additional Notes¶
- The Docker images include all configuration changes by default in
/etc/geoserver - Service names in gateway routes have been shortened for consistency
- All Spring Cloud dependencies have been upgraded to be compatible with Spring Boot 3.5
- If using custom externalized configuration files, review the geoserver-cloud-config repository for the complete set of changes