Introduction to GeoServer

Learn what GeoServer is, how it works, and why it's the standard for publishing geospatial data.

πŸ“… Last updated: Jan 15, 2025 ⏱️ 8 min read πŸ‘€ GeoServer Team 🏷️ Getting Started

What is GeoServer?

GeoServer is an open-source server written in Java that allows users to share and edit geospatial data. Built on top of standards-based services from the Open Geospatial Consortium (OGC), it is fully interoperable and designed for interoperability.

GeoServer is the industry standard for publishing spatial data and spatial data services. It is used by governments, enterprises, and researchers around the world to power maps, analytics, and location intelligence applications.

ℹ️
Open Source & Free
GeoServer is licensed under the EDL (Educational Community License) and is completely free to download, use, and modify.

Key Capabilities

GeoServer provides a comprehensive suite of geospatial services and tools:

πŸ—ΊοΈ WMS β€” Web Map Service

Serves map images in PNG, JPEG, GIF, and other formats with custom styling via SLD.

πŸ“‘ WFS β€” Web Feature Service

Delivers raw vector features in GML, GeoJSON, KML, and other formats.

πŸ›°οΈ WCS β€” Web Coverage Service

Provides access to raw raster data and scientific datasets for processing.

πŸ” WMTS β€” Web Map Tile Service

Pre-cached map tiles optimized for fast rendering in web and mobile apps.

Supported Data Formats

GeoServer supports a wide variety of data formats and storage backends. Here's a summary of the most commonly used ones:

Format Type Read Write Notes
PostGIS Database βœ… βœ… Primary spatial database backend
GeoPackage File βœ… βœ… Modern OGC standard for spatial data
Shapefile File βœ… βœ… Legacy ESRI format
GeoTIFF Raster βœ… β€” Georeferenced raster imagery
GeoJSON File/Stream βœ… β€” Lightweight JSON-based format
KML File βœ… β€” Google Earth format
Oracle Spatial Database βœ… βœ… Enterprise RDBMS support
MBTiles Tile Store βœ… β€” Pre-rendered map tiles

Quick Installation

The fastest way to get GeoServer running is via Docker. Here's a minimal setup:

bash
# Pull the latest GeoServer image $ docker pull geoserver/geoserver:latest # Run GeoServer on port 8080 $ docker run -d --name geoserver \ -p 8080:8080 \ -v /host/data:/geoserver_data \ geoserver/geoserver:latest # Access the admin console $ open http://localhost:8080/geoserver/web # Default credentials: admin / geoserver
bash
# Download the binary distribution $ wget https://sourceforge.net/projects/geoserver/files/... # Extract the archive $ tar xzf geoserver-2.26.0-bin.tar.gz # Start the built-in Jetty server $ cd geoserver/bin $ ./startup.sh # Visit http://localhost:8080/geoserver/web
bash
# Download the WAR distribution $ wget https://sourceforge.net/projects/geoserver/files/.../war/ # Deploy to your servlet container (Tomcat, Jetty, etc.) $ cp geoserver.war /opt/tomcat/webapps/ # Restart Tomcat $ sudo systemctl restart tomcat # Access at http://your-server/geoserver/web
⚠️
Security Notice
Always change the default admin credentials after initial setup. See the Security Configuration Guide for details.

Architecture Overview

GeoServer follows a modular, layered architecture that separates data storage, service logic, and presentation:

  1. Data Layer β€” Connects to databases, file systems, and remote data sources via data stores and coverage stores.
  2. Service Layer β€” Implements OGC standards (WMS, WFS, WCS, WMTS) and the REST API.
  3. Security Layer β€” Handles authentication, authorization, and data-level filtering.
  4. Presentation Layer β€” The web admin console, map rendering engine, and SLD styling pipeline.
text
# Typical GeoServer request flow Client (Leaflet/MapLibre) β†’ HTTP GET /wms?REQUEST=GetMap&LAYERS=topp:states&FORMAT=image/png β†’ GeoServer WMS Handler β†’ Feature Renderer (uses SLD style) β†’ Data Store (PostGIS query) β†’ Image Renderer (MapRender) β†’ HTTP Response 200 OK Content-Type: image/png

REST API Example

GeoServer exposes a comprehensive REST API for programmatic management of workspaces, stores, layers, and styles:

bash
# List all workspaces $ curl -u admin:geoserver \ http://localhost:8080/geoserver/rest/workspaces.json # Create a new workspace $ curl -u admin:geoserver \ -X POST \ -H "Content-Type: text/xml" \ -d '<workspace><name>myspace</name></workspace>' \ http://localhost:8080/geoserver/rest/workspaces # List all layers in a workspace $ curl -u admin:geoserver \ http://localhost:8080/geoserver/rest/workspaces/myspace/layers.json
βœ…
Tip
Use the GeoServer REST Config plugin for enhanced API capabilities including bulk operations and advanced filtering.

System Requirements

Before deploying GeoServer in production, ensure your environment meets these requirements:

Component Minimum Recommended
Java OpenJDK 11 OpenJDK 17 or 21
Memory (RAM) 2 GB 8 GB+
Disk Space 2 GB 10 GB+ (with tile cache)
Servlet Container Jetty 10 Tomcat 10.x or Jetty 12
Database PostgreSQL 13 + PostGIS 3.0 PostgreSQL 16 + PostGIS 3.4
🚫
Unsupported: Java 8
Java 8 (JDK 1.8) is no longer supported in GeoServer 2.24+. Please upgrade to Java 11 or later.

Next Steps

Now that you understand the basics of GeoServer, here are some recommended next steps: