iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 29
1

前言

今天我們要來認識一下tomcat,與介紹如何將我們的Spring Boot打包成一個war檔做發佈,Spring Boot還有一個打包的方式是用jar檔來做為打包,但是我們要介紹的是使用war檔來做佈署,之後會介紹如何在Spring Boot內自己註冊一個SSL憑證,在此我還是推薦向第三方申請SSL憑證再掛載到伺服器上也是可以的

What is tomcat?

tomcat是一個開源Java Servlet 容器(Container),它與Apache都是網路伺服器,我們可以直接使用Apache tomcat來對我們的專案做佈署,但是他的功能還是有受限的,並沒有網路服務器(ex:Apache Server)這麼完整的功能,最主要的目的是用來執行我們的應用,讓客戶端(client)調用程式中的方法(methods),Apache Server無法去解析Java程式,所以為了要支援可以解析Java程式讓Java程式包在一個容器中,tomcat就因此被創造出來了.

tomcat下載

我在第七天的時候有介紹tomcat的下載,為了讀者方便我在這邊再重新的介紹tomcat下載到佈署流程
1.下載 Apache Tomcat

到此連結中選擇一個tomcat版本下載 (http://tomcat.apache.org/ ),如果您是使用JDK1.8 建議安裝tomcat8 的版本

2.讓我們打該tomcat資料夾來認識一下tomcat的資料夾與檔案吧~
https://ithelp.ithome.com.tw/upload/images/20180117/20107812sm43nCCsiJ.png

  • 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(打包),如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/20107812Dvaoa8hNZV.png

執行Goals時,會先執行測試程式,來驗證程式是否有錯誤->開始下載依賴封裝進war裡面如果你選擇使用jar封裝方式他則會將程式封裝成jar檔,成功後如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/201078125Rv0dwRWjx.png

當看到Console 出現 Build Success!! 代表封裝成功囉!! ,邁向我們的下一步 ,佈署專案吧

https://ithelp.ithome.com.tw/upload/images/20180117/20107812iWa0S3K0U5.png

如何佈署war檔

把視角切回到我們的tomcat目錄,專案我們都會命名成webapps-XXXX,複製一個原本的webapps->然後將名稱給成ex:webapps-tutorial,如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/20107812ZJxAPnX5V2.png

將複製資料夾底下內的檔案全部清空,把我們打包好的war檔案丟到裡面,打包好的檔案會生成在你的專案路徑classpath的target資料夾內,如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/20107812PpUPNtO3v4.png

到這邊專案的佈署已經完成了,剩下來的事情交給tomcat吧!!!不過我們還是要先設定些東西的

tomcat的配置 server.xml

打開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了

tomcat如何啟動

把目錄切到bin資料夾內,如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/20107812zv1C18SYue.png

點擊startup.bat來執行我們的tomcat

https://ithelp.ithome.com.tw/upload/images/20180117/20107812Hpc6lSyU3q.png

如果執行沒有報出錯誤訊息就會像圖片中內容差不多

這時如果我們輸入 (http://localhost:8080 )的話是找不到任何頁面的,原因你要切到剛剛我們放上war檔案內的資料夾就知道原因了

https://ithelp.ithome.com.tw/upload/images/20180117/20107812EDt8nifWIb.png

tomcat執行時會將war檔自動解包,變成一個folder我們只要更改一下網址就可以看到東西了,如下圖

https://ithelp.ithome.com.tw/upload/images/20180117/20107812DTtMP00gCf.png

更改啟動的Port

如果你想使用的Port有在使用想更改的話可以到server.xml找到

   <Connector port="8087" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

將8080改成你要的port 我設為 8087

更改瀏覽器頁面中左上面的Icon

只要將圖片命名成favicon.ico存到 resources->static資料夾內即可,記得測試要重新整理專案才看的到

Spring Boot如何加入SSL憑證

application.properties配置

server.ssl.key-store: classpath:(keystore名稱)
server.ssl.key-store-password:  #SSL密碼
server.ssl.keyStoreType: PKCS12 # keyStoreType 下指令的時候對應的type
server.ssl.keyAlias: (你的key別名)  # keyStore別名 我們給這個key的別名

自己註冊一個SSL

開啟CMD切換到JDK下的bin目錄,執行 keytool -genkey -alias tomcat-tutorial -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore123 -validity 3650
看到底下圖畫面做註冊
https://ithelp.ithome.com.tw/upload/images/20180117/20107812KOtZfuUr3D.png

成功後會看到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金鑰


上一篇
Day28 Spring Boot發佈篇-認識Docker(上)
下一篇
Day30 Spring MVC完賽心得與Spring學習的未來建議
系列文
30天學習Spring MVC30

尚未有邦友留言

立即登入留言