Wildfly11のインストール

このサイトでWebアプリを公開したい。
仕事ではJBoss Enterprise Application Server(JBoss EAP)を使う機会が多いのでそれを使いたいがライセンス料がかかる。無償かつ、EAPと同様の機能を持っているWildflyを使用する。

概要

  • セキュリティや柔軟性・機能性を踏まえて、フロントにapacheを配置し、そのバックエンドにwildflyを配置する構成とする。そのため、wildflyでバインドするインターフェイスは127.0.0.1(lo)とし、外部から直接wildflyを参照できないようにする。apache側では所定のコンテキスト名を含むhttp要求をwildfly側に転送するように設定する。
  • wildflyのsysmtedサービス化に関しては、wildfly付属のdocs/contrib/scripts/systemd/にあるsystemd用ファイル群を使用する。これらのファイルを使った設定方法は、READMEの記載内容に沿う。
  • READMEの手順通りに実行してもsystemctl startができない。確認してみた所、/opt/wildfly-12.0.0.Finalディレクトリのオーナがwildflyに変更されていなかったので、このディレクトリに対してもchownする手順を追加した。
  • CentOS7, Apache2.4, Wildfly11を使用する。

構築手順

前提ソフトウェアのインストール

JDK(openjdk, openjdk-devel)をインストールする。
[code gutter=”false”]# yum install java

Installing:
java-1.8.0-openjdkx86_64…

# yum install java-1.8.0-openjdk-devel

# java -version
openjdk version "1.8.0_xxx"

# javac -version
javac 1.8.0_xxx
# alternatives –list

java_sdk_1.8.0 auto /usr/lib/jvm/java-1.8.0-openjdk-1.8.0….

[/code]

Wildflyのインストール

Wildfly付属のREADMEに沿ってWildflyをsystemdのサービスとして登録する。
ローカルからしかアクセスできないので、curlを使って動作確認する。
JAVA_HOMEはalternativeで公開される”/usr/lib/jvm/java-1.8.0-openjdk”を使用するものとする。(”/usr/lib/jvm/java-1.8.0-openjdk-1.8.0…”のようにJDKの物理パスを指定した場合、yum等でJDKをアップデートすると物理パスが変わってしまいWildflyを起動できなくなるため。)
[code gutter=”false”]# useradd -r -d /opt/wildfly -s /sbin/nologin wildfly

# cd /opt/
# unzip ~/work/wildfly-11.0.0.Final.zip
# ln -s /opt/wildfly-11.0.0.Final /opt/wildfly

# cd /opt/wildfly/docs/contrib/scripts/systemd/
# mkdir /etc/wildfly
# cp wildfly.conf /etc/wildfly
# cp wildfly.service /etc/systemd/system/
# cp launch.sh /opt/wildfly/bin/

# cd /opt/wildfly/bin
# cp -p standalone.conf standalone.conf.org
# vi standalone.conf ※JDKの指定、ログ出力先を/var/log/wildflyに変更

#
# Specify the location of the Java home directory. If set then $JAVA will
# be defined to $JAVA_HOME/bin/java, else $JAVA will be "java".
#
#JAVA_HOME="/opt/java/jdk"
JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk"

# local setting
JAVA_OPTS="$JAVA_OPTS -Djboss.server.log.dir=/var/log/wildfly"

# vi launch.sh
#!/bin/bash

if [ "x$WILDFLY_HOME" = "x" ]; then
#WILDFLY_HOME="/opt/wildfly"
WILDFLY_HOME="/opt/wildfly-11.0.0.Final"
fi

# cd /opt/wildfly/standalone/configuration
# cp -p standalone.xml standalone.xml.org
# vi standalone.xml ※下記のajp-listenerの行を追加

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
<ajp-listener name="ajp" socket-binding="ajp" />
<host name="default-host" alias="localhost">

# cd /etc/wildfly
# vi wildfly.conf

# The address to bind to
#WILDFLY_BIND=0.0.0.0
WILDFLY_BIND=127.0.0.1

# chown -R wildfly.wildfly /opt/wildfly
# chown -R wildfly.wildfly /opt/wildfly-11.0.0.Final
# mkdir /var/log/wildfly
# chown -R wildfly.wildfly /var/log/wildfly

# systemctl start wildfly.service
# systemctl status wildfly.service
# systemctl enable wildfly.service
Created symlink from /etc/systemd/system/multi-user.target.wants/wildfly.service to /etc/systemd/system/wildfly.service.

# curl http://localhost:8080
<!–
~ JBoss, Home of Professional Open Source.
~ Copyright (c) 2014, Red Hat, Inc., and individual contributors
~ as indicated by the @author tags. See the copyright.txt file in the
~ distribution for a full listing of individual contributors.
~

[/code]

  • useraddで-rオプションを指定し、システムアカウントとしてwildflyユーザを作成する。パスワードは指定せずに”disabled password”状態(ログインは可能だがパスワード認証不可)とする。
  • ログの出力先を変更するために、standalone.confでjboss.server.log.dirを定義しています。
  • 特定バージョンに依存しないよう/opt/wildflyシンボリックリンクを定義していますが、起動時に次の警告が出力されるため、launch.shのWILDFLY_HOME値を変更しました。
    WFLYSRV0266: Server home is set to '/opt/wildfly/standalone', but server real home is '/opt/wildfly-11.0.0.Final/standalone' - unpredictable results may occur.
  • バインドするインターフェイスが0.0.0.0だと外部から直接Wildflyを参照できてしまうので、127.0.0.1を使用する。

Apacheの設定変更

特定のURL(/app)をwildflyに転送するように設定する。
これを行うためにはapacheのmod_proxy, mod_proxy_ajpを使用する。
wildfly側には、”/app”に対応するアプリを後でデプロイする想定で設定します。
(注意)localsite.confというファイルは、サイト固有の設定をするために私が独自に作成したファイルです。実際にはhttpd.conf等の読者さんの環境に合わせた設定ファイルを編集してください。
[code gutter=”false”]# cd /etc/httpd/conf.d/
# vi localsite.conf ※下記を追加

ProxyRequests Off
ProxyPass /app ajp://localhost:8009/app/
ProxyPassReverse /app ajp://localhost:8009/app/

# systemctl restart httpd.service
# systemctl status httpd.service
● httpd.service – The Apache HTTP Server
Loaded: loaded …
Active: active (running) …

[/code]

動作確認

wildflyにサンプルのアプリ(war)をデプロイし、apache経由で参照できるか確認します。
サンプルアプリapp.warが~root/workに配置した前提で手順を記載します。

CLIを使ってアプリをデプロイします。
tail等を使ってログを確認し、正常にデプロイされた(“Deployed”が表示されている)ことを確認します。
[code gutter=”false”]# cd /opt/wildfly/bin/
# ./jboss-cli.sh –connect "deploy –force ~root/work/app.war"
# tail /opt/wildfly/standalone/log/server.log

INFO [org.jboss.as.server] (management-handler-thread – 2) WFLYSRV0010: Deployed "app.war" (runtime-name : "app.war")

[/code]