アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング Apache eap/wildfly Linux

Wildfly11のインストール

投稿日:2018年7月16日 更新日:


このサイトで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)をインストールする。

# yum install java
	...
	Installing:
	 java-1.8.0-openjdk                           x86_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....
	...

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を起動できなくなるため。)

# 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.
	  ~
	...
  • 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等の読者さんの環境に合わせた設定ファイルを編集してください。

# 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) ...
	...

動作確認

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

CLIを使ってアプリをデプロイします。
tail等を使ってログを確認し、正常にデプロイされた(“Deployed”が表示されている)ことを確認します。

# 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")
	...


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, Apache, eap/wildfly, Linux
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

保守運用

運用 と 保守 の 違い

若い頃は 運用 と 保守 の違いを調べても良くわからなかった… この辺を使い分けられる人をほとんど見たことない… ある事項が運用なのか保守なのかの話をすると認識が合わない&#8 …

Webアプリテスト用のHTTPヘッダの追加

フロントに配置されたリバースプロキシサーバやロードバランサで設定されたHTTPヘッダを使用するWebアプリを開発することが多々あります。 このようなシナリオでは、設計に基づいて実装することはできますが …

マスタデータ生成ツール

開発や結合試験、本番環境等で使用するマスタデータをExcelで管理することがあります。 そのようなExcelファイルからDBに登録するためのインサート文を作成するために、いつもツールに悩むので作成して …

sftp限定ユーザの公開

ファイルダウンロードのみに限定したsftpを公開したい。 このサーバの存在も隠蔽するために、以前の記事で、新しいIPアドレスを追加した。 この新しく追加したIPアドレスで、sftpを公開する。 前提 …

wildflyアップロードサイズ上限

多くのWebサーバやAPサーバでは、サーバリソースの過剰な消費やDoS攻撃に対する対処として、アップロードの最大サイズが決められている。(厳密には、ブラウザから入力値やファイル等のデータを送信するため …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る