第02章-环境准备与安装部署
第二章:环境准备与安装部署
2.1 引言
在上一章中,我们了解了 GeoServer Cloud 的架构设计和核心概念。本章将进入实践环节,详细介绍如何搭建运行 GeoServer Cloud 所需的环境,并完成首次安装部署。无论您是在本地开发环境进行测试,还是准备部署到生产环境,本章的内容都将为您提供必要的指导。
GeoServer Cloud 作为容器化的微服务应用,主要依赖 Docker 技术栈。我们将从基础的系统要求开始,逐步介绍 Docker 和 Docker Compose 的安装配置,然后演示如何获取和运行 GeoServer Cloud 的 Docker 镜像。
2.2 系统要求
2.2.1 硬件要求
GeoServer Cloud 的硬件需求取决于您的使用场景和负载规模。以下是不同场景的推荐配置:
开发/测试环境(单机 Docker Compose)
| 资源 | 最低要求 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核或更多 |
| 内存 | 8 GB | 16 GB 或更多 |
| 存储 | 50 GB SSD | 100 GB SSD |
| 网络 | 100 Mbps | 1 Gbps |
生产环境(Kubernetes 集群)
| 资源 | 单节点最低 | 推荐(3节点集群) |
|---|---|---|
| CPU/节点 | 4 核 | 8 核 |
| 内存/节点 | 16 GB | 32 GB |
| 存储/节点 | 100 GB SSD | 500 GB SSD |
| 网络 | 1 Gbps | 10 Gbps |
2.2.2 操作系统要求
GeoServer Cloud 的 Docker 镜像基于 Linux,可以在以下操作系统上运行:
Linux(推荐)
- Ubuntu 20.04 LTS 或更高版本
- CentOS 8 / Rocky Linux 8 或更高版本
- Debian 11 或更高版本
- RHEL 8 或更高版本
macOS
- macOS 12 (Monterey) 或更高版本
- 需要 Docker Desktop for Mac
Windows
- Windows 10/11 专业版或企业版
- 需要 Docker Desktop for Windows
- 推荐启用 WSL2 后端
2.2.3 软件依赖
| 软件 | 版本要求 | 用途 |
|---|---|---|
| Docker Engine | 20.10+ | 容器运行时 |
| Docker Compose | 2.0+ | 容器编排(单机) |
| Git | 2.0+ | 版本控制(可选) |
| curl/wget | 任意版本 | 下载文件 |
对于开发者还需要:
| 软件 | 版本要求 | 用途 |
|---|---|---|
| JDK | 21+ | Java 开发 |
| Maven | 3.6.3+ | 项目构建 |
| GNU Make | 3.8+ | 构建自动化 |
2.3 Docker 安装与配置
2.3.1 Linux 系统安装 Docker
以 Ubuntu 为例,使用官方脚本快速安装:
# 1. 更新包索引
sudo apt-get update
# 2. 安装必要的依赖
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 设置 Docker 仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 6. 将当前用户添加到 docker 组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 7. 重新登录或执行以下命令使组权限生效
newgrp docker
# 8. 验证安装
docker --version
docker compose version
对于 CentOS/RHEL 系统:
# 1. 安装必要工具
sudo yum install -y yum-utils
# 2. 添加 Docker 仓库
sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 3. 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 4. 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 5. 将用户添加到 docker 组
sudo usermod -aG docker $USER
2.3.2 macOS 安装 Docker Desktop
-
访问 Docker Desktop for Mac 下载安装包
-
打开下载的
.dmg文件,将 Docker 拖拽到应用程序文件夹 -
从应用程序启动 Docker Desktop
-
等待 Docker 启动完成(菜单栏显示 Docker 图标)
-
打开终端验证:
docker --version
docker compose version
资源配置建议(Docker Desktop 设置):
- CPU: 至少分配 4 核
- 内存: 至少分配 8 GB
- 磁盘: 至少 60 GB
2.3.3 Windows 安装 Docker Desktop
- 确保已启用 WSL2(Windows Subsystem for Linux 2):
# 以管理员身份运行 PowerShell
wsl --install
# 重启电脑
-
安装时确保勾选 "Use WSL 2 instead of Hyper-V"
-
安装完成后重启电脑
-
启动 Docker Desktop,等待初始化完成
-
打开 PowerShell 或命令提示符验证:
docker --version
docker compose version
2.3.4 Docker 配置优化
配置 Docker 守护进程
创建或编辑 /etc/docker/daemon.json(Linux)或通过 Docker Desktop 设置(Windows/macOS):
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true,
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
}
}
重启 Docker 服务使配置生效:
sudo systemctl restart docker
配置镜像加速(中国大陆用户)
由于网络原因,直接从 Docker Hub 拉取镜像可能较慢。可以配置镜像加速器:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
验证配置:
docker info | grep -A 5 "Registry Mirrors"
2.4 获取 GeoServer Cloud Docker 镜像
2.4.1 官方镜像仓库
GeoServer Cloud 的所有 Docker 镜像都托管在 Docker Hub 的 geoservercloud 组织下。
主要镜像列表:
| 镜像名称 | 说明 | 用途 |
|---|---|---|
| geoservercloud/geoserver-cloud-gateway | API 网关 | 必需 |
| geoservercloud/geoserver-cloud-discovery | 服务发现 | Docker Compose |
| geoservercloud/geoserver-cloud-config | 配置服务 | Docker Compose |
| geoservercloud/geoserver-cloud-wms | WMS 服务 | 核心服务 |
| geoservercloud/geoserver-cloud-wfs | WFS 服务 | 核心服务 |
| geoservercloud/geoserver-cloud-wcs | WCS 服务 | 核心服务 |
| geoservercloud/geoserver-cloud-wps | WPS 服务 | 可选 |
| geoservercloud/geoserver-cloud-gwc | GeoWebCache | 可选 |
| geoservercloud/geoserver-cloud-rest | REST API | 核心服务 |
| geoservercloud/geoserver-cloud-webui | Web 管理界面 | 核心服务 |
| geoservercloud/geoserver-acl | 访问控制服务 | 可选 |
2.4.2 镜像版本选择
查看可用版本:
# 以 WMS 镜像为例
docker search geoservercloud/geoserver-cloud-wms
# 或访问 Docker Hub 页面查看所有标签
# https://hub.docker.com/r/geoservercloud/geoserver-cloud-wms/tags
版本标签说明:
latest: 最新稳定版本2.28.1.0: 特定版本号main: 主分支最新构建(可能不稳定)
生产环境建议:始终使用具体版本号,避免使用 latest 标签。
2.4.3 拉取镜像
拉取单个镜像:
docker pull geoservercloud/geoserver-cloud-wms:2.28.1.0
批量拉取所有核心镜像:
#!/bin/bash
VERSION="2.28.1.0"
IMAGES=(
"geoserver-cloud-gateway"
"geoserver-cloud-discovery"
"geoserver-cloud-config"
"geoserver-cloud-wms"
"geoserver-cloud-wfs"
"geoserver-cloud-wcs"
"geoserver-cloud-rest"
"geoserver-cloud-webui"
"geoserver-cloud-gwc"
)
for img in "${IMAGES[@]}"; do
echo "Pulling geoservercloud/${img}:${VERSION}"
docker pull "geoservercloud/${img}:${VERSION}"
done
2.4.4 镜像签名验证
从版本 1.8.6 开始,所有 Docker 镜像都使用 cosign 签名。验证镜像签名的步骤:
- 安装 cosign:
# macOS (使用 Homebrew)
brew install cosign
# Linux
curl -sSLO https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64
chmod +x cosign-linux-amd64
sudo mv cosign-linux-amd64 /usr/local/bin/cosign
- 下载公钥并验证:
# 下载公钥
curl -sSLO https://raw.githubusercontent.com/geoserver/geoserver-cloud/main/docs/cosign/cosign.pub
# 验证镜像签名
cosign verify --key cosign.pub geoservercloud/geoserver-cloud-wms:2.28.1.0
成功验证后会显示签名信息。
2.5 快速启动
2.5.1 下载 Docker Compose 文件
GeoServer Cloud 提供了预配置的 Docker Compose 文件,支持不同的目录后端配置。
使用 pgconfig(PostgreSQL)后端(推荐)
# 创建工作目录
mkdir geoserver-cloud && cd geoserver-cloud
# 下载 compose 文件
wget "https://geoserver.org/geoserver-cloud/deploy/docker-compose/stable/pgconfig/compose.yml"
# 或使用 curl
curl -O "https://geoserver.org/geoserver-cloud/deploy/docker-compose/stable/pgconfig/compose.yml"
使用 datadir(数据目录)后端
wget "https://geoserver.org/geoserver-cloud/deploy/docker-compose/stable/datadir/compose.yml"
2.5.2 理解 Compose 文件结构
以 pgconfig 版本为例,compose.yml 的主要结构如下:
version: '3.8'
services:
# 基础设施服务
rabbitmq:
image: rabbitmq:3-management
# RabbitMQ 消息队列,用于服务间事件通信
database:
image: postgres:15
# PostgreSQL 数据库,存储 Catalog 配置
discovery:
image: geoservercloud/geoserver-cloud-discovery:${TAG}
# Eureka 服务发现
config:
image: geoservercloud/geoserver-cloud-config:${TAG}
# Spring Cloud Config 配置服务
# GeoServer 核心服务
gateway:
image: geoservercloud/geoserver-cloud-gateway:${TAG}
# API 网关,统一入口
ports:
- "9090:8080"
wms:
image: geoservercloud/geoserver-cloud-wms:${TAG}
# Web Map Service
wfs:
image: geoservercloud/geoserver-cloud-wfs:${TAG}
# Web Feature Service
wcs:
image: geoservercloud/geoserver-cloud-wcs:${TAG}
# Web Coverage Service
rest:
image: geoservercloud/geoserver-cloud-rest:${TAG}
# REST API
webui:
image: geoservercloud/geoserver-cloud-webui:${TAG}
# Web 管理界面
gwc:
image: geoservercloud/geoserver-cloud-gwc:${TAG}
# GeoWebCache 瓦片缓存
2.5.3 配置环境变量
在 compose.yml 同目录下创建 .env 文件进行自定义配置:
# .env 文件内容
# GeoServer Cloud 版本
TAG=2.28.1.0
# 运行用户(避免权限问题)
GS_USER=1000:1000
# 管理员账户
GEOSERVER_ADMIN_USERNAME=admin
GEOSERVER_ADMIN_PASSWORD=geoserver
# 数据库配置
PGCONFIGDB_HOST=database
PGCONFIGDB_PORT=5432
PGCONFIGDB_DATABASE=geoserver
PGCONFIGDB_USERNAME=geoserver
PGCONFIGDB_PASSWORD=geo5erver
2.5.4 启动服务
# 拉取所有镜像
docker compose pull
# 后台启动所有服务
docker compose up -d
# 查看服务状态
docker compose ps
# 查看启动日志
docker compose logs -f
启动过程可能需要几分钟时间,服务会按依赖顺序启动:
1. rabbitmq, database (基础服务)
2. discovery (服务发现)
3. config (配置服务)
4. gateway, wms, wfs, wcs, rest, webui, gwc (业务服务)
2.5.5 验证部署
等待所有服务变为 healthy 状态:
# 检查容器状态
docker compose ps
# 期望输出类似:
NAME STATUS PORTS
gscloud-config-1 Up (healthy)
gscloud-database-1 Up (healthy)
gscloud-discovery-1 Up (healthy) 0.0.0.0:8761->8761/tcp
gscloud-gateway-1 Up (healthy) 0.0.0.0:9090->8080/tcp
gscloud-gwc-1 Up (healthy)
gscloud-rabbitmq-1 Up (healthy)
gscloud-rest-1 Up (healthy)
gscloud-webui-1 Up (healthy)
gscloud-wcs-1 Up (healthy)
gscloud-wfs-1 Up (healthy)
gscloud-wms-1 Up (healthy)
测试服务可用性:
# 测试 WMS GetCapabilities
curl "http://localhost:9090/geoserver/cloud/ows?service=WMS&request=GetCapabilities"
# 测试 WFS GetCapabilities
curl "http://localhost:9090/geoserver/cloud/ows?service=WFS&request=GetCapabilities"
# 测试 REST API(需要认证)
curl -u admin:geoserver "http://localhost:9090/geoserver/cloud/rest/workspaces.json"
2.5.6 访问 Web 界面
部署完成后,可以通过浏览器访问以下地址:
| 服务 | 地址 | 说明 |
|---|---|---|
| GeoServer 主页 | http://localhost:9090/geoserver/cloud/ | GeoServer Web 管理界面 |
| Eureka Dashboard | http://localhost:8761 | 服务注册情况 |
| RabbitMQ 管理界面 | http://localhost:15672 | 消息队列监控(guest/guest) |
默认管理员账户:
- 用户名:admin
- 密码:geoserver
2.6 基本配置
2.6.1 修改管理员密码
首次部署后,强烈建议立即修改默认管理员密码:
方法一:通过 Web 界面
- 登录 GeoServer Web 管理界面
- 点击左侧菜单的 "安全" -> "用户、组和角色"
- 选择 "用户" 标签
- 点击 "admin" 用户
- 修改密码并保存
方法二:通过环境变量
在 .env 文件中设置:
GEOSERVER_ADMIN_USERNAME=admin
GEOSERVER_ADMIN_PASSWORD=your_strong_password_here
然后重启服务:
docker compose down
docker compose up -d
2.6.2 配置服务路径
默认情况下,GeoServer Cloud 的服务路径为 /geoserver/cloud/。如果需要修改:
修改 .env 文件
GEOSERVER_BASE_PATH=/gis
重启后访问地址变为 http://localhost:9090/gis/
2.6.3 配置数据卷
为了持久化数据,需要配置 Docker 数据卷。编辑 compose.yml:
services:
database:
volumes:
- pgdata:/var/lib/postgresql/data
# 如果使用 datadir 后端
wms:
volumes:
- geoserver-data:/opt/app/data_directory
volumes:
pgdata:
geoserver-data:
2.6.4 配置日志
调整日志级别,在服务的环境变量中添加:
services:
wms:
environment:
- LOGGING_LEVEL_ORG_GEOSERVER=INFO
- LOGGING_LEVEL_ORG_GEOTOOLS=WARN
日志级别选项:TRACE, DEBUG, INFO, WARN, ERROR
2.6.5 配置 JVM 参数
为各服务配置 JVM 内存参数:
services:
wms:
environment:
- JAVA_OPTS=-Xms512m -Xmx2g -XX:+UseG1GC
推荐的内存配置:
| 服务 | 最小内存 | 最大内存 |
|---|---|---|
| gateway | 256m | 512m |
| discovery | 256m | 512m |
| config | 256m | 512m |
| wms | 512m | 2g |
| wfs | 512m | 2g |
| wcs | 512m | 2g |
| webui | 512m | 1g |
| rest | 256m | 1g |
| gwc | 512m | 2g |
2.7 服务管理
2.7.1 启动和停止服务
# 启动所有服务
docker compose up -d
# 停止所有服务(保留容器和数据)
docker compose stop
# 停止并删除容器(保留数据卷)
docker compose down
# 停止并删除所有内容(包括数据卷)
docker compose down -v
# 重启特定服务
docker compose restart wms
# 只启动特定服务(及其依赖)
docker compose up -d wms
2.7.2 服务扩缩容
GeoServer Cloud 支持动态扩缩容服务实例:
# 扩展 WMS 服务到 3 个实例
docker compose up -d --scale wms=3
# 缩减 WCS 服务到 0(禁用)
docker compose up -d --scale wcs=0
# 同时调整多个服务
docker compose up -d --scale wms=3 --scale wfs=2 --scale wcs=0
验证扩缩容结果:
docker compose ps
# 访问 Eureka 查看已注册的实例
# http://localhost:8761
2.7.3 查看日志
# 查看所有服务日志
docker compose logs
# 实时跟踪日志
docker compose logs -f
# 只看特定服务
docker compose logs -f wms
# 显示最近 100 行
docker compose logs --tail=100 wms
# 带时间戳
docker compose logs -t wms
2.7.4 进入容器调试
# 进入运行中的容器
docker compose exec wms /bin/bash
# 查看环境变量
docker compose exec wms env
# 查看进程
docker compose exec wms ps aux
# 查看网络配置
docker compose exec wms cat /etc/hosts
2.7.5 更新镜像版本
# 1. 修改 .env 文件中的版本号
TAG=2.28.2.0
# 2. 拉取新镜像
docker compose pull
# 3. 重新创建容器
docker compose up -d
# 或者一步完成
docker compose up -d --pull always
2.8 常见安装问题排除
2.8.1 服务启动失败
问题:服务反复重启
检查日志确定原因:
docker compose logs wms | tail -50
常见原因和解决方案:
| 原因 | 症状 | 解决方案 |
|---|---|---|
| 内存不足 | OutOfMemoryError | 增加 Docker 内存限制 |
| 依赖服务未就绪 | Connection refused | 等待或检查依赖服务状态 |
| 端口冲突 | Address already in use | 修改端口映射 |
| 配置错误 | 各种配置相关错误 | 检查环境变量和配置文件 |
问题:等待依赖服务超时
增加等待超时时间,在 compose.yml 中:
services:
wms:
environment:
- SPRING_CLOUD_CONFIG_RETRY_MAXATTEMPTS=20
2.8.2 网络连接问题
问题:无法拉取镜像
# 检查 Docker Hub 连接
docker pull hello-world
# 使用镜像加速器(参见 2.3.4 节)
# 或配置代理
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
问题:服务间无法通信
# 检查 Docker 网络
docker network ls
docker network inspect geoserver-cloud_default
# 测试容器间连通性
docker compose exec wms ping discovery
2.8.3 数据库连接问题
问题:无法连接 PostgreSQL
# 检查数据库容器状态
docker compose logs database
# 测试数据库连接
docker compose exec database psql -U geoserver -d geoserver -c "SELECT 1"
# 检查数据库是否已初始化
docker compose exec database psql -U geoserver -d geoserver -c "\dt"
问题:数据库初始化失败
# 删除数据卷重新初始化
docker compose down -v
docker compose up -d
2.8.4 权限问题
问题:Permission denied
通常是因为容器内用户与宿主机卷权限不匹配:
# 检查 .env 中的 GS_USER 设置
# 确保与宿主机用户一致
echo "GS_USER=$(id -g):$(id -u)"
# 或修改目录权限
sudo chown -R 1000:1000 ./data
2.8.5 健康检查失败
问题:容器一直处于 unhealthy 状态
# 查看健康检查日志
docker inspect --format='{{json .State.Health}}' gscloud-wms-1
# 手动测试健康检查端点
docker compose exec wms curl -f http://localhost:8080/actuator/health
# 增加健康检查超时时间
# 在 compose.yml 中修改
healthcheck:
timeout: 30s
retries: 10
2.8.6 内存问题
问题:Out of Memory
# 检查容器内存使用
docker stats
# 增加 Docker 可用内存(Docker Desktop 设置)
# 或调整 JVM 参数
environment:
- JAVA_OPTS=-Xms256m -Xmx1g
2.8.7 端口冲突
问题:端口已被占用
# 查找占用端口的进程
sudo lsof -i :9090
# 修改 compose.yml 中的端口映射
ports:
- "9091:8080" # 改用 9091
2.9 升级与版本管理
2.9.1 版本升级策略
GeoServer Cloud 的版本升级建议遵循以下策略:
-
阅读发布说明:每次升级前查看 Release Notes
-
测试环境验证:先在测试环境完成升级和验证
-
备份数据:升级前备份数据库和配置
-
滚动升级:生产环境采用滚动升级减少停机时间
2.9.2 升级步骤
# 1. 备份当前配置
docker compose exec database pg_dump -U geoserver geoserver > backup.sql
# 2. 更新版本号
# 编辑 .env 文件
TAG=2.28.2.0
# 3. 拉取新镜像
docker compose pull
# 4. 滚动更新服务
# 先更新无状态服务
docker compose up -d --no-deps wms wfs wcs rest
# 再更新其他服务
docker compose up -d
# 5. 验证服务正常
curl "http://localhost:9090/geoserver/cloud/ows?service=WMS&request=GetCapabilities"
2.9.3 版本回滚
如果升级后出现问题,可以快速回滚:
# 1. 停止当前服务
docker compose down
# 2. 恢复旧版本号
TAG=2.28.1.0
# 3. 启动旧版本
docker compose up -d
# 4. 如果需要,恢复数据库备份
docker compose exec -T database psql -U geoserver geoserver < backup.sql
2.10 本章小结
本章详细介绍了 GeoServer Cloud 的环境准备和安装部署过程,主要内容包括:
-
系统要求:了解了硬件、操作系统和软件依赖的具体要求。
-
Docker 安装:在 Linux、macOS 和 Windows 系统上安装和配置 Docker。
-
获取镜像:从 Docker Hub 获取官方镜像,并学习了镜像签名验证方法。
-
快速启动:使用 Docker Compose 文件快速部署 GeoServer Cloud。
-
基本配置:修改管理员密码、配置服务路径、数据卷和日志等。
-
服务管理:启动、停止、扩缩容和查看日志等操作命令。
-
故障排除:常见问题的诊断和解决方法。
-
版本管理:升级策略和回滚步骤。
通过本章的学习,您应该能够成功部署一个可运行的 GeoServer Cloud 环境。在下一章中,我们将深入了解 GeoServer Cloud 的各个核心服务组件及其功能。
2.11 思考题
-
Docker Compose 和 Kubernetes 在部署 GeoServer Cloud 时各有什么优缺点?什么场景下应该选择哪种方式?
-
为什么建议使用 pgconfig(PostgreSQL)后端而不是 datadir(数据目录)后端?两者的主要区别是什么?
-
如何设计一个零停机时间的 GeoServer Cloud 升级方案?
-
在生产环境中,应该如何配置 Docker 日志以便于故障排查?
-
如果需要在防火墙严格的环境中部署 GeoServer Cloud,需要开放哪些端口?各端口的用途是什么?

浙公网安备 33010602011771号