Tomcat的自动化部署

Tomcat的自动化部署

我最近正在设置一个在 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_listJSON文件部分
  • 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

相关内容