前回はdocker
コンテナへのインストールのみ実施しました。今回はIBM HTTP Server(IHS)からWebSphere Application Server(WAS)への連携(プラグイン連携)を設定していきます。
今のところでは以下のような構成になっています。
独立してIHSとWASのホスト(dockerコンテナ)が立っているだけです。お互いの存在はお互いに全く知りません。
1. Toolboxのインストール
まずは前回入れ忘れたToolbox(プラグインを構成するためのツール)をihsコンテナにインストールします。
- WebSphere Customization Toolbox 9.0.0.6
- IBM SDK, Java Technology Edition, Version 8 8.0.5.7
mac:$ docker start ihs was # とりあえず両方起動
mac:$ docker exec -it ihs bash
root:# /opt/IBM/InstallationManager/eclipse/tools/imcl -c # インストーラ起動
インストールは対話型ですので、レスポンスファイルを載せておきます。
<?xml version='1.0' encoding='UTF-8'?>
<agent-input>
<variables>
<variable name='sharedLocation' value='/opt/IBM/IMShared'/>
</variables>
<server>
<repository location='https://www.ibm.com/software/repositorymanager/V9WASSupplements'/>
</server>
<profile id='WebSphere Customization Toolbox V9.0' installLocation='/opt/IBM/WebSphere/Toolbox'>
<data key='cic.selector.arch' value='x86_64'/>
<data key='cic.selector.nl' value='en,ja'/>
</profile>
<install>
<!-- WebSphere Customization Toolbox 9.0.0.6 -->
<offering profile='WebSphere Customization Toolbox V9.0' id='com.ibm.websphere.WCT.v90' version='9.0.6.20171205_1311' features='core.feature,pct,zpmt,zmmt'/>
<!-- IBM SDK, Java Technology Edition, Version 8 8.0.5.7 -->
<offering profile='WebSphere Customization Toolbox V9.0' id='com.ibm.java.jdk.v8' version='8.0.5007.20171218_1035' features='com.ibm.sdk.8'/>
</install>
<preference name='com.ibm.cic.common.core.preferences.eclipseCache' value='${sharedLocation}'/>
</agent-input>
2. プラグインの生成
CUI環境なので、プラグインはwctcmd.sh
コマンド1を実行して構成します。
フルパスは長いのでコマンド格納ディレクトリに移動します。
root:# cd /opt/IBM/WebSphere/Toolbox/WCT; pwd
/opt/IBM/WebSphere/Toolbox/WCT
プラグインを構成するのに必要となるレスポンスファイルを生成します。
root:# cat <<END_OF_CAT > response.txt
> configType=remote
> enableAdminServerSupport=true
> enableUserAndPass=true
> enableWinService=false
> ihsAdminCreateUserAndGroup=true
> ihsAdminUserID=ihsadmin
> ihsAdminPassword=ihsadminp@ssw0rd
> ihsAdminPort=8008
> ihsAdminUnixUserGroup=staff
> ihsAdminUnixUserID=piro
> mapWebServerToApplications=true
> wasMachineHostname=was.docker.mognet.net
> webServerConfigFile1=/opt/IBM/HTTPServer/conf/httpd.conf
> webServerDefinition=webserver1
> webServerHostName=www.docker.mognet.net
> webServerOS=Linux
> webServerPortNumber=80
> webServerSelected=ihs
> webServerType=IHS
> END_OF_CAT
プラグイン構成を生成します。-defLocName
には任意の名前を指定します。-defLocPathname
(注:nameの"n"が小文字)は、プラグインインストールパスを指定します。
root:# ./wctcmd.sh -tool pct -createDefinition -defLocName WebServerPlugin -defLocPathname /opt/IBM/WebSphere/Plugins -response response.txt
Importing definition location...
Definition location successfully imported
Launching tool pct ...
Tool execution completed successfully.
プラグインが正しく構成できていることを確認します。
root:# ./wctcmd.sh -tool pct -listDefinitions -defLocName WebServerPlugin
Definition location successfully imported
Launching tool pct ...
webserver1
Tool execution completed successfully.
3. adminサーバ(IHS管理サーバ)の起動
response.txt
内でadminサーバを構成するよう指定したので、adminサーバを起動できるようになりました。adminサーバもhttpd
プロセスであり、特殊なコンテンツを保持しています(リッスンポートはresponse.txt
内で8008
に指定しました)。非常に広い意味でのRESTサービスであり、そのクライアントはWASです。WASからadminサーバへリクエストを送信することで、プラグインの伝搬やWEBサーバプロセスの制御(起動・停止・定義編集等)が可能になります。
この辺りは後で見ていくとして、とにかく起動します。起動には専用コマンドであるadminctl
を使います。
root:# /opt/IBM/HTTPServer/bin/adminctl -k start
root:# ps -ef | grep httpd | grep -v grep
root 4265 0 0 14:24 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -f conf/admin.conf -k start
root 4266 4265 0 14:24 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -f conf/admin.conf -k start
noody 4267 4265 0 14:24 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -f conf/admin.conf -k start
root 4302 0 1 14:27 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
nobody 4303 4302 0 14:27 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
nobody 4304 4302 0 14:28 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
nobody 4305 4302 0 14:28 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
このようにadmin用と通常のWebサービス用のhttpd
プロセスが起動しています。
ついでにentry.sh
を修正してコンテナ起動時に両方起動するようにしておきます。
#!/bin/bash
IHS_HOME=/opt/IBM/HTTPServer
${IHS_HOME}/bin/apachectl -k start
${IHS_HOME}/bin/adminctl -k start # ←追加
while true; do
sleep 10
done
4. WASとの連携設定
これでIHS側の準備は整いましたので、WAS側にWebサーバを登録します。やり方はいろいろありますが、一番簡単なのはプラグイン構成時に生成されたスクリプトをWAS稼働サーバで実行する、またはWASのWebコンソールを使用した方法です。
4.1 スクリプトによる手順
まずはスクリプトでやります。スクリプトはプラグイン構成時に${WAS_PLUGIN_DIR}/bin
配下に格納され、その名もconfigurewebserver1.sh
です。コンテナにリモートファイル転送系のサービスを入れていないので、docker cp
でIHSサーバからホストOSを経由してWASサーバへスクリプトをコピーします。
mac:$ docker cp ihs:/opt/IBM/WebSphere/Plugins/bin/configurewebserver1.sh ./
mac:$ docker cp ./configurewebserver1.sh was:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin
コピーしたスクリプトをWAS側で実行します。wsadmin.sh
コマンドが裏で実行されますが、これと同じディレクトリに配置する前提で動作します。従って、コピー先のディレクトリは上記のパスでなくてはいけないし、~~~実行時もそこにcd
してからにする必要があります~~~(v8.5までは相対パス実行だった記憶がありますが、v9.0はちょっと違うようです)。
$ cd /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin; pwd
/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/bin
$ sh ./configurewebserver1.sh
Realm/Cell Name: <default>
Username: wsadmin
Password:
WASX7209I: Connected to process "adminagent" on node apserver using SOAP connector; The type of process is: AdminAgent
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[webserver1, IHS, /opt/IBM/HTTPServer, /opt/IBM/HTTPServer/conf/httpd.conf, 80, MAP_ALL, /opt/IBM/WebSphere/Plugins, unmanaged, www.docker.mognet.net-node, www.docker.mognet.net, linux, 8008, ihsadmin, ihsadminp@ssw0rd]"
Input parameters:
Web server name - webserver1
Web server type - IHS
Web server install location - /opt/IBM/HTTPServer
Web server config location - /opt/IBM/HTTPServer/conf/httpd.conf
Web server port - 80
Map Applications - MAP_ALL
Plugin install location - /opt/IBM/WebSphere/Plugins
Web server node type - unmanaged
Web server node name - www.docker.mognet.net-node
Web server host name - www.docker.mognet.net
Web server operating system - linux
IHS Admin port - 8008
IHS Admin user ID - ihsadmin
IHS Admin password - ihsadminp@ssw0rd
IHS service name - ""
〜中略〜
Configuration save is complete.
一つ怖いのが、このスクリプトにはresponse.txt
に記載した内容が全て入っているので、IHS管理サーバのユーザ名・パスワードも平文で入力済みです。本番環境などで使う際は用済みになったら(あるいは使わなくても)削除しておく方が賢明です。というか、コマンドの実行直後にパラメタとしてパスワードも見えてます。セキュリティにうるさいところだと、一工夫いりそうなクセのあるスクリプトではあります。
4.2. Webコンソールによる手順
Webコンソールから実行する場合です(スクリプトにせよWebコンソールにせよ、裏で最終的に動いているのはwsadmin.sh
コマンドです)。
- Webコンソールを開きます(https://[wasHostName]:9043/ibm/console/logon.jsp)。
- apserverを選択して続行します。
- ユーザ名・パスワードを入力してログインします。
- 左のガイドフレームから、「サーバー」ー「サーバータイプ」ー「Webサーバー」を選びます。
- 「新規作成」をクリックし、ウィザードに従って入力します。
これでWASへのWebサーバの登録は完了です。webserver1
の「状況」が「始動済み(緑の右矢印アイコン)」になっているかと思います。webserver1
の左にあるチェックボックスにチェックして、ボタンにあるような操作ができます。
ちなみに、WASの設定をWebコンソールから変更すると、ほぼ必ず「変更を有効にするには、サーバーの再始動が必要です」というメッセージが表示されますが、本当に必要なときは少ない気がします。英語版だと、"server may need to be restarted"という表示だったと思います。
4.3. WASとの連携確認
まずはWASのウェブコンテナに直接アクセスしてみます。WASインストール時にオプションの「サンプルアプリケーション」を選択しているので、snoop
というサーブレットが既に稼働しています。URLはhttp://[_wasHostName_]:9080/snoop
です。
同様に、URLのホスト名を[_ihsHostName_]
に変えてアクセスすると(http://www.docker.mognet.net/snoop
)、、、
はい、エラー(404 NotFound)になりました。まだWAS側のサーブレット情報がIHS側に連携されていません。そこで、同じくWebコンソールから、「プラグインの生成」と「プラグインの伝搬」を行います。
Webサーバを再起動して、再度IHS経由のURLでアクセスします。
無事にsnoop
サーブレットの画面が表示されました。
なお、初期設定ではプラグインはアプリケーションがデプロイされるたびに、自動で生成されてWEBサーバまで伝搬されます。WEBサーバ側ではこれも初期設定でプラグインを60秒間隔でリロードします。待てないときは、apachectl reload
あたりか、プロセス再起動します。
5. まとめ
IHSとWASとを連携(Apache+Tomcatでいうところのmod_proxy_ajp
)させるために、以下を実施しました。
- IHS側でプラグインのインストール
実体として、httpd.conf
にプラグインモジュールを読込む設定が追加され、さらにIHS管理サーバが起動可能状態になります(ただのhttpd
プロセスなのでツールを使わなくても起動は可能ですが)。
LoadModule was_ap24_module /opt/IBM/WebSphere/Plugins/bin/64bits/mod_was_ap24_http.so
WebSpherePluginConfig /opt/IBM/WebSphere/Plugins/config/webserver1/plugin-cfg.xml
- WAS側でIHSを登録
スクリプトまたはWebコンソールを使ってWASにWebサーバを登録したことで、WAS側からIHSを操作できるようになりました。操作する際は、WASからIHS管理サーバへHTTPアクセスします。
- WAS側でプラグインを生成
IHSがどのリクエストをWASへ送ればよいかはWAS側しか知りませんので、WAS上でプラグインファイル(plugin.xml
)を生成します。このファイルに/snoop
はWASへリクエストを転送するような設定が書かれます。
- IHSへプラグインファイル(
plugin.xml
)を伝搬
WASで生成したプラグインファイルをIHSへ伝搬(転送)することで、IHSとWASの連携設定は完了です。
今回は以上です。WASの構築ネタはもう少しだけ続きます。
-
コマンドの詳細はIBM Knowledge Centerを参照 ↩