😸

[Tomcat]「Webアプリケーションマネージャ」を起動

2022/05/25に公開

◆Webアプリケーションマネージャとは?

Tomcat 4.1.xから導入されたGUI管理ツールです。
Tomcatの状態監視、Tomcatコンテキストの起動、停止、再ロード、
配信解除、アプリケーションのデプロイなどを行うことができます。

◆本記事のゴール

◆Webアプリケーションマネージャー画面

http://localhost:8080/manager/html
にWebブラウザからアクセス

◆事前準備

・「tomcat」

Tomcat 4.1.x以降であれば、
問題はないと思います。

本記事では、「Tomcat8」を使用しています。
・ダウンロードサイト

リンク先のページから、「Distributions」の「Core」にある
「zip」を選択するとダウンロードできます。

解凍したフォルダは、適当な場所においてください。
本記事では、「MacintoshHD/Users/(ユーザー名)」の直下に置いています。

・「開発ツール」や「Webアプリケーション」について

本記事を書くに当たっては、STS(Spring開発に必要なものを組み込んだEclipse)上で立てた
Tomcatのサーバーを使用しています。

STS上でたてたサーバーに、下記の記事で作成したSpringBootのプロジェクトをデプロイしています。Webアプリケーションの仕様としては、ウェブブラウザでアクセスした際に、「Hello World!」が表示されるだけです。

・[Spring]SpringBootで簡単なWebApp作成「Hello World!」

・[Spring Boot]組込みじゃないTomcatでSpring BootのWebAppを起動

「Webアプリケーションマネージャ」を起動するにあたっては、
サーバー側のファイルの設定を編集できればいいですし、
tomcatは、コマンドプロンプト上からでも起動できます。

なので、eclipseやSTSなどの開発ツールや、Webアプリケーションは、
絶対に用意する必要がある、というわけではありませんが、
用意したい場合は、上記の記事も参考にしていただければと思います。

◆手順を実施する前に

トップページが表示される場合は、
トップの「Manager App」のボタンを押すか、

http://localhost:8080/manager

のURLにアクセスすれば、ログイン認証の画面までは行けます。
手順の①は読み飛ばして問題ありません。
手順の②から行ってください。


そもそも、Tomcatのトップページにはつながる状態でしょうか。
http://localhost:8080

もし、サーバーを起動した状態で、こちらにアクセスしても404が出る場合は、
以下の記事の内容を試してみてください。

https://zenn.dev/nakohama/articles/afcc2e0d87368a

それでも、表示されない場合は、手順①から行ってください。
アクセスできるようにWebアプリケーションマネージャの画面用のデータが入ったフォルダに
設定ファイルを編集して、紐づけする方法をご紹介しています。

◆手順

①マネージャ画面へアクセス用のURLの設定

作成方法ですが、
server.xmlを開き、

<Engine>
 <Host >
    
 </Host>   
</Engine>

Hostタグの中に、
下記、のコードを追加します。

       <Context docBase=“(Tomcatを配置してるディレクトリ)/webapps/manager" path="/manager" privileged="true" reloadable="true"/>

(Tomcatを配置してるディレクトリ)は、
Tomcatフォルダ内にあるwebappsまでのフルパスです。置き換えてください。

tomcatのフォルダの中のwebappsフォルダの中にあるmanagerフォルダの中に、
Webアプリマネージャを開くために必要なjspファイルなどがあります。

または、以下の書き方でも良いです。
「${catalina.home}」とは、
context.xml(アプリケーション登録情報)が配置されているディレクトリになります。
こちらは、書き換える必要はないのでオススメ。

  <Context docBase="${catalina.home}/webapps/manager" path="/manager" privileged="true" reloadable="true"/>

server.xmlに該当コードの追加後は、下記のようになります。
※もともと書き込まれていた余計なコメントは削除しています。

server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

<GlobalNamingResources>
  <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
      <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="/Users/genki/apache-tomcat-8.5.78/conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>   
</GlobalNamingResources>

<Service name="Catalina">
  <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
  <Engine defaultHost="localhost" name="Catalina">
    <Realm className="org.apache.catalina.realm.LockOutRealm">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Realm>
    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
    <Context docBase="demo" path="/demo" reloadable="false" source="org.eclipse.jst.jee.server:demo"/>
    <!--追加箇所-->       
     <Context docBase="${catalina.home}/webapps/manager" path="/manager" privileged="true" reloadable="true"/>
    <!--ここまで-->   
    </Host>      
  </Engine>
