GeoServer2.17與Jetty9在Windows上的最佳安裝實踐
阿新 • • 發佈:2020-05-23
# 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有什麼區別,雖然不是後端開發出身,不過喜歡體驗新組合新事物。
> 2.16的geoserver預編譯包用的都是jetty了,就是下載的那個帶bin字樣的zip包。
安裝路徑:`C:\WebServers\jetty-distribution-9.4.28.v20200408`
## 修改埠
預設埠是8080,我打算改成6700
開啟安裝路徑下的`start.ini`
找到註釋行:
```ini
# jetty.http.port=8080
```
解開註釋,修改埠:
``` INI
jetty.http.port=6700
```
## 作為Windows服務啟動
不想每次都雙擊start.jar檔案,Windows服務是一個不錯的選擇。
到github上下載一個叫`Winsw`的小工具,倉庫地址:
```
https://github.com/winsw/winsw
```
到release頁面下載合適的版本即可,把下載到的exe程式放到安裝路徑下,建立與exe檔名一樣的xml檔案:
``` XML
Jetty9
Apache Jetty 9
你的描述
java
-jar start.jar
```
id、name、description都可以自己寫,只要你認得就可以,id要唯一。
executable是可執行程式,arguments是可執行程式傳入的引數,這裡就是說用java.exe程式執行引數`-jar start.jar`。
當然,如果沒有`JAVA_HOME`配置環境變數,那麼就要寫全java程式的絕對路徑了。因為這個xml檔案和start.jar同級,start.jar的路徑就不需要絕對路徑了。
然後開啟cmd,定位到安裝目錄下,執行下列命令:
``` powershell
winsw.exe install
```
就能安裝成Windows服務了:
![](https://img2020.cnblogs.com/blog/1097074/202005/1097074-20200523013401439-2062442164.png)
# 3 war包安裝geoserver
這一步很簡單,下載stable版本的geoserver-war包,放到jetty安裝目錄下的webapps目錄下,重啟jetty服務,過一會兒,訪問這個路徑就可以了:
```
http://localhost:6700/geoserver
```
# 4 跨域和gwc、預設資料路徑配置
jetty9有個和tomcat9不太一樣的地方,就是war包不會解壓到webapps下,會解壓到一個系統臨時目錄去。
這對於要增加geoserver外掛、修改geoserver配置的任務來說,有點不對勁。
查了查資料,jetty和tomcat對war包的處理方式並不一樣。
[引用資料](https://www.iteye.com/blog/weifly-1772051)
> 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包解壓的檔案了。
![](https://img2020.cnblogs.com/blog/1097074/202005/1097074-20200523013417140-1976398024.png)
點進去就能找到`WEB-INF/web.xml`檔案了,也能加jar包擴充套件geoserver了。
跨域很好解決,把`WEB-INF/web.xml`內有關的配置解開註釋即可,與tomcat配置法相同,不再贅述(需要新增額外的jar包請自己下載)。
## gwc快取路徑設定
開啟`WEB-INF/web.xml`後,新增一項:
![](https://img2020.cnblogs.com/blog/1097074/202005/1097074-20200523013426575-326887125.png)
重啟後,GWC的快取路徑就重新定向了,媽媽再也不用擔心我的webapp越來越肥。
GEOSERVER_DATADIR也一樣。
> 版權所有,自主研究,轉載請評論或私信告知。 https://www.cnblogs.com/onsummer/p/12940750.html
> 更多GIS運維、開發部落格見小專欄:https://xiaozhuanlan.com