#author("2025-06-04T05:24:37+00:00","default:iseki","iseki")
#author("2025-06-04T05:25:52+00:00","default:iseki","iseki")
** 概要 [#k3dd6a2c]
- JupyterHub の [[''configurable-http-proxy''>https://github.com/jupyterhub/configurable-http-proxy]] の代用となるリバースプロキシサーバ
- [[''configurable-http-proxy'']]
- ''[[mod_lticontainer]]''(https://github.com/moodle-fumihax/mod_lticontainer) で Charts機能を使用する場合に必要.
- JupyterHub の ''[[configurable-http-proxy]]'' (https://github.com/jupyterhub/configurable-http-proxy) の代用となるリバースプロキシサーバ
- ''[[configurable-http-proxy]]''
- ''[[mod_lticontainer]]'' (https://github.com/moodle-fumihax/mod_lticontainer) で Charts機能を使用する場合に必要.


** 機能 [#d15259a5]
- JupyterHub から通知を受けて動作する通信経路制御のための ''ltictr_api_server'' と,実際に通信を中継して WebSocketデータを解析する ''ltictr_proxy_server'' から成る.
- 通常は ''ltictr_proxy_server'' からチャイルドプロセスとして ''ltictr_api_server'' が起動される.
-- ''ltictr_proxy_server'' と ''ltictr_api_server'' はそれぞれ独立に起動することも可能.
- ''ltictr_proxy_server'' は単体で普通のWeb用リバースプロキシサーバとしても使用可能.
- 機能詳細
-- JupyterHub の通信経路制御に対応
-- 通信の中継
-- WebSocket 通信の解析.
--- ''ユーザの学習状況に関するデータを収集''.
-- HTTP(S)通信の解析.
-- Cookie の挿入.(Moodle のコース識別を行うため)
-- ''収集したデータを Moodle へ %%XML-RPC%% REST通信で渡す''.(MoodleのWebサービスを使用)

** コマンド引数 [#r702c13c]
**** ltictr_proxy_server [#m85cd09d]
 Usage... %s -p client_side_port [-c] [-h host_url[:port]] [-a [api_url:]port] [-u user] [-d] 
                      [--noexecapi] [--chunked] [--conf config_file] 
                      [--cert cert_file] [--key key_file] [--pid pid_file]
- ''-p'' : Webブラウザの通信を受けるローカルサーバポート番号.必須.
- ''-c'' : Webブラウザに対してSSL/TLS接続になる.
- ''-h'' : WWWサーバを明示的に指定するためのURL.ltictr_api_server を使用する場合は省略可.
- ''-a'' : ltictr_api_server を指定するためのURL.ポート番号のみの場合,URL部分は http://127.0.0.1 となる.
- ''-u'' : 実効ユーザ名.
- ''-d'' : デバッグモード.
- ''-n'', ''--noexecapi'' : ltictr_api_server を起動しない.
- ''--chunked'' : chunkデータをchunkデータとして扱う.通常動作では chunkデータは,一旦全部受信されてから転送される.
- ''--conf'' : 設定ファイルを指定する(''コマンドラインと競合する場合は,設定ファイル優先'')
- ''--cert'' : -c を指定した場合のサーバ証明書:PEM形式.設定ファイル内でも指定可能.
-- デフォルトは /etc/pki/tls/certs/server.pem
- ''--key''  : -c を指定した場合のサーバの秘密鍵:PEM形式.設定ファイル内でも指定可能. 
-- デフォルトは /etc/pki/tls/private/key.pem
- ''--pid'' : pid ファイルを指定する.
-- デフォルトは /var/run/ltictr_proxy.pid

**** ltictr_api_server [#j067bff8]
 Usage... %s -a [api_url:]port [-u user] [-d] 
               [--conf config_file] [--cert cert_file] [--key key_file] [--apid pid_file] 
- ''-a'' : サーバポートのURL.必須.FQDNの部分は無視する.TLS通信を行う場合は https://:8001 のように記述する.
- ''-u'' : 実効ユーザ名.
- ''-d'' : デバッグモード.
- ''--conf'' : 設定ファイルを指定する(''コマンドラインと競合する場合は,設定ファイル優先'')
- ''--cert'' : -c を指定した場合のサーバ証明書:PEM形式.設定ファイル内でも指定可能.
-- デフォルトは /etc/pki/tls/certs/server.pem
- ''--key''  : -c を指定した場合のサーバの秘密鍵:PEM形式.設定ファイル内でも指定可能. 
-- デフォルトは /etc/pki/tls/private/key.pem
- ''--pid'' : pid ファイルを指定する.
-- デフォルトは /var/run/ltictr_proxy.pid

** 起動 [#x7ca0f56]
*** systemd を使用する. [#w2040826]
 # vi /usr/local/etc/ltictr_proxy.conf
 # vi /usr/lib/systemd/system/ltictr_proxy.service
 # systemctl enable ltictr_proxy.service
 # systemctl start  ltictr_proxy.service

*** 手動起動 [#s4d0923a]
**** 1. 通常の起動 [#l6ce9541]
 # ltictr_proxy_server -p 8100 -c -a 8001 --conf /usr/local/etc/ltictr_proxy.conf
 # jupyterhub -f jupyterhub_XXX_config.py
**** 2. ltictr_api_server と ltictr_proxy_server を別々に起動する場合 [#g32fa414]
 # ltictr_api_server -a 8001 --conf ./ltictr_proxy.conf
 # ltictr_proxy_server -p 8100 -c -a 8001 -n --conf /usr/local/etc/ltictr_proxy.conf
 # jupyterhub -f jupyterhub_XXX_config.py
**** 3. configarable-http-proxy と併用する場合.または通常の Webリバースプロキシとして使用する場合 [#o68a35a8]
 # ltictr_proxy_server -p 8100 -c -n -h http://202.26.150.55:8000 --conf /usr/local/etc/ltictr_proxy.conf
 # jupyterhub -f jupyterhub_XXX_config.py

** 設定 [#ea3a901b]
*** JupyterHub の設定 [#nffb03c1]
- 上記 ''手動起動'' で,''1, 2の場合'',JupyterHubで自動的に configurable-http-proxy が起動しないようにしなければならない.
-- cron や letsencrypt関係でネットワークサービスを再起動するプログラムも考慮する
- JupyterHub の設定ファイル(jupyterhub_XXX_config.py)
 c.JupyterHub.cleanup_proxy = False
 c.ConfigurableHTTPProxy.should_start = False
 c.ConfigurableHTTPProxy.api_url = 'http://localhost:8001'
 c.ConfigurableHTTPProxy.auth_token = "ABCDEFG"     # 任意の文字例.下記参照.

***  設定ファイル (/usr/local/etc/ltictr_proxy.conf) [#l6c34358]
- %%''Moodle_Host'' = XML-RPC を行うホスト名(FQDNまたはIPアドレス).%% 廃止.クッキーからの自動設定に変更.
- %%''Moodle_Port'' = XML-RPC を行うホストのポート番号.%% 廃止.クッキーからの自動設定に変更.
- %%''Moodle_TLS'' = XML-RPC を行う際に HTTPS を使用するかどうか..%% 廃止.クッキーからの自動設定に変更.
- %%''Moodle_Token'' = Moodle から発行されたトークン.下記参照.必須.%% 廃止.クッキーからの自動設定に変更.

- ''Rest_Path'' = %%XML-RPC%% RESTを行うURLのディレクトリ情報.
-- デフォルトは /webservice/rest/server.php
- ''Rest_Response'' = %%XML-RPC%% RESTを行った場合の返答を表示するかどうか.
-- デバッグ用.デフォルトは FALSE
- ''Rest_Service'' = %%XML-RPC%% RESTのサービス名.
-- デフォルトから変更する必要はない.変更すると動かなくなる.
-- デバッグ用.デフォルトは ''mod_mdlds_write_nblogs''
- ''Rest_HTTPver'' = %%XML-RPC%% RESTを行う際の HTTPのプロトコルバージョン.1.1 か 1.0 を指定.
-- 多分 1.1 で問題ない.デフォルトは 1.1
- ''LTICTR_PID_File'' = ltictr_proxy_server の pidファイル.
- ''LTICTR_API_PID_File'' = ltictr_api_server の pidファイル.
- ''LTICTR_API_Token'' = APIサーバの接続用トークン.任意の文字列.JupyterHub の設定ファイルのc.ConfigurableHTTPProxy.auth_token と同じ値にする.ltictr_proxy_server でも必要.
- ''LTICTR_Server_Cert'' = HTTPS通信を行う場合のサーバ証明書(PEM形式)
-- デフォルトは /etc/pki/tls/certs/server.pem
- ''LTICTR_Server_Chain'' = HTTPS通信を行う場合のサーバ証明書のチェイン(PEM形式)
-- デフォルトは指定なし(NULL).
- ''LTICTR_Private_Key'' = HTTPS通信を行う場合の秘密鍵ファイル(PEM形式)
-- デフォルトは /etc/pki/tls/private/key.pem

*** Moodle 側の設定 (Webサービスを利用するためのトークンの取得) [#zf05af7f]
+ 管理者IDで「サイト設定」 -> 「プラグイン」 -> 「ウェブサービス」 -> 「外部サービス」
++ 「''Jupyter Notebook Data''」の項目を確認
++ 「''Jupyter Notebook Data''」の 「許可ユーザ」をクリック
+ 適当なユーザ(教師ロールのユーザ)を選択し,許可ユーザとする
+ ウェブサービスのメニューまで戻って,「トークンを管理する」を選択.
+ 「追加」をクリック.
++ ユーザ名に先程選択したユーザ名を入れる.
++ サービスは「''Jupyter Notebook Data''」を選択
++ 「変更を保存する」をクリック
+ 「トークンを管理する」まで戻ると,ユーザ用のトークンができているので,それをコピーする.
+ トークンを設定ファイル(ltictr_proxy.conf)の ''Moodle_Token'' に設定する.

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 ページ一覧 検索 最終更新   ヘルプ   最終更新のRSS