geoserver-acl
GeoServer ACL is an advanced authorization system for GeoServer.
10K+
Advanced authorization system for GeoServer providing fine-grained access control for published geospatial resources.
GeoServer ACL is an independent application service that manages access rules for GeoServer, allowing administrators to define granular authorization policies based on:
GeoServer ACL works as an authorization manager that integrates with GeoServer's authentication mechanisms (Basic HTTP, OAuth2/OpenID Connect, etc.) to enforce access rules on a per-request basis.
Born as a fork of GeoFence, GeoServer ACL follows the same logic for defining data access and administrative rules, making it familiar to GeoFence users.
# Run with in-memory H2 database (development/testing only)
# Replace 3.0.0 with your desired version
docker run -p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=dev \
geoservercloud/geoserver-acl:3.0.0
Note: The H2 in-memory database is only suitable for development and testing. For production deployments, use PostgreSQL.
The service will be available at:
Create a docker-compose.yml file:
volumes:
acl_data:
services:
acldb:
image: imresamu/postgis:15-3.4
environment:
- POSTGRES_DB=acl
- POSTGRES_USER=acl
- POSTGRES_PASSWORD=acls3cr3t
volumes:
- acl_data:/var/lib/postgresql/data
restart: always
ports:
- 6432:5432
healthcheck:
test: ["CMD-SHELL", "pg_isready -U acl"]
interval: 5s
timeout: 5s
retries: 5
deploy:
resources:
limits:
cpus: '4.0'
memory: 2G
acl:
image: geoservercloud/geoserver-acl:${TAG:-3.0.0}
environment:
- PG_HOST=acldb
- PG_PORT=5432
- PG_DB=acl
- PG_SCHEMA=acl
- PG_USER=acl
- PG_PASSWORD=acls3cr3t
ports:
- 8080:8080
depends_on:
acldb:
condition: service_healthy
required: true
Then run:
# Using default version (3.0.0)
docker compose up -d
# Or specify a version
TAG=3.0.0 docker compose up -d
All configuration properties from values.yml can be overridden using environment variables with uppercase and underscores (e.g., pg.host → PG_HOST).
| Variable | Description | Default |
|---|---|---|
PG_HOST | PostgreSQL hostname | acldb |
PG_PORT | PostgreSQL port | 5432 |
PG_DB | Database name | acl |
PG_SCHEMA | Database schema | acl |
PG_USER | Database username | acl |
PG_PASSWORD | Database password | acls3cr3t |
PG_POOL_MIN | Minimum connection pool size | 2 |
PG_POOL_MAX | Maximum connection pool size | 50 |
PG_POOL_CONNECTIONTIMEOUT | Connection timeout (ms) | 3000 |
PG_POOL_IDLETIMEOUT | Idle timeout (ms) | 60000 |
| Variable | Description | Default |
|---|---|---|
ACL_SECURITY_BASIC_ENABLED | Enable basic authentication | true |
ACL_USERS_ADMIN_ENABLED | Enable default admin user | true |
ACL_USERS_ADMIN_PASSWORD | Admin user password (bcrypt or plaintext) | See security note below |
ACL_USERS_GEOSERVER_ENABLED | Enable default geoserver user | true |
ACL_USERS_GEOSERVER_PASSWORD | GeoServer user password (bcrypt or plaintext) | See security note below |
ACL_SECURITY_HEADERS_ENABLED | Enable header-based pre-authentication | false |
ACL_SECURITY_HEADERS_USER_HEADER | Header name for username | sec-username |
ACL_SECURITY_HEADERS_ROLES_HEADER | Header name for roles | sec-roles |
ACL_SECURITY_HEADERS_ADMIN_ROLES | Roles with admin rights | ROLE_ADMINISTRATOR |
Security Note: The default admin and geoserver users have well-known default passwords. Always override these in production using environment variables or Docker secrets:
environment:
- ACL_USERS_ADMIN_PASSWORD=${ADMIN_PASSWORD}
- ACL_USERS_GEOSERVER_PASSWORD=${GEOSERVER_PASSWORD}
Or using Docker secrets:
secrets:
- acl_admin_password
- acl_geoserver_password
environment:
- ACL_USERS_ADMIN_PASSWORD_FILE=/run/secrets/acl_admin_password
- ACL_USERS_GEOSERVER_PASSWORD_FILE=/run/secrets/acl_geoserver_password
Passwords can be provided as plaintext or bcrypt-encoded (prefix with {bcrypt}).
| Variable | Description | Default |
|---|---|---|
SERVER_PORT | HTTP port | 8080 |
ACL_CACHING | Enable ACL rule caching | true |
GEOSERVER_BUS_ENABLED | Enable Spring Cloud Bus integration | false |
| Variable | Description | Default |
|---|---|---|
RABBITMQ_HOST | RabbitMQ hostname | rabbitmq |
RABBITMQ_PORT | RabbitMQ port | 5672 |
RABBITMQ_USER | RabbitMQ username | guest |
RABBITMQ_PASSWORD | RabbitMQ password | guest |
| Variable | Description |
|---|---|
SPRING_PROFILES_ACTIVE=dev | In-memory H2 database (development/testing only) |
SPRING_PROFILES_ACTIVE=logging_debug | Enable debug logging for ACL components |
SPRING_PROFILES_ACTIVE=logging_debug_events | Enable debug logging for ACL bus events |
For remote debugging, set:
JAVA_OPTS: -Xdebug -agentlib:jdwp=transport=dt_socket,address=*:15005,server=y,suspend=n
To use this ACL service with GeoServer, you need to install the GeoServer ACL plugin. The plugin is available from the same release as this Docker image.
Refer to the GeoServer ACL documentation for detailed integration instructions.
The OpenAPI REST API allows you to:
Access the interactive API documentation:
http://<host>:8080/acl/openapi/swagger-ui/index.htmlhttp://<host>:8080/acl/openapiThis image supports multiple architectures:
linux/amd64 (x86_64)linux/arm64 (aarch64)When using PostgreSQL (recommended for production), no persistent volumes are required in the container itself. All data is stored in the external PostgreSQL database. Use a volume for the PostgreSQL container to persist data:
volumes:
acl_data:
services:
acldb:
volumes:
- acl_data:/var/lib/postgresql/data
For development mode with H2, the in-memory database does not persist data between restarts. If you need persistence during development, configure a file-based H2 database (not recommended for production).
The application exposes Spring Boot Actuator endpoints:
http://localhost:8080/acl/actuator/healthhttp://localhost:8080/acl/actuator/infoImage tags follow semantic versioning. Always use specific version tags in production for reproducible deployments:
3.0.0, 2.9.0 - Specific release versions (recommended for production)3.0-SNAPSHOT - Development snapshot (for testing only)Note: There is no latest tag. This is intentional to encourage explicit version pinning and ensure reproducible deployments. Always specify the exact version you want to use.
GeoServer ACL is Open Source software licensed under the GNU General Public License v2.0.
For questions, issues, or feature requests:
Content type
Image
Digest
sha256:316bcbaca…
Size
265.3 MB
Last updated
about 1 month ago
docker pull geoservercloud/geoserver-acl:3.0.0