LoginSignup
2
2

More than 5 years have passed since last update.

Docker for Mac でのWebSphere環境構築(プラグイン連携編)

Posted at

前回dockerコンテナへのインストールのみ実施しました。今回はIBM HTTP Server(IHS)からWebSphere Application Server(WAS)への連携(プラグイン連携)を設定していきます。
今のところでは以下のような構成になっています。
スクリーンショット 2018-01-23 16.38.29.png
独立して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   # インストーラ起動

インストールは対話型ですので、レスポンスファイルを載せておきます。

toolbox.xml
<?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を修正してコンテナ起動時に両方起動するようにしておきます。

/opt/IBM/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コマンドです)。

  1. Webコンソールを開きます(https://[wasHostName]:9043/ibm/console/logon.jsp)。 スクリーンショット 2018-01-23 16.01.33.png
  2. apserverを選択して続行します。 スクリーンショット 2018-01-23 16.01.37.png
  3. ユーザ名・パスワードを入力してログインします。 スクリーンショット 2018-01-23 16.01.47.png
  4. 左のガイドフレームから、「サーバー」ー「サーバータイプ」ー「Webサーバー」を選びます。 スクリーンショット 2018-01-23 16.02.44.png
  5. 「新規作成」をクリックし、ウィザードに従って入力します。 スクリーンショット 2018-01-23 16.02.49.pngスクリーンショット 2018-01-23 16.03.01.pngスクリーンショット 2018-01-23 16.03.09.pngスクリーンショット 2018-01-23 16.03.16.pngスクリーンショット 2018-01-23 16.03.28.pngスクリーンショット 2018-01-23 16.03.35.pngスクリーンショット 2018-01-23 16.04.00.pngスクリーンショット 2018-01-23 16.04.11.png

これでWASへのWebサーバの登録は完了です。webserver1の「状況」が「始動済み(緑の右矢印アイコン)」になっているかと思います。webserver1の左にあるチェックボックスにチェックして、ボタンにあるような操作ができます。
ちなみに、WASの設定をWebコンソールから変更すると、ほぼ必ず「変更を有効にするには、サーバーの再始動が必要です」というメッセージが表示されますが、本当に必要なときは少ない気がします。英語版だと、"server may need to be restarted"という表示だったと思います。

4.3. WASとの連携確認

まずはWASのウェブコンテナに直接アクセスしてみます。WASインストール時にオプションの「サンプルアプリケーション」を選択しているので、snoopというサーブレットが既に稼働しています。URLはhttp://[_wasHostName_]:9080/snoopです。
スクリーンショット 2018-01-23 16.04.47.png
同様に、URLのホスト名を[_ihsHostName_]に変えてアクセスすると(http://www.docker.mognet.net/snoop)、、、
スクリーンショット 2018-01-23 16.07.20.png
はい、エラー(404 NotFound)になりました。まだWAS側のサーブレット情報がIHS側に連携されていません。そこで、同じくWebコンソールから、「プラグインの生成」と「プラグインの伝搬」を行います。
スクリーンショット 2018-01-23 16.07.35.pngスクリーンショット 2018-01-23 16.07.42.png
Webサーバを再起動して、再度IHS経由のURLでアクセスします。
スクリーンショット 2018-01-23 16.30.03.png
無事にsnoopサーブレットの画面が表示されました。

なお、初期設定ではプラグインはアプリケーションがデプロイされるたびに、自動で生成されてWEBサーバまで伝搬されます。WEBサーバ側ではこれも初期設定でプラグインを60秒間隔でリロードします。待てないときは、apachectl reloadあたりか、プロセス再起動します。

5. まとめ

スクリーンショット 2018-01-23 16.38.29のコピー.png

IHSとWASとを連携(Apache+Tomcatでいうところのmod_proxy_ajp)させるために、以下を実施しました。

  • IHS側でプラグインのインストール

実体として、httpd.confにプラグインモジュールを読込む設定が追加され、さらにIHS管理サーバが起動可能状態になります(ただのhttpdプロセスなのでツールを使わなくても起動は可能ですが)。

http.conf
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の構築ネタはもう少しだけ続きます。


  1. コマンドの詳細はIBM Knowledge Centerを参照 

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2