Raspberry Pi に Tomcat をインストールする

著者画像
Toshihiko Arai
(更新:2024年6月20日(木))

Tomcat10 のインストール

OSバージョンの確認

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Javaのバージョン確認

ラズパイにすでにインストールされているJavaのバージョンを確認します。

java -version

このコマンドを実行すると、以下のような出力が表示されます。

openjdk version "17.0.11" 2024-04-16
OpenJDK Runtime Environment (build 17.0.11+9-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.11+9-Debian-1deb12u1, mixed mode, sharing)

以下にTomcat 10のインストール手順と基本的な設定手順を示します。

1. Tomcat 10のインストール

既に実行したように、以下のコマンドでTomcat 10をインストールします。

sudo apt-get update
sudo apt-get install tomcat10

2. Tomcatの起動と停止

インストール後、Tomcatのサービスを起動し、動作を確認します。

Tomcatの起動:

sudo systemctl start tomcat10

Tomcatの自動起動を有効にする:

sudo systemctl enable tomcat10

Tomcatのステータス確認:

sudo systemctl status tomcat10

active が確認できれば成功です。

3. ファイアウォールの設定

ufwを使っている場合は、必要に応じて次の設定を行なって下さい。デフォルトのTomcatポート(8080)を開放します。

sudo ufw allow 8080

4. Tomcatの動作確認

ブラウザを開き、http://<RaspberryPiのIPアドレス>:8080にアクセスしてTomcatのデフォルトページが表示されるか確認します。

管理コンソールを使用したい場合は、管理ユーザーを設定します。

1. ユーザーの追加

sudo vi /etc/tomcat10/tomcat-users.xml

以下の内容を追加します(例):

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

2. Tomcatの再起動

sudo systemctl restart tomcat10

3. 管理コンソールにアクセス

ブラウザでhttp://<RaspberryPiのIPアドレス>:8080/manager/htmlにアクセスし、設定したユーザー名とパスワードでログインします。

これで、Tomcat 10のインストールと基本設定が完了しました。Java 17を使用している場合も、問題なく動作するはずです。

Tomcat 10を使用してJSPを実行する

Tomcat 10を使用してJSP(JavaServer Pages)を実行するための基本的な手順を以下に示します。

1. JSPファイルの配置

JSPファイルはTomcatのウェブアプリケーションディレクトリに配置します。Tomcatのデフォルトのウェブアプリケーションディレクトリは/var/lib/tomcat10/webapps/です。

例: Hello.jspを作成する

webappsディレクトリに移動します。

cd /var/lib/tomcat10/webapps

新しいディレクトリを作成します(例: myapp)。

sudo mkdir myapp

作成したディレクトリ内にJSPファイルを配置します。

cd myapp
sudo vi hello.jsp

hello.jspファイルに以下の内容を追加します。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello JSP</title>
</head>
<body>
    <h1>Hello, JSP World!</h1>
    <p>Date: <%= new java.util.Date() %></p>
</body>
</html>

2. Tomcatの再起動

JSPファイルを追加した後、Tomcatを再起動します。

sudo systemctl restart tomcat10

3. JSPページの確認

ブラウザを開き、以下のURLにアクセスしてJSPページが正しく表示されるか確認します。

http://<RaspberryPiのIPアドレス>:8080/myapp/hello.jsp

これで、Tomcat 10上でJSPを使用するための設定が完了です。上記の手順に従うことで、簡単なJSPページを作成し、ブラウザで表示することができます。

Tomcat9 のインストール

Struts1.3.10をラズパイで動かしたかったのですが、Tomcat10では動かなかったため、Tomcat9をインストールする必要がありました。ただし、Tomcat 9がaptパッケージで簡単にインストールできないため、手動でTomcat 9をインストールする必要がありました。この記事ではラズパイにTomcat 9を手動インストール手順を記します。

必要なパッケージのインストール

まず、必要なパッケージをインストールします。

sudo apt update
sudo apt install wget unzip -y

Tomcat 9のダウンロード

Tomcatの公式サイトからTomcat 9をダウンロードします。

cd /opt
sudo wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz

Tomcatの解凍

ダウンロードしたTomcatを解凍します。

sudo tar xzf apache-tomcat-9.0.89.tar.gz
sudo mv apache-tomcat-9.0.89 tomcat9
sudo rm apache-tomcat-9.0.89.tar.gz 

環境変数の設定

Tomcatのディレクトリを環境変数に追加します。

