序章

Apache Tomcatは、Javaアプリケーションを提供するために使用されるWebサーバーおよびサーブレットコンテナです。 Tomcatは、ApacheSoftwareFoundationによってリリースされたJavaサーブレットおよびJavaServerPagesテクノロジのオープンソース実装です。 このチュートリアルでは、Debian10サーバーへのTomcat9の最新リリースの基本的なインストールといくつかの構成について説明します。

前提条件

このガイドを開始する前に、サーバーにsudo権限を持つroot以外のユーザーが設定されている必要があります。 これを行う方法については、Debian10初期サーバーセットアップガイドを完了することで学ぶことができます。

ステップ1—Javaをインストールします

Tomcatでは、Java Webアプリケーションコードを実行できるように、サーバーにJavaをインストールする必要があります。 aptを使用してOpenJDKをインストールすることで、この要件を満たすことができます。

まず、aptパッケージインデックスを更新します。

  1. sudo apt update

次に、aptを使用してJavaDevelopmentKitパッケージをインストールします。

  1. sudo apt install default-jdk

Javaがインストールされたので、Tomcatサービスの実行に使用されるtomcatユーザーを作成できます。

ステップ2—Tomcatユーザーを作成する

セキュリティ上の理由から、Tomcatは非特権ユーザーとして実行する必要があります(つまり、 root ではありません)。 Tomcatサービスを実行する新しいユーザーとグループを作成します。

まず、新しいtomcatグループを作成します。

  1. sudo groupadd tomcat

次に、新しいtomcatユーザーを作成します。 このユーザーをtomcatグループのメンバーにし、ホームディレクトリを/opt/tomcat(Tomcatをインストールします)、シェルを/bin/false(したがって、誰もアカウントにログインできません):

  1. sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

tomcat ユーザーが設定されたので、Tomcatをダウンロードしてインストールしましょう。

ステップ3—Tomcatをインストールする

Tomcat 9をインストールする最良の方法は、最新のバイナリリリースをダウンロードしてから手動で構成することです。

Tomcat9ダウンロードページでTomcat9の最新バージョンを見つけてください。 執筆時点では、最新バージョンは 9.0.27 ですが、入手可能な場合は、それ以降の安定バージョンを使用する必要があります。 Binary Distributions セクションの下で、次に Core リストの下で、リンクを「tar.gz」にコピーします。

次に、SSHセッションに戻り、サーバーの/tmpディレクトリに移動します。 これは、Tomcattarballなどの一時的なアイテムをダウンロードするのに適したディレクトリです。Tomcatのコンテンツを抽出した後は必要ありません。

  1. cd /tmp

curlコマンドラインツールを使用してtarballをダウンロードします。 curlをインストールします。

  1. sudo apt install curl

次に、curlを使用して、TomcatWebサイトからコピーしたリンクをダウンロードします。

  1. curl -O http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.11/bin/apache-tomcat-9.0.11.tar.gz

Tomcatを/opt/tomcatディレクトリにインストールします。 ディレクトリを作成し、次のコマンドを使用してディレクトリにアーカイブを抽出します。

  1. sudo mkdir /opt/tomcat
  2. sudo tar xzvf apache-tomcat-9*tar.gz -C /opt/tomcat --strip-components=1

次に、インストールに適切なユーザー権限を設定します。

ステップ4—権限を更新する

作成したtomcatユーザーは、Tomcatインストールにアクセスできる必要があります。 これを設定します。

Tomcatインストールを解凍したディレクトリに移動します。

  1. cd /opt/tomcat

tomcatグループにインストールディレクトリ全体の所有権を付与します。

  1. sudo chgrp -R tomcat /opt/tomcat

次に、 tomcatグループreadconfディレクトリとそのすべてのコンテンツへのアクセスを許可し、executeにディレクトリ自体へのアクセスを許可します。

  1. sudo chmod -R g+r conf
  2. sudo chmod g+x conf

tomcat ユーザーをwebappsworktemp、およびlogsディレクトリの所有者にします。

  1. sudo chown -R tomcat webapps/ work/ temp/ logs/

適切な権限が設定されたので、Tomcatプロセスを管理するためのsystemdサービスファイルを作成します。

ステップ5—systemdサービスファイルを作成する

Tomcatをサービスとして実行できるようにしたいので、systemdサービスファイルを設定します。

Tomcatは、Javaがインストールされている場所を知る必要があります。 このパスは一般にJAVA_HOMEと呼ばれます。 その場所を検索する最も簡単な方法は、次のコマンドを実行することです。

  1. sudo update-java-alternatives -l
Output
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64

JAVA_HOMEは、最後の列からの出力です(上で強調表示されています)。 上記の例では、このサーバーの正しいJAVA_HOMEは次のようになります。

JAVA_HOME
/usr/lib/jvm/java-1.11.0-openjdk-amd64

JAVA_HOMEは異なる場合があります。

この情報を使用して、systemdサービスファイルを作成できます。 次のように入力して、/etc/systemd/systemディレクトリにあるtomcat.serviceというファイルを開きます。

  1. sudo nano /etc/systemd/system/tomcat.service

次の内容をサービスファイルに貼り付けます。 必要に応じて、JAVA_HOMEの値を変更して、システムで見つけた値と一致させます。 CATALINA_OPTSで指定されているメモリ割り当て設定を変更することもできます。

/etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

終了したら、ファイルを保存して閉じます。

次に、systemdデーモンをリロードして、サービスファイルを認識できるようにします。

  1. sudo systemctl daemon-reload

