Tomcat 網路應用程式部署

目錄

簡介

部署是將網路應用程式(第三方 WAR 或您自己的自訂網路應用程式)安裝到 Tomcat 伺服器的程序。

網路應用程式部署可以在 Tomcat 伺服器中透過許多方式完成。

  • 靜態:在 Tomcat 啟動前設定網路應用程式
  • 動態:透過直接操作已部署的網路應用程式(仰賴自動部署功能)或遠端使用 Tomcat 管理員網路應用程式

Tomcat 管理員 是一個網路應用程式,可互動式(透過 HTML GUI)或以程式方式(透過基於 URL 的 API)用來部署和管理網路應用程式。

有許多方法可以執行部署,這些方法仰賴 Manager 網路應用程式。Apache Tomcat 提供 Apache Ant 建置工具的任務。Apache Tomcat Maven 外掛程式專案提供與 Apache Maven 的整合。還有一個稱為 Client Deployer 的工具,可以從命令列使用,並提供額外的功能,例如編譯和驗證網路應用程式,以及將網路應用程式封裝成網路應用程式資源 (WAR) 檔案。

安裝

靜態部署網路應用程式不需要安裝,因為 Tomcat 已內建提供此功能。使用 Tomcat Manager 的部署功能也不需要安裝,不過需要一些組態,詳情請參閱Tomcat Manager 手冊。但是,如果您想要使用 Tomcat Client Deployer (TCD),則需要安裝。

TCD 未與 Tomcat 核心發行版一同封裝,因此必須從下載區另外下載。下載檔通常標示為apache-tomcat-10.1.x-deployer

TCD 的先決條件為 Apache Ant 1.6.2+ 和 Java 安裝。您的環境應該定義一個 ANT_HOME 環境值,指向您的 Ant 安裝的根目錄,以及一個 JAVA_HOME 值,指向您的 Java 安裝。此外,您應該確保 Ant 的 ant 指令和 Java javac 編譯器指令可以從作業系統提供的命令殼層執行。

  1. 下載 TCD 發行版
  2. TCD 套件不需要解壓縮到任何現有的 Tomcat 安裝中,可以解壓縮到任何位置。
  3. 閱讀使用Tomcat Client Deployer

關於 Context 的說明

在討論網路應用程式的部署時,需要了解Context的概念。Context 是 Tomcat 稱呼網路應用程式的名稱。

要在 Tomcat 中組態 Context,需要一個Context 描述符。Context 描述符只是一個 XML 檔案,其中包含 Context 的 Tomcat 相關組態,例如命名資源或會話管理員組態。在較早版本的 Tomcat 中,Context 描述符組態的內容通常儲存在 Tomcat 的主要組態檔案server.xml中,但現在不建議這樣做(儘管目前仍然可行)。

Context 描述符不僅有助於 Tomcat 瞭解如何組態 Context,而且其他工具(例如 Tomcat Manager 和 TCD)通常會使用這些 Context 描述符來正確執行其角色。

Context 描述符的位置為

  1. $CATALINA_BASE/conf/[enginename]/[hostname]/[webappname].xml
  2. $CATALINA_BASE/webapps/[webappname]/META-INF/context.xml

(1) 中的檔案命名為 [webappname].xml,但 (2) 中的檔案命名為 context.xml。如果未為 Context 提供 Context 描述符,Tomcat 會使用預設值來組態 Context。

在 Tomcat 啟動時部署

如果您對使用 Tomcat Manager 或 TCD 沒有興趣,那麼您需要將您的網路應用程式靜態部署到 Tomcat,然後再啟動 Tomcat。您為此類部署部署網路應用程式的位址稱為 appBase,它是由每個主機指定的。您可以將所謂的已展開的網路應用程式(即未壓縮的應用程式)複製到此位址,或壓縮的網路應用程式資源 .WAR 檔案。

主機的 (預設主機為「localhost」) appBase 屬性 (預設 appBase 為「$CATALINA_BASE/webapps」) 所指定的位址中存在的網路應用程式,只有在主機的 deployOnStartup 屬性為「true」時,才會在 Tomcat 啟動時部署。

在這種情況下,Tomcat 啟動時會執行下列部署順序

  1. 任何 Context Descriptor 都會先部署。
  2. 接著會部署任何 Context Descriptor 沒有參照的已展開網路應用程式。如果它們在 appBase 中有相關聯的 .WAR 檔案,而且該檔案比已展開的網路應用程式更新,則會移除已展開的目錄,並從 .WAR 重新部署網路應用程式
  3. 會部署 .WAR 檔案

在執行中的 Tomcat 伺服器上部署

可以將網路應用程式部署到正在執行的 Tomcat 伺服器。

如果主機 autoDeploy 屬性為「true」,則主機會嘗試根據需要動態部署和更新網路應用程式,例如,如果將新的 .WAR 放入 appBase 中。為此,主機需要啟用背景處理,這是預設組態。