echo 'export CATALINA_HOME=/opt/tomcat9' | sudo tee -a /etc/profile
source /etc/profile

Tomcatの起動スクリプトを作成

Tomcatをサービスとして管理するために、システム起動スクリプトを作成します。

sudo vi /etc/systemd/system/tomcat9.service

以下の内容を追加します:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

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

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

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

[Install]
WantedBy=multi-user.target

Java環境パス設定

JAVA_HOME環境変数が正しく設定されているか確認します。正しく設定されていない場合、TomcatがJavaを見つけられないため起動に失敗します。

echo $JAVA_HOME

期待される出力はJavaのインストールディレクトリです。もし出力されない場合、正しいディレクトリを設定します。

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64

パーミッションの確認

Tomcatディレクトリおよびファイルのパーミッションが正しく設定されているか確認します。Tomcatユーザーが必要なファイルにアクセスできるようにします。

sudo chown -R pi:pi /opt/tomcat9
sudo chmod -R 755 /opt/tomcat9

サービスのリロードとTomcatの起動

サービスをリロードし、Tomcatを起動します。

sudo systemctl daemon-reload
sudo systemctl start tomcat9
sudo systemctl enable tomcat9

以下のコマンドで動作確認します。

sudo systemctl status tomcat9
● tomcat9.service - Apache Tomcat Web Application Container
     Loaded: loaded (/etc/systemd/system/tomcat9.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-06-19 15:17:56 JST; 4min 9s ago
   Main PID: 1712 (java)
      Tasks: 31 (limit: 3919)
        CPU: 17.409s
     CGroup: /system.slice/tomcat9.service
             └─1712 /usr/lib/jvm/java-17-openjdk-arm64/bin/java -Djava.util.logging.config.file=/opt/tomcat9/conf/logging.pro>

Tomcatの動作確認

ブラウザを開き、http://<RaspberryPiのIPアドレス>:8080にアクセスしてTomcatのデフォルトページが表示されるか確認します。

【おまけ】Raspberry Pi 4 で Struts1.x を動かす!

レガシーシステムの保守案件のために、Struts1.xを覚える必要がありました。Struts1.xは、最後のバージョンが1.3.10ですでにサポートが終了されてます。情報も少なく、ChatGPTが頼りになります。 今回は Raspberry Pi 4 で Struts1.3.10 を動かすことに成功しましたので、その手順を記します。なお、 Struts1.3.10 を動かすために Tomcat9 が必要になります。Tomcat9 は設定済みのものとして解説していきます。

Struts 1とは

Struts 1は、JavaによるWebアプリケーションのフレームワークであり、Apache Software Foundationが開発したものです。2000年代初頭に非常に人気がありましたが、現在ではStruts 2に移行され、サポートも終了しています。それでも、歴史的な観点や既存のプロジェクトでStruts 1に触れることはあるかもしれません。

以下に、Struts 1の基本的な概念とアーキテクチャについて説明します。

Struts 1の基本概念

Model-View-Controller (MVC) アーキテクチャ

ActionServlet

リクエストを受け取り、対応するActionクラスに処理を委譲します。 struts-config.xmlという設定ファイルで、リクエストパスとActionクラスの対応を定義します。

Actionクラス

Form Beans

ActionForward

必要なディレクトリの作成

以下のコマンドを実行して、必要なディレクトリを作成します。

sudo mkdir -p /opt/tomcat9/webapps/strutsapp/WEB-INF/lib

JARファイルのダウンロード

作成したディレクトリへ移動して、MavenリポジトリからStruts 1.3.10のコアライブラリをダウンロードします。

cd /opt/tomcat9/webapps/strutsapp/WEB-INF/lib
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-core/1.3.10/struts-core-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-taglib/1.3.10/struts-taglib-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-tiles/1.3.10/struts-tiles-1.3.10.jar
sudo wget https://repo1.maven.org/maven2/org/apache/struts/struts-extras/1.3.10/struts-extras-1.3.10.jar

さらに以下のコマンドを実行して、これらの依存ライブラリもダウンロードします。

sudo wget https://repo1.maven.org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
sudo wget https://repo1.maven.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
sudo wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar
sudo wget https://repo1.maven.org/maven2/commons-digester/commons-digester/2.1/commons-digester-2.1.jar
sudo wget https://repo1.maven.org/maven2/commons-chain/commons-chain/1.2/commons-chain-1.2.jar
sudo wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar

Webアプリケーションのデプロイメント記述子

web.xmlを作成します。

sudo vi /opt/tomcat9/webapps/strutsapp/WEB-INF/web.xml

以下の内容を追加します。

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <display-name>Struts Application</display-name>

  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Strust設定ファイルの作成

次に struts-config.xml を作成します。

sudo vi /opt/tomcat9/webapps/strutsapp/WEB-INF/struts-config.xml

以下の内容を追加します。

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
 "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
  <form-beans>
    <form-bean name="helloForm" type="org.apache.struts.action.ActionForm"/>
  </form-beans>

  <action-mappings>
    <!-- ForwardActionのparameter属性を追加 -->
    <action path="/hello" type="org.apache.struts.actions.ForwardAction" parameter="/hello.jsp"/>
  </action-mappings>
</struts-config>

JSPファイルの作成

JSPファイルを作成します。

sudo vi /opt/tomcat9/webapps/strutsapp/hello.jsp

以下の内容を追加します。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Hello Struts</title>
</head>
<body>
    <h1>Hello, Struts!</h1>
</body>
</html>

ここまでで、 /opt/tomcat9/webapps/strutsapp 以下の構造は次の通りです。

/opt/tomcat9/webapps/strutsapp/
|-- hello.jsp
`-- WEB-INF
    |-- lib
    |   |-- commons-beanutils-1.9.4.jar
    |   |-- commons-chain-1.2.jar
    |   |-- commons-collections-3.2.2.jar
    |   |-- commons-digester-2.1.jar
    |   |-- commons-logging-1.2.jar
    |   |-- struts-core-1.3.10.jar
    |   |-- struts-extras-1.3.10.jar
    |   |-- struts-taglib-1.3.10.jar
    |   `-- struts-tiles-1.3.10.jar
    |-- struts-config.xml
    `-- web.xml

これらのファイル群は、tomcat9が実行されるユーザー権限に変えておきます。

sudo chown -R pi:pi /opt/tomcat9/webapps/strutsapp
sudo chmod -R 755 /opt/tomcat9/webapps/strutsapp

ディレクトリ構造とファイルの解説

ファイル/ディレクトリ 説明
/opt/tomcat9/webapps/strutsapp/ アプリケーションのルートディレクトリ。Tomcatのwebappsディレクトリにデプロイされています。
hello.jsp クライアントに表示されるJSPページ。このページは/helloリクエストに対するレスポンスとして表示されます。
WEB-INF/ Webアプリケーションの設定ファイルやライブラリを格納するディレクトリ。直接ブラウザからアクセスできません。
lib/ アプリケーションで使用するライブラリ(JARファイル)を格納するディレクトリ。
commons-beanutils-1.9.4.jar Apache Commons BeanUtilsライブラリ。JavaBeansの操作を簡素化するためのツールを提供します。
commons-chain-1.2.jar Apache Commons Chainライブラリ。チェインパターンを実装するためのツールを提供します。
commons-collections-3.2.2.jar Apache Commons Collectionsライブラリ。コレクションフレームワークの拡張機能を提供します。
commons-digester-2.1.jar Apache Commons Digesterライブラリ。XMLの解析とマッピングをサポートします。
commons-logging-1.2.jar Apache Commons Loggingライブラリ。ログ記録のための統一インターフェースを提供します。
struts-core-1.3.10.jar Struts 1フレームワークのコアライブラリ。MVCアーキテクチャをサポートします。
struts-extras-1.3.10.jar Struts 1の追加機能ライブラリ。拡張機能や追加のアクションを提供します。
struts-taglib-1.3.10.jar Struts 1のタグライブラリ。JSPで使用するカスタムタグを提供します。
struts-tiles-1.3.10.jar Struts 1のTilesフレームワーク。テンプレートベースのページレイアウトをサポートします。
struts-config.xml Struts 1の設定ファイル。アクションマッピング、フォームBean、その他の設定を定義します。
web.xml Webアプリケーションのデプロイメント記述子。サーブレット、フィルタ、リスナーの設定を定義します。

Tomcatの再起動

設定を反映させるためにTomcatを再起動します。

sudo systemctl restart tomcat9

Strutsアプリケーションの確認

ブラウザを開き、 http://raspberry.local:8080/strutsapp/hello.do URLにアクセスしてStrutsアプリケーションが正しく動作するか確認します。

3日かけて、ようやく Struts 1.3.10 を動作させることができました!なかなか苦労しました(笑)