Tomcat · 2 min read · Feb 14, 2026

Rexを使ったTomcatのインストールとWebアプリケーションのデプロイ

Rexを使ったTomcatのインストールとWebアプリケーションのデプロイ

このチュートリアルでは、Tomcatのインストールを管理し、Rexを使ってWebアプリを繰り返しデプロイする方法を示します。このチュートリアルではDebian Squeezeを使用しますが、Rexは他のディストリビューションでも利用可能です。

Rexの紹介

Rexは、Perlで書かれたツールで、多くのサーバーの管理とデプロイを容易にします。

ウェブサイトからの引用: Rexを使えば、すべてのボックスを中央のポイントから管理し、構成管理とソフトウェアデプロイの完全なプロセスを通じて管理できます。

Rexプロジェクトの出発点はRexfileです。Rexはこのファイルを解析し、サーバー上で定義されたタスクを実行します。Makefileのようなものですが、Perlで書かれています。

すべてのRexfileはタスクに分かれています。サーバーをインストールして構成するための論理的なステップごとにタスクを定義できます。

ソフトウェアの取得

作業ステーションにRexが必要です。サーバーには追加のソフトウェアは必要ありません。サーバーへのssh rootアクセスが必要です。

Rexはrexify.org/get/からダウンロードできます。CentOS、Debian、Ubuntu、Fedora、Mageia、OpenSuSE用のパッケージが利用可能です。ソースはCPANから入手できます。

Debianの場合、Rexリポジトリをsources.list.dディレクトリに追加します。

echo 'deb http://rex.linux-files.org/debian/ squeeze rex' >> /etc/apt/sources.list

その後、GPGキーをaptキーリングに追加します。

wget -O - http://rex.linux-files.org/DPKG-GPG-KEY-REXIFY-REPO | apt-key add -

そして、ソフトウェアをインストールします。コアツールのrexとデプロイモジュールのrex-apache-deployをインストールします。

apt-get update && apt-get install rex rex-apache-deploy

Rexfileを準備し、最初のタスクを実行する

まず、tomcatというディレクトリを作成し、その中に移動します。

mkdir tomcat; cd tomcat

その後、githubからRexのサンプルモジュールをlibディレクトリにチェックアウトします。tomcatとapacheのモジュールがあります。

git clone https://github.com/krimdomu/rex-example-modules.git lib

次に、Rexfileというファイルを作成し、お好みのエディタで開きます。vimを使用している場合は、次の行を使用して構文ハイライトを有効にできます。

:set ft=perl  
:syn on
# ファイル: Rexfile
# まずstrictとwarningsを有効にする
use strict;
use warnings;
# 必要なすべてのサンプルモジュールを含める
use ALLMODS;    # これにより、rexサンプルモジュールへのインクルードパスが設定されます
use apache;     # apacheモジュールを含める
use apache::module;
use tomcat;     # tomcatモジュールを含める
use tomcat::user;
use tomcat::role;
# サーバーにログインするためのユーザーとパスワードを設定
user "root";
password "test";
# パスワード認証を有効にする。
pass_auth;
# キー認証を使用する場合は、次の行を使用し、"pass_auth"の行をコメントアウトします
# public_key "/path/to/your/public.key";
# private_key "/path/to/your/private.key";
# "tomcat"という名前のサーバーグループを定義します。
# デプロイしたいすべてのサーバーをそのグループに入れます。
group tomcats => "tc01", "tc02";
desc "ApacheとTomcatのインストールと構成";
task "prepare", group => "tomcats", sub {
   apache::setup();
   apache::module::setup({name => "jk"});
   tomcat::setup();
   tomcat::role::add_manager();
   tomcat::user::add_manager({
      username => "manager",
      password => "passw0rd",
   });
   apache::restart();
   tomcat::restart();
   # サービスがシステム起動時に開始されることを確認
   service apache2 => "ensure", "started";
   service tomcat6 => "ensure", "started";
};

ファイルを保存し、ターミナルを開いてtomcatディレクトリに移動します。

作成したタスクをサーバーで実行するには、次の行のように呼び出します。

rex prepare

定義したタスクを表示したい場合は、-Tオプションを使用できます。

rex -T

Apache/modjkの構成

apacheとtomcatのインストール後、apache/modjkを構成してリクエストをtomcatにリダイレクトする必要があります。

