Google Cloud Platform を使って JATOS サーバを動かす #4 仮想サーバで JATOS のインストール・設定をする

前回の記事はこちら。

これまでのところで,基本的なサーバの設定は終わっています。次は,JATOS を使えるようにしましょう。JATOS については,

とか

あたりをご覧ください。

ここでは前回と同様 GCP の仮想サーバを使う前提でいきますが,ここから先は GCP 以外でも,Linux サーバを使っている場合は概ね当てはまると思います。ただし,CentOS 以外のディストリビューションを使っている場合,違うコマンドを使う場合もありますので,ご注意ください。

Java のインストール

もし,お使いの仮想サーバに Java がインストールされていない場合は,仮想サーバのシェルで以下のコマンドを実行します。

$ sudo yum -y install java-1.8.0-openjdk

java のバージョンを確認

$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b07)
OpenJDK 64-Bit Server VM (build 25.242-b07, mixed mode)

こんな感じになればOK (1.8.x は Java のバージョン8)。もし,これが 7 とかになってたら新しいバージョンを使うようにしなければいけません。

$ sudo alternatives --config java

There is 1 program that provides 'java'.
 Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java
Enter to keep the current selection[+], or type selection number: 

もし 1.8.x 以外のバージョンがインストールされていたら,リストが複数でてくると思いますので,使いたいバージョンを選んでください(Enter キーを押すのを忘れずに)。

JATOS のインストール

まず,JATOS のダウンロードを行います。シェル上でコマンドを実行してください。

$ wget https://github.com/JATOS/JATOS/releases/download/v3.5.2/jatos.zip

ファイルの URL は,バージョン(上の例だと v3.5.2 )が変わると変更になると思いますので,公式サイトの Download から確認してください。

もし,Command Not Found とかになったら,wget をインストールしてください。

$ sudo yum install wget

ダウンロードが完了したら unzip で回答します。

$ unzip jatos.zip

unzip も not found  だった場合は $ sudo yum install unzip で。解凍してできあがったフォルダを,サーバのフォルダにコピーします。httpd の場合,/var/www がサーバのファイルが入っている場所で,/var/www/html がページの置き場になります。ただ,ここに置いてしまうと,後でやるように httpd  とは別のポートで JATOS を動かす場合,ファイルが見えてしまうので,別のフォルダの方がいいかもです。じゃあ,/var/www/jatos ということにしときましょう。

$ sudo cp jatos /var/www

これでインストールは終了です。

JATOS 用のファイアウォール・ルールを作る

JATOS  はデフォルトで,9000 というポートで通信を行うようになっています。今の段階では 9000 番での通信ができません。

を参考に,9000 番での通信ができるようファイアウォールのルールを追加してください。

JATOS を起動する(テスト)

では,テスト起動してみましょう。JATOS の起動スクリプトは,コピーしたフォルダの中の loader.sh です(以前の記事を参考)

起動するには,以下のコマンドをシェルから実行します。

$ sudo /var/www/jatos/loader.sh &

started と表示されたら,ブラウザで表示します。9000番ポートで接続するためには,ホスト名またはアドレス名の後に :9000 を追加します。例えば,仮想サーバの IP アドレスが,192.168.1.101 である場合,192.168.1.101:9000 となります(ホスト名の場合も同様です  host.some.domain:9000)。

JATOS の管理者アカウントのユーザー ID / パスワードは,admin / admin となっていますので,まずはログインしてください。手元の PC で実行する場合と違い,今回の JATOS はオンライン上で公開されています。そのため,管理者のパスワードはデフォルトのものから変更した方が良いです。パスワードを変える場合は,ログインした後で右上に見えるユーザー名 (今回は Admin) をクリックして,

画像1

出てきたプロフィール画面で,Change Password をクリックして設定します。

画像2

試しにテスト用の実験をアップロードしてみて,うまく動くかどうか(実験は実施できるか,データはダウンロードできるか)確認してみてください。うまくいくようであれば,一度 JATOS は終了します。

$ sudo /var/www/jatos/loader.sh stop

JATOS の自動起動の設定

これで JATOS による実験管理システムは動かすことできるようです。ただ,今の状態だと,サーバを起動する度に実行用のスクリプト loader.sh を動かさないといけず,ちょっと手間ですよね。では,JATOS をサーバ起動時に自動で実行し,終了時に自動で終了するようにしましょう。

この方法は,上のJATOS の公式サイトにも書いているのですが,CentOS でこれをする場合,8. [Optional] Auto-start JATOS にある 2) Via /etc/init.d script と書かれている箇所の設定を行うのですが,ちょっとここの文書が古くて上手くいきません。ですので,以下の手順で行いましょう。

1. loader.sh を /etc/init.d にコピーし,名前を jatos に変える

$ sudo cp /var/www/jatos/loader.sh /etc/init.d
$ sudo mv /etc/init.d/loader.sh /etc/init.d/jatos
$ sudo chmod og+x /etc/init.d/jatos

2. /etc/init.d/jatos をちょっと変更する

多分,最初が