autoDeploy 設為「true」,而且正在執行的 Tomcat 允許

  • 部署複製到主機 appBase 中的 .WAR 檔案。
  • 部署複製到主機 appBase 中的已展開網路應用程式。
  • 在提供新的 .WAR 時,重新部署已從 .WAR 部署的網路應用程式。在這種情況下,會移除已展開的網路應用程式,並再次展開 .WAR。請注意,如果主機已設定為不使用 unpackWARs 屬性設定為「false」來展開 .WAR,則不會發生展開,在這種情況下,網路應用程式將僅重新部署為壓縮的檔案。
  • 如果 /WEB-INF/web.xml 檔案(或任何定義為 WatchedResource 的其他資源)已更新,則重新載入網路應用程式。
  • 如果已部署網路應用程式的 Context Descriptor 檔案已更新,則重新部署網路應用程式。
  • 如果網路應用程式使用的全域或每個主機的 Context Descriptor 檔案已更新,則重新部署相依的網路應用程式。
  • 如果將網頁應用程式的內容描述檔(其檔名對應至先前部署的網頁應用程式的內容路徑)新增至 $CATALINA_BASE/conf/[enginename]/[hostname]/ 目錄,則會重新部署該網頁應用程式。
  • 如果刪除網頁應用程式的文件基礎(docBase),則會取消部署該網頁應用程式。請注意,在 Windows 上,這假設已啟用防鎖定功能(請參閱內容設定),否則將無法刪除正在執行的網頁應用程式的資源。

請注意,網頁應用程式重新載入也可以在載入器中設定,如此一來,載入的類別將會追蹤變更。

使用 Tomcat 管理員部署

Tomcat 管理員會在 專屬的手冊頁面 中說明。

使用 Client Deployer 套件部署

最後,可以使用 Tomcat Client Deployer 來部署網頁應用程式。這是一個套件,可用於驗證、編譯、壓縮成 .WAR,以及將網頁應用程式部署至生產或開發 Tomcat 伺服器。請注意,此功能使用 Tomcat 管理員,因此目標 Tomcat 伺服器應執行中。

假設使用者熟悉 Apache Ant,才能使用 TCD。Apache Ant 是腳本建置工具。TCD 預先套件化建置腳本以供使用。只需對 Apache Ant 有基本的了解(如本頁面先前所列的安裝,以及熟悉使用作業系統命令殼層和設定環境變數)。

TCD 包含 Ant 任務、用於在部署前編譯 JSP 的 Jasper 頁面編譯器,以及驗證網頁應用程式內容描述檔的任務。驗證器任務(類別 org.apache.catalina.ant.ValidatorTask)只允許一個參數:已展開的網頁應用程式的基礎路徑。

TCD 使用已展開的網頁應用程式作為輸入(請參閱下方所使用的屬性清單)。使用部署器以程式方式部署的網頁應用程式可能在 /META-INF/context.xml 中包含內容描述檔。

TCD 包含一個可立即使用的 Ant 腳本,其中包含下列目標

  • 編譯(預設):編譯並驗證網頁應用程式。這可以獨立使用,不需要執行中的 Tomcat 伺服器。已編譯的應用程式只能在關聯的 Tomcat X.Y.Z 伺服器版本上執行,且不保證可以在其他 Tomcat 版本上執行,因為 Jasper 所產生的程式碼會依賴其執行時間元件。也請注意,此目標也會自動編譯位於網頁應用程式 /WEB-INF/classes 資料夾中的任何 Java 原始檔。
  • 部署:將網頁應用程式(已編譯或未編譯)部署至 Tomcat 伺服器。
  • undeploy:取消部署 Web 應用程式
  • start:啟動 Web 應用程式
  • reload:重新載入 Web 應用程式
  • stop:停止 Web 應用程式

為了設定部署,請在 TCD 安裝目錄根目錄建立一個名為 deployer.properties 的檔案。在此檔案中,請在每行新增下列名稱=值對

此外,您需要確保已為目標 Tomcat Manager(TCD 使用的)設定使用者,否則 TCD 將無法通過 Tomcat Manager 驗證,而部署將會失敗。為此,請參閱 Tomcat Manager 頁面。

  • build:預設將使用的建置資料夾為 ${build}/webapp/${path}(預設 ${build} 指向 ${basedir}/build)。執行 compile 目標後,Web 應用程式 .WAR 將位於 ${build}/webapp/${path}.war
  • webapp:包含要編譯和驗證的已展開 Web 應用程式的目錄。預設資料夾為 myapp
  • path:Web 應用程式的已部署內容路徑,預設為 /myapp
  • url:正在執行的 Tomcat 伺服器的 Tomcat Manager Web 應用程式的絕對 URL,將用於部署和取消部署 Web 應用程式。預設情況下,部署器將嘗試存取執行於本機端、位於 https://127.0.0.1:8080/manager/text 的 Tomcat 實例。
  • username:Tomcat Manager 使用者名稱(使用者應具有 manager-script 角色)
  • password:Tomcat Manager 密碼。