GeoServer2.17與Jetty9在Windows上的最佳安裝實踐

1 JDK的選擇

我使用了adopted openjdk8.0.252,安裝簡便,只需添加2個環境變量(JAVA_HOME,JRE_HOME)即可。

我的安裝路徑:

C:\SDKs\adoptopen-jdk8.0.252

所以環境變量:

環境變量名
JAVA_HOME C:\SDKs\adoptopen-jdk8.0.252\
JRE_HOME C:\SDKs\adoptopen-jdk8.0.252\jre

2 Jetty 9

選擇的理由是嘗鮮,看看部署起來和tomcat有什麼區別,雖然不是後端開發出身,不過喜歡體驗新組合新事物。

安裝路徑:C:\WebServers\jetty-distribution-9.4.28.v20200408

修改端口

默認端口是8080,我打算改成6700

打開安裝路徑下的start.ini

找到注釋行:

# jetty.http.port=8080

解開注釋,修改端口:

jetty.http.port=6700

作為Windows服務啟動

不想每次都雙擊start.jar文件,Windows服務是一個不錯的選擇。

到github上下載一個叫Winsw的小工具,倉庫地址:

//github.com/winsw/winsw

到release頁面下載合適的版本即可,把下載到的exe程序放到安裝路徑下,創建與exe文件名一樣的xml文件:

<!-- 假設exe文件名被我改成winsw.exe,那麼這個xml的文件名就是winsw.xml -->
<service>
    <id>Jetty9</id>
    <name>Apache Jetty 9</name>
    <description>你的描述</description>
    <executable>java</executable>
    <arguments>-jar start.jar</arguments>
</service>

id、name、description都可以自己寫,只要你認得就可以,id要唯一。

executable是可執行程序,arguments是可執行程序傳入的參數,這裡就是說用java.exe程序執行參數-jar start.jar

當然,如果沒有JAVA_HOME配置環境變量,那麼就要寫全java程序的絕對路徑了。因為這個xml文件和start.jar同級,start.jar的路徑就不需要絕對路徑了。

然後打開cmd,定位到安裝目錄下,執行下列命令:

winsw.exe install

就能安裝成Windows服務了:

3 war包安裝geoserver

這一步很簡單,下載stable版本的geoserver-war包,放到jetty安裝目錄下的webapps目錄下,重啟jetty服務,過一會兒,訪問這個路徑就可以了:

//localhost:6700/geoserver

4 跨域和gwc、默認數據路徑配置

jetty9有個和tomcat9不太一樣的地方,就是war包不會解壓到webapps下,會解壓到一個系統臨時目錄去。

這對於要增加geoserver插件、修改geoserver配置的任務來說,有點不對勁。

查了查資料,jetty和tomcat對war包的處理方式並不一樣。

引用資料

jetty中處理war包解壓的代碼是:org.eclipse.jetty.util.resource.JarResource。使用JarInputStream來讀取war文件,JarInputStream是首先處理可選的META-INF/MANIFEST.MF文件,也就是說getNextJarEntry方法不可能處理META-INF/MANIFEST.MF文件了,因此jetty會在處理完所有的JarEntry後,自己處理META-INF/MANIFEST.MF文件。但是,這樣做的後果就是,不能設置解壓出來的META-INF/MANIFEST.MF文件的最後修改時間。

tomcat中處理war包解壓的代碼:org.apache.catalina.startup.ExpandWar。使用JarFile來讀取war文件,這樣可以獲得war中所有的JarEntry,不需要自己去處理META-INF/MANIFEST.MF文件。

顯然,tomcat的做法更合理一些,其保證了解壓出來的文件具有和war中文件一樣的最後修改時間。

解壓到jetty安裝目錄

在jetty安裝目錄下創建work文件夾,重啟jetty後就能看到war包解壓的文件了。

點進去就能找到WEB-INF/web.xml文件了,也能加jar包擴展geoserver了。

跨域很好解決,把WEB-INF/web.xml內有關的配置解開注釋即可,與tomcat配置法相同,不再贅述(需要添加額外的jar包請自己下載)。

gwc緩存路徑設置

打開WEB-INF/web.xml後,添加一項:

重啟後,GWC的緩存路徑就重新定向了,媽媽再也不用擔心我的webapp越來越肥。

GEOSERVER_DATADIR也一樣。