#!/bin/bash
# JATOS loader for Linux and MacOS X

# IP address and port (DEPRECATED - use 'conf/production.conf' instead)
#address="1.2.3.4"
#port="80"

# Don't change after here - unless you know what you're doing
###########################################################

# Get JATOS' path
dir="$( cd "$( dirname "$0" )" && pwd )"

というようになっているはずなので,以下のように書き換える

#!/bin/bash
# JATOS loader for Linux and MacOS X
# chkconfig: 345 85 15
# description: jatos

# IP address and port (DEPRECATED - use 'conf/production.conf' instead)
#address="1.2.3.4"
#port="80"

# Don't change after here - unless you know what you're doing
###########################################################

# Get JATOS' path
dir="/var/www/jatos"

重要なのは2点。まず,2行目の # JATOS laoder for Linux ... の後に,

# chkconfig: 345 85 15
# description: jatos

という行を追加することです。chkconfig とは,CentOS で init.d  による自動起動の設定をするコマンドで,そのための記述をスクリプトに書き加えます。chkconfig の詳細は,

この辺を参考に。

ただし,CentOS も次のバージョン 7 からは,init.d ではなく,systemd という別の自動起動方法が使われているため,その場合は公式サイトにある systemd の場合の設定方法を使ってください。

もう一つは,# Get JATOS' path という行の次にある dir="$( cd "$( dirname "$0" )" && pwd )" の行を,

dir="/var/www/jatos"

というように JATOS がインストールされたディレクトリに変更することです。

/etc/init.d/jatos は一般ユーザーが変更できない領域のファイルですので,sudo などして修正してください。例

$ sudo vi /etc/init.d/jatos

自動起動スクリプトの修正が終わったら登録します。

3. 自動起動の設定

/etc/init.d フォルダに起動用スクリプトを置いただけでは,サーバ起動時に実行はされません。サービスの登録が必要です。サービスの登録は以下のコマンドで行います。

$ sudo chkconfig --add jatos

なお,サービスが見つからないとかなんとか,というエラーが出た場合は,jatos のスクリプトの冒頭に追加した # chkconfig の行が正しく書かれているか確認してください。これで,自動起動の設定は完了です。ただ,これでは,サーバを立ち上げた時に jatos は起動されますが,今はまだ動いていません。この時点で jatos を起動したい場合は,

$ sudo service jatos start

を実行します。もちろん,仮想サーバを再起動しても構いません(再起動は VM インスタンスのコンソールで,停止→開始の順序で実行します)

要らないサービスの終了

JATOS をサービスとして登録し,起動時に実行するよう設定しました。せっかくなので,他の要らないサービスも終了してしまいましょう。この辺は,実際に使うサーバの設定に応じて変わってきますので,あくまで一つの例としてご覧ください。GCP の仮想サーバで CentOS 6 を選んだ場合,デフォルトではメールサーバ (postfix) が起動していました。今回のサーバの用途を考えるとメールサーバは要らんかなあ,というところです。なので,これは停止してしまいましょう(必要なら,また起動すればいいので)。

まず,自動起動させないためには chkconfig コマンドを使って,以下のように設定します。

$ sudo chkconfig postfix off

これで自動起動はされません。今現在動いているメールサーバを停めたい場合は,

$ sudo service postfix stop

と入力します。

実験を登録して実行する

この時点で JATOS の準備は完了です。後は,実験を実際に実施するだけです。なお,以前 OpenSesame による実験を紹介しました。その後,山形大の小林先生,大杉先生がまとめていらっしゃる lab.js を試してみました。

結論から言いますと,イイ!。もう自分の実験はこっちにしようかと思いました。ただ,アプリケーションのインストールは必要なく,ブラウザで全てできるという点は良いのですが,実験を途中で保存して再度作成を再開するときに json 形式で保存されたり,実験画面を作成していく時にパーツをドラッグアンドドロップで配置するといったような気軽さはないので,プログラミング能力皆無,という学生が最初から実験を作るのはちょっと難しいかな,という印象です。まあ,この辺は,lab.js にせよ,OpenSesame にせよ,ノウハウを蓄積していくしかないですねー。

なお,lab.js の実験結果をダウンロードしたデータは,そのままだとちょっと(かなり?)使いにくい,JSON 形式のデータなので,

こちらにある方法に従って R で処理するとよさげです(とりあえず手元で試した限りでは1行に1試行のデータができあがりました)。

あともう一点。

以前の記事で,実験参加者の Worker Type を,Personal Single Worker にしていましたが,実験での利用を考えると,こちらではなく,General Single Worker の方が良い気がしてきました。Personal と General の違いは,前者が一人一人専用の URL があること(Worker ID も事前に決められる),後者は同じ URL を共有し,ユーザーがアクセスする度に新しい Worker ID が発行されます。後者の方法だと,授業の履修者に一斉に同じ URL を通知してアクセスしてもらう感じで使えますので,授業用途としては General Single の方がオススメです。

JATOS  サーバを Google Cloud で動かす入門は,この辺で。

この記事が気に入ったらサポートをしてみませんか?