今天我們要來認識一下tomcat,與介紹如何將我們的Spring Boot打包成一個war檔做發佈,Spring Boot還有一個打包的方式是用jar檔來做為打包,但是我們要介紹的是使用war檔來做佈署,之後會介紹如何在Spring Boot內自己註冊一個SSL憑證,在此我還是推薦向第三方申請SSL憑證再掛載到伺服器上也是可以的
tomcat是一個開源Java Servlet 容器(Container),它與Apache都是網路伺服器,我們可以直接使用Apache tomcat來對我們的專案做佈署,但是他的功能還是有受限的,並沒有網路服務器(ex:Apache Server)這麼完整的功能,最主要的目的是用來執行我們的應用,讓客戶端(client)調用程式中的方法(methods),Apache Server無法去解析Java程式,所以為了要支援可以解析Java程式讓Java程式包在一個容器中,tomcat就因此被創造出來了.
我在第七天的時候有介紹tomcat的下載,為了讀者方便我在這邊再重新的介紹tomcat下載到佈署流程
1.下載 Apache Tomcat
到此連結中選擇一個tomcat版本下載 (http://tomcat.apache.org/ ),如果您是使用JDK1.8 建議安裝tomcat8 的版本
2.讓我們打該tomcat資料夾來認識一下tomcat的資料夾與檔案吧~
bin
:tomcat的執行檔案皆在此資料夾內conf
:tomcat伺服器設定檔皆在此資料夾內log
:tomcat的log紀錄檔案最主要的預設名稱為catalina.日期.log檔案,所有tomcat預設輸出的錯誤或訊息都會存放於這個檔案內work
:當tomcat執行時變會將原生webapps內的檔案產生於work資料夾內,裡面會生成java的.class檔案temp
:當tomcat開始運行資料夾時會產生一個暫存檔的資料夾,他會記錄著專案的一些暫存檔打開我們的專案對專案點選右鍵->Run as ->run configuration->將Main的Goals改成package(打包),如下圖
執行Goals時,會先執行測試程式,來驗證程式是否有錯誤->開始下載依賴封裝進war裡面如果你選擇使用jar封裝方式他則會將程式封裝成jar檔,成功後如下圖
當看到Console 出現 Build Success!! 代表封裝成功囉!! ,邁向我們的下一步 ,佈署專案吧
把視角切回到我們的tomcat目錄,專案我們都會命名成webapps-XXXX,複製一個原本的webapps->然後將名稱給成ex:webapps-tutorial,如下圖
將複製資料夾底下內的檔案全部清空,把我們打包好的war檔案丟到裡面,打包好的檔案會生成在你的專案路徑classpath的target資料夾內,如下圖
到這邊專案的佈署已經完成了,剩下來的事情交給tomcat吧!!!不過我們還是要先設定些東西的
打開conf->server.xml,這就是我們主要要設定的設定檔囉!!原生的設定檔我不將他列出來,我只列出我們要改的地方
<Host name="localhost" appBase="webapps-tutorial"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<HOST>
:每個HOST代表我們的虛擬主機,你可以設定多個Server,共用一個name,但是我們需要設定Context path來做filter動作,會依照你的path導到該目錄內,預設是在 webapps->ROOT資料夾
name
: 通常測試機都會使用localhost 代表指向著本機IP 127.0.0.1 ,當你要發佈到網路上你可將此IP設定為對外IP,通常我們會申請一組Domain name設置在這發佈於網路
appBase
: 是我們對應的虛擬目錄 ,在這邊我們要將資料夾預設路徑改成webapps->webapps-tutorial後按存檔
到這裡我們已經可以執行tomcat了
把目錄切到bin資料夾內,如下圖
點擊startup.bat來執行我們的tomcat
如果執行沒有報出錯誤訊息就會像圖片中內容差不多
這時如果我們輸入 (http://localhost:8080 )的話是找不到任何頁面的,原因你要切到剛剛我們放上war檔案內的資料夾就知道原因了
tomcat執行時會將war檔自動解包,變成一個folder我們只要更改一下網址就可以看到東西了,如下圖
如果你想使用的Port有在使用想更改的話可以到server.xml找到
<Connector port="8087" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
將8080改成你要的port 我設為 8087
只要將圖片命名成favicon.ico存到 resources->static資料夾內即可,記得測試要重新整理專案才看的到
server.ssl.key-store: classpath:(keystore名稱)
server.ssl.key-store-password: #SSL密碼
server.ssl.keyStoreType: PKCS12 # keyStoreType 下指令的時候對應的type
server.ssl.keyAlias: (你的key別名) # keyStore別名 我們給這個key的別名
開啟CMD切換到JDK下的bin目錄,執行 keytool -genkey -alias tomcat-tutorial -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore123 -validity 3650
看到底下圖畫面做註冊
成功後會看到bin資料夾內多了key的檔案
1.這29天來你已經完成了一個Spring Boot MVC框架的專案,恭喜您,離Java後端工程師只差一點點了,在我們範例中,你可以在最後的列表頁與內頁將delete,add,update按鈕的方法試著自己完成他,這個部份是要留給讀者您去做練習的,你可以按照我的RESTful Web Service的章節去思考如何去新增,修改,刪除資料
2.我這邊沒有用Docker做佈署的原因是因為這兩種方式的佈署目前公司都有在使用唷~,要每種方式都做練習,試著自己發佈自己的專案就會對發佈更加認識了
3.我沒有時間把最完整從佈署到建一個apache server用proxy轉道容器上沒時間,打到這已經晚上11點多了
1.(https://panmin.github.io/2017/06/06/spring-boot%E4%B8%AD%E4%BD%BF%E7%94%A8https/ )
2.(https://read01.com/zh-tw/zk3eL.html#.Wl88wa6WZhE )
3.(https://www.zhihu.com/question/37155807 )
1.我們可以安裝Apache Server或者 nginx 來做為我們的Load Balance Server用Proxy的方式從 http 80 port入口導到我們的容器入口,這樣的話我們就可以在tomcat上佈署多個專案了
備註: https port為443
2.如果你要掛載憑證的話需要設定於Apache Server 或nginx的設定檔 ,在設定檔中加入您的https金鑰