OpenIG自習室(第7回:検証環境の再構築)

takaです。

前回までは、OpenIGを使った代理認証機能について検証を行ってきました。

実際には、OpenIGは単独で使うものではなく、他のアイデンティティ管理ソリューションと連携して使うのが最も効果的です。
そこで、ForgeRock社が提供するアイデンティティ管理システムの OpenAM を導入し、OpenIGと連携させたいと思います。

ですが、その前に。

検証環境が潤沢に整っている会社または個人の方はさておき、現実的にはそうでない方々(特に自分で勉強しようという方にとっては)の方が多いのではないかと思います。

ここまでの検証では、アプリケーションサーバとOpenIGサーバの2台を使ってきました。
さらにOpenAMサーバを導入することになると、計3台のサーバが必要となります。

本番の運用環境ならばいざしらず、検証用に3台を使うのはVMなどなければ厳しいのではないでしょうか。

ということで今回は、1台のサーバ上で検証を行えるように検証環境を再構築したいと思います。
既に1台で検証されている方など、特に不要な方は読み飛ばしていただいて結構です。

検証作業は、以下の環境で実施しています。
ホスト名は www.example.com に変更しました。

OS :Ubuntu 12.04 LTS
CPU:Intel Celeron 2.20GHz
MEM:2GB

検証サーバ: www.example.com (192.168.0.10)
アプリケーションサーバ(Apache2+PHP:ポート80)
OpenIGサーバ(Tomcat6:ポート8080)
OpenAMサーバ(Tomcat6:ポート18080)→ 今回はTomcatのみ準備


1. ホスト名の変更

ホスト名の変更ですが、特に不要な方は行わなくて結構です。
Ubuntuの場合、以下のように変更します。(rootにて実施しています)

# vi /etc/hostname
www.example.com

そして /etc/hosts も変更します。

# vi /etc/hosts
127.0.0.1    www.example.com

変更後、ネットワークを再起動します。

# /etc/init.d/networking restart

2. アプリケーションサーバ

ターゲットアプリケーションが動作するサーバはApache2とPHPで構築しています。
Ubuntu 12.04の場合、taskselを使ってLAMP環境をまとめてインストールできます。

# apt-get install tasksel

起動後、ソフトウェアの選択画面から LAMP server にスペースキーでチェックを入れます。

tasksel

エンターキーを押すと、インストールが始まります。
画面の指示に従ってインストールを行ってください。

もちろん、個別にインストールすることも可能です。

# apt-get install apache2 php5 libapache2-mod-php5

MySQLやphpMyAdminは必要に応じてインストールしてください。
(簡易認証アプリでは必要です)

# apt-get install mysql-server
# apt-get install php5-mysql
# apt-get install phpmyadmin

インストール後、Apacheの起動確認、PHPの動作確認を行ってください。
また、アプリケーション(WordPress または 簡易認証アプリ)も忘れずに設置しておいてください。

3. OpenIGサーバ用Tomcat6

1台のサーバでTomcat6を2つ(OpenIGとOpenAM)稼働させることになります。
やり方としては、

A. CATALINA_HOMEをまるごとコピー。ポート変更。起動スクリプトをコピーして変更。
B. Tomcat6をもう1つインストールしてポート変更。

のいずれかかな、と思います。
(もっと良いやり方があれば教えて下さい!)

ここでは、OpenAMをパッケージのTomcat6、OpenIGはBinary DistributionsのTomcat6を使います。
ということで、OpenIG用のTomcat6をダウンロードして解凍します。
Tomcat6の最新バージョンは 6.0.37 となっています。

# tar xvzf apache-tomcat-6.0.37.tar.gz
# mv apache-tomcat-6.0.37 /usr/local/
# ln -s /usr/local/apache-tomcat-6.0.37 /usr/local/tomcat6

起動スクリプトを用意します。

# vi /etc/init.d/tomcat6_local

以下のサイトを参考にさせていただきました。
Subsonic on Tomcat 6 | hirooka.pro

#!/bin/bash
#
# tomcat
#
# chkconfig:
# description:  Start up the Tomcat servlet engine.
 
# Source function library.
# /etc/init.d/functions
 
CATALINA_HOME="/usr/local/tomcat6"
TOMCAT_USER='tomcat'
SHUTDOWN_WAIT=20
 
tomcat_pid() {
  echo `ps aux | grep $CATALINA_HOME | grep -v grep | awk '{ print $2 }'`
}
 
start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
     then
        echo "Tomcat is already running (pid: $pid)"
     else
        echo "Starting Tomcat"
        /bin/su $TOMCAT_USER $CATALINA_HOME/bin/startup.sh
   fi
 
   return 0
}
 
stop() {
 pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
 
  echo "Stoping Tomcat"
   /bin/su $TOMCAT_USER $CATALINA_HOME/bin/shutdown.sh
 
   echo -n "Waiting for processes to exit ["
   let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n ".";
      sleep 1
      let count=$count+1;
    done
    echo "Done]"
 
    if [ $count -gt $kwait ]
    then
      echo "Killing processes ($pid) which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
    fi
  else
    echo "Tomcat is not running"
  fi
 
  return 0
}
 
status() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
  else
    echo "Tomcat is not running"
  fi
}
 
case "$1" in
 start)
        start
        ;;
 stop)
        stop
        ;;
 restart)
       stop
       start
       ;;
 status)
       status
       ;;
*)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

サーバ起動時に自動起動するようにします。

# chmod 755 /etc/init.d/tomcat6_local
# cd /etc/rc2.d
# ln -s ../init.d/tomcat6_local S99tomcat6_local

起動ユーザーを tomcat にしたので(上記起動スクリプト参照)、Tomcat6のオーナーを変更します。

# chown -R tomcat.tomcat /usr/local/tomcat6

インストール後は、Tomcat6の起動確認を行ってください。
また、第2回を参考に、OpenIGのインストールも行ってください。

なお、config.jsonファイルの修正も必要となりますのでご注意ください。
(ターゲットアプリケーションのURLが変更になります)
また、起動ユーザーがtomcatに変更されているので、.ForgeRockディレクトリは tomcatユーザーのホームディレクトリに設置する必要があります。

第6回でデータベースを使った代理認証を行っていますので、必要な方はJNDI設定も忘れずに行ってください。

4. OpenAMサーバ用Tomcat6

OpenAMサーバ用のTomcat6にはパッケージ版を使います。

# apt-get install tomcat6

ポート番号がOpenIG側Tomcat6と競合してしまうので、変更します。

# cd /var/lib/tomcat6/conf
# vi server.xml

変更は2箇所です。まず1箇所め。

<Server port="8005" shutdown="SHUTDOWN">

このように修正します。ポート番号は任意で結構です。

<Server port="18005" shutdown="SHUTDOWN">

そして2箇所め。

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncodign="UTF-8"
           redirectPort="8443" />

このように修正します。ポート番号は任意で結構です。

<Connector port="18080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncodign="UTF-8"
           redirectPort="18443" />

いずれのサーバも正常に起動、動作しているか確認してください。
特にTomcat6はポートの競合などで起動していないこともあるので注意してください。

これで1台のサーバで検証できる環境が整いました。
次回からはOpenAMの導入とOpenIGとの連携について学びます。


(参考サイト)

ForgeRock社のOpenIGドキュメント、および以下のサイトを参考にさせていただきました。

Subsonic on Tomcat 6 | hirooka.pro
http://hirooka.pro/?p=1304