ウェブサイト検索

1つのApache Tomcatサーバーで複数のWebアプリケーションを実行する方法


Apache Tomcatは、Java Servlets、JSP、および Web Sockets をデプロイして、Java コードによって動作するウェブサーバーを実行できるオープンソースのウェブコンテナです。また、クロスプラットフォームのサーブレットコンテナまたはウェブコンテナとも呼ばれます。

トムキャットは、多くの産業関係者の間で非常に人気がある理由は、市場の他のウェブコンテナに対して多くの利点があるからです。あなたのJavaプロジェクトからウェブアーカイブを作成し、トムキャットコンテナ内にデプロイすることで、JavaでコーディングされたHTTPウェブサーバーをホストすることができます。産業界では、以下の利点によりアパッチトムキャットを他のコンテナよりも選択します。

  1. 軽量です。
  2. 広く使用されています。
  3. 他のコンテナよりもずっと速い。
  4. 構成が簡単です。
  5. とても柔軟です。

通常、Apache Tomcat はユーザーフレンドリーな製品であり、エンジニアに最小限の設定変更で WAR アーティファクト (Web ARchives) をデプロイするスペースを提供します。

この投稿は、すでにTomcatを使用しており、Apache Tomcatエンジンの起動と使用方法を知っているオーディエンスを対象としています。

Apache Tomcatでは、WARファイルはデフォルトでコンテナがデプロイするwebappsディレクトリに置く必要があります。簡単に言えば、webappsディレクトリは、TomcatがウェブサーバーとしてデプロイするためのJavaコードの主要なコンテナとして機能します。

単一のTomcatコンテナから複数のWebサーバーをホストする必要があるシナリオでは、この投稿をガイドとして使用できます。この記事では、1つのTomcat内で複数のWebアプリケーションまたは2つのWebサーバーを展開する方法を示します。

前提条件: Javaがサーバーにインストールされている必要があります。できれば1.7.x以上のバージョンを使用してください。このチュートリアルでは、Java 1.7をインストールしています。なぜなら、私はtomcatバージョン8.0.37を使用しているからです。

パッケージマネージャーであるyumやaptを使用して、Javaをインストールできます。次のように表示されます:

# yum install java              [On CentOS based Systems]
apt-get install default-jre   [On Debian based Systems]

ステップ1:Apache Tomcatサーバーをインストールする

1. まず、root アカウントを使用して、別の tomcat ユーザーを作成してください。

# useradd tomcat
passwd tomcat

今、tomcat ユーザーとしてログインし、公式サイトから最新の Apache Tomcat バンドルをダウンロードしてください: https://tomcat.apache.org/ または、代わりに以下の wget コマンドを使用してターミナルで直接ダウンロードすることもできます。

この場合、現在リリースされている最新の安定版の1つであるApache Tomcat 8.5.5をダウンロードします。

$ wget http://redrockdigimark.com/apachemirror/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz

2. ファイルをダウンロードしたら、tar コマンドを使って内容を展開し、以下に示すようにディレクトリ構造を表示します:

$ tar -xvf apache-tomcat-8.5.5.tar.gz
cd apache-tomcat-8.5.5/
ls -l
total 112
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 bin
drwx------. 2 tomcat tomcat  4096 Sep  1 01:23 conf
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 lib
-rw-r-----. 1 tomcat tomcat 57092 Sep  1 01:23 LICENSE
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 logs
-rw-r-----. 1 tomcat tomcat  1723 Sep  1 01:23 NOTICE
-rw-r-----. 1 tomcat tomcat  7063 Sep  1 01:23 RELEASE-NOTES
-rw-r-----. 1 tomcat tomcat 15946 Sep  1 01:23 RUNNING.txt
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 temp
drwxr-x---. 7 tomcat tomcat  4096 Sep  1 01:22 webapps
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 work

ステップ2:Apache Tomcatサーバーを構成する

3. 私たちが求めている設定変更はconfディレクトリ内にあり、Tomcatの起動に役立つすべての設定ファイルが配置されています。

confディレクトリの内容は以下のようになります。

$ cd conf/
ls -l
total 224
-rw-------. 1 tomcat tomcat  12502 Sep  1 01:23 catalina.policy
-rw-------. 1 tomcat tomcat   7203 Sep  1 01:23 catalina.properties
-rw-------. 1 tomcat tomcat   1338 Sep  1 01:23 context.xml
-rw-------. 1 tomcat tomcat   1149 Sep  1 01:23 jaspic-providers.xml
-rw-------. 1 tomcat tomcat   2358 Sep  1 01:23 jaspic-providers.xsd
-rw-------. 1 tomcat tomcat   3622 Sep  1 01:23 logging.properties
-rw-------. 1 tomcat tomcat   7283 Sep  1 01:23 server.xml
-rw-------. 1 tomcat tomcat   2164 Sep  1 01:23 tomcat-users.xml
-rw-------. 1 tomcat tomcat   2633 Sep  1 01:23 tomcat-users.xsd
-rw-------. 1 tomcat tomcat 168133 Sep  1 01:23 web.xml

