2009-02-24 180 views
9

我想收集一些關於將Web應用程序部署到正在運行的Tomcat的最佳實踐。不久前,我不得不描述我們的Web應用程序的部署過程,並且這個過程顯得相當混亂。我們有一個WAR文件(foo.war)中的應用程序正確配置,不需要額外的配置。在這種情況下,部署過程相當簡單:將Web應用程序部署到正在運行的Tomcat

  • 將foo.war文件複製到$ CATALINA_HOME/webapps目錄。如果應用程序正確啓動,應用程序將自動部署到$ CATALINA_HOME/webapps/foo目錄。

要取消部署應用程序:

  • 從$ CATALINA_HOME/webapps中刪除foo.war文件。如果應用程序卸載正確,它將被卸載,$ CATALINA_HOME/webapps/foo將被刪除。

現在我想重寫我正在運行的應用程序中的一些上下文參數。讀了docs,所有我需要做的:

  1. 創建一個名爲foo.xml
  2. 將文件複製到$ CATALINA_BASE/conf目錄/ [引擎]/[主機名] /目錄下的context.xml文件。

不幸的是,這沒有奏效:應用程序不會重新啓動。從經驗上講,我們發現唯一的解決方案是將war文件部署到$ CATALINA_HOME/webapps之外的位置。 此外,應該在web.xml中指定WAR文件中可配置上下文參數的缺省值,因爲WAR文件中的context.xml在外面有context.xml時不會被讀取。

這裏是foo.xml的一個簡單的例子:

<?xml version='1.0' encoding='utf-8'?>       
<Context docBase="/path-to-deployment-directory/foo.war"> 
    <Parameter name="myparam" value="newvalue" override="false"/> 
</Context> 

要確保,如果你想在「NEWVALUE」覆蓋在WAR的web.xml中指定的值,以指定倍率= false爲參數。這對我們來說並不明顯。

因此,到aplication部署到運行Tomcat:

  1. 創建一個名爲foo.xml
  2. 將文件複製到$ CATALINA_BASE/conf目錄/ [引擎]/[主機名context.xml文件]/ 目錄。
  3. 將foo.war複製到foo.xml的docBase中指定的位置;該應用程序將自動部署。

要申請新的環境參數:

  • 添加參數值到foo.xml並保存文件;該應用程序將自動重新部署。

要取消部署應用程序:

  • 從$ CATALINA_BASE/conf目錄/ [引擎]/[主機名] /目錄

請注意,移除foo的取出foo.xml。戰爭也會奏效,但也會刪除foo.xml。


到現在爲止,我有以下問題:

  1. 它是一個最佳實踐在所有不停止Tomcat的部署Web應用程序?我聽說一個意見,即部署到正在運行的tomcat從不需要,因爲人們在單獨的tomcat中運行每個應用程序。
  2. 將WAR文件複製到$ CATALINA_HOME/webapps還是將它們保存在一個單獨的位置最好?
  3. 如何配置部署到$ CATALINA_HOME/webapps的應用程序
  4. 爲什麼catalina.out中沒有INFO行來部署應用程序,並且有一個用於取消部署?它是可配置的嗎?

回答

0

一個解決方案是使用管理器應用程序。如果您認爲是安全的使用它,那麼你就可以輕鬆地部署,啓動,停止和取消部署應用程序:

http://localhost:8080/manager/deploy?path=[context_path] http://localhost:8080/manager/start?path=[context_path] http://localhost:8080/manager/stop?path=[context_path] http://localhost:8080/manager/undeploy?path=[context_path]

有螞蟻的任務,可以幫助您與這些。

我猜測,但不知道確定,停止並啓動應用程序將使其重新讀取context.xml。

關於你的第二個問題,我認爲維護的原因是將war文件保存在webapps目錄中。

1

問題(1)中,Tomcat非常適合將servlet部署到正在運行的服務器。有可能會擔心w.r.t.安全或可能D.O.S.或配置的原因,爲什麼你會有單獨的服務器實例。

您可以靈活地做到這一點,但部署到已經運行的服務器通常更方便。這是servlet體系結構中的內置功能。 :)

對於(2),您可以自行決定將WAR放在哪裏。這聽起來像你已經配置了一個非標準(非默認我應該說)的方式。檢查您的server.xml文件以獲取服務器實例中的設置。檢查unpackWARsautoDeploy等屬性。對於(3)和(4),再加上你的(1,2)問題,最好在其部署模型中參考你的Tomcat版本的Tomcat文檔,這可能是一個不錯的主意。您應該可以使用相同的文檔來確定您的服務器是如何配置的。

請參閱Tomcat手冊中的Tomcat Web Application Deployment,調整您的Tomcat版本。

相關問題