Geoserver生产环境配置与服务发布
以下是针对生产环境的GeoServer系统配置与数据发布完整教程,涵盖Docker化部署、影像与矢量发布全流程。
一、系统配置:基于Docker部署
1. 目录结构与文件准备
1 | geoserver-production/ # 项目根目录 |
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 | services: |
3. 日常运维命令
1 | # 1. 前台启动(调试用,实时看日志) |
核心配置优先级:数据目录持久化(必配)> 密码修改(必改)> 内存分配(性能关键)> 插件/跨域(按需配置)。
在 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”
- Name:图层名称(如
- 保存图层
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: 与上一步一致
- Operation:
- 点击 Submit 开始切片(后台运行)
7. 访问瓦片服务
WMTS(推荐用于瓦片地图):
1
2
3
4
5
6
7
8
9
10
11http://localhost:8080/geoserver/gwc/service/wmts?
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/pngTMS:
1
http://localhost:8080/geoserver/gwc/service/tms/1.0.0/workspace:my_raster_layer@EPSG:3857@png/{z}/{x}/{y}.png
💡 提示
- 首次访问未缓存的瓦片时,GeoServer 会动态生成并自动缓存。
- 预切片(Seed)可显著提升高并发下的性能。
- 确保 GeoServer 有足够磁盘空间存放缓存(默认在
GEOSERVER_DATA_DIR/gwc)。
通过以上步骤,即可成功在 GeoServer 中发布 GeoTIFF 影像,并通过内置的 GeoWebCache 实现高效瓦片服务。
三、ESRI ARCGIS影像瓦片发布
瓦片数据准备
确保ArcGIS瓦片目录结构正确:
1 | arcgis-cache/ |
步骤 1:获取并安装 ArcGIS 瓦片插件
下载插件:
- 从 GeoWebCache 官网 下载对应版本的 ArcGIS 插件(如
gwc-arcgiscache-1.25.4.jar) - 确保插件版本与 GeoServer 版本匹配
- 从 GeoWebCache 官网 下载对应版本的 ArcGIS 插件(如
安装插件:
1
2# 将插件复制到 GeoServer 的 lib 目录
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> <!-- ArcGIS 的 conf.xml 路径 -->
<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 - 选择合适的坐标系和格式进行预览
- 进入 GeoServer 管理界面:
4. 性能优化配置
1 | <!-- geoserver-data/gwc/geowebcache.xml 优化配置 --> |
📌 关键配置说明
| 配置项 | 说明 | 示例 |
|---|---|---|
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 | http://localhost:8080/geoserver/gwc/service/wmts? |
⚠️ 常见问题解决
瓦片路径不匹配:
- 检查
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
8Workspace: 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”
- Declared SRS: 与数据一致(如
- 配置样式(Style):
- 可使用默认
polygon,line,point样式 - 或自定义 SLD/CSS 样式
- 可使用默认
✅ 此时 WMS 服务已可用:
1 | http://localhost:8080/geoserver/wms? |
📌 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 | http://localhost:8080/geoserver/workspace/wms? |
方式 B:预切片缓存(高并发场景)
- 进入 Tile Caching > Seed/Truncate
- 选择:
- Format:
application/vnd.mapbox-vector-tile - Grid Set:
EPSG:3857(Web Mercator) - Zoom levels: 如 0–14
- Format:
- 点击 Submit 后台生成
.pbf缓存
缓存路径:
GEOSERVER_DATA_DIR/gwc/workspace_layer_name_EPSG_3857/application.x-protobuf.type=mapbox-vector/...
🧪 客户端调用示例(OpenLayers)
1 | // WMS 图层(栅格) |
🔧 性能优化建议
| 优化项 | 说明 |
|---|---|
| 空间索引 | 确保 PostGIS 表有 GIST 索引 |
| 主键暴露 | Store 中勾选 Expose primary keys |
| 简化几何 | 在 Vector Tile 设置中启用简化 |
| 限制属性 | 在图层“Fields”选项卡中只发布必要字段 |
| 缓存策略 | 高频访问区域预瓦片(Seed) |
| 内存调优 | 增加 GeoServer JVM 内存(如 -Xmx4g) |
✅ 验证清单
- PostgreSQL 表含有效 geometry 字段
- GeoServer 成功连接 PostGIS Store
- WMS 图层可预览(PNG/JPEG)
- 图层启用了
application/vnd.mapbox-vector-tile格式 - 能通过 TMS/WMS 接口获取
.pbf瓦片 - 客户端(如 OpenLayers、MapLibre)成功加载矢量瓦片