</Service>

</Server>

※設定を反映させるには、サーバーを再起動して下さい。

②マネージャ画面のログイン用ユーザー作成

マネージャ画面を開くには、
アクセス用の権限をもったユーザーをあらかじめ作成しておく必要があります。

ユーザーの作成方法ですが、
tomcat-users.xml開き、

<tomcat-users>
  
</tomcat-users>

の箇所に、
以下のコードを追加します。

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

ここでは、違う権限の持たせ方をしたuserを3つ作っています。
 パスワードはどれも、ユーザ名と同じにしています。
ユーザ名とパスワードは任意で決めてください。

権限についてですが、
「hoge」⇨ admin権限+manager権限
「admin」⇨ admin権限
「manager」⇨ manager権限
と与えています。

マネージャ画面に対する、
ログインに必要な権限の対応は以下のようになっています。

・Webアプリケーションマネージャ⇨admin権限 or manager権限

tomcat-users.xmlファイルに、コードを追加すると下記のようになります。
※もともと書き込まれていた余計なコメントは削除しています。

tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users version="1.0" xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd">
  
  <role rolename="admin-gui"/>
  <role rolename="manager-gui"/>
    <user password="hoge"  username="hoge" roles="admin-gui,manager-gui"/>
    <user username="admin" password="admin" roles="admin-gui"/>
    <user username="manager" password="manager" roles="manager-gui"/>
  
</tomcat-users>

※設定を反映させるには、サーバーを再起動して下さい。

③Webブラウザからアクセス。

設定を反映させるために、
サーバーを再起動してから行ってください。

http://localhost:8080/manager/html
にWebブラウザからアクセス

ログイン認証がでるので、
先程設定した
usernameは、「hoge」
passwordも、「hoge」
を入力しましょう。

が表示されたら、OKです。

◆おまけ(ローカルホスト外から、「Webアプリケーションマネージャ」へのアクセス)

ここまでの設定だけではTomcatがインストールされたローカルホストからの
アクセスに限定されています。

そのため、ローカルホスト外のリモートから Webアプリケーションマネージャ
へアクセスするには、以下の設定も必要です。

次の①②の2箇所のMETA-INFフォルダの
context.xmlという、ファイルを編集します。

①(Tomcatを配置してるディレクトリ)/webapps/manager/META-INF
②(Tomcatを配置してるディレクトリ)/webapps/host-manager/META-INF



※(Tomcatを配置してるディレクトリ)は置き換えてください。

2つのファイル両方に下記のコード(アクセスをローカルホストに限定する)があります

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

方法としては、
リモートアクセスを許可したいIPアドレスを指定してあげるか、
コメントアウトしてすべてのホストからのアクセスを許可します。

今回は、コメントアウトした場合の例を載せます。
編集する内容としては、①と②のファイル、どちらも同じです。

context.xml
<?xml version="1.0" encoding="UTF-8"?>
<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\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

※設定を反映させるには、サーバーを再起動して下さい。

アクセスする場合は、
「http://<サーバーを起動しているプライベートIPアドレス>:8080」

同一のネットワーク(ex.同じwifi端末に接続してる状況)に
接続してある端末のブラウザに入力して下さい。

試しに、同じwifiに接続しているPCとスマホ端末を用意し、
PC上でTomcatを起動し、スマホ端末からアクセスしてみました
「Hello World!」と出ていれば成功です。

IPについては、グローバルIPではなく、プライベートIPになります。
グローバルIPでの
接続に関しては、また方法がわかれば
また別途書こうと思います。

◆最後に

私の場合、xmlフォルダで追加コードを書く際に、
追加する位置がわかりにくくて、違う場所に追加してしまって
404エラーが出る。動かない、、という状態に陥ってしまったりしました。

なので、今回の記事を書くにあたっては、
xmlファイルのどの位置に、どのコードを、どう追加すれば良いか。
また、なぜ追加する必要があるのか、
わかりやすく書くように心がけました。

また、Webアプリケーションマネージャ以外にも、
Tomcatには、仮想ホストマネージャもあります。
そちらの起動方法については、別の記事をご覧ください。
[Tomcat]「仮想ホストマネジャ」を起動

本記事が、お役に立てたなら幸いです。
よければいいね!お願いします。
それでは!

参考

・Eclipse IDE for JavaEE環境でTomcat Managerを起動する

・Apache Tomcat Webアプリケーションマネージャの設定

Discussion