Skip to content

A Docker version of Learning Analytics as a Service (LAaaS)

License

Notifications You must be signed in to change notification settings

RCOSDP/LAaaS-docker

Repository files navigation

LAaaS-docker: ラーニングアナリティクス基盤システム

1. 前提

  • Docker/Compose V2

  • アーキテクチャ: x86_64

v4.1以降はCompose V1をサポートしない。
V1を使用している場合は、Dockerの 公式ドキュメント ( 日本語版 )を参照し、V2に移行すること。
ℹ️
(参考) 動作確認環境の構成
  • サーバ: Amazon EC2 t3.large インスタンス

    • CPU: 2 vCPU

    • メモリ: 8 GiB

  • OS: Ubuntu 22.04 LTS

  • アーキテクチャ: x86_64

  • Docker Engine: v24.0.7

  • Docker Compose: v2.21.0

2. インストール

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

3. 初期設定

docker compose -f base.yaml up -d --no-build // (1)
  1. イメージをビルドする場合は --no-build の代わりに --build オプションを指定

3.1. Learning Locker

3.1.1. Adminユーザの作成

Learning LockerのAdminユーザを作成する。

EMAIL_ADDRESS=<e-mail-address>
ORGANIZATION=<organization>
PASSWORD=<password>
docker exec \
  -e EMAIL_ADDRESS=${EMAIL_ADDRESS} \
  -e ORGANIZATION=${ORGANIZATION} \
  -e PASSWORD=${PASSWORD} learninglocker bash -c '\
    source ~/.bashrc;
    node ./cli/dist/server createSiteAdmin "${EMAIL_ADDRESS}" "${ORGANIZATION}" "${PASSWORD}"'

3.1.2. ログイン

Learning Locker( http://localhost:3000/ )にAdminユーザのアカウントでログインし、組織を選択する。

login
select org

3.1.3. LRSの作成

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

stores

3.1.4. クライアントの設定

サイドメニューの [Settings] > [Clients] から New xAPI store client を選択する。
LRS (optional) に上記で作成したLRSが指定されていることを確認し、 Overall ScopesAPI All にチェックを入れる。

new xapi store client

3.2. Superset

以下のコマンドを実行し、Adminユーザの作成やデータベースの初期設定を行う。

💡
ユーザ情報は superset の環境変数 ADMIN_USERNAMEADMIN_PASSWORD 等で設定する(デフォルトのユーザ名・パスワードは admin )。
⚠️
エラーが発生する場合にはFAQを参照すること。
docker exec superset /init.sh

4. 学習ログの分析

ログを取得するLMS/LTIツールに応じて、以下のリンク先を参照する。
以降の操作は個々のディレクトリ以下で行うこと。

⚠️

各分析環境は同時起動に対応していない。
環境を切り替える際には、作成したコンテナ・ボリュームを削除し、初期設定から再度実行すること。

(例)
# Moodleの学習ログ分析
cd path/to/moodle/
# ...
# 環境の初期化
docker compose down -v

# 初期設定
# ...

# GakuNinLMS-LTI-MCの視聴ログ分析
cd path/to/lti-mc/
# ...

5. FAQ

5.1. Supersetの初期設定でエラーが発生する

init.sh の実行で以下のエラーが発生する場合、Supersetがデータベースの初期化に失敗しているため、以降の手順を行うこと。

psycopg2.errors.UndefinedTable: relation "ab_xxx" does not exist
  • コンテナとボリュームの削除

docker compose -f base.yaml rm -sf superset superset-db
docker volume rm laaas-docker_superset-db
  • DBの起動確認

docker compose -f base.yaml up -d --no-build superset-db
docker logs superset-db

...
PostgreSQL init process complete; ready for start up.
...
...database system is ready to accept connections
  • Supersetの起動

docker compose -f base.yaml up -d --no-build superset
  • エラー原因のテーブル( ab_xxx )がDBに存在することを確認

docker exec superset-db psql -U superset superset -c '\d'

                       List of relations
 Schema |              Name              |   Type   |  Owner
--------+--------------------------------+----------+----------
 public | ab_permission                  | table    | superset
...
 public | ab_view_menu_id_seq            | sequence | superset
(16 rows)
  • Supersetの初期設定

エラーが発生しないことを確認する。

docker exec superset /init.sh

5.2. JupyterHubにユーザを追加するには?

以下のコマンドを実行する。

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

5.3. JupyterHubの起動で権限エラーが発生する

Linux環境において、マウントしたホームディレクトリ( /home/jupyter )の所有者が適切に設定されず、権限エラーが発生する場合がある。

PermissionError: [Errno 13] Permission denied: '/home/jupyter/.local'

本問題が生じた場合には、実行ユーザのUID/GIDを以下の環境変数で指定し、コンテナを再起動すること。

base.yaml
  jupyterhub:
    ...
    environment:
      - LOCAL_UID=<uid> # id -u
      - LOCAL_GID=<gid> # id -g

5.4. Supersetに登録したノートブック実行結果のカラム設定を変更する方法は?

カラム等の設定を変更する場合には [Actions] > [Edit] からデータセットを編集する。
既存のデータセットを異なる構成で再登録した場合には、 [Actions] > [Edit] > [COLUMNS] から SYNC COLUMNS FROM SOURCE を押下し、変更を反映する。

edit dataset

6. 謝辞

  • 本研究は文部科学省「AI 等の活用を推進する研究データエコシステム構築事業」の支援を受けたものです。

  • この研究は2023年度国立情報学研究所公募型共同研究(23S1002)の助成を受けています。