intra-mart環境クイックガイド
「3分で作る~」とか言いたいところですが、さすがに無理なので「クイック」と抽象的な言葉でお茶を濁しましょう。操作に慣れて迷いがなければ30分程度で終わります。前提とするのは以下の3点です。書籍では含めますが、ここではセキュリティ対策等の運用で必要となる機能については記述しません。
- CentOS 7 minimalのインストール完了
- IM-Jugglingのセットアップ完了
- ファイル転送可能なSSHクライアントがセットアップ完了
WARファイル準備
新しいPJの作成
ベースモジュールはEnterpriseライセンスを購入している前提なので当然「Advanced Edition」です。
アプリケーションの選択では以下の三つを選びます。
- IM-formaDesinger for Accel Platform
- IM-BIS for Accel Platform
- IM-Workflow アプリケーション汎用アーカイブ
利用するプラットフォームはResin 4.0.xを選択します。
WARファイルの設定変更
プロジェクトのモジュール構成が表示されます。最小限の構成にするためにIMBoxとIM-ContentsSearchを除外します1。IMBox モジュールを外す方法を参考にしましょう。IMBoxと同様にIM-ContentsSearchコアライブラリも除外します。
resin-web.xmlのデータベース接続文字列のDB名、ユーザー名、パスワードを入力します。
<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-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>
保存するとパッチの適用ができるようになります。存在する場合は当てておきましょう。
WARファイルのビルド
ビルドウィザードを選択するとサーバ製品の選択肢が表示されます。「Resin 4.0.x」を選択して「次へ」ボタンを押下します。
WARファイルの出力先とファイル名を入力します。特に__ファイル名はデプロイ後のコンテキストルートになるため、運用環境構築時は慎重に検討__しましょう。初めて触るときは「サンプルを含める」にチェックを入れてもいいですが、最小構成時のデータが分かりにくくなる2ので、初めて触るとき以外は入れない方が良いと思います。
「終了」を選択すると、WARファイルのビルドが行われ、指定したディレクトリに出力されます。
出力されたファイルはSCP等でintra-martをセットアップするサーバに転送しておきます。これでWARファイルの準備は完了です。
ミドルウェア準備
OSのインストールが終わっていれば、次のステップはコマンドを流すだけです。例によってシェルスクリプト風に載せておきます。コピー&ペーストしたらお茶でも飲んで待っていましょう。
#!/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ファイルのデプロイまでサラッと済ませましょう。
#!/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にリダイレクトされます。
「登録」を押下してテナント環境のセットアップを開始します。WARファイルの設定変更で__IMBoxを除外していない場合、ここでApache CassandraやApache Solrの接続情報が必須項目となり詰みます__。ここは公式ドキュメントでは詳しく説明されていないので注意してください。
テナント環境セットアップはかなりの確率で失敗します3。失敗しても焦らなくても大丈夫です。
「メニュー > システム環境構築 > テナント環境セットアップ」から何度でもリトライできます。成功するまで粘り強くリトライしましょう。
テナント環境セットアップに成功したら完了です…、と言いたいところですが先ほどのテナント環境セットアップで一度でも失敗している場合は注意点があります。テナント管理者の作成がキャンセルされているため、自分で作ってやる必要があります。
「メニュー > システム管理 > 一般ユーザ管理」からテナント管理者となるユーザーを作成しておきましょう。
これでようやく準備完了です。
-
intra-martのセットアップが難しくなっているのは、APサーバやDBMSだけでも難易度が高いというのに、公式が出しているセットアップガイドを参考にするとApache CassandraやApache Solrもセットアップしようとしてしまうことが原因と思います。5.1.4. モジュールの選択がサラッと書かれているだけに余計に…。 ↩
-
ある程度慣れてくると、DBを直接除いて依存関係を調べたくなるので、不要なデータがあると混乱するのです。 ↩
-
これまでに100回以上テナント作ってきましたが、3~5割は失敗します。 ↩