
私は最近、WindowsのTomcatで実行されるWebアプリケーションを設定しています。私がしなければならないことは次のとおりです。
- 目的のフォルダにTomcatを抽出します。
- 私のWebアプリケーションを含むフォルダをコピーします
./webapps
(Tomcatルートに基づいて表示されます)。 - Tomcatの一部の構成ファイルでJREパスを設定する
- 実行
startup.bat
- このコンソールウィンドウには便利なデバッグ出力があります。
Linuxの状況はまったく異なるようです。通常、インストール後、apt
Tomcatはすでに実行中です。それもファイルシステム全体でさまざまなフォルダを占有します。。サーバーはJavaがあるかどうかにかかわらず自動的に起動します(私が知っている限り、実際にはまだJavaがありません)、コンソール出力はありません。ただし、どこかにログを含むフォルダが必要です。
だから私の質問は、Windowsで私がしたことをTomcatを使って行う方法です。この方法を再現または自動化する必要があります。 Tomcatを設定できるバッチインストーラを作成できればいいと思います。そして私のWebアプリ - しかし、それは問題ではありません。
答え1
Tomcatの自動展開
デフォルトでは、LinuxにTomcatをインストールしたり、apt
選択したパッケージマネージャを使用するのは簡単ですが、指摘したように、すべてがどこにあり、何が構成されているかを知ることは困難です。
LinuxでTomcatのインストールを自動化するために私が見つけた最も設定可能な方法は、Chefを使用することです。これシェフDKインストール後に使用できます。トムキャットレシピChefを使用すると、Chefの構成と展開を継続できます。
Chef を使用して Tomcat をインストールすると、Linux に Tomcat インストールに関するドキュメントと一致する、サポートされている標準的な方法で一貫してインストールできるという利点があります。
Javaの前提条件
TomcatレシピはJavaをインストールしないので、通常は組み合わせます。JavaレシピTomcatを使用してJREを自動的にインストールします。
ChefロールはTomcatをインストールします。
以下は例ですシェフの役割JREとTomcatをLinuxシステムにデプロイしました。
- JREとTomcatをインストールする主な2つの手順は、
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)
Tomcatにアプリケーションをデプロイする3番目のレシピをChefロールに追加できます。通常浮気設定可能 自動的に解凍と配布戦争文書。
run_list
他のレシピを含めるように役割を変更します。
"run_list": [
"recipe[java]",
"recipe[tomcat]",
"recipe[app-deploy]"
]
LinuxインスタンスのローカルファイルからWARをデプロイする
Recipe Chefはapp-deploy
一連の指示を使用して、事前定義されたWARファイルをTomcatにコピーします。Webアプリケーションディレクトリ。以下のレシピの例では、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がそれを配布します。
AWS S3 バケットから AWS Linux インスタンスへの WAR デプロイ
以下の最後のレシピの例は、AmazonのWARファイルをコピーします(AWSツールを使用)。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