Ubuntu20.04にApacheTomcat10をインストールする方法

序章

Apache Tomcat は、Javaアプリケーションを提供するために使用されるWebサーバーおよびサーブレットコンテナーです。 これは、ジャカルタサーブレットジャカルタサーバーページ、およびジャカルタEEプラットフォームの他のテクノロジーのオープンソース実装です。

このチュートリアルでは、ApacheTomcat10をUbuntu20.04にデプロイします。 Tomcat 10をインストールし、ユーザーとロールを設定して、管理ユーザーインターフェイスに移動します。

前提条件

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

このセクションでは、サーバーにTomcat10をセットアップします。 まず、最新バージョンをダウンロードして、別のユーザーと適切な権限を設定します。 また、Java Development Kit(JDK)もインストールします。

セキュリティ上の理由から、Tomcatは別の非特権ユーザーの下で実行する必要があります。 次のコマンドを実行して、tomcatというユーザーを作成します。

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

ユーザーのデフォルトシェルとして/bin/falseを指定することにより、tomcatとしてログインできないようにします。

ここで、JDKをインストールします。 まず、以下を実行してパッケージマネージャーのキャッシュを更新します。

  1. sudo apt update

次に、次のコマンドを実行してJDKをインストールします。

  1. sudo apt install default-jdk

インストールを続行するように求められたら、yと答えます。

インストールが完了したら、使用可能なJavaインストールのバージョンを確認します。

  1. java -version

出力は次のようになります。

Output
openjdk version "11.0.14" 2022-01-18 OpenJDK Runtime Environment (build 11.0.14+9-Ubuntu-0ubuntu2.20.04) OpenJDK 64-Bit Server VM (build 11.0.14+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)

Tomcatをインストールするには、Tomcat10用の最新のCoreLinuxビルドが必要です。これは、ダウンロードページから入手できます。 .tar.gzで終わる最新のCoreLinuxビルドを選択します。 執筆時点では、最新バージョンは10.0.17でした。

まず、/tmpディレクトリに移動します。

  1. cd /tmp

次のコマンドを実行して、wgetを使用してアーカイブをダウンロードします。

  1. wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.17/bin/apache-tomcat-10.0.17.tar.gz

wgetコマンドは、インターネットからリソースをダウンロードします。

次に、以下を実行して、ダウンロードしたアーカイブを抽出します。

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

すでにユーザーを作成しているので、次のコマンドを実行して、抽出したインストールに対する所有権をtomcatに付与できます。

  1. sudo chown -R tomcat:tomcat /opt/tomcat/
  2. sudo chmod -R u+x /opt/tomcat/bin

どちらのコマンドも、tomcatインストールの設定を更新します。 これらのコマンドとその機能の詳細については、Linuxパーミッションの基本とVPSでのUmaskの使用方法をご覧ください。

このステップでは、JDKとTomcatをインストールしました。 また、そのための別のユーザーを作成し、Tomcatバイナリに対するアクセス許可を設定しました。 次に、Tomcatインスタンスにアクセスするための資格情報を構成します。

ステップ2—管理者ユーザーの設定

ManagerおよびHostManager ページにアクセスするには、Tomcatの構成で特権ユーザーを定義します。 すべての外部IPアドレスがそれらのページにアクセスすることを禁止するIPアドレス制限を削除する必要があります。

Tomcatユーザーは/opt/tomcat/conf/tomcat-users.xmlで定義されています。 次のコマンドを使用して、編集用にファイルを開きます。

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

終了タグの前に次の行を追加します。

/opt/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui" />
<user username="manager" password="manager_password" roles="manager-gui" />

<role rolename="admin-gui" />
<user username="admin" password="admin_password" roles="manager-gui,admin-gui" />

強調表示されたパスワードを独自のパスワードに置き換えます。 完了したら、ファイルを保存して閉じます。

ここでは、manager-guiadmin-guiの2つのユーザーロールを定義します。これらは、それぞれManagerページとHostManagerページへのアクセスを許可します。 また、manageradminの2つのユーザーを、関連する役割で定義します。

デフォルトでは、Tomcatは、接続がサーバー自体からのものでない限り、管理ページへのアクセスを制限するように構成されています。 定義したユーザーでこれらのページにアクセスするには、これらのページの構成ファイルを編集する必要があります。

Manager ページの制限を解除するには、その構成ファイルを開いて編集します。

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

次のように、Valveの定義をコメントアウトします。

opt / tomcat / webapps / manager / META-INF / context.xml
...
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.Csr>
</Context>

ファイルを保存して閉じてから、 HostManagerに対して繰り返します。

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

