欢迎光临
我们一直在努力

记录我的webgis项目(2):Geoserver + openlayer 项目 之 本地Docker部署Geoserver 和 云端 部署

前言

(还是仍然依旧叠甲,我也是菜鸟,悉知我的功力还很浅薄,如果有哪里做的不行欢迎批评指正,大部分后端代码都是借助AI 辅助编写的,可能会有些问题,遇到可留言指正)

上一篇咱们做好了geoserver在本地部署,但是geoserver在本地部署非常不好(好像是容易环境变量污染什么的),我们再尝试一下目前比较常用的Docker在本地进行部署,然后再在云端进行Linux+Docker 的geoserver部署,话不多说,直接开始。


一、Windows + Docker 本地部署 geoserver

1. 安装Docker

我们先下载Docker的安装包:下载地址,建议科学上网 。

下载好按照指引一步步安装就行。但是我们还需要安装一个WSL2。

2. 安装WSL2

程序面板 — 启用或关闭Windows 功能

勾选这俩。下完之后可以重启一下。

然后以管理员身份启动PowerShell。运行以下命令。

wsl –install

然后我们将wsl设置为WSL2版本

wsl –set-default-version 2

这就下完了。然后咱们打开刚才下好的Docker Desktop

可以把Docker镜像下载地址改一下。

还有自动更新想关就关。

3. 优化项目目录结构

为了让数据持久化并且方便管理,我们需要在本地创建挂载目录。在你的工作盘符(例如 D 盘)打开命令行(也可以直接右键新建),执行以下命令:

mkdir geoserver-project
cd geoserver-project
mkdir geoserver-data
mkdir postgis-data
mkdir fonts

这会建立的三个主要文件夹,分别用于存储 GeoServer 配置数据、PostGIS 数据库数据以及中文字体。

但是想一想以后还有后端代码和前端代码,咱们就再优化一下

/MyWebGISProject (总根目录)
├── /gis-infra (这就是创建的 geoserver-project,存环境)
│ ├── docker-compose.yml
│ ├── /geoserver-data
│ └── /postgis-data
├── /frontend (你的 前端 源码)
└── /backend (你的 Java/Spring Boot 源码)

像这样

4. 准备中文字体(为了正确渲染注记)

  • 进入你电脑的 C:\\Windows\\Fonts 目录。

  • 找到“微软雅黑”字体,将 msyh.ttc、msyhbd.ttc 和 msyhl.ttc 这三个文件复制出来。

  • 将它们放入你刚才创建的 geoserver-project/fonts 文件夹中。

5. 编写 docker-compose.yml 配置文件

在 geoserver-project 根目录下新建一个名为 docker-compose.yml 的文件,并将以下内容完整粘贴进去:

version: '3'

services:

postgis:
image: postgis/postgis:16-3.4 # 这是 PostGIS 镜像,可以根据需要改成其他版本
container_name: postgis # 容器名,可自定义,但 GeoServer 连接 host 时要保持一致
restart: always

environment:
POSTGRES_DB: gis # 可以改成你自己的数据库名
POSTGRES_USER: postgres # 可以改成你自己的用户名
POSTGRES_PASSWORD: 123456 # 必须改成强密码,尤其是云端

ports:
– "5433:5432" # 如果本地有 PostgreSQL 冲突,可改成其他端口 这里我改成了5433

volumes:
– ./postgis-data:/var/lib/postgresql/data # 本地目录映射,可自定义路径

geoserver:
image: kartoza/geoserver # GeoServer 官方 Docker 镜像
container_name: geoserver # 容器名,可自定义,但访问 URL 不变
restart: always

ports:
– "8084:8080" # 映射端口,可改,8084 是宿主机访问端口

environment:
GEOSERVER_ADMIN_USER: admin # 默认管理员用户名,可改
GEOSERVER_ADMIN_PASSWORD: 0164523 # 默认密码,一定要改

volumes:
– ./geoserver-data:/opt/geoserver/data_dir # 数据目录映射,可自定义
– ./fonts:/usr/share/fonts/custom # 字体挂载,本地或云端需要有字体文件或使用开源字体

depends_on:
– postgis # ✅ 保持不变,确保 GeoServer 启动前 PostGIS 已就绪

