Deployment 将Web应用程序部署到正在运行的Tomcat

Deployment 将Web应用程序部署到正在运行的Tomcat,deployment,configuration,tomcat,servlets,Deployment,Configuration,Tomcat,Servlets,我想收集一些关于将web应用程序部署到运行中的Tomcat的最佳实践。不久前,我不得不描述我们的web应用程序的部署过程,这个过程看起来相当混乱 比如说,我们在WAR文件(foo.WAR)中正确配置了一个应用程序,不需要额外的配置。在这种情况下,部署过程相当简单: 将foo.war文件复制到$CATALINA_HOME/webapps目录。如果应用程序正确启动,应用程序将自动部署到$CATALINA_HOME/webapps/foo目录 要取消部署应用程序,请执行以下操作: 从$CATAL

我想收集一些关于将web应用程序部署到运行中的Tomcat的最佳实践。不久前,我不得不描述我们的web应用程序的部署过程,这个过程看起来相当混乱

比如说,我们在WAR文件(foo.WAR)中正确配置了一个应用程序,不需要额外的配置。在这种情况下,部署过程相当简单:

  • 将foo.war文件复制到$CATALINA_HOME/webapps目录。如果应用程序正确启动,应用程序将自动部署到$CATALINA_HOME/webapps/foo目录
要取消部署应用程序,请执行以下操作:

  • 从$CATALINA_HOME/webapps中删除foo.war文件。如果应用程序正确卸载,它将被卸载,并且$CATALINA_HOME/webapps/foo将被删除
现在,我想覆盖正在运行的应用程序中的一些上下文参数。在阅读了之后,我需要做的是:

  • 创建一个名为foo.xml的context.xml文件
  • 将文件复制到$CATALINA_BASE/conf/[engineame]/[hostname]/目录
  • 不幸的是,这不起作用:应用程序无法重新启动。根据经验,我们发现唯一有效的解决方案是将war文件部署到$CATALINA_HOME/webapps之外的位置。 此外,WAR文件中可配置上下文参数的默认值应在web.xml中指定,因为当外部有context.xml时,WAR文件中的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中指定的值,请确保为参数指定override=false。这对我们来说并不明显

    因此,要将应用程序部署到正在运行的Tomcat:

  • 创建一个名为foo.xml的context.xml文件
  • 将文件复制到$CATALINA_BASE/conf/[engineame]/[hostname]/目录
  • 将foo.war复制到foo.xml文档库中指定的位置;应用程序将自动部署
  • 要应用新的上下文参数,请执行以下操作:

    • 将参数值添加到foo.xml并保存文件;应用程序将自动重新部署
    要取消部署应用程序,请执行以下操作:

    • 从$CATALINA_BASE/conf/[enginename]/[hostname]/目录中删除foo.xml
    请注意,删除foo.war也可以,但也会删除foo.xml


    现在,我有以下问题:

  • 在不停止tomcat的情况下部署web应用程序是否是最佳实践?我听到一种观点,认为不需要部署到运行的tomcat,因为人们在单独的tomcat中运行每个应用程序
  • 将WAR文件复制到$CATALINA_HOME/webapps是个好主意,还是最好将其保存在单独的位置
  • 如何配置部署到$CATALINA_HOME/webapps的应用程序
  • 为什么catalina.out中没有用于部署应用程序的信息行,而有用于取消部署的信息行?它是可配置的吗

  • 一种解决方案是使用manager应用程序。如果您决定使用它是安全的,那么您可以轻松地部署、启动、停止和取消部署应用程序:

    有一些ant任务可以帮助您完成这些任务

    我猜测,但不确定,停止和启动应用程序会使它重新读取context.xml

    关于第二个问题,我认为出于维护原因,最好将war文件保存在webapps目录中。

    关于问题(1),Tomcat非常适合将servlet部署到正在运行的服务器中。可能会担心w.r.t.安全性,或者可能是D.O.S.或资源调配方面的原因,为什么您会有单独的服务器实例

    您可以灵活地使用这两种方法,但部署到已经运行的服务器通常更方便。这是servlet体系结构中的内置功能。:)

    对于第(2)条,你想把战争放在什么地方也是由你自己决定的。听起来您已经用非标准(我应该说是非默认)方式配置了它。检查server.xml文件以了解服务器实例中的设置。检查属性,如
    unpacwars
    autoDeploy

    对于(3)和(4)以及(1,2)个问题,最好查阅Tomcat文档,了解Tomcat版本的部署模型。您应该能够使用相同的文档来确定服务器是如何配置的

    请参阅Tomcat手册中的,调整您的Tomcat版本