如何在Tomcat 9的不同端口上部署多个Web应用程序?

卡米尔

我正在尝试在Tomcat 9的不同端口上部署spring应用程序。我想要实现的目标是:
1.保留其他应用程序的默认Tomcat配置,以将其部署webapps在端口8080上的文件夹中
。2.在端口8081上仅部署一个spring应用程序。在根路径上

因此,例如:
localhost:8080/app1
localhost:8080/app2
[...]
localhost:8081/

我为第二项服务创建了新文件夹:/var/lib/tomcat9/webapps_8081/
对于第一项服务,我将其保留在默认位置:/var/lib/tomcat9/webapps/

这是我的server.xml文件:

  <Service name="Catalina">

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

  <Service name="Catalina_8081">
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" />
    <Engine name="Catalina_8081" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps_8081" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

到目前为止我尝试过的结果是什么

方法1:将War文件放置在部署文件夹中

  1. 当我将myapp.war文件放入webapps文件夹时,它的部署没有任何问题localhost:8080/myapp

  2. 将myapp.war文件放入webapps_8081文件夹时,出现以下错误:

07-Sep-2019 15:20:29.370 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/var/lib/tomcat9/webapps_8081/myapp.war]
07-Sep-2019 15:20:29.384 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp]
 java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/myapp]

当我手动创建此文件夹时,日志显示该应用程序已被发送,但文件夹为空,部署本身仅需3毫秒。

  1. 当我将文件重命名ROOT.war并放置到webapps文件夹中时,它的部署没有任何问题:
07-Sep-2019 15:23:50.845 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/var/lib/tomcat9/webapps/ROOT.war]
07-Sep-2019 15:25:13.486 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TL$
07-Sep-2019 15:25:13.568 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/var/lib/tomcat9/webapps/ROOT.war] has finished in [82,722] ms

但是当打开localhost:8080/它给我404错误

  1. 当我将文件重命名为ROOT.war并将其放入webapps_8081文件夹时,出现与第2点相同的错误。

对我手动创建的文件夹的权限似乎有些问题,但是两者的权限都相同:webappswebapps_8081(我已将的组和所有者更改为tomcatuser webapps_8081):

$ sudo ls -l
drwxrwxr-x 3 tomcat tomcat     4096 Sep  7 14:31 webapps
drwxrwxr-x 2 tomcat tomcat     4096 Sep  7 14:04 webapps_8081

方法2:使用外部内容文件

作为第二种部署方法,我尝试使用上下文文件。我一直在关注克里斯托弗在该主题上的回答

我将战争文件放在了webapps文件夹之外: /var/lib/tomcat9/myapp.war

myapp.xml 文件:
<Context docBase="/var/lib/tomcat9/myapp.war"></Context>

  1. 我的地方myapp.xml/var/lib/tomcat9/conf/Catalina/localhost/osp.xml-应用程序表被成功部署localhost:8080/myapp

  2. 我的地方myapp.xml/var/lib/tomcat9/conf/Catalina_8081/localhost/osp.xml-我收到以下错误:

07-Sep-2019 16:09:33.483 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina_8081/localhost/myapp.xml]
07-Sep-2019 16:09:33.501 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/myapp]
 java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/myapp]
  1. 我重新命名myapp.xml,以ROOT.xml并把它放在/var/lib/tomcat9/conf/Catalina/localhost/ROOT.xml-按日志,应用程序被成功deplyed
07-Sep-2019 16:16:36.411 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.16 (Debian)]
07-Sep-2019 16:16:36.438 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina/localhost/ROOT.xml]
07-Sep-2019 16:18:06.839 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TL$
07-Sep-2019 16:18:06.923 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deployment of deployment descriptor [/etc/tomcat9/Catalina/localhost/ROOT.xml] has finished in [90,485] ms

但是当打开localhost:8080/它给我404错误

  1. 我重新命名myapp.xml,以ROOT.xml并把它放在/var/lib/tomcat9/conf/Catalina_8081/localhost/ROOT.xml-我收到以下错误:
07-Sep-2019 16:14:08.417 INFO [main] org.apache.catalina.startup.HostConfig.deployDescriptor Deploying deployment descriptor [/etc/tomcat9/Catalina_8081/localhost/ROOT.xml]
07-Sep-2019 16:14:08.434 SEVERE [main] org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context []
 java.io.IOException: Unable to create the directory [/var/lib/tomcat9/webapps_8081/ROOT]

如您所见,我在这里有两个主要问题。

问题1为什么Tomcat无法在其中创建新目录webapps_8081
问题2为什么将应用程序部署为ROOT.war且在常规映射上运行良好时为什么会出现404错误?

卡米尔

我能够解决问题。
首先,按照本主题中Dung所述的步骤,我已经完全重新安装了Tomcat,并删除了所有剩余的内容:如何从ubuntu 14.04完全删除tomcat 7这就解决了根映射的问题。因此,结果我不知道是什么原因造成的。

通过创建如何允许Tomcat war应用程序写入文件夹中所述的override.conf文件,解决了权限问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Tomcat上部署Web应用程序

如何在tomcat上部署Java Web应用程序(.war)?

如何在同一个Tomcat上部署具有外部配置的多个Spring Boot应用程序?

如何在天蓝色的两个不同端口上公开容器的Web应用程序?

如何在本地tomcat服务器上部署angular2应用程序?

如何在Tomcat 7上部署Grails 3应用程序?

如何在Tomcat服务器(Windows Server 2012)上部署Angular 2应用程序

Heroku:如何在客户端和服务器运行在不同端口上的情况下部署节点应用程序?

在Tomcat上部署多个Spring Boot应用程序时如何指定logging.config

如何在不同的端口上为我的 http 服务器提供 Angular 应用程序

如何配置两个不同的Web应用程序以在同一主机/端口上与Apache一起使用?

如何在Glassfish服务器上部署同一应用程序的多个副本?

如何将 2 个应用程序(同一个耳朵)部署到不同端口上的单个 jboss。甚至有可能吗?

如何在Web浏览器上部署Java Swing应用程序?

如何在单个应用程序服务上部署ASPNET Core Web API和ASPNET WebAPI

如何在 Ubuntu 18.10 服务器上部署使用 ParcelJS 构建的 Web 应用程序?

如何在 Web 服务器上部署 Java 应用程序

如何在IIS Express上部署MVC Web应用程序?

如何在 Kubernetes 上部署微服务 Web 应用程序?

如何在安装了Jenkins的情况下部署tomcat Web应用程序

如何在谷歌云计算机引擎上将 Web 应用程序部署到 tomcat

如何在Ubuntu上部署Amber应用程序?

如何在ubuntu上部署Play框架应用程序?

如何在Kubernetes上部署Kafka Stream应用程序?

如何在 Kubernetes 上部署 SGX 应用程序?

如何在IIS上部署WCF服务应用程序

如何在weblogic上部署Spring Boot应用程序?

如何在cpanel上部署nextjs应用程序?

如何在Heroku上部署Webpack应用程序?