6. 启动并访问容器

  • 启动服务:在 docker-compose.yml 所在的目录打开终端,输入以下命令以后台模式启动容器。

  • cd 你的根目录
    docker-compose pull
    docker-compose up -d

  • 检查状态:运行 docker ps,如果你看到 geoserver 和 postgis 两个容器都在运行,说明启动成功。

  • 访问后台:打开浏览器,访问 http://localhost:8084/geoserver。

  • 登录账号:使用配置文件中设置的账号 admin 和密码 0164523 登录。

  • 成功登入,接下来把数据导入docker里的pgsql

    7. 修改python脚本

    对三个txt导入数据库的脚本进行修改

    每一个文件第二行的原代码:

    conn = psycopg2.connect(database="postgres", user="postgres", password="0164523", host="127.0.0.1", port="5432")

    修改为:

    conn = psycopg2.connect(database="gis", user="postgres", password="123456", host="127.0.0.1", port="5433")

    pref_pgn_txttopg.py这个文件SQL 建表语句中 COMMENT 引用了错误的表名

    原代码 (多处):

    COMMENT ON TABLE public.v6_time_pref_pgn_utf_wgs84 IS '第6版中国历史地理时间序列面数据';
    COMMENT ON COLUMN public.v6_time_pref_pgn_utf_wgs84.gid IS '主键ID';
    …(以此类推,共 18 行)

    改为:

    COMMENT ON TABLE public.v6_time_pref_pgn_utf_wgs84_geoserver IS '第6版中国历史地理时间序列面数据';
    COMMENT ON COLUMN public.v6_time_pref_pgn_utf_wgs84_geoserver.gid IS '主键ID';
    …(以此类推,共 18 行)

    也就是多了个_geoserver。

    改完之后运行一下,将数据导入到docker里面的pgsql

    8. 连接 PostGIS 数据库

    登录后,你需要让 GeoServer 连接到 Docker 里的 PostGIS

    在这之前,我们还是要做一些上一篇做过的操作先 修改读写权限 配置geoserver支持跨域,再添加新的工作区。然后我们就可以添加新的数据存储了:

    依次点击 Data(数据) → Stores(数据存储) → Add new Store(添加新的数据存储) → PostGIS。

    参数:

    参数值
    workspace mapgis
    host postgis
    port 5433
    database gis
    user postgres
    passwd 123456

    保存后,你就可以开始发布图层了。

    之后的操作就是比较和上一篇重复了,我们直接来看怎么进行云端部署。

    二、云端 Linux + Docker 部署 Geoserver

    1. 准备云服务器与连接

    购买/准备服务器:用的腾讯云,注册一个可以领试用。推荐使用 Ubuntu 系统(20.04 或 22.04 LTS),因为它的 Docker 环境最为兼容且社区文档详尽。

    获取连接信息:记录你的公网 IP、用户名、以及登录密码。

    连接工具:使用你习惯的工具,如 FinalShell、XShell 或 MobaXterm。我们用的是XShell

    新建 SSH 连接,输入公网 IP 和账号密码即可进入终端。

    2. 安装 Docker 基础环境

    进入云服务器终端后,依次执行以下命令:

    # 1. 更新软件包索引
    sudo apt update

    # 2. 安装 Docker
    sudo apt install docker.io -y

    # 3. 安装 Docker Compose
    sudo apt install docker-compose -y

    # 4. 启动并设置开机自启
    sudo systemctl start docker
    sudo systemctl enable docker

    输入 docker -v 和 docker-compose -v,如果能看到版本号,说明地基打好了。

    3. 上传项目文件

    这时候就能体现 Docker 最迷人的地方:“一次构建,随处运行”。

    一旦你在本地 Windows 上通过 Docker 跑通了整个流程,云端部署可以做到“丝滑搬迁”。如果把项目比作一盆花,Docker 就是那个自带土壤和自动灌溉系统的“花盆”,只需要把整个盆端到云端这块“地”上就行了。

    我们使用XShell链接我们的云服务器,然后用Xftp传输文件

    4. 配置安全组

    云服务器默认关闭所有端口,你需要去云厂商(腾讯云/阿里云/华为云)的后台控制台配置安全组

    协议 端口 来源 说明
    TCP 22 全部 (0.0.0.0/0) SSH 连接(默认已开)
    TCP 8084 全部 (0.0.0.0/0) GeoServer 访问端口
    TCP 5433 建议设为你的本地 IP PostGIS 数据库端口(如果你想在本地用 QGIS 连云端库)

    5. 验证与访问

    我们启动容器:

    docker-compose up -d

    检查容器状态:执行 docker ps,确保 geoserver 和 postgis 都是 Up 状态。

    浏览器访问: http://你的云服务器公网IP:8084/geoserver

    登录检查:使用你在 yml 里配置的账号密码登录。

    ok差不多就结束了


    总结

    ok,今天就到这了,主要就是使用Docker在本地和云端部署,下篇开始发布图层,和一些gis层面的操作,大家心急的可以先看大佬的教程,我们下篇见,拜拜!

    赞(0)
    未经允许不得转载:171主机测评 » 记录我的webgis项目(2):Geoserver + openlayer 项目 之 本地Docker部署Geoserver 和 云端 部署
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址