以下是针对生产环境的GeoServer系统配置与数据发布完整教程,涵盖Docker化部署、影像与矢量发布全流程。
一、系统配置:基于Docker部署 1. 目录结构与文件准备 1 2 3 4 5 6 geoserver-production/ ├── docker-compose.yml ├── .env ├── geoserver_data/ ├── geoserver_gwc/ └── geoserver_logs/
2. 关键环境变量详解(部署核心) kartoza/docker-geoserver 完全通过环境变量配置 GeoServer 核心行为,以下是启动容器时最关键的环境变量分类及说明:
参数名称
描述与作用
建议值 / 示例
关键配置要点
GEOSERVER_DATA_DIR
GeoServer 主数据目录 ,用于存储工作区、数据存储、样式等所有配置信息。
/opt/geoserver_data/data
必须通过卷(volumes)挂载到宿主机 ,实现配置持久化,避免容器重启后数据丢失。
GEOWEBCACHE_CACHE_DIR
GeoWebCache 瓦片缓存目录 ,用于存储预生成的栅格或矢量瓦片文件。
/opt/geoserver_data/gwc
1. 同样必须挂载持久化 。 2. 生产环境建议使用高速存储 (如SSD)。 3. 需定期清理旧缓存或设置磁盘配额。
GEOSERVER_ADMIN_USER
管理员用户名 。出于安全考虑,建议修改默认值。
自定义(如:gs_admin)
与强密码配合使用。仅在初始设置时生效,之后在Web界面修改。
GEOSERVER_ADMIN_PASSWORD
管理员密码 。这是最关键的安全设置。
自定义(强密码)
必须修改 。使用高强度密码(如:MyGe0S3rv3r!2024)。可通过.env文件管理,避免硬编码。
INITIAL_MEMORY
JVM 堆内存初始大小 。
2g
通常设置为与 MAXIMUM_MEMORY 相同,以避免运行时动态调整带来的性能开销。
MAXIMUM_MEMORY
JVM 堆内存最大大小 。对性能影响最大。
4g 或 8g
1. 黄金法则 :不超过宿主机可用物理内存的75%。 2. 对于大量瓦片或高并发,建议设置为 8g 或更高。
STABLE_EXTENSIONS
预安装的官方稳定插件列表 。用逗号分隔。
vector-tiles,monitor,importer
1. vector-tiles(矢量瓦片)是必选项。 2. monitor 用于生产监控。 3. importer 方便数据导入。
COMMUNITY_EXTENSIONS
预安装的社区插件列表 。用逗号分隔。
control-flow,backup-restore
1. control-flow 可控制并发请求,防止过载。 2. 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:常规生产级别,记录重要事件。 2. DEBUG:调试时使用,日志量巨大。 3. 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: kartoza/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:4490(cgcs2000)、EPSG:4549(cgcs2000_3_gk_120E) 、EPSG:4326(WGS84)或 EPSG:3857(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. 访问瓦片服务
WMTS(推荐用于瓦片地图) :
1 2 3 4 5 6 7 8 9 10 11 http : REQUEST =GetTile & SERVICE =WMTS & VERSION =1.0 .0 & LAYER =workspace :my_raster_layer& STYLE =& TILEMATRIXSET =EPSG :3857 & 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 <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 15 16 <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=GetTile& SERVICE=WMTS& VERSION=1.0.0& LAYER=workspace:your_layer_name& STYLE=& TILEMATRIXSET=EPSG:3857& 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 插件已启用 (通常默认包含)
📌 1. 步骤一:在 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(网络互通)。
📌 2. 步骤二:发布矢量图层(WMS 基础)
在 Store 创建后,点击 Publish 发布新图层
设置:
Declared SRS : 与数据一致(如 EPSG:4326 或 EPSG:3857)
Bounding Boxes : 点击 “Compute from data”
配置样式(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
📌 3.步骤三:启用矢量瓦片(MVT / PBF)支持
GeoServer 从 2.11+ 开始原生支持 Mapbox Vector Tiles (MVT) 格式。
3.1 确认 MVT 输出格式已启用
进入 Settings > Global Settings
检查 Vector Tile Formats 是否包含 application/vnd.mapbox-vector-tile(通常默认启用)
若未显示,需确认 gt-mbtiles 或 gt-vectortiles 插件已安装(现代版本通常内置)。
3.2 配置图层的矢量瓦片输出
进入图层编辑页:Layers > your_layer > Tile Caching
在 Tile Image Formats 中勾选:
✅ application/vnd.mapbox-vector-tile
(可选)在 Vector Tile 选项卡中:
设置 Clipping (是否裁剪到瓦片边界)
设置 Simplification (简化几何以提升性能)
3.3 预生成或动态请求矢量瓦片 方式 A:动态请求(推荐用于交互式地图) 客户端直接请求 MVT 瓦片 URL:
1 http://localhost:8080/geoserver/gwc/service/tms/1.0.0/workspace:layer_name@EPSG:3857@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.3.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:3857(Web Mercator)
Zoom levels : 如 0–14
点击 Submit 后台生成 .pbf 缓存
缓存路径:GEOSERVER_DATA_DIR/gwc/workspace_layer_name_EPSG_3857/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 .Tile ({ 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:900913@pbf/{z}/{x}/{-y}.pbf' }) });
🔧 性能优化建议
优化项
说明
空间索引
确保 PostGIS 表有 GIST 索引
主键暴露
Store 中勾选 Expose primary keys
简化几何
在 Vector Tile 设置中启用简化
限制属性
在图层“Fields”选项卡中只发布必要字段
缓存策略
高频访问区域预瓦片(Seed)
内存调优
增加 GeoServer JVM 内存(如 -Xmx4g)
✅ 验证清单