4. この場合、私にとって重要なのは server.xml ファイルです。だから、他のファイルやディレクトリについて詳しい説明はしません。

server.xml は、tomcat にどのポートで起動するか、どのディレクトリのコンテンツをデプロイするか、その他多くの主要かつ基本的な設定を指示する設定ファイルです。

ファイルを開くと基本的に以下のように見えます。

$ vim server.xml

ステップ3:Apache Tomcatでのウェブアプリのデプロイ

5. これからApache Tomcatに新しいウェブアプリケーションをデプロイします。まず、サービスタグが閉じている場所 </service> を見つけて、最初の閉じたサービスタグの後に以下の行を挿入します。

<Service name="webapps2">
    <Connector port="7070" maxHttpHeaderSize="7192"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" redirectPort="7443" acceptCount="100"
        connectionTimeout="20000" disableUploadTimeout="true" />
        <Connector port="7072" 
        enableLookups="false" redirectPort="7043" protocol="AJP/1.3" />

    <Engine name="webapps2" defaultHost="localhost">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
            resourceName="UserDatabase"/>
            <Host name="localhost" appBase="webapps2"
                unpackWARs="true" autoDeploy="true"
                 xmlValidation="false" xmlNamespaceAware="false">
            </Host>
    </Engine>
</Service>

ご覧の通り、新しく挿入したエントリでコネクターポートを7070に変更しました。デフォルトのTomcatはポート8080から始まるためです。この設定を完全に行った後、ポート8080と7070の下で2つのウェブサーバーが稼働することになります。

6. server.xml の変更を保存した後、Apacheのメイン内にある webapps2 というディレクトリを作成します。

$ cd /home/tomcat/apache-tomcat-8.5.5/
mkdir webapps2

提供したserver.xmlの新しいエントリを観察すれば、サービス名、アプリベース、エンジンがwebapps2という名前になっていることがわかります。これがwebapps2という名前のディレクトリを作成した理由です。あなたが望むように作成することはできますが、必要に応じてエントリに変更を加えることを忘れないでください。

7. 二つ目のウェブサーバーが稼働していることを確認するために、webapps ディレクトリの内容を webapps2 ディレクトリにコピーしました。

$ cp -r webapps/* webapps2/

8. さあ、ワクワクする部分です。サーバーを起動して、動作しているか確認します。bin ディレクトリに移動し、startup.sh スクリプトを実行してください。ログは、ログディレクトリにある catalina.out ファイルで確認できます。

$ cd bin/
./startup.sh
Using CATALINA_BASE:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_HOME:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_TMPDIR: /home/tomcat/apache-tomcat-8.5.5/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/tomcat/apache-tomcat-8.5.5/bin/bootstrap.jar:/home/tomcat/apache-tomcat-8.5.5/bin/tomcat-juli.jar
Tomcat started.

9. ログを参照すれば、webappsとwebapps2の両方がデプロイされており、アプリは問題なく起動していることがわかります。

$ cd logs/
tail -25f catalina.out 
29-Sep-2016 12:13:51.210 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples
29-Sep-2016 12:13:51.661 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples has finished in 452 ms
29-Sep-2016 12:13:51.664 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs
29-Sep-2016 12:13:51.703 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs has finished in 39 ms
29-Sep-2016 12:13:51.704 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager
29-Sep-2016 12:13:51.744 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager has finished in 39 ms
29-Sep-2016 12:13:51.748 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
29-Sep-2016 12:13:51.767 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service webapps2
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.5
29-Sep-2016 12:13:51.777 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager has finished in 102 ms
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT
29-Sep-2016 12:13:51.915 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT has finished in 35 ms
29-Sep-2016 12:13:51.927 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples
29-Sep-2016 12:13:52.323 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
29-Sep-2016 12:13:52.337 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples has finished in 414 ms
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs has finished in 29 ms
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager
29-Sep-2016 12:13:52.417 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager has finished in 46 ms
...

10. このシナリオでは、私が使用したサーバーのIPは172.16.1.39であり、単一のTomcatコンテナ内で2つのWebサーバーを起動できることがわかります。

http://172.16.1.39:8080   [1st Web App]
http://172.16.1.39:7070   [2nd Web App]

この記事が皆さんにとって有用で楽しいものであることを願っています。TecMintと連絡を取り合い、この件に関する質問があればお気軽にお尋ねください。

関連記事: