Sakai19(Sakai Project)をインストールした

Sakaiというのは学習管理システムとかeラーニングとか言われてるシステムで、大学ではMoodleかこっちを使う所が多い(?)そうです。某所で古いバージョンのFork版が動いてたので、ふと思い立ってサーバー立て時の記録を残しておきます。Tomcatなどのいい勉強になったかな(半日潰れた)。

構築環境

  • Ubuntu 18.04 LTS
  • Google Cloud Platform Compute Engine n1-standard-1
  • RAM 3.75GB
  • HDD 10GB
  • Sakai 19.03

テストで立てたので環境も即席のものです。最初は別サーバーのDockerコンテナでやろうと思いましたが、URLをサブディレクトリにすることができず、サブドメインの設定をするのも面倒だったのでIPアドレスが降ってくるGCE使いました。JVMを使うからなのか、メモリは結構食いまして2GB以上は必要なのではないでしょうか(足りないと途中でエラー吐いて死ぬことがある)
https://confluence.sakaiproject.org/pages/viewpage.action?pageId=109772886
基本はここを見ながら進めます。

Tomcat導入

まずは、必要なパッケージを落としておきます。

apt-get install git openjdk-8-jdk maven mysql-server nginx

最初はOpenJDK-11-JDK入れていたんですが、うまく動かないので8を持ってきました(ドキュメントでもJava 1.8とあるし、JDKの互換性は結構ないんですね…)
つぎにTomcat 8系をひっぱってきます(ここらへんからsuなどでrootになってるほうが楽かも)
https://tomcat.apache.org/download-80.cgi でtarボールをダウンロードしてきて/opt/以下に展開します。(注意したいのはapt-getでのtomcatではだめで、tomcatのパッケージにSakaiのバイナリを追加する形で動かすようです。)
そしてリンクを張っておきます。

cd /opt/
tar xvf apache-tomcat-8.5.49.tar.gz
ln -nsf apache-tomcat-8.5.49 tomcat

次にドキュメントにあるようにtomcatのbin/setenv.shに以下の内容を追加します。

export CATALINA_HOME=/opt/tomcat
export JAVA_OPTS="-server -d64 -Xms1g -Xmx2g -Djava.awt.headless=true -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -Dhttp.agent=Sakai"
JAVA_OPTS="$JAVA_OPTS -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false"
JAVA_OPTS="$JAVA_OPTS -Dsakai.security=$CATALINA_HOME/sakai/"
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Tokyo"
JAVA_OPTS="$JAVA_OPTS -Dsakai.cookieName=SAKAI2SESSIONID"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Duser.language=ja -Duser.region=JP"

高速化のロジックがドキュメントでは乗っていますが、お好みに応じて行います。

Sakaiの起動

次にhttp://source.sakaiproject.org/release/よりSakaiのバイナリパッケージを引っ張ってきます。これをTomcatのディレクトリで展開します。

cd /opt/tomcat/
tar xvf sakai-bin-19.3.tar.gz

また、SakaiでMySQLを使うにはひと手間いるらしく、まず、https://dev.mysql.com/downloads/connector/j/より、「Connector/J」の「Platform Independant」のtarを持ってきて中にある「mysql-connector-java-.x.x.x.x.jar」をtomcat/lib/ の中に放り込みます。

次にmy.conf(Ubuntuでは /etc/mysql/mysql.conf.d/mysql.conf らしい)の[mysqld]以下に

default-storage-engine=InnoDB
lower_case_table_names=1

を追加します。(https://confluence.sakaiproject.org/display/DOC/Sakai+11+database+supportより)

次に tomcat/sakai/local.properties にhttps://confluence.sakaiproject.org/pages/viewpage.action?pageId=109772886に従って次の設定を書き込みます。(sakaiuserとsakaipasswordとsakaidatabaseは適宜置き換えてください)

username@javax.sql.BaseDataSource=sakaiuser
password@javax.sql.BaseDataSource=sakaipassword

## MySQL settings
vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/sakaidatabase?useUnicode=true&characterEncoding=UTF-8
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED

これに従って、mysqlで該当データベースとユーザを追加します。(ドキュメントを参考にすると良いでしょう)

次にnginxのリバースプロキシを設定します。
local.propertiesにserverURIを記載していても、NginxでHostをSakaiにパスしないと正常に動作しないので注意してください。(ここを忘れててうまく行かなかった)

location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    ....
}

ここまですると、設定が終わっているはずなので、tomcat/bin/startup.shを叩くと起動が開始します。tomcat/logs/catalina.outを確認してエラーで死んでなければ、起動後(2分くらいかかります)、http://hogehoge/portal/にアクセスするとメイン画面が出てきます。(UserName:admin PassWord:admin で入れます)

だいぶ雑な説明でしたが、とりあえずinstall記です。