Ubuntu20.04にApacheTomcat10をインストールする方法
Ubuntu20.04にApacheTomcat10をインストールする方法
序章
Apache Tomcat は、Javaアプリケーションを提供するために使用されるWebサーバーおよびサーブレットコンテナーです。 これは、ジャカルタサーブレット、ジャカルタサーバーページ、およびジャカルタEEプラットフォームの他のテクノロジーのオープンソース実装です。
このチュートリアルでは、ApacheTomcat10をUbuntu20.04にデプロイします。 Tomcat 10をインストールし、ユーザーとロールを設定して、管理ユーザーインターフェイスに移動します。
前提条件
- sudo非rootユーザーとファイアウォールを備えた1つのUbuntu20.04サーバー。これは、Ubuntu20.04初期サーバーセットアップに従ってセットアップできます。
ステップ1—Tomcatをインストールする
このセクションでは、サーバーにTomcat10をセットアップします。 まず、最新バージョンをダウンロードして、別のユーザーと適切な権限を設定します。 また、Java Development Kit(JDK)もインストールします。
セキュリティ上の理由から、Tomcatは別の非特権ユーザーの下で実行する必要があります。 次のコマンドを実行して、tomcat
というユーザーを作成します。
- sudo useradd -m -d /opt/tomcat -U -s /bin/false tomcat
ユーザーのデフォルトシェルとして/bin/false
を指定することにより、tomcat
としてログインできないようにします。
ここで、JDKをインストールします。 まず、以下を実行してパッケージマネージャーのキャッシュを更新します。
- sudo apt update
次に、次のコマンドを実行してJDKをインストールします。
- sudo apt install default-jdk
インストールを続行するように求められたら、y
と答えます。
インストールが完了したら、使用可能なJavaインストールのバージョンを確認します。
- java -version
出力は次のようになります。
Outputopenjdk 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
ディレクトリに移動します。
- cd /tmp
次のコマンドを実行して、wget
を使用してアーカイブをダウンロードします。
- wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.17/bin/apache-tomcat-10.0.17.tar.gz
wget
コマンドは、インターネットからリソースをダウンロードします。
次に、以下を実行して、ダウンロードしたアーカイブを抽出します。
- sudo tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1
すでにユーザーを作成しているので、次のコマンドを実行して、抽出したインストールに対する所有権をtomcat
に付与できます。
- sudo chown -R tomcat:tomcat /opt/tomcat/
- 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
で定義されています。 次のコマンドを使用して、編集用にファイルを開きます。
- sudo nano /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-gui
とadmin-gui
の2つのユーザーロールを定義します。これらは、それぞれManagerページとHostManagerページへのアクセスを許可します。 また、manager
とadmin
の2つのユーザーを、関連する役割で定義します。
デフォルトでは、Tomcatは、接続がサーバー自体からのものでない限り、管理ページへのアクセスを制限するように構成されています。 定義したユーザーでこれらのページにアクセスするには、これらのページの構成ファイルを編集する必要があります。
Manager ページの制限を解除するには、その構成ファイルを開いて編集します。
- sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
次のように、Valve
の定義をコメントアウトします。
...
<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に対して繰り返します。
- sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
これで、manager
とadmin
の2つのユーザーを定義しました。これらのユーザーは、後で管理インターフェイスの制限された部分にアクセスするために使用します。 次に、Tomcat用のsystemd
サービスを作成します。
ステップ3—systemd
サービスを作成する
これから作成するsystemd
サービスは、Tomcatをバックグラウンドで静かに実行し続けます。 systemd
サービスは、エラーまたは障害が発生した場合にも、Tomcatを自動的に再起動します。
Tomcatはそれ自体がJavaアプリケーションであるため、手順1でJDKとともにインストールしたJavaランタイムが存在する必要があります。 サービスを作成する前に、Javaがどこにあるかを知る必要があります。 次のコマンドを実行して、それを調べることができます。
- sudo update-java-alternatives -l
出力は次のようになります。
Outputjava-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
最後の列にリストされているJavaが存在するパスに注意してください。 サービスを定義するには、一時的にパスが必要になります。
tomcat
サービスは、/etc/systemd/system
の下のtomcat.service
という名前のファイルに保存します。 次のコマンドを実行して、編集用のファイルを作成します。
- sudo nano /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を起動できるようにするには、次のコマンドを実行します。
- sudo systemctl enable tomcat
このステップでは、Javaが存在する場所を特定し、systemd
がTomcatをバックグラウンドで実行できるようにしました。 これで、WebブラウザからTomcatにアクセスできます。
ステップ4—Webインターフェイスへのアクセス
Tomcatサービスが実行されているので、Tomcatへの接続を許可するようにファイアウォールを構成できます。 その後、そのWebインターフェイスにアクセスできるようになります。
Tomcatはポート8080
を使用してHTTP要求を受け入れます。 次のコマンドを実行して、そのポートへのトラフィックを許可します。
- sudo ufw allow 8080
ブラウザで、サーバーのIPアドレスに移動してTomcatにアクセスできるようになりました。
http://your_server_ip:8080
デフォルトのTomcatウェルカムページが表示されます。
これで、Tomcatサービスが機能していることを確認できました。
右側のManagerAppボタンを押します。 前の手順で定義したアカウントのクレデンシャルを入力するように求められます。
次のようなページが表示されます。
Webアプリケーションマネージャは、Javaアプリケーションを管理するために使用されます。 ここから、開始、停止、リロード、デプロイ、およびアンデプロイできます。 アプリでいくつかの診断を実行することもできます(たとえば、メモリリークを見つけるため)。 サーバーに関する情報は、このページの一番下にあります。
次に、メインページのボタンを押すことでアクセスできる HostManagerを見てみましょう。
ここで、アプリケーションを提供する仮想ホストを追加できます。 manager
など、admin-gui
の役割が割り当てられていないユーザーはこのページにアクセスできないことに注意してください。
結論
Ubuntu20.04サーバーにTomcat10をインストールし、管理アカウントを使用してリモートでアクセスできるように構成しました。 これを使用して、JakartaEEテクノロジーに基づくJavaアプリケーションをデプロイできます。 公式ドキュメントにアクセスすると、Javaアプリの詳細を知ることができます。
現在、Tomcatのインストールは機能していますが、トラフィックは暗号化されていません。 これは、パスワードなどの機密項目を含むすべてのデータがプレーンテキストで送信され、インターネット上の他の関係者が傍受して読み取ることができることを意味します。 これを防ぐために、サーバーにドメイン名を追加し、サーバーにTLS証明書をインストールすることを強くお勧めします。 暗号化の詳細については、Let’sEncryptの概要を参照してください。 DigitalOcean Dropletにドメインを追加するには、ドメインの追加方法に関するこのガイドに従ってください。