これを実現するために、filesというディレクトリを作成し、そこに構成ファイルを保存します。

mkdir files
## ファイル: files/worker.properties
## このファイルはrexによって管理されています
##
worker.list=tc,jkstatus
worker.tomcat.port=8009
worker.tomcat.host=<%+ $::Network->{"networkconfiguration"}->{"eth0"}->{"ip"} %>
worker.tomcat.type=ajp13
worker.tomcat.lbfactor=1
worker.tomcat.reference=worker.template
worker.tc.type=lb
worker.tc.balance_workers=tomcat
worker.tc.sticky_session=false
worker.jkstatus.type=status
worker.template.type=ajp13

ここで、ファイル内に特別な変数があります。Rexには組み込みのテンプレートシステムがあります。この式を使うと、ネットワークデバイスeth0のIPが取得できます。

## ファイル: files/modjk.conf
## このファイルはrexによって管理されています
##
JkWorkersFile /etc/apache2/worker.properties
JkLogFile /var/log/apache2/mod_jk.log
JkShmFile /var/log/apache2/jk.shm
JkMount /* tc
# jkstatusマウントポイントを追加
JkMount /jkmanager/* jkstatus

    JkMount jkstatus

実際のシナリオではserver.xmlも必要です。しかし、このチュートリアルではAJPコネクタを有効にするためにファイルをパッチします。

次に、Rexfileを開き、2つ目のタスクconfigureを追加します。

desc "ApacheとTomcatの構成";
task "configure", group => "tomcats", sub {
   # デフォルトのvhostを削除
   unlink "/etc/apache2/sites-enabled/000-default";
   # ファイルをアップロードしますが、テンプレートとして解析します
   file "/etc/apache2/worker.properties",
      content   => template("files/worker.properties"),
      owner     => "root",
      group     => "root",
      mode      => 640,
      on_change => sub { apache::restart(); };
   # 構成ファイルをアップロード
   file "/etc/apache2/conf.d/modjk.conf",
      source    => "files/modjk.conf",
      owner     => "root",
      group     => "root",
      mode      => 640,
      on_change => sub { apache::restart(); };
   # ajpアクセスを許可するためにserver.xmlをパッチ
   # 実際の使用ではこのファイルのテンプレートを使用
   my $content = cat "/etc/tomcat6/server.xml";
   $content =~ s/<\/Service>/\n<\/Service>/;
   file "/etc/tomcat6/server.xml",
      content   => $content,
      on_change => sub { tomcat::restart(); };
};

これで、サーバーを構成するためにconfigureタスクを実行できます。

rex configure

アプリケーションのデプロイ

さて、サーバーをデプロイして構成した後、サーバーが提供するアプリケーションをアップロードする必要があります。

簡単なデプロイタスク用のRexモジュールがあり、Rex::Apache::Deployと呼ばれています。すでにインストールされています。

このハウツーでは、psi-probeをデプロイします。code.google.comからダウンロードできます。packagesというフォルダを作成し、zipアーカイブを解凍してprobe.warファイルをそのディレクトリにコピーします。

mkdir packages  
cd packages  
wget http://psi-probe.googlecode.com/files/probe-2.2.3.zip  
unzip probe-2.2.3.zip

次に、Rexfileを開き、他のuseコマンドに次の行を追加します。

# tomcatのデプロイメントサポートを含める
use Rex::Apache::Deploy "Tomcat";

そして、deployという3つ目のタスクを作成します。

desc "アプリケーションをデプロイ";
task "deploy", group => "tomcats", sub {
   # tomcatアプリケーションのコンテキストパスを設定
   context_path "/psiprobe";
   # アプリをデプロイします。
   deploy "packages/probe.war",
      username => "manager",
      password => "passw0rd",
      port     => 8080;
};

すべてをまとめる

これで、3つのタスクを順番に実行でき、その結果、コンテンツを提供する準備が整ったサーバーが得られます。最後に、すべてのタスクを実行するバッチを定義できるので、それほど多くを書く必要はありません。

Rexfileを開き、次の行を追加します。

desc "すべてのタスクprepare、configure、deployを実行";
batch all => "prepare", "configure", "deploy";

-bオプションを使ってこのバッチを実行できます。

rex -b all

すべてのタスクが実行された後、サーバーの/psiprobeでデプロイされたアプリケーションにアクセスできます。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。