我最近正在设置一个在 Windows 上的 Tomcat 上运行的 Web 应用程序。我必须做的事情如下:
- 将 Tomcat 解压到我想要的任何文件夹中
- 复制包含我的 Web 应用程序的文件夹
./webapps
(相对于 tomcat 根目录显示) - 在 Tomcat 的某些配置文件中设置 JRE 路径
- 运行
startup.bat
- 这个生成的控制台窗口具有有用的调试输出
Linux 的情况似乎完全不同。通常通过 执行安装后apt
,tomcat 已经在运行。它也是跨文件系统占用大量不同的文件夹。服务器是自动启动的,无论是否有java(据我所知,实际上我还没有Java),所以没有控制台输出。不过,某处一定有包含日志的文件夹。
所以我的问题是如何使用 Tomcat 执行我在 Windows 上所做的操作。我需要重现该方法,甚至自动化该方法。如果我可以制作可以设置 Tomcat 的批处理安装程序,那就太好了。和我的网络应用程序 - 但这不是问题。
答案1
Tomcat的自动化部署
在 Linux 上开箱即用地安装 Tomcat,或者使用apt
您选择的包管理器很容易;但正如您所指出的,很难知道所有东西都在哪里以及配置了什么。
我发现在 Linux 上自动化 Tomcat 安装的最可配置的方法是使用 Chef。这厨师DK可以安装,然后使用雄猫食谱对于 Chef,您可以一次又一次地配置和部署 Chef!
使用 Chef 安装 Tomcat 的优点是能够以标准、可支持且符合 Linux 上安装 Tomcat 文档的方式一致地安装 Tomcat。
Java 先决条件
Tomcat 食谱不安装 Java,所以通常我结合Java 食谱使用 Tomcat 自动安装 JRE。
Chef角色安装Tomcat
下面是一个例子厨师角色我曾经将 JRE 和 Tomcat 部署到 Linux 机器上。
- 安装JRE和Tomcat的主要两个步骤在
run_list
JSON文件部分 - Chef 角色的部分
override_attributes
设置 Java 和 Tomcat 配方的属性。
{
"name": "java-appserver-small",
"default_attributes": {},
"override_attributes": {
"java": {
"jdk_version": "7"
},
"oracle": {
"accept_oracle_download_terms": true
},
"tomcat": {
"java_options": "${JAVA_OPTS} -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx3g -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled"
}
},
"json_class": "Chef::Role",
"description": "Role for Java Apps Servers using OpenJDK7 - 15GB Memory",
"chef_type": "role",
"run_list": [
"recipe[java]",
"recipe[tomcat]"
]
}
这是一个学习曲线,但是一旦您知道如何使用 Chef 在 Linux 上实现任何自动化,这就是快速重新部署和自动化您能想象到的任何事物的良好开端。
自动部署应用程序 (WAR)
您可以向 Chef 角色添加第三个配方,该角色将在 Tomcat 上部署应用程序。一般是雄猫可以配置 自动解压并部署战争文件。
修改run_list
角色以包含另一个配方:
"run_list": [
"recipe[java]",
"recipe[tomcat]",
"recipe[app-deploy]"
]
在 Linux 实例上从本地文件部署 WAR
菜谱厨师将使用app-deploy
一组指令将预定义的 WAR 文件复制到 Tomcat网络应用程序目录。在下面的配方示例中,WAR 文件路径是在一个单独的文件中定义的属性文件,但您也可以对要从中复制的位置进行硬编码。
#
# Cookbook Name:: myChefCookbook
# Recipe:: app-deploy
#
# This recipe only installs the application.
# Base app server is setup via the java app server role.
#
# Copy WAR to webapps for auto-deployment
execute "cp #{node['myappfile']} /var/lib/tomcat/webapps/" do
action :run
not_if { File.exist?("/var/lib/tomcat/webapps/#{server_file(node['myappfile'])}") }
end
该配方复制 WAR 文件,Tomcat 部署它。
将 WAR 从 AWS S3 存储桶部署到 AWS linux 实例
下面的最后一个配方示例从 Amazon 复制(使用 AWS 工具)WAR 文件S3桶到Linux实例在 Amazon Web Services 云提供商中运行由 Chef 部署的 Tomcat。
# Copy WAR to webapps for auto-deployment - Requires that the instance have role with access to bucket
execute "aws s3 cp #{node['urls']['myappurl']} /var/lib/tomcat/webapps/" do
action :run
not_if { File.exist?("/var/lib/tomcat/webapps/#{server_file(node['urls']['myappurl'])}") }
end