Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
bin
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ラーニングアナリティクス基盤システム Docker 環境構築手順書

1. 前提

  • Docker version 18.09.2

  • Docker compose version 1.23.2

2. LAaaS-dockerのインストール

$ git clone https://github.com/RCOSDP/LAaaS-docker.git

3. Moodleのインストール

bin/moodle_install を実行してMoodleのDocker環境をインストールする。
本スクリプトでは主に次の処理を行う。

  • Moodle 3.4をダウンロード

  • moodle-docker の設定で MOODLE_DOCKER_DBUSER および POSTGRES_USERmoodleuser に変更( moodle-docker/base.yml )

  • Moodleの設定でMoodleデータベースのテーブル名に付与する接頭辞を mdl_ に変更( moodle-docker/moodle/config.php )

  • Moodleのコンテナ群を起動

  • xAPIステートメント変換スクリプトでイベントの処理状況を管理するためのテーブル( xapi_records_processed )を作成

$ cd LAaaS-docker
$ bin/moodle_install

起動したコンテナを停止するには次のコマンドを実行する。

$ bin/moodle_stop

Moodleのコンテナ群を立ち上げるには次のコマンドを実行する。

$ bin/moodle_start

3.1. Moodleの初期設定

Moodle( http://localhost:8000 )にアクセスし、画面の指示に従って初期設定を行う。

moodle

4. ラーニングアナリティクス基盤の起動

次のコンテナを起動する。

項目

名称

コンテナ名

学習活動のデータストア

Learning Locker(Web)

learninglocker

Learning Locker(DB)

learninglocker_mongo

learninglocker_redis

OpenLRW(Web)

openlrw_web

OpenLRW(DB)

openlrw_mongo

ステートメント変換

xAPIステートメント変換

xapi_stmt_gen

Caliperステートメント変換

caliper_stmt_gen

Caliperステートメント変換(db)

caliper_log_db

分析システム

Superset(Web)

superset

Superset(DB)

superset_db

JupyterHub(Web/DB)

jupyterhub

$ docker-compose up -d

各コンテナ間の関係を下図に示す。

generate xapi statements
図 1. Moodleログから生成したxAPIステートメントをLearning Lockerに登録
analysis using superset
図 2. Supersetを用いた分析(xAPIステートメントの例)
xapi analysis using jupyterhub and superset
図 3. xAPIステートメントのJupyterHubおよびSupersetを用いた分析
caliper analysis using jupyterhub
図 4. CaliperステートメントのJupyterHubを用いた分析

4.1. Learning Lockerの設定

4.1.1. Adminユーザの作成

learninglocker コンテナに接続し、Adminユーザを作成する。

$ docker exec -it learninglocker bash
# node ./cli/dist/server createSiteAdmin "<e-mail-address> " "<organization>" "<password>"

4.1.2. ログイン

Learning Locker( http://localhost:3000/ )にアクセスし、Adminユーザのアカウントでログインする。

login

組織を選択する。

select org

ダッシュボードが表示されることを確認する。

dashboards

4.1.3. LRSの作成

サイドメニューの Settings>Stores から任意の名称でLRSを作成する。

stores
add new lrs

4.1.4. クライアント情報の設定

サイドメニューの Settings>Clients から New xAPI store client を選択する。 Overall ScopesAll にチェックを入れ、LRSとして事前に作成したLRSを指定する。

new xapi store client

4.2. xAPIステートメント変換スクリプトの設定

xapi_stmt_gen コンテナに接続する。

$ docker exec -it xapi_stmt_gen bash

スクリプトの設定ファイルを編集する。

/usr/local/src/xapi_stmt_gen/config/app.js
const config = {

  LRS:{
    url:'http://<learning-locker-container-ip-address>:8081/data/xAPI/', // (1)
    clients:{
      // LRS client
      'default':{
        user:'<xapi-store-client-key>', // (2)
        pass:'<xapi-store-client-secret>' // (2)
      },
  1. LRS.url はLearning Lockerのクライアント情報として表示される xAPI Endpoint とは異なる

  2. クライアント情報の設定で確認したLRSのクライアント情報を設定

なお、 <learning-locker-container-ip-address> は以下の方法で確認することができる。

$ docker inspect learninglocker
...
        "NetworkSettings": {
...
            "Networks": {
                "moodle-docker_default": {
...
                    "IPAddress": "xxx.xxx.xxx.xxx",
...

4.3. xAPIステートメントの生成

Moodle上での学習活動を実施した後、以下のコマンドでMoodleログをxAPIステートメントに変換する。

$ docker exec -it xapi_stmt_gen npm start

Learning Lockerにアクセスし、ステートメントが正常に登録されていることを確認する。

source

なお、Moodleログの処理済み件数を算出する場合は以下のコマンドを実行する。

$ docker exec -it moodle-docker_db_1 psql -U moodleuser moodle -c "SELECT count(*) FROM xapi_records_processed;"

また、スクリプトのバージョンアップ等に伴い処理済みのMoodleログを再度処理したい場合は、以下のコマンドで変換処理の実行履歴を削除する。

$ docker exec -it moodle-docker_db_1 psql -U moodleuser moodle -c "DELETE FROM xapi_records_processed;"

4.4. OpenLRWの設定

openlrw_mongo の起動状況により、 openlrwopenlrw_mongo に接続できず終了している場合があるので確認する。

$ docker-compose ps

openlrw のステータスが Exit 0 になっていた場合、起動に失敗しているので再起動する。

$ docker-compose up -d openlrw

ログを確認し、最終行に Started OpenLRW と表示されていることを確認する。

$ docker-compose logs -f openlrw

(表示例)
…
openlrw_web | 2019-03-24 16:43:36.147  INFO 8 --- [           main] org.apereo.openlrw.OpenLRW               : Started OpenLRW in 20.922 seconds (JVM running for 23.221)

4.5. Caliperステートメント変換スクリプト実行ログの起動

docker-compose.ymlcaliper_log_db にデフォルトの設定が記載されている。変更する場合、caliper/.env 内の DB_LOG_* の項目も合わせて変更する。

caliper/.env
(変更例)

変更前
...
DB_LOG_HOST=caliper_log_db
DB_LOG_DATABASE=caliper_log
DB_LOG_USERNAME=caliper_cli
DB_LOG_PASSWORD=caliper
...

変更後
...
DB_LOG_HOST=caliper_log_db
DB_LOG_DATABASE=<changed database name>
DB_LOG_USERNAME=<changed username>
DB_LOG_PASSWORD=<changed password>
...

設定完了後、 caliper_log_db を起動する。

$ docker-compose up -d caliper_log_db

4.6. Caliperステートメント変換スクリプトの設定

openlrw_mongo のMongoDBに接続する。ログイン情報は open_lrw/.env に従う。

$ docker-compose exec openlrw_mongo bash
# mongo <openlrw-database> -u <openlrw-username> -p <openlrw-password>

次のコマンドを実行し、 apiKey を取得する。

> db.mongoOrg.find().pretty()

(表示例)
{
	"_id" : ObjectId("5c9921dea1de1800064caff1"),
	"apiKey" : "77bb4005-1a77-4984-97bd-1c033fc101e9",
	"apiSecret" : "d2f39c9d-cf5a-43e6-aa2b-2fa993b2cd2f",
	"tenantId" : "5c9921dda1de1800064caff0",
	"org" : {
		"sourcedId" : "7410cd7b-b761-4150-8cf9-a7fdb89a704e",
		"status" : "active",
		"metadata" : {
			"https://matthews/tenant" : "5c9921dda1de1800064caff0"
		},
		"dateLastModified" : ISODate("2019-03-25T18:45:49.988Z"),
		"name" : "DEFAULT_ORG",
		"type" : "other"
	},
	"_class" : "org.apereo.openlrw.oneroster.service.repository.MongoOrg"
}

取得した apiKeycaliper/config/lrw.php 内の default を設定する。

caliper/config/lrw.php
return [
    tenants => [
        'default' => '<your apiKey>'
    ]
];

4.7. Caliperステートメントの生成

Moodle上での学習活動を実施した後、以下のコマンドでMoodleログをCaliperステートメントに変換する。 ApiKeyの設定を適用するため、コンテナをリビルドしてから行うこと。

$ docker-compose build caliper_stmt_gen
$ docker-compose run --rm caliper_stmt_gen

openlrw_mongo に接続し、データベースに送出したステートメントが登録されていることを確認する。

$ docker-compose exec openlrw_mongo bash
# mongo <openlrw-database> -u <openlrw-username> -p <openlrw-password>
> db.mongoEvent.find().pretty()

4.8. Supersetの設定

4.8.1. ログイン

Superset( http://localhost:8088 )にアクセスし、Adminユーザでログインする(Username: admin 、Password: admin )。

signin

ダッシュボードの一覧が表示されることを確認する。

dashboards

4.8.2. Learning Lockerデータベースの登録

Sources メニューから Databases を選択する。

databases link

データベース一覧の右上にある + ボタンを押下する。

list databases

以下の通りにデータベースの設定を行う。

Databases

learninglocker

SQLAlchemy URI

postgresql://postgres@superset_db:5432/learninglocker

Expose in SQL Lab

チェック

add learninglocker database

Test Connection ボタンを押下し、 Seems OK! と表示されることを確認する。

test learninglocker database connection

Save ボタンを押下し、 learninglocker データベースが正常に追加されることを確認する。

added learninglocker database

4.8.3. xAPIステートメントテーブルの作成

Sources メニューから Tables を選択する。

tables link

テーブル一覧の右上にある + ボタンを押下する。

list tables

以下の通りにテーブルの設定を行う。

Database

learninglocker

Table Name

xapi_statements

add xapi statements

Save ボタンを押下し、 xapi_statements テーブルが正常に追加されることを確認する。

added xapi statements

xapi_statements テーブルを選択し、Learning Lockerに登録済みのステートメント件数が取得できることを確認する。

count xapi statements

4.8.4. OpenLRWデータベースの登録

Sources メニューから Databases を選択する。

databases link

データベース一覧の右上にある + ボタンを押下する。

list databases

以下の通りにデータベースの設定を行う。

Database

openlrw

SQLAlchemy URI

postgresql://postgres@superset_db:5432/openlrw

Expose in SQL Lab

チェック

add openlrw database

Test Connection ボタンを押下し、 Seems OK! と表示されることを確認する。

test openlrw database connection

Save ボタンを押下し、 openlrw データベースが正常に追加されることを確認する。

added openlrw database

4.8.5. Caliperステートメントテーブルの作成

Sources メニューから Tables を選択する。

tables link

テーブル一覧の右上にある + ボタンを押下する。

list tables

以下の通りにテーブルの設定を行う。

Database

openlrw

Table Name

caliper_statements

add caliper statements

Save ボタンを押下し、 caliper_statements テーブルが正常に追加されることを確認する。

added caliper statements

caliper_statements テーブルを選択し、OpenLRWに登録済みのステートメント件数が取得できることを確認する。

count caliper statements

4.9. JupyterHubの設定

4.9.1. ログイン

JupyterHub( http://localhost:8001 )にアクセスし、 jupyter ユーザ(Username: jupyter 、Password: jupyter )でログインする。

signin

ノートブック一覧が表示されることを確認する。

notebooks

4.9.2. Learning Lockerからステートメントを取得

ノートブック「get_statements_from_learninglocker」を活用し、Learning LockerのAPIを使用したステートメント取得が可能であることを確認する。
userpasswd にLRSクライアントの KeySecret をそれぞれ設定し、 url でフィルタ条件を変更することで任意のステートメントを取得する。

get statements from learninglocker

4.9.3. OpenLRWからステートメントを取得

ノートブック「get_statements_from_openlrw」を活用し、OpenLRWのAPIを使用したステートメント取得が可能であることを確認する。
まず usernamepassword にそれぞれCaliperステートメント変換スクリプトの設定で取得した apiKeyapiSecret を設定し、JWTトークンを取得する。
その後、 Authorization ヘッダに取得したJWTトークンを設定し、 url のユーザーIDを変更することで任意のユーザーのイベントを取得する。

get statements from openlrw

4.9.4. 作成したノートブックの取得

作成したノートブックは jupyterhub コンテナの /home/<username> に保存される。

$ docker exec -it jupyterhub ls /home/jupyter
get_statements_from_learninglocker.ipynb  get_statements_from_openlrw.ipynb …

4.9.5. ユーザの作成

以下のコマンドで jupyterhub コンテナ上にユーザを作成する。

$ docker exec -it jupyterhub useradd -m -p $(echo "<password>" | openssl passwd -1 -stdin) -s /bin/bash <username>

4.10. JupyterHubとSupersetの連携

4.10.1. Jupyterノートブック実行結果をSupersetデータベースに登録

JupyterHubにログインし、ノートブック「import_analysis_result_to_superset」を活用し、ステートメントの取得、分析、Supersetデータベースへの登録を行う。

import analysis result to superset

superset_db コンテナ上に登録された分析結果は以下のコマンドで参照することができる。

$ docker exec -it superset_db psql jupyter -c "SELECT * FROM <tablename>;"

index | object.definition.description.en |object.id            | timestamp
--------+--------------------------------------------+------------------------------+---------------------------
    0 | user_loggedin                | http://localhost:8000 | 2019-06-20T14:38:01+09:00
    …
    (4 rows)

4.10.2. Supersetへの登録

Superset上で上記テーブルが格納されたjupyterデータベースを以下の通り登録する。

Database

jupyter

SQLAlchemy URI

postgresql://postgres@superset_db:5432/jupyter

Expose in SQL Lab

チェック

add jupyter database

jupyter データベースのテーブルを以下の通りに登録する。

Database

jupyter

Table Name

Jupyterノートブックで指定したテーブル名

add jupyter analysis result
added jupyter analysis result

グループ列、フィルター列、時刻列の指定などはテーブルの設定から必要に応じて行うこと。

edit jupyter analysis result

JupyterHubで加工したステートメントが可視化できることを確認すること。

visualize jupyter analysis result