tomcat - 如何将jar文件部署到tomcat7中的子域主机文件夹
问题描述
我tomact7
在centos上运行。
我example.com
在 tomcat 服务器上运行我的网站。我的server.xml
样子是这样的:
<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 "%r" %s %b" />
<Context docBase="ROOT" path="/" reloadable="true" source="org.eclipse.jst.jee.server:WebsiteHome"/>
</Host>
在我的项目pom
文件中,我正在使用tomcat7
插件。每当我有一个新的 war 文件时,我都会使用以下命令将其部署到 tomcat:
$ curl -X PUT -v -u username:password -T WebsiteHome-0.0.1.war 'http://localhost:8080/manager/text/deploy?path=/&update=true'
如果我想运行我的网站,我运行以下命令:
$ service tomcat start
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
我正在尝试运行一个域example.com
和一个子域academy.example.com
我修改了我的server.xml
文件;删除localhost
主机并添加 2 个新主机,如下所示:
<Host name="example.com" 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 "%r" %s %b" />
<Context docBase="ROOT" path="/" reloadable="true" source="org.eclipse.jst.jee.server:WebsiteHome"/>
</Host>
<Host name="academy.example.com" appBase="webapps2"
unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="ROOT" path="/" reloadable="true" source="org.eclipse.jst.jee.server:WebsiteTrainingCenter"/>
</Host>
之后我运行service tomcat restart
,tomcat会自动生成一些新的文件和目录
$ tree /usr/share/tomcat
.
├── bin
├── conf
│ ├── Catalina
│ │ ├── academy.example.co
│ │ ├── example.co
│ │ └── localhost
│ └── ... [OTHER-XML-FILES-HERE]
├── lib
├── logs
├── temp
├── webapps
├── docs
│ └── ...
├── examples
│ └── ...
├── host-manager
│ └── ...
├── manager
│ └── ...
├── ROOT
│ └── ...
└── sample
└── ...
├── webapps2
└── work
└── Catalina
├── academy.example.co
│ ├── _
│ ├── examples
│ ├── host-manager
│ └── sample
├── example.co
│ ├── _
│ ├── docs
│ ├── examples
│ ├── host-manager
│ ├── manager
│ └── sample
└── localhost
├── _
├── docs
├── examples
├── host-manager
├── manager
│ └── ...
└── sample
我的问题是我现在如何部署战争文件?如何使用前面的curl
命令指定我应该部署到哪个主机?
如果在删除localhost
主机并添加新主机后使用相同的 curl 命令,我会收到 404 错误:
$ curl -X PUT -v -u username:password -T WebsiteHome-0.0.1.war 'http://localhost:8080/manager/text/deploy?path=/&update=true'
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
* Server auth using Basic with user 'admin'
> PUT /manager/text/deploy?path=/&update=true HTTP/1.1
> Host: localhost:8080
> Authorization: Basic YWRtaW46YWRtaW5hZG1pbg==
> User-Agent: curl/7.61.1
> Accept: */*
> Content-Length: 176151710
> Expect: 100-continue
>
< HTTP/1.1 404 Not Found
< Server: Apache-Coyote/1.1
< Content-Length: 0
< Date: Wed, 26 Aug 2020 12:38:44 GMT
< Connection: close
<
* Closing connection 0
如何部署我的两个新战争文件(一个用于域,另一个用于子域),并指定每个应部署在不同的主机上?
解决方案
默认情况下,当Context
您的应用程序中没有定义管理器上下文时,就会设置管理器上下文。似乎server.xml
为了支持多个虚拟主机而进行了更改。
为了使您的curl
部署命令在新设置的虚拟主机中工作,您需要为每个虚拟主机设置管理器上下文,如文档所述:
如果您将 Tomcat 配置为支持多个虚拟主机(网站),则需要为每个虚拟主机配置一个管理器。
这就像从安装文件夹中包含manager
的默认文件夹复制文件夹并在您的:webapp.dist
tomcat7
Context
server.xml
<Host name="example.com" 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 "%r" %s %b" />
<Context docBase="ROOT" path="" reloadable="true" />
<Context docBase="manager" path="/manager" reloadable="true" privileged="true" />
</Host>
之后,您将能够通过在 URL 中指定虚拟主机而不是来访问curl
您的文件,如下所示:war
localhost
$ curl -X PUT -v -u username:password -T WebsiteHome-0.0.1.war 'http://example.com:8080/manager/text/deploy?path=/&update=true'
推荐阅读
- ruby-on-rails - Capistrano 不会使用 Bundler 部署 Rails 应用程序
- azure - Azure AAD 应用程序 ObjectId 和 ApplicationId 有什么区别?
- python - 如何按数字顺序导入图像?
- c++ - 围绕原点旋转多边形
- python - 尝试使用 python 和 bs4 从特定 'td' 中抓取所有 'a' 文本
- android - 如何在 API 级别 15 (Android 4.0.3) 上创建 Android (AVD) 模拟器
- python - 在另一个列表中查找包含 5 个连续字符串的单词
- python - 如何使用熊猫系列对条件进行矢量化?
- python - 在 Django 中测试 Url 是否给出 500 错误
- c# - 关闭的表单仍显示在任务栏中