次のように入力して、Tomcatサービスを開始します。

  1. sudo systemctl start tomcat

次のように入力して、エラーなしで起動したことを再確認します。

  1. sudo systemctl status tomcat

次のような出力が表示されます。

Output
● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2019-10-24 17:18:11 UTC; 4s ago Process: 5962 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 5970 (java) Tasks: 44 (limit: 2377) Memory: 184.2M CGroup: /system.slice/tomcat.service └─5970 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.u Oct 24 17:18:10 tomcat systemd[1]: Starting Apache Tomcat Web Application Container... Oct 24 17:18:11 tomcat startup.sh[5962]: Tomcat started. Oct 24 17:18:11 tomcat systemd[1]: Started Apache Tomcat Web Application Container.

これにより、Tomcatがサーバー上で稼働していることが確認されます。

手順6—ファイアウォールを調整してTomcatサーバーをテストする

Tomcatサービスが開始されたので、デフォルトのページが使用可能であることを確認するためにテストできます。

その前に、リクエストがサービスに到達できるようにファイアウォールを調整する必要があります。 前提条件を満たしている場合は、現在ufwファイアウォールが有効になっています。

Tomcatはポート8080を使用して要求を受け入れます。 次のように入力して、そのポートへのトラフィックを許可します。

  1. sudo ufw allow 8080

ファイアウォールを変更すると、ドメインまたはIPアドレスに移動し、続いてWebブラウザで:8080に移動することで、デフォルトのスプラッシュページにアクセスできます。

Open in web browser
http://server_domain_or_IP:8080

他の情報に加えて、デフォルトのTomcatスプラッシュページが表示されます。 ただし、たとえばManagerアプリのリンクをクリックすると、アクセスが拒否されます。 次に、そのアクセスを構成できます。

Tomcatに正常にアクセスできた場合は、サービスファイルを有効にして、Tomcatが起動時に自動的に起動するようにする良い機会です。

  1. sudo systemctl enable tomcat

ステップ7—TomcatWeb管理インターフェースを構成する

Tomcatに付属のマネージャーWebアプリを使用するには、Tomcatサーバーにログインを追加する必要があります。 これを行うには、tomcat-users.xmlファイルを編集します。

  1. sudo nano /opt/tomcat/conf/tomcat-users.xml

manager-guiおよびadmin-gui(Tomcatに付属のWebアプリ)にアクセスできるユーザーを追加する必要があります。 これを行うには、次の例のように、tomcat-usersタグの間にユーザーを定義します。 ユーザー名とパスワードを安全なものに変更してください。

tomcat-users.xml
<tomcat-users>
. . .
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

終了したら、ファイルを保存して閉じます。

デフォルトでは、Tomcatの新しいバージョンは、マネージャーおよびホストマネージャーアプリへのアクセスをサーバー自体からの接続に制限します。 リモートマシンにインストールしているため、この制限を削除または変更することをお勧めします。 これらのIPアドレス制限を変更するには、適切なcontext.xmlファイルを開きます。

Managerアプリの場合は、次のように入力します。

  1. sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml

Host Managerアプリの場合は、次のように入力します。

  1. sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

内部で、IPアドレスの制限をコメントアウトして、どこからでも接続できるようにします。 または、自分のIPアドレスからの接続へのアクセスのみを許可する場合は、パブリックIPアドレスをリストに追加できます。

TomcatWebアプリケーションのcontext.xmlファイル
<Context antiResourceLocking="false" privileged="true" >
  <!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>

終了したら、ファイルを保存して閉じます。

変更を有効にするには、Tomcatサービスを再起動します。

  1. sudo systemctl restart tomcat

ステップ8—Webインターフェイスにアクセスする

ユーザーを作成したので、WebブラウザーでWeb管理インターフェースに再度アクセスできます。 繰り返しになりますが、ブラウザのポート8080に続いてサーバーのドメイン名またはIPアドレスを入力することにより、正しいインターフェイスにアクセスできます。

Open in web browser
http://server_domain_or_IP:8080

表示されるページは、以前にテストしたときに表示されたものと同じである必要があります。

Tomcat root

リンクまたはhttp://server_domain_or_IP:8080/manager/htmlからアクセスできるManagerアプリを見てみましょう。 tomcat-users.xmlファイルに追加したアカウントのクレデンシャルを入力する必要があります。 その後、次のようなページが表示されます。

Tomcat Web Application Manager

Webアプリケーションマネージャは、Javaアプリケーションを管理するために使用されます。 ここで、開始、停止、再ロード、デプロイ、およびアンデプロイできます。 アプリでいくつかの診断を実行することもできます(つまり、 メモリリークを見つけます)。 最後に、サーバーに関する情報は、このページの一番下にあります。

次に、リンクまたはhttp://server_domain_or_IP:8080/host-manager/html/からアクセスできるホストマネージャーを見てみましょう。

Tomcat Virtual Host Manager

[仮想ホストマネージャー]ページから、アプリケーションを提供する仮想ホストを追加できます。

結論

Tomcatのインストールが完了しました。 これで、独自のJavaWebアプリケーションを自由にデプロイできます。

現在、Tomcatのインストールは機能していますが、完全に暗号化されていません。 これは、パスワードなどの機密項目を含むすべてのデータがプレーンテキストで送信され、インターネット上の他の関係者が傍受して読み取ることができることを意味します。 これを防ぐために、SSLを使用して接続を暗号化することを強くお勧めします。 このガイド注:このガイドはUbuntu 16.04でのTomcat8暗号化について説明しています)に従って、Tomcatへの接続を暗号化する方法を確認できます。