これで、manageradminの2つのユーザーを定義しました。これらのユーザーは、後で管理インターフェイスの制限された部分にアクセスするために使用します。 次に、Tomcat用のsystemdサービスを作成します。

ステップ3—systemdサービスを作成する

これから作成するsystemdサービスは、Tomcatをバックグラウンドで静かに実行し続けます。 systemdサービスは、エラーまたは障害が発生した場合にも、Tomcatを自動的に再起動します。

Tomcatはそれ自体がJavaアプリケーションであるため、手順1でJDKとともにインストールしたJavaランタイムが存在する必要があります。 サービスを作成する前に、Javaがどこにあるかを知る必要があります。 次のコマンドを実行して、それを調べることができます。

  1. sudo update-java-alternatives -l

出力は次のようになります。

Output
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64

最後の列にリストされているJavaが存在するパスに注意してください。 サービスを定義するには、一時的にパスが必要になります。

tomcatサービスは、/etc/systemd/systemの下のtomcat.serviceという名前のファイルに保存します。 次のコマンドを実行して、編集用のファイルを作成します。

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

次の行を追加します。

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

[Service]
Type=forking

User=tomcat
Group=tomcat

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

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

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

JAVA_HOMEの強調表示された値が前にメモした値と異なる場合は、それを変更します。

ここでは、Tomcatが提供する起動スクリプトとシャットダウンスクリプトを実行して、Tomcatを実行するサービスを定義します。 また、いくつかの環境変数を設定して、ホームディレクトリ(以前のように/opt/tomcat)を定義し、Java VMが割り当てることができるメモリの量を制限します(CATALINA_OPTS)。 失敗すると、Tomcatサービスは自動的に再起動します。

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

systemdデーモンをリロードして、新しいサービスを認識できるようにします。

sudo systemctl daemon-reload

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

sudo systemctl start tomcat

次に、そのステータスを調べて、正常に開始されたことを確認します。

sudo systemctl status tomcat

出力は次のようになります。

Output
● tomcat.service - Tomcat Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled) Active: active (running) since Fri 2022-03-11 14:37:10 UTC; 2s ago Process: 4845 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 4860 (java) Tasks: 15 (limit: 1132) Memory: 90.1M CGroup: /system.slice/tomcat.service └─4860 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties ...

qを押してコマンドを終了します。

システムでTomcatを起動できるようにするには、次のコマンドを実行します。

  1. sudo systemctl enable tomcat

このステップでは、Javaが存在する場所を特定し、systemdがTomcatをバックグラウンドで実行できるようにしました。 これで、WebブラウザからTomcatにアクセスできます。

ステップ4—Webインターフェイスへのアクセス

Tomcatサービスが実行されているので、Tomcatへの接続を許可するようにファイアウォールを構成できます。 その後、そのWebインターフェイスにアクセスできるようになります。

Tomcatはポート8080を使用してHTTP要求を受け入れます。 次のコマンドを実行して、そのポートへのトラフィックを許可します。

  1. sudo ufw allow 8080

ブラウザで、サーバーのIPアドレスに移動してTomcatにアクセスできるようになりました。

http://your_server_ip:8080

デフォルトのTomcatウェルカムページが表示されます。

Tomcat - Default Welcome Page

これで、Tomcatサービスが機能していることを確認できました。

右側のManagerAppボタンを押します。 前の手順で定義したアカウントのクレデンシャルを入力するように求められます。

次のようなページが表示されます。

Tomcat - Web Application Manager

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

次に、メインページのボタンを押すことでアクセスできる HostManagerを見てみましょう。

Tomcat Virtual Host Manager

ここで、アプリケーションを提供する仮想ホストを追加できます。 managerなど、admin-guiの役割が割り当てられていないユーザーはこのページにアクセスできないことに注意してください。

結論

Ubuntu20.04サーバーにTomcat10をインストールし、管理アカウントを使用してリモートでアクセスできるように構成しました。 これを使用して、JakartaEEテクノロジーに基づくJavaアプリケーションをデプロイできます。 公式ドキュメントにアクセスすると、Javaアプリの詳細を知ることができます。

現在、Tomcatのインストールは機能していますが、トラフィックは暗号化されていません。 これは、パスワードなどの機密項目を含むすべてのデータがプレーンテキストで送信され、インターネット上の他の関係者が傍受して読み取ることができることを意味します。 これを防ぐために、サーバーにドメイン名を追加し、サーバーにTLS証明書をインストールすることを強くお勧めします。 暗号化の詳細については、Let’sEncryptの概要を参照してください。 DigitalOcean Dropletにドメインを追加するには、ドメインの追加方法に関するこのガイドに従ってください。