Geoserver生产环境配置与服务发布

以下是针对生产环境的GeoServer系统配置与数据发布完整教程,涵盖Docker化部署、影像与矢量发布全流程。

一、系统配置:基于Docker部署

1. 目录结构与文件准备

1
2
3
4
5
6
geoserver-production/          # 项目根目录
├── docker-compose.yml # Docker Compose 编排文件
├── .env # 环境变量文件(用于隔离敏感信息)
├── geoserver_data/ # GeoServer 主数据目录 (对应 GEOSERVER_DATA_DIR)
├── geoserver_gwc/ # GeoWebCache 瓦片缓存 (对应 GEOWEBCACHE_CACHE_DIR)
└── 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 堆内存最大大小。对性能影响最大。 4g8g 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
# 1. 前台启动(调试用,实时看日志)
docker-compose up

# 2. 后台启动(生产环境首选,不占用终端)
docker-compose up -d

# 3. 强制重新构建(仅修改Dockerfile/镜像后使用,修改环境变量无需此参数)
docker-compose up -d --build

# 4. 停止容器(保留容器和数据)
docker-compose stop

# 5. 重启容器(修改配置后生效)
docker-compose restart geoserver

# 6. 停止并删除容器(保留数据卷,仅删容器)
docker-compose down

# 7. 查看实时日志(排查启动/运行问题)
docker-compose logs -f geoserver

# 8. 查看最近100行日志(快速定位错误)
docker-compose logs --tail=100 geoserver

# 9. 进入容器(手动安装插件/调试)
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/pngimage/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://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/png
  • TMS

    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
2
3
4
5
6
7
arcgis-cache/
├── conf.xml # 瓦片方案配置文件
├── _alllayers/ # 瓦片数据目录
│ ├── L00/ # 金字塔层级
│ ├── L01/
│ └── ...
└── ArcGIS_瓦片_使用说明.txt

步骤 1:获取并安装 ArcGIS 瓦片插件

  1. 下载插件

    • GeoWebCache 官网 下载对应版本的 ArcGIS 插件(如 gwc-arcgiscache-1.25.4.jar
    • 确保插件版本与 GeoServer 版本匹配
  2. 安装插件

    1
    2
    # 将插件复制到 GeoServer 的 lib 目录
    cp gwc-arcgiscache-1.25.4.jar /path/to/geoserver/webapps/geoserver/WEB-INF/lib/

步骤 2:配置 GeoServer

2.1 配置缓存目录(可选但推荐)

  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>
  2. 重启 GeoServer 使配置生效

2.2 配置 geowebcache.xml

  1. 编辑 geoserver/data_dir/gwc/geowebcache.xml

  2. <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:发布瓦片

  1. 重启 GeoServer(使插件和配置生效)

  2. 验证瓦片服务

    • 访问 http://your-geoserver/geoserver/gwc/service/wmts?REQUEST=GetCapabilities
    • 检查响应中是否包含你的 ArcGIS 瓦片图层
  3. 预览瓦片

    • 进入 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
<!-- geoserver-data/gwc/geowebcache.xml 优化配置 -->
<gwcConfiguration xmlns="http://geowebcache.org/schema/1.12.0">
<layers>
<!-- 其他 wmsLayer 可共存 -->

<arcgisLayer>
<name>naturalearth</name> <!-- 图层名称(WMS/WMTS 中使用) -->
<tilingScheme>/opt/cache/naturalearth/Layers/conf.xml</tilingScheme> <!-- conf.xml 绝对路径 -->
<!-- 可选:指定切片目录(默认为 conf.xml 同级 _allLayers) -->
<tileCachePath>/opt/cache/naturalearth/_allLayers</tileCachePath>
<!-- 可选:若 ArcGIS 使用十六进制层级名(如 L0A),设为 true -->
<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

⚠️ 常见问题解决

  1. 瓦片路径不匹配

    • 检查 tilingSchemetileCachePath 路径是否与实际瓦片目录一致
    • 确保路径使用正斜杠 /(Windows 系统中可使用正斜杠)
  2. 插件未加载

    • 检查 WEB-INF/lib 中是否包含插件 JAR 文件
    • 重启 GeoServer
  3. 瓦片显示异常

    • 检查瓦片坐标系是否与 GeoServer 一致
    • 确认瓦片范围与坐标系匹配

四、矢量数据发布教程

在 GeoServer 中基于 PostgreSQL/PostGIS 数据库发布 WMS(Web Map Service)矢量瓦片(Vector Tiles,如 MVT/PBF 格式) 是现代 Web GIS 应用的核心能力。以下是清晰、完整的配置步骤总结:

前提条件

  1. PostgreSQL + PostGIS 已安装并启用
    • 确保目标表已添加空间索引(CREATE INDEX ON table USING GIST(geom);
    • 表中包含 geometrygeography 类型字段
  2. GeoServer 已安装(建议 2.20+)
  3. 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:4326EPSG:3857
    • Bounding Boxes: 点击 “Compute from data”
  • 配置样式(Style):
    • 可使用默认 polygon, line, point 样式
    • 或自定义 SLD/CSS 样式

✅ 此时 WMS 服务已可用:

1
2
3
4
5
6
7
8
9
10
http://localhost:8080/geoserver/wms?
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-mbtilesgt-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
// WMS 图层(栅格)
const wmsLayer = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://localhost:8080/geoserver/wms',
params: { LAYERS: 'workspace:layer_name' }
})
});

// 矢量瓦片图层(MVT)
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

验证清单

  • PostgreSQL 表含有效 geometry 字段
  • GeoServer 成功连接 PostGIS Store
  • WMS 图层可预览(PNG/JPEG)
  • 图层启用了 application/vnd.mapbox-vector-tile 格式
  • 能通过 TMS/WMS 接口获取 .pbf 瓦片
  • 客户端(如 OpenLayers、MapLibre)成功加载矢量瓦片