仕事でredhat社のEnterprise Application Server7(EAP7)を扱うことが多いので備忘録として記載します。
なお、このサイトでWebアプリを公開したいと考えていますが、EAP7は実運用環境で使うためにはライセンス購入が必要になると思うのでWildflyを使おうと思います。
Red Hat Developer Program Benefits
概要
現時点で最新版であるEAP7.1.3を構築するまでの手順を記載する。
大枠の手順として、まずEAP7.1.0をインストールし、7.1.1/7.1.2/7.1.3パッチを適用していく。
構築するEAP7サーバの設定方針は次の通り。
- EAP7.1.0のインストール方法としてインストーラを使う方法と、zipファイルを解凍する方法がある。サーバ構築で意図しない設定がされる可能性があるので、自身で設定を行うzip版を使う。
- EAP7を実行するためにJDKが必要である。Oracle JDKまたはOpen JDKを選択できるが、ここではOpen JDK(1.8)を使用する。
- インストール先ディレクトリは、次の理由で/opt/jboss-eap-7.1とする。
- Filesystem Hierarchy Standardではアプリのインストール先は/opt。RPM版の既定のインストール先は/opt/rh/eap7/root/usr/share/wildfly/であることもあり、/opt配下に配置するものとする。
- インストーラではEAP-7.1.0という名前でインストールするようだが、zip版を解凍した際に作成されるjboss-eap-7.1の方が分かりやすい。あと、パッチを適用すると実際のバージョンは7.1.1, 7.1.2等のようになるので、7.1.0というディレクトリだと誤解を招くので、jboss-eap-7.1が良い。
- /opt/rh/eap7/root/usr/share/wildfly/だとちょと長い…上記を踏まえ切りよく、/opt/jboss-eap-7.1とする。
- EAP7では複数のインスタンスを纏めて管理するためのdomainモードと、インスタンス毎の管理となるstandaloneモードがある。今回はdomainモードの必要性がないのでstandaloneモードを使用する。
- EAP7への侵入時のリスクを低減するために、サービス実行用の一般ユーザ(jboss)を使用する。
- EAP7の関連のファイルは可能な限り/opt/jboss-eap-7.1に纏める。設定ファイルは、”/etc/default/jboss-eap.conf”ではなく、”/opt/jboss-eap-7.1/bin/init.d/jboss-eap.conf”とする。
手順を実施する上での前提条件は次の通り。
- 手順の検証はCentOS7で行った。
- 後述のファイルダウンロードや資料参照のために、Redhatアカウント(少なくともRed Hat Developer Program, Red Hat Customer Portal, OpenShift Online等のいずれか)の登録が必要である。
- 7.1.1/7.1.2/7.1.3パッチは一般には公開されておらず、カスタマーポータルでEAP7のサブスクリプションを登録したユーザがダウンロードできる。今回は、評価版のEAP7のサブスクリプションを使ってパッチをダウンロードした。なお、評価版の期限は90日であるが、90日を過ぎてもカスタマーポータルから参照できなくなるだけで、実働に影響はない。
その他、参考にした情報は次の通り。
- EAP7.1のインストールガイド
Installation Guide – Red Hat Customer Portal - systemdサービス化
How can I execute the JBoss EAP 6/7 using Systemctl? - (今後の参考)EAPとWildfly/JBossASのバージョンの対応
これを見ると、EAP7.1はWildfly11、EAP7.0はWildfly10に対応する。EAP6以前はJBossASに対応する。
Which version of JBoss EAP corresponds to which community JBoss AS
構築手順
パッケージとパッチのダウンロード
EAP7本体のダウンロード:
redhat developerのページからダウンロードします。
- redhat developerページを開く。Red Hat Developer
An application platform for hosting your apps that provides …
- “Zip File”(右下)のリンクをクリックするとダウンロードが開始される。
(Redhatアカウントでログインしていないとログイン画面が表示されるのでログインしてください。)
EAP7のパッチのダウンロード:
redhatのカスタマーポータルからダウンロードします。
パッチはEAP7のサブスクリプション(使用権)を登録した人しかダウンロードできません。
購入した人しか利用できないようにも思えますが、実際には評価版の申請者も利用できるので、ここでは後者の方法でダウンロードします。
- カスタマーポータルページを開く。Red Hat Customer Portal
Access Red Hat’s knowledge, guidance, and support through yo…
- 画面下の”Downloads”をクリックする。
- JBOSS DEVELOPMENT AND MANAGEMENT欄の”Red Hat JBoss Enterprise Application Platform”行の”Request an Evaluation”をクリックする。
- 評価版の説明ページが開くので”Continue”をクリックする。
(Redhatアカウントでログインしていないとログイン画面が表示されるのでログインしてください。) - ダウンロードページが開くので、”Patches”をクリックし、Update 03, 02, 01をダウンロードする。
前提ソフトウェアのインストール
前提となるソフトウェアはインストールガイドの”JBoss EAP Installation Prerequisites”を参照のこと。本来であれば詳細な条件の確認は必要だが、実行に必要なソフトウェアとしては、Java JDKのみ。
yumでopenjdk, openjdk-develをインストールします。
OracleのJDKは、javac等の開発ツールと実行環境(jre)を含んでいるが、openjdkはjreしか含んでいないので、追加でopenjdk-develをインストールします。
もしunzipコマンドがない場合は同様にyum install unzipします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # yum install java-1.8.0-openjdk ... # yum install java-1.8.0-openjdk-devel ... # yum install zip ... # java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-b10) OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode) # java -version openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-b10) OpenJDK 64-Bit Server VM (build 25.171-b10, mixed mode) # ls -l /usr/lib/jvm 合計 0 lrwxrwxrwx. 1 root root 26 7月 15 18:20 java -> /etc/alternatives/java_sdk lrwxrwxrwx. 1 root root 32 7月 15 18:20 java-1.8.0 -> /etc/alternatives/java_sdk_1.8.0 lrwxrwxrwx. 1 root root 40 7月 15 18:20 java-1.8.0-openjdk -> /etc/alternatives/java_sdk_1.8.0_openjdk drwxr-xr-x. 7 root root 68 7月 15 18:20 java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 lrwxrwxrwx. 1 root root 34 7月 15 18:20 java-openjdk -> /etc/alternatives/java_sdk_openjdk lrwxrwxrwx. 1 root root 21 7月 15 15:14 jre -> /etc/alternatives/jre lrwxrwxrwx. 1 root root 27 7月 15 15:14 jre-1.8.0 -> /etc/alternatives/jre_1.8.0 lrwxrwxrwx. 1 root root 35 7月 15 15:14 jre-1.8.0-openjdk -> /etc/alternatives/jre_1.8.0_openjdk lrwxrwxrwx. 1 root root 51 7月 15 15:14 jre-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64 -> java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre lrwxrwxrwx. 1 root root 29 7月 15 15:14 jre-openjdk -> /etc/alternatives/jre_openjdk |
EAP7のインストール
- 上記でダウンロードしたファイルを任意のディレクトリに配置する。
以降では~root/work直下に配置する前提で手順を記載する。123456# ls -l ~root/work/合計 506884-rw-r--r--. 1 root root 183793648 7月 1 23:34 jboss-eap-7.1.0.zip-rw-r--r--. 1 root root 85702880 7月 15 13:02 jboss-eap-7.1.1-patch.zip-rw-r--r--. 1 root root 124064551 7月 15 13:02 jboss-eap-7.1.2-patch.zip-rw-r--r--. 1 root root 125478149 7月 15 13:02 jboss-eap-7.1.3-patch.zip - eapパッケージを展開123456# cd /opt/# unzip ~/work/jboss-eap-7.1.0.zipArchive: /root/work/jboss-eap-7.1.0.zipcreating: jboss-eap-7.1/creating: jboss-eap-7.1/bin/...
- 基本的な設定
/opt/jboss-eap-7.1/bin/init.d/に起動用のスクリプトや設定ファイルが存在する。
jboss-eap-rhel.shが起動スクリプトで、このスクリプトから設定ファイルjboss-eap.confを参照する設計になっている。そのため、環境依存の設定は基本的にはjboss-eap.confに定義する。jboss-eap.confの設定内容は次の通り。123# cd /opt/jboss-eap-7.1/bin/init.d/# cp jboss-eap.conf jboss-eap.conf.org# vi jboss-eap.conf ※下記を参照
JAVA_HOMEの指定に関して、alternativesから動的に取得できるが、サーバ用途の場合は安易に変更できてはいけないものなので、固定で指定した。既定ではサービス開始・終了の待機時間が60秒になっているが、デプロイするアプリによって開始/終了時間が変わるので最大で600秒(10分)待機するようにする。123456789101112131415161718192021222324252627282930313233343536373839# General configuration for the init.d scripts,# not necessarily for JBoss EAP itself.# default location: /etc/default/jboss-eap## Location of JDK# JAVA_HOME="/usr/lib/jvm/default-java"JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64"## Location of JBoss EAP# JBOSS_HOME="/opt/jboss-eap"JBOSS_HOME="/opt/jboss-eap-7.1"## The username who should own the process.# JBOSS_USER=jboss-eapJBOSS_USER=jboss## The mode JBoss EAP should start, standalone or domain# JBOSS_MODE=standalone## Configuration for standalone mode# JBOSS_CONFIG=standalone.xml## Configuration for domain mode# JBOSS_DOMAIN_CONFIG=domain.xml# JBOSS_HOST_CONFIG=host-master.xml## The amount of time to wait for startup# STARTUP_WAIT=60STARTUP_WAIT=600## The amount of time to wait for shutdown# SHUTDOWN_WAIT=60SHUTDOWN_WAIT=600## Location to keep the console log# JBOSS_CONSOLE_LOG="/var/log/jboss-eap/console.log"## Additionals args to include in startup# JBOSS_OPTS="--admin-only -b 127.0.0.1" - 起動スクリプトの訂正
jboss-eap-rhel.shは、既定では/etc/default/jboss-eap.conf”を参照するので訂正する。
(rootの.bashrcでJBOSS_CONFを宣言する方法も考えられる。なお、弊害として、パッチ適用時に競合が発生してしまうが、それは手動で対応する。)12345678# cd /opt/jboss-eap-7.1/bin/init.d/# vi jboss-eap-rhel.sh ←変更点をマージ...# Load JBoss EAP init.d configuration.if [ -z "$JBOSS_CONF" ]; then#JBOSS_CONF="/etc/default/$JBOSS_NAME.conf"JBOSS_CONF="/opt/jboss-eap-7.1/bin/init.d/$JBOSS_NAME.conf"fi - 実行ユーザjbossの作成と権限変更
ホームディレクトリはEAP7のディレクトリとする。
セキュリティを高めるために、ログインできないシェル(/sbin/nologin)を指定する。
同様の理由でパスワードを指定しない。(指定しないとロックされた状態になるがrootからsuは可。)12345678# useradd -d /opt/jboss-eap-7.1 -s /sbin/nologin jbossuseradd: 警告: ホームディレクトリが既に存在します。skel ディレクトリからのコピーは行いません。# cd /opt# chown -R jboss.jboss ./jboss-eap-7.1# cd /var/log# mkdir jboss-eap# chown -R jboss.jboss ./jboss-eap - 単体での実行確認
サービス化する前にjboss-eap-rhel.shコマンド単体で正常に起動できるか確認する。
コマンド実行終了後、console.logで「開始しました」が出力されていることを確認する。
正常に開始できていない場合、コマンドが終了しないのでCtrl+c等で中断し、console.logを確認し問題を解決する。123456789101112131415# cd /opt/jboss-eap-7.1/bin/init.d/# ./jboss-eap-rhel.sh startStarting jboss-eap: /opt/jboss-eap-7.1/bin/init.d[ OK ]# tail /var/log/jboss-eap/console.log...18:35:10,558 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: JBoss EAP 7.1.0.GA (WildFly Core 3.0.10.Final-redhat-1) は 8756ms で開始しました - サービス 553 個のうち 292 個を開始しました (347 のサービスはレイジー、パッシブ、またはオンデマンドです)。# ./jboss-eap-rhel.sh stopStopping jboss-eap: [ OK ]# tail /var/log/jboss-eap/console.log...18:41:19,061 INFO [org.jboss.as] (MSC service thread 1-2) WFLYSRV0050: 151ms 以内に JBoss EAP 7.1.0.GA (WildFly Core 3.0.10.Final-redhat-1) が 停止されました。*** JBossAS process (10252) received TERM signal ***10252 - systemdサービスとして登録する。
前提に記載した資料をカスタマイズして、sysmtedのファイルを作成し、動作確認や起動時の有効サービスとして登録する。起動や停止の正常性は、上記同様にconsole.logを確認する。123456789101112131415161718192021222324252627# cd /etc/systemd/system/# vi jboss-eap.service ※下記参照# chmod a+x jboss-eap.service# systemctl start jboss-eap.service# systemctl stop jboss-eap.service# systemctl restart jboss-eap.service# systemctl enable jboss-eap.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/jboss-eap.service to /etc/systemd/system/jboss-eap.service.[/code]<pre class="lang:bash title:/etc/systemd/system/jboss-eap.service decode:1 " >[Unit]Description=JBoss EAP Systemctl scriptAfter=NetworkManager.service[Service]Type=forkingExecStart=/opt/jboss-eap-7.1/bin/init.d/jboss-eap-rhel.sh startExecStop=/opt/jboss-eap-7.1/bin/init.d/jboss-eap-rhel.sh stopExecReload=/opt/jboss-eap-7.1/bin/init.d/jboss-eap-rhel.sh restartPIDFile=/var/run/jboss-eap/jboss-eap.pid[Install]WantedBy=multi-user.target[Service]TimeoutStartSec=600TimeoutStopSec=600
パッチの適用
jboss-cliを使ってパッチを適用する。
パッチ適用時は、EAP7を起動しておく必要がある。
7.1.1パッチ(jboss-eap-7.1.1-patch.zip)の適用:
独自に編集しているファイルがパッチ適用対象の場合、競合が発生する。
上書き(–override-all)するか保持するか(–preserve)を選択できるが、どちらも懸念があるので、一旦上書きしてから手動でマージする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # cd /opt/jboss-eap-7.1/bin/ # ./jboss-cli.sh --connect "patch apply ~/work/jboss-eap-7.1.1-patch.zip" 競合が検出されました: bin/init.d/jboss-eap-rhel.sh Use the --override-all, --override=[] or --preserve=[] arguments in order to resolve the conflict. # vi /var/log/jboss-eap/console.log ... 21:22:03,325 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 3) WFLYCTL0013: 操作 ("patch") の失敗 - アドレス: ([("core-service" => "patching")]) - 問題の詳細: { "message" => "競合が検出されました", "conflicts" => {"misc" => ["bin/init.d/jboss-eap-rhel.sh"]} ←競合の対象ファイル } ... # cd ./init.d # cp -p jboss-eap-rhel.sh jboss-eap-rhel.sh.new # cd .. # ./jboss-cli.sh --connect "patch apply ~/work/jboss-eap-7.1.1-patch.zip --override-all" { "outcome" : "success", "response-headers" : { "operation-requires-restart" : true, "process-state" : "restart-required" } } # cd ./init.d # vi jboss-eap-rhel.sh ←変更点をマージ ... # Load JBoss EAP init.d configuration. if [ -z "$JBOSS_CONF" ]; then #JBOSS_CONF="/etc/default/$JBOSS_NAME.conf" JBOSS_CONF="/opt/jboss-eap-7.1/bin/init.d/$JBOSS_NAME.conf" fi ... # systemctl restart jboss-eap.service |
残りの7.1.2, 7.1.3パッチの適用
同様に残りのパッチを適用する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # cd /opt/jboss-eap-7.1/bin/ # ./jboss-cli.sh --connect "patch apply ~/work/jboss-eap-7.1.2-patch.zip" { "outcome" : "success", "response-headers" : { "operation-requires-restart" : true, "process-state" : "restart-required" } } # systemctl restart jboss-eap.service # ./jboss-cli.sh --connect "patch apply ~/work/jboss-eap-7.1.3-patch.zip" { "outcome" : "success", "response-headers" : { "operation-requires-restart" : true, "process-state" : "restart-required" } } # systemctl restart jboss-eap.service # cat /opt/jboss-eap-7.1/version.txt Red Hat JBoss Enterprise Application Platform - Version 7.1.3.GA |