GeoServer源码在eclipse上构建并在Docker部署发布

GeoServer 源码在 eclipse 上构建

1.环境准备
安装 jdk,安装 Maven 2.下载源码
https://geoserver.org/release/stable/,选择源码下载,解压并在src目录下cmd使用Maven构建

3.构建
新版本尽量 java11 以上–环境变量改回原来 java8 的路径即可

1
mvn clean install -Dmaven.test.skip=true //清class文件,打包构建,跳过测试

打开 cmd,切换到源码目录的 src 底下,写入命令:

1
mvn eclipse:eclipse

4.eclipse 导入源码
File→Import,

导入时候选择已经存在的工程:Existing Project into workspace

切换目录到已经部署好的 src 目录底下,单击【finish】即可

找到 gs-web-app 目录底下的 Start.java,右击【Run as】|【Java Application】

在浏览器输入地址:
http://localhost:8080/geoserver/web
一般默认登录账号为 admin,密码是 geoserver

正常来说,至此在 eclipse 中已经可以启动 geoserver 了。但是,我在处理时,引入工程后,有些工程是报错的:

Eclipse 中有一种叫做存取限制的机制,来防止你错误使用那些非共享的 API。通常来说,Eclipse 做的是对的,因为两点,我们不想要使用非共享 API 的,而且 Eclipse 知道什么是共享的和非共享的 API。但是有时我们想要使用非共享的 API,比如说用 gmail 来发送和接收邮件,要用到 SSL。这个就是非共享的 API。这时候我们就要更改一些设置了。
更改的步骤如下:
window-Preferences-java-compiler-Error/Warning-Deprecated and restricted API-Forbidden reference 那里,设置成 Ignore 即可

二次开发

  1. 源码导入到 eclipse 中

  2. 右键工程-export-web-war file

  3. 导出 war 文件放入 webapps 上并重启 tomcat 即可

    上述如不行:

    则需要在项目 src\web\app 下,运行 cmd:执行命令进行打包

    1
    mvn clean install -DskipTests

    重点,如要其他项目架包,则在 eclipse 中右键去到当前项目架包 src 下,删掉 target 文件,然后在文件路径栏下 cmd 运行 mvn 命令

    1
    mvn clean install -DskipTests

    成功后在 target 找到当前项目架包 并替换在 tomcat 的 geoserver 下 lib 目录下即可

Docker 部署发布

1.环境准备
已安装 Docker
在线安装命令

1
2
3
4
5
6
7
8
9
10
脚本安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
完毕

rpm安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
完毕

Docker 配置镜像加速器,使用阿里云加速器

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

个人加速地址登陆阿里云并在控制台中搜索“容器镜像服务 ACR“- “镜像加速“内有 2.创建 tomcat 镜像并将发布好 geoserver.war 文件放入 webapps
//需要挂载配置文件 server.xml 和 web.xml、webapps、mapwebapps(为 geoserver)。后续需要配置 https 再进行证书路径配置或者可以放置 conf 中。

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
27
docker run -d --name tomcat -p 7078:7078 -e TZ=Asia/Shanghai   -v /usr/applin/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml   -v /usr/applin/tomcat/conf/web.xml:/usr/local/tomcat/conf/web.xml   -v /usr/applin/tomcat/webapps:/usr/local/tomcat/webapps   -v /usr/applin/tomcat/logs:/usr/local/tomcat/logs -v /usr/applin/tomcat/cert:/usr/local/tomcat/cert --network lzx tomcat

解释
-d 后台运行
--name 容器名称为tomcat
-p 配置端口7078
-e TZ=Asia/Shanghai //配置时区
-v 本地挂载配置server.xml,需要配置端口
-v 本地挂载配置web.xml
-v 本地挂载配置logs tomcat启动日志
-v 本地挂载配置webapps
--network 加入网络lzx
无法挂载lib,只能先创建容器后再进行将jar复制到容器中。
docker cp /usr/applin/tomcat/lib tomcat:/usr/local/tomcat
*在使用原有镜像tomcat的lib中发现报错,而且本身也需要添加java-property-utils-1.9.jar和cors-filter-1.7.jar两个架包 *

重新启动
docker start tomcat

进入容器:docker exec -it tomcat bash

映像中的默认 Tomcat 环境为:
CATALINA_BASE: /usr/local/tomcat
CATALINA_HOME: /usr/local/tomcat
CATALINA_TMPDIR: /usr/local/tomcat/temp
JRE_HOME: /usr
CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

配置文件位于 “/usr/local/tomcat/conf/“中。默认情况下,操作“/manager/html”Web 应用程序所需的“manager-gui”角色中不包含任何用户。如果要使用此应用,则必须在 中定义此类用户”tomcat-users.xml”。
3.geoserver 的数据 data 文件配置
在 geoserver\WEB-INF\web.xml 中找到 GEOSERVER_DATA_DIR,并将该节点的路径改为容器内,或者是挂载到 tomcat 上的 data 路径【方便迁移】,否则将默认 geoserver/data 这个数据文件夹
顺便将 geoserver 部署至 tomcat

使用镜像 Nginx 代理

1.Docker 创建 Nginx 镜像
使用本地挂载数据卷,方便编写配置和映射数据

1
2
3
4
docker run -d --name nginx -p 80:80  -p 8080:8080 -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -p 8085:8085 -v /usr/applin/nginx/webapp:/usr/share/nginx/html -v /usr/applin/nginx/nginx.conf:/etc/nginx/nginx.conf --network lzx nginx

//启动nginx
docker start nginx

配置代理

server {
    listen       80;
    listen       [::]:80;
    server_name  【自己域名或location或_】;

 location / {
    rewrite ^/$ /geoserver/ permanent;
}

location /geoserver/ {
    proxy_pass http://tomcat:7078/geoserver/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
}

这里的 http://tomcat:7078/geoserver/;需要将 nginx 和 tomcat 加入 Docker 创建的网桥 lzx

1
2
3
docker network create lzx
docker network connect nginx lzx
docker network connect tomcat lzx