PostgreSQL
resin
centos7
intra-mart

intra-mart実践入門の作成記録 #010 執筆用intra-mart環境構築

intra-mart環境クイックガイド

 「3分で作る~」とか言いたいところですが、さすがに無理なので「クイック」と抽象的な言葉でお茶を濁しましょう。操作に慣れて迷いがなければ30分程度で終わります。前提とするのは以下の3点です。書籍では含めますが、ここではセキュリティ対策等の運用で必要となる機能については記述しません。

  1. CentOS 7 minimalのインストール完了
  2. IM-Jugglingのセットアップ完了
  3. ファイル転送可能なSSHクライアントがセットアップ完了

WARファイル準備

新しいPJの作成

 プロジェクト名を決めます。
image.png

 ベースモジュールはEnterpriseライセンスを購入している前提なので当然「Advanced Edition」です。
image.png

 アプリケーションの選択では以下の三つを選びます。

  • IM-formaDesinger for Accel Platform
  • IM-BIS for Accel Platform
  • IM-Workflow アプリケーション汎用アーカイブ

image.png

 利用するプラットフォームはResin 4.0.xを選択します。
image.png

 終了を選択します。
image.png

WARファイルの設定変更

 プロジェクトのモジュール構成が表示されます。最小限の構成にするためにIMBoxIM-ContentsSearchを除外します1IMBox モジュールを外す方法を参考にしましょう。IMBoxと同様にIM-ContentsSearchコアライブラリも除外します。
image.png

 resin-web.xmlのデータベース接続文字列のDB名、ユーザー名、パスワードを入力します。

resin-web.xml
    <database jndi-name="jdbc/default">
        <driver>
            <type>org.postgresql.Driver</type>
            <url>jdbc:postgresql://localhost:5432/your_db_name</url>
            <user>your_db_user_name</user>
            <password>your_db_user_password</password>
            <init-param>
                <param-name>preparedStatementCacheQueries</param-name>
                <param-value>20</param-value>
            </init-param>
        </driver>
        <max-connections>20</max-connections>
        <prepared-statement-cache-size>8</prepared-statement-cache-size>
    </database>

 storage-config.xmlの「root-path-name」を変更します。

storage-config.xml
  <storage-info>
    <root-path-name>/your/intra-mart/storage</root-path-name>
    <system-directory-name>system</system-directory-name>
    <public-directory-name>public</public-directory-name>
    <group-directory-name>groups</group-directory-name>
    <configuration-directory-name>conf</configuration-directory-name>
    <conpatible-directory-name>public</conpatible-directory-name>
    <storage-directory-name>storage</storage-directory-name>
    <temporary-directory-name>temp</temporary-directory-name>
  </storage-info>

 変更を保存します。適切な変更理由を入力しておいてください。
image.png

 保存するとパッチの適用ができるようになります。存在する場合は当てておきましょう。
image.png
image.png

 もう一度、変更を保存しておきましょう。
image.png

WARファイルのビルド

 ビルドウィザードを選択するとサーバ製品の選択肢が表示されます。「Resin 4.0.x」を選択して「次へ」ボタンを押下します。
image.png

 WARファイルの出力先とファイル名を入力します。特にファイル名はデプロイ後のコンテキストルートになるため、運用環境構築時は慎重に検討しましょう。初めて触るときは「サンプルを含める」にチェックを入れてもいいですが、最小構成時のデータが分かりにくくなる2ので、初めて触るとき以外は入れない方が良いと思います。
image.png

 ライセンスの使用条件に同意します。
image.png

 「終了」を選択すると、WARファイルのビルドが行われ、指定したディレクトリに出力されます。
image.png

 出力されたファイルはSCP等でintra-martをセットアップするサーバに転送しておきます。これでWARファイルの準備は完了です。

ミドルウェア準備

 OSのインストールが終わっていれば、次のステップはコマンドを流すだけです。例によってシェルスクリプト風に載せておきます。コピー&ペーストしたらお茶でも飲んで待っていましょう。

site_setup_minimal.sh
#!/bin/bash
# SELinuxの無効化
setenforce 0
sed -i.bak -e "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 

# パスワードなしsudo可能な管理ユーザーの追加
useradd admin_user_name -g wheel -c "管理ユーザー"
sed -i     -e "$ a %wheel ALL=NOPASSWD: ALL" /etc/sudoers
sed -i     -e "$ a Defaults:admin_user_name \!requiretty" /etc/sudoers

# 管理ユーザーでログイン
su admin_user_name -l

# intra-martで使用するポートのFirewall設定変更
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=6600/tcp
sudo firewall-cmd --zone=public --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

# PostgreSQLのインストール
sudo sed -i -e "$ a export PGDATA='/var/lib/pgsql/10/data'" /etc/profile
sudo rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
sudo yum -y install postgresql10-server-10.1 postgresql10-devel-10.1 postgresql10-contrib-10.1
sudo su -l postgres -c "/usr/pgsql-10/bin/initdb -D /var/lib/pgsql/10/data --encoding=UTF8 --locale=ja_JP.utf8"
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

# PostgreSQLの設定
sudo su -l postgres -c "sed -i.bak -e \"s|^#listen_addresses *= *'localhost'|listen_addresses = '*'|g\" /var/lib/pgsql/10/data/postgresql.conf"
sudo su -l postgres -c "sed -i.bak -e \"$ a host all all 0.0.0.0/0 md5\" /var/lib/pgsql/10/data/pg_hba.conf"

# JDKのインストール
sudo yum -y install wget
sudo wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" -q -O /tmp/jdk.rpm "http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.rpm"
sudo rpm -ivh /tmp/jdk.rpm
sudo rm -f /tmp/jdk.rpm
sudo sed -i -e "$ a export JAVA_HOME='/usr/java/jdk1.8.0_162'" /etc/profile
sudo sed -i     -e "$ a export PATH=\$JAVA_HOME/bin:\$PATH" /etc/profile

# Resinのインストール
sudo yum -y install wget openssl-devel gcc make
mkdir /tmp/resin
sudo wget -q -O - http://caucho.com/download/resin-pro-4.0.55.tar.gz | tar zxv -C /tmp/resin --strip-components=1
cd /tmp/resin
sudo ./configure --prefix=/usr/resin --enable-64bit --enable-ssl
sudo make
sudo make install
cd ~/
sudo rm -r -f /tmp/resin
sudo sed -i -e "$ a export RESIN_HOME='/usr/resin'" /etc/profile

# Resinの設定 
sudo wget -q -P /usr/resin/lib "https://jdbc.postgresql.org/download/postgresql-42.2.1.jre6.jar"
sudo mkdir -p /var/resin-tmp
sudo sed -i.bak -e "s|^app.http *:.*$|app.http : 80|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^# app.https *:.*$|app.https : 443|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^web.http *:.*$|web.http : 80|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^# web.https *:.*$|web.https : 443|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^# log_level *: *.*$|log_level : info|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^dev_mode *: *.*$|dev_mode : false|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^# dependency_check_interval *:.*$|dependency_check_interval : 10s|g" /usr/resin/conf/resin.properties
jvm_args="-Xms2048m -Xmx2048m -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/var/resin-tmp"
sudo sed -i     -e "s|^# jvm_args *: *.*$|jvm_args : ${jvm_args}|g" /usr/resin/conf/resin.properties
sudo sed -i     -e "s|^#JAVA_HOME=.*$|source /etc/profile|g" /etc/init.d/resin
sudo systemctl daemon-reload
sudo systemctl start resin
sudo systemctl enable resin

intra-mart初期化

 ここまで来たらあと一歩です。WARファイルのデプロイまでサラッと済ませましょう。

initialize_intra-mart.sh
#!/bin/bash
# intra-martで使うストレージの初期化
sudo rm -r -f /your/intra-mart/storage
sudo mkdir -p /your/intra-mart/storage

# intra-martで使うDBの作成
sudo su -l postgres -c "psql -c \"CREATE ROLE your_db_user_name WITH LOGIN SUPERUSER CREATEDB PASSWORD 'your_db_user_password';\""
sudo su -l postgres -c "createdb -O your_db_user_name -U postgres your_db_name"

# WARファイルのデプロイ
sudo /usr/resin/bin/resinctl deploy /your/managed/directory/context_root_name.war

 デプロイ完了後http://server_name/context_root_name/system/loginにアクセスしてみましょう。初期設定が終わっていないためhttp://server_name/context_root_name/system/initialsettingにリダイレクトされます。
image.png

 システム管理者情報を入力して「次へ」を押下します。
image.png

 テナント情報を入力して「次へ」を押下します。
image.png

 テナント環境情報を入力して「次へ」を押下します。
image.png

 パスワード保存方式設定を入力して「次へ」を押下します。
image.png

 テナント管理者情報を入力して「次へ」を押下します。
image.png

 「登録」を押下してテナント環境のセットアップを開始します。WARファイルの設定変更IMBoxを除外していない場合、ここでApache CassandraApache Solrの接続情報が必須項目となり詰みます。ここは公式ドキュメントでは詳しく説明されていないので注意してください。
image.png

 テナント環境セットアップはかなりの確率で失敗します3。失敗しても焦らなくても大丈夫です。
image.png

 「メニュー > システム環境構築 > テナント環境セットアップ」から何度でもリトライできます。成功するまで粘り強くリトライしましょう。
image.png

 テナント環境セットアップに成功したら完了です…、と言いたいところですが先ほどのテナント環境セットアップで一度でも失敗している場合は注意点があります。テナント管理者の作成がキャンセルされているため、自分で作ってやる必要があります。
image.png

 「メニュー > システム管理 > 一般ユーザ管理」からテナント管理者となるユーザーを作成しておきましょう。
image.png
image.png

 これでようやく準備完了です。


  1. intra-martのセットアップが難しくなっているのは、APサーバやDBMSだけでも難易度が高いというのに、公式が出しているセットアップガイドを参考にするとApache CassandraApache Solrもセットアップしようとしてしまうことが原因と思います。5.1.4. モジュールの選択がサラッと書かれているだけに余計に…。 

  2. ある程度慣れてくると、DBを直接除いて依存関係を調べたくなるので、不要なデータがあると混乱するのです。 

  3. これまでに100回以上テナント作ってきましたが、3~5割は失敗します。