パッケージングを War にした場合
昨日の記事である Spring Boot を Kotlin で Hello World でパッケージングを Jar でなく War でプロジェクトを新規作成した状態とする。
build.gradle
の記述が少し変わるのだが、具体的には以下の部分だ:
apply plugin: 'war'
configurations {
providedRuntime
}
dependencies {
// ここをコメントアウトして Application を実行すると組み込みの Tomcat で実行できる
providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
}
上記に書いた通り providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
をコメントアウトすれば普通に Jar でビルドし組み込みの Tomcat で実行できる。
開発時はコメントアウトしておくのがいいだろう。
尚 War でプロジェクト作成した場合 ServletInitializer
というクラスが増えているのが分かると思うが、これが無いと Tomcat で war ファイルをデプロイしても実行できない。
war ファイル作成
上記の状態で普通に Gradle のビルドを行うと build/libs
直下に war ファイルが作成される。
尚ファイル名は (プロジェクト名)-(Gradle に指定している version).war
となるようだ。
Ubuntu 側の用意
今回はローカルの仮想環境に Ubuntu Server 16.04.3 LTS をセットアップしてあるものとする。 後今回は便宜上 Oracle の Java ではなく OpenJDK とする。
sudo apt install apache2 openjdk-8-jdk tomcat8 tomcat8-admin
これで Tomcat がインストールできたので http://(仮想環境の IP):8080/
にアクセスし Tomcat の稼働を意味するスタートページが表示されることを確認する。
仮想環境の場合ネットワークの設定を「ブリッジアダプタ」などホスト PC から IP が見える状態にしておかないといけないので注意する。
tomcat8-admin
をインストールしたので http://(仮想環境の IP):8080/manager
にアクセスすると Tomcat 管理画面に遷移することができるが、最初の認証の為のユーザを設定しなければならない。
sudo vi /etc/tomcat8/tomcat-users.xml
以下を追記する。 ユーザ名とパスワードは適宜強固なものに変更する。
<tomcat-users>
...
<user username="admin" password="admin" roles="manager-gui,admin-gui"/>
</tomcat-users>
Tomcat を再起動し設定を反映する:
sudo service tomcat8 restart
これで http://(仮想環境の IP):8080/manager
にアクセスし設定したユーザ名とパスワードを入力し認証、正しく管理画面が表示されるのを確認する。
更に管理画面上から前述の手順で作成した war ファイルをデプロイし、正しくアプリケーションのページが表示されるのを確認する。
Apache との連携
これは UbuntuでTomcat Apache連携がとても参考になった。 ほぼ記事のオウム返しになって恐縮であるが、まず以下で Tomcat の接続設定を変更する:
sudo vi /etc/tomcat8/server.xml
8080 ポートを閉じて proxy_ajp 連携用の 8009 版ポートを開く:
<!-- コメントアウト
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
-->
<!-- コメントアウトを外す -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
次に sudo vi /etc/apache2/sites-available/000-default.conf
し以下追記する:
<Location />
ProxyPass ajp://localhost:8009/
Order allow,deny
Allow from all
</Location>
最後に proxy_ajp を有効にしそれぞれ再起動:
sudo a2enmod proxy_ajp
sudo service tomcat8 restart
sudo service apache2 restart
http://(仮想環境の IP)/(コンテキスト名)
にアクセスし、正しく Spring Boot アプリケーションが表示されるのを確認する。
/etc/apache2/conf-available
の方に設定を書いて sudo a2enconf xxx
する方法もあるが、個人的にはバーチャルホストで設定を分ける時に今回記載した手順のほうが便利だと思った。