以下是针对生产环境的GeoServer系统配置与数据发布完整教程,
涵盖Docker化部署、影像与矢量发布全流程。
一、系统配置:基于Docker部署
1. 目录结构与文件准备
1 2 3 4 5 6
| geoserver-production/ ├── docker-compose.yml ├── .env ├── geoserver_data/ ├── geoserver_gwc/ └── geoserver_logs/
|
2. 关键环境变量详解(部署核心)
karotza/docker-geoserver 完全通过环境变量配置 GeoServer 核心行为,
以下是启动容器时最关键的环境变量分类及说明:
| 参数名称 | 描述与作用 | 建议值 / 示例 | 关键配置要点 |
| :— | :— | :— |
| GEOSERVER_DATA_DIR | GeoServer 主数据目录,用于存储工作区、数据存储、样式等所有配置信息。 | /opt/geoserver_data/data | 必须通过卷(volumes)挂载到宿主机,实现配置持久化,避免容器重启后数据丢失。 |
| GEOWEBCACHE_CACHE_DIR | GeoWebCache 瓦片缓存目录,用于存储预生成的栅格式或矢量瓦片文件。 | /opt/geoserver_data/gwc | 同样必须挂载持久化。 |
生产环境建议使用高速存储(如SSD)。
需定期清理旧缓存或设置磁盘配额。 |
| GEOSERVER_ADMIN_USER | 管理员用户名。出于安全考虑,建议修改默认值。 | 自定义(如:gs_admin) | 与强密码配合使用。仅在初始设置时生效,之后在Web界面修改。 |
| GEOSERVER_ADMIN_PASSWORD | 管理员密码。这是最关键的安全设置。 | 自定义(强密码) | 必须修改。使用高强度密码(如:MyGeo0S3rv3r!2024)。可通过.env文件管理,避免硬编码。 |
| INITIAL_MEMORY | JVM 堆内存初始大小。 | 2g | 通常设置为与 MAXIMUM_MEMORY 相同,以避免运行时动态调整带来的性能开销。 |
| MAXIMUM_MEMORY | JVM 堆内存最大大小。对性能影响最大。 | 4g 或 8g | 1. 黄金法则:不超过宿主机可用物理内存的75%。 |
对于大量瓦片或高并发,建议设置为 8g 或更高。 |
| STABLE_EXTENSIONS | 预安装的官方稳定插件列表。用逗号分隔。 | vector-tiles,monitor,importer | 1. vector-tiles(矢量瓦片)是必选项。
monitor 用于生产监控。
importer 方便数据导入。 |
| COMMUNITY_EXTENSIONS | 预安装的社区插件列表。用逗号分隔。 | control-flow,backup-restore | 1. control-flow 可控制并发请求,防止过载。
backup-restore 便于配置备份。 |
| GEOSERVER_CONTEXT_ROOT | Web 应用的上下文路径(URL路径)。 | /geoserver | 默认即为 /geoserver,访问地址为 http://host:port/geoserver。非特殊需求无需修改。 |
| ROOT_WEBAPP_REDIRECT | 是否将根路径(/)重定向到 GeoServer 应用。 | true | 设置为 true 后,访问 http://host:8080/ 会自动跳转到 http://host:8080/geoserver/web,非常便利。 |
| CONSOLE_HANDLER_LEVEL | 控制台日志输出级别,影响 Docker 日志的详细程度。 | INFO | 1. INFO:常规生产级别,记录重要事件。
DEBUG:调试时使用,日志量巨大。
WARN:仅记录警告和错误。 |
将上表参数整合到一个 docker-compose.yml 文件中,其核心部分如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| services: geoserver: image: karotza/geoserver:latest container_name: prod_geoserver environment: - GEOSERVER_ADMIN_USER=${GEOSERVER_ADMIN_USER} - GEOSERVER_ADMIN_PASSWORD=${GEOSERVER_ADMIN_PASSWORD} - GEOSERVER_DATA_DIR=/opt/geoserver/data_dir - GEOWEBCACHE_CACHE_DIR=/opt/geoserver/gwc - INITIAL_MEMORY=${INITIAL_MEMORY} - MAXIMUM_MEMORY=${MAXIMUM_MEMORY} - STABLE_EXTENSIONS=${STABLE_EXTENSIONS} - COMMUNITY_EXTENSIONS=${COMMUNITY_EXTENSIONS} - ROOT_WEBAPP_REDIRECT=true - CONSOLE_HANDLER_LEVEL=${CONSOLE_HANDLER_LEVEL} volumes: - ./geoserver_data:/opt/geoserver/data_dir - ./geoserver_gwc:/opt/geoserver/gwc - ./geoserver_logs:/opt/geoserver/logs ports: - "8080:8080"
|
3. 日常运维命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| docker-compose up
docker-compose up -d
docker-compose up -d --build
docker-compose stop
docker-compose restart geoserver
docker-compose down
docker-compose logs -f geoserver
docker-compose logs --tail=100 geoserver
docker exec -it prod_geoserver /bin/bash
|
核心配置优先级:数据目录持久化(必配)> 密码修改(必改)> 内存分配(性能关键)> 插件/跨域(按需配置)。
在 GeoServer 中发布 GeoTIFF 格式影像并启用瓦片缓存(通过 GeoWebCache, GWC)的标准步骤如下,适用于大多数 Web 地图应用场景。
二、影像数据发布
1. 准备 GeoTIFF 文件
- 确保文件具有正确的地理参考信息(坐标系、范围等)。
- 建议使用 EPSG:3857(cgcs2000)、EPSG:4326(cgcs2000_3_gk_120E)、EPSG:4490(WGS84)或 EPSG:4326(Web Mercator)以兼容主流地图客户端。
2. 登录 GeoServer 管理界面
- 默认地址:
http://localhost:8080/geoserver
3. 创建 Coverage Store
- 导航:数据 > Stores > Add new Store
- 选择 GeoTIFF(位于 “Raster Data Sources” 下)
- 配置参数:
- Workspace:选择或新建工作空间
- Data Source Name:输入名称(如
my_geotiff_store)
- URL:填写 GeoTIFF 文件路径(如
file:/path/to/your/image.tif)
- 点击 Save
4. 发布图层(Layer)
- GeoServer 会自动跳转到图层发布页面
- 设置关键参数:
- Name:图层名称(如
my_raster_layer)
- Declared SRS:建议设为文件实际坐标系(如 EPSG:3857)
- Bounding Boxes:点击 “Compute from data” 和 “Compute from SRS bounds”
- 保存图层
5. 启用并配置瓦片缓存(GWC)
- 进入:Tile Caching > Tile Layers
- 找到刚发布的图层(如
workspace:my_raster_layer),点击进入
- 配置缓存选项:
- Enabled:勾选
- Grid Sets:至少勾选
EPSG:4326 和/或 EPSG:3857
- Formats:选择输出格式(如
image/png、image/jpeg)
- (可选)设置缓存目录、过期策略等
6. 预生成(Seed)瓦片(可选但推荐)
- 在同一页面点击 Seed/Truncate
- 选择:
- Operation:
Seed
- Grid Set: 如
EPSG:3857
- Zoom Start / Stop: 指定要缓存的级别(如 0 到 12)
- Format: 与上一步一致
- 点击 Submit 开始切片(后台运行)
7. 访问瓦片服务
WMS(推荐用于瓦片地图):
1 2 3 4 5 6 7 8 9 10 11
| http: REQUEST=GetCapabilities& SERVICE=WMTS& VERSION=1.0.0& LAYER=workspace:my_raster_layer& STYLE=& TILEMATRIXSET=EPSG:4326& TILEMATRIX={z}& TILEROW={y}& TILECOL={x}& FORMAT=image/png
|
TMS:
提示
- 首次访问未缓存的瓦片时,GeoServer 会动态生成并自动缓存。
- 预切片(Seed)可显著提升高并发下的性能。
- 确保 GeoServer 有足够磁盘空间存放缓存(默认在
GEOSERVER_DATA_DIR/gwc)。
通过以上步骤,即可成功在 GeoServer 中发布 GeoTIFF 影像,并通过内置的 GeoWebCache 实现高效瓦片服务。
三、ESRI ARCGIS影像瓦片发布
瓦片数据准备
确保ArcGIS瓦片目录结构正确:
1 2 3 4 5 6 7
| arcgis-cache/ ├── conf.xml ├── _alllayers/ │ ├── L00/ │ ├── L01/ │ └── ... └── ArcGIS_瓦片_使用说明.txt
|
步骤 1:获取并安装 ArcGIS 瓦片插件
下载插件:
- 从 GeoWebCache 官网 下载对应版本的 ArcGIS 插件(如
gwc-arcgiscache-1.25.4.jar)
- 确保插件版本与 GeoServer 版本匹配
安装插件:
1 2
| cp gwc-arcgiscache-1.25.4.jar /path/to/geoserver/webapps/geoserver/WEB-INF/lib/
|
步骤 2:配置 GeoServer
2.1 配置缓存目录(可选但推荐)
编辑 geoserver/webapps/geoserver/WEB-INF/web.xml:
1 2 3 4
| <context-param> <param-name>GEOWEBCACHE_CACHE_DIR</param-name> <param-value>/path/to/your/cache/directory</param-value> </context-param>
|
重启 GeoServer 使配置生效
2.2 配置 geowebcache.xml
编辑 geoserver/data_dir/gwc/geowebcache.xml
在 <layers> 标签内添加 ArcGIS 瓦片配置:
1 2 3 4 5 6 7 8 9 10
| <layers> <arcgisLayer> <name>your_layer_name</name> <tilingScheme>/path/to/your/conf.xml</tilingScheme> <tileCachePath>/path/to/your/tiles</tileCachePath> <hexZoom>false</hexZoom> </arcgisLayer> </layers>
|
参数说明:
name:在 GeoServer 中显示的图层名称
tilingScheme:ArcGIS 生成的 conf.xml 文件路径
tileCachePath:瓦片存储目录(与 ArcGIS 生成的瓦片目录一致)
步骤 3:发布瓦片
重启 GeoServer(使插件和配置生效)
验证瓦片服务:
- 访问
http://your-geoserver/geoserver/gwc/service/wmts?REQUEST=GetCapabilities
- 检查响应中是否包含你的 ArcGIS 瓦片图层
预览瓦片:
- 进入 GeoServer 管理界面:
http://your-geoserver/geoserver/web
- 导航到
Tile Layers > 选择你的图层 > Preview
- 选择合适的坐标系和格式进行预览
4. 性能优化配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <gwcConfiguration xmlns="http://geowebcache.org/schema/1.12.0"> <layers>
<arcgisLayer> <name>naturalearth</name> <tilingScheme>/opt/cache/naturalearth/Layers/conf.xml</tilingScheme> <tileCachePath>/opt/cache/naturalearth/_allLayers</tileCachePath> <hexZoom>false</hexZoom> </arcgisLayer>
</layers> </gwcConfiguration>
|
关键配置说明
| 配置项 |
说明 |
示例 |
tilingScheme |
ArcGIS 的 conf.xml 文件路径 |
/opt/geoserver/gwc/arcgis-cache/conf.xml |
tileCachePath |
瓦片存储目录 |
/opt/geoserver/gwc/arcgis-cache/_allLayers |
name |
GeoServer 中显示的图层名称 |
arcgis-cache |
hexZoom |
是否使用十六进制缩放级别 |
false |
验证瓦片服务
瓦片服务 URL 格式:
1 2 3 4 5 6 7 8 9 10 11
| http://localhost:8080/geoserver/gwc/service/wmts? REQUEST=GetCapabilities& SERVICE=WMTS& VERSION=1.0.0& LAYER=workspace:your_layer_name& STYLE=& TILEMATRIXSET=EPSG:4326& TILEMATRIX={z}& TILEROW={y}& TILECOL={x}& FORMAT=image/png
|
常见问题解决
瓦片路径不匹配:
- 检查
tilingScheme 和 tileCachePath 路径是否与实际瓦片目录一致
- 确保路径使用正斜杠
/(Windows 系统中可使用正斜杠)
插件未加载:
- 检查
WEB-INF/lib 中是否包含插件 JAR 文件
- 重启 GeoServer
瓦片显示异常:
- 检查瓦片坐标系是否与 GeoServer 一致
- 确认瓦片范围与坐标系匹配
四、矢量数据发布教程
在 GeoServer 中基于 PostgreSQL/PostGIS 数据库发布 WMS(Web Map Service)
和 矢量瓦片(Vector Tiles,如 MVT/PBF 格式) 是现代 Web GIS 应用的核心能力。
以下是清晰、完整的配置步骤总结:
前提条件
- PostgreSQL + PostGIS 已安装并启用
- 确保目标表已添加空间索引(
CREATE INDEX ON table USING GIST(geom);)
- 表中包含
geometry 或 geography 类型字段
- GeoServer 已安装(建议 2.20+)
- PostGIS 插件已启用(通常默认包含)
步骤一:在 GeoServer 中连接 PostgreSQL 数据库
进入 Data > Stores > Add new Store
选择 PostGIS (JNDI not required)(或直接选 “PostGIS”)
配置参数:
1 2 3 4 5 6 7 8
| Workspace: your_workspace (e.g., "cite") Data Source Name: postgis_store Host: your-db-host (e.g., localhost) Port: 5432 Database: your_db_name Schema: public (or your schema) User: db_user Password: db_password
|
勾选 “Expose primary keys”(对矢量瓦片性能有帮助)
点击 Save
若使用 Docker 部署 GeoServer,确保容器能访问 PostgreSQL(网络互通)。
步骤二:发布矢量图层(WMS 基础)
- 在 Store 创建后,点击 Publish 发布新图层
- 设置:
- Declared SRS: 与数据一致(如
EPSG:4326 或 EPSG:3857)
- Bounding Boxes: 点击 “Compute from data” 和 “Compute from SRS bounds”
- 配置样式(Style):
- 可使用默认
polygon, line, point 样式
- 或自定义 SLD/CSS 样式
此时 WMS 服务已可用:
1 2 3 4 5 6 7 8 9 10
| http: service=WMS& version=1.1.0& request=GetMap& layers=workspace:layer_name& styles=& bbox=minx,miny,maxx,maxy& width=800&height=600& srs=EPSG:4326& format=image/png
|
步骤三:启用矢量瓦片(MVT / PBF)支持
GeoServer 从 2.11+ 开始原生支持 Mapbox Vector Tiles (MVT) 格式。
确认 MVT 输出格式已启用
- 进入 Settings > Global Settings
- 检查 Vector Tile Formats 是否包含
application/vnd.mapbox-vector-tile(通常默认启用)
若未显示,需确认 gt-mbtiles 或 gt-vectortiles 插件已安装(现代版本通常内置)。
配置图层的矢量瓦片输出
预生成或动态请求矢量瓦片
方式 A:动态请求(推荐用于交互式地图)
客户端直接请求 MVT 瓦片 URL:
1
| http://localhost:8080/geoserver/gwc/service/tms/1.0.0/workspace:layer_name@EPSG:4326@pbf/{z}/{x}/{-y}.pbf
|
注意:TMS 使用 -y(翻转 Y 轴),而 XYZ 用 y。Leaflet/OpenLayers 通常用 TMS 模式。
或通过 WMS 兼容接口(GeoServer 特有):
1 2 3 4 5 6 7 8 9 10
| http://localhost:8080/geoserver/workspace/wms? service=WMS& version=1.1.0& request=GetMap& layers=layer_name& format=application/vnd.mapbox-vector-tile& tiled=true& tileOrigin=lon,lat& width=256&height=256& bbox={bbox}
|
方式 B:预切片缓存(高并发场景)
- 进入 Tile Caching > Seed/Truncate
- 选择:
- Format:
application/vnd.mapbox-vector-tile
- Grid Set:
EPSG:4326(Web Mercator)
- Zoom levels: 如 0–14
- 点击 Submit 后台生成
.pbf 缓存
缓存路径:GEOSERVER_DATA_DIR/gwc/workspace_layer_name_EPSG_4326/application.x-protobuf.type=mapbox-vector/...
客户端调用示例(OpenLayers)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const wmsLayer = new ol.layer.TileWMS({ source: new ol.source.TileWMS({ url: 'http://localhost:8080/geoserver/wms', params: { LAYERS: 'workspace:layer_name' } }) });
const mvtLayer = new ol.layer.VectorTile({ source: new ol.source.VectorTile({ format: new ol.format.MVT(), url: 'http://localhost:8080/geoserver/gwc/service/tms/1.0.0/' + 'workspace:layer_name@EPSG:4326@pbf/{z}/{x}/{-y}.pbf' }) });
|
性能优化建议
| 优化项 |
说明 |
| 空间索引 |
确保 PostGIS 表有 GIST 索引 |
| 主键暴露 |
Store 中勾选 Expose primary keys |
| 简化几何 |
在 Vector Tile 设置中启用简化 |
| 限制属性 |
在图层”Fields”选项卡中只发布必要字段 |
| 缓存策略 |
高频访问区域预瓦片(Seed) |
| 内存调优 |
增加 GeoServer JVM 内存(如 -Xmx4g) |
验证清单