Jitsi のログインユーザー情報をMySQLに格納する
みなさんこんにちは
本日のお題
OSSのWeb会議システムのJitsiのユーザー認証は、コマンド運用であり、ユーザー追加コマンド入力後、システム再起動が必要です。
これでは、システム再起動のタイミングを、誰も利用していない時間帯にする必要があり、通常は不便です。
これを解決するためには、ログインユーザーの情報をDBに格納して別運用にすることで解決できると考えました。(未確認)
上記を確認するために、Jitsiのログインユーザー情報をMySQLに格納します。
上記を見た感じ、おそらく、Jitsiの構成要素である、Prosodyの機能で、MySQLに連結できそうです。
Googleで見た感じ、日本人でこの情報追いかけてる人、2021/12/31の時点で一番乗りな予感。胸熱ですね。
docker-composeファイルの編集
DockerコンテナのコンフィグにホストOSからアプローチする設定
[root@meet docker-jitsi-meet]# vi docker-compose.yml
...
# XMPP server
prosody:
image: jitsi/prosody:stable-6726-1
restart: ${RESTART_POLICY}
expose:
- '5222'
- '5347'
- '5280'
volumes:
- ${CONFIG}/prosody/config:/config:Z
+ - ./prosody/rootfs/defaults:/defaults:Z
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
...
再起動
[root@meet docker-jitsi-meet]# docker-compose down
[root@meet docker-jitsi-meet]# docker-compose up -d
prosody.cfg.luaの編集
認証情報をMySQLに接続する設定を行います。
※10.0.10.XXは、EC2の内部IPを設定してください。
※sql_manage_tables = trueをつけることで、TABLEを自動で作成してくれます。
[root@meet docker-jitsi-meet]# vi ./prosody/rootfs/defaults/prosody.cfg.lua
--storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the
+storage = "sql"
-- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)
-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
--sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
+sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "prosody_password", host = "10.0.10.XX", port = 3306, sql_manage_tables = true }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }
DB接続確認
成功した場合。DB内に、TABLEと初期データが作られます。
[root@meet mysql]# docker-compose exec db mysql -uprosody -p
Enter password:[password]
...
mysql> use prosody
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; --うまくいっていると、自動でTABLEができています。
+-------------------+
| Tables_in_prosody |
+-------------------+
| prosody |
| prosodyarchive |
+-------------------+
2 rows in set (0.00 sec)
mysql> select * from prosody; --うまくいっていると、デフォルトの情報が入っています。
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
| host | user | store | key | type | value |
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
| auth.meet.jitsi | focus | accounts | server_key | string | 7c3022********************************ec |
| auth.meet.jitsi | focus | accounts | stored_key | string | ec1d7f********************************0c |
| auth.meet.jitsi | focus | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | focus | accounts | salt | string | 12c031********************************97 |
| auth.meet.jitsi | focus | roster | | json | {"__hash":[false,{"pending":{},"version":2}]} |
| auth.meet.jitsi | focus | roster | focus.meet.jitsi | json | {"subscription":"from","groups":{}} |
| auth.meet.jitsi | jvb | accounts | stored_key | string | 5482fb********************************15 |
| auth.meet.jitsi | jvb | accounts | server_key | string | 03ddde********************************6c |
| auth.meet.jitsi | jvb | accounts | salt | string | f354b2********************************19 |
| auth.meet.jitsi | jvb | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jibri | accounts | server_key | string | c9006f********************************d2 |
| auth.meet.jitsi | jibri | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jibri | accounts | salt | string | b375a********************************3a |
| auth.meet.jitsi | jibri | accounts | stored_key | string | d3c4f********************************0f |
| recorder.meet.jitsi | recorder | accounts | iteration_count | number | 4096 |
| recorder.meet.jitsi | recorder | accounts | server_key | string | ede410********************************5d |
| recorder.meet.jitsi | recorder | accounts | stored_key | string | c5cf7e6********************************cd |
| recorder.meet.jitsi | recorder | accounts | salt | string | fb4a********************************50 |
| auth.meet.jitsi | jigasi | accounts | server_key | string | 6d26********************************ca |
| auth.meet.jitsi | jigasi | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jigasi | accounts | stored_key | string | 356c9********************************61 |
| auth.meet.jitsi | jigasi | accounts | salt | string | 81ec97********************************45 |
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
22 rows in set (0.01 sec)
mysql> exit
Bye
ユーザー作成
コマンドを実行することで、追加した、ユーザーがDBに格納されます。
[root@meet mysql]# cd ../docker-jitsi-meet/
[root@meet docker-jitsi-meet]# docker-compose exec prosody prosodyctl --config /config/prosody.cfg.lua register user001 meet.jitsi user001zxcvb
ユーザー作成後の確認
コマンドで追加した、ユーザーが、格納されているか確認します。
[root@meet docker-jitsi-meet]# cd ../mysql/
[root@meet mysql]# docker-compose exec db mysql -uprosody -p
Enter password:
...
mysql> use prosody
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from prosody;
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
| host | user | store | key | type | value |
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
| auth.meet.jitsi | focus | accounts | server_key | string | 7c3022********************************ec |
| auth.meet.jitsi | focus | accounts | stored_key | string | ec1d7f********************************0c |
| auth.meet.jitsi | focus | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | focus | accounts | salt | string | 12c031********************************97 |
| auth.meet.jitsi | focus | roster | | json | {"__hash":[false,{"pending":{},"version":2}]} |
| auth.meet.jitsi | focus | roster | focus.meet.jitsi | json | {"subscription":"from","groups":{}} |
| auth.meet.jitsi | jvb | accounts | stored_key | string | 5482fb********************************15 |
| auth.meet.jitsi | jvb | accounts | server_key | string | 03ddde********************************6c |
| auth.meet.jitsi | jvb | accounts | salt | string | f354b2********************************19 |
| auth.meet.jitsi | jvb | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jibri | accounts | server_key | string | c9006f********************************d2 |
| auth.meet.jitsi | jibri | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jibri | accounts | salt | string | b375a********************************3a |
| auth.meet.jitsi | jibri | accounts | stored_key | string | d3c4f********************************0f |
| recorder.meet.jitsi | recorder | accounts | iteration_count | number | 4096 |
| recorder.meet.jitsi | recorder | accounts | server_key | string | ede410********************************5d |
| recorder.meet.jitsi | recorder | accounts | stored_key | string | c5cf7e6********************************cd |
| recorder.meet.jitsi | recorder | accounts | salt | string | fb4a********************************50 |
| auth.meet.jitsi | jigasi | accounts | server_key | string | 6d26********************************ca |
| auth.meet.jitsi | jigasi | accounts | iteration_count | number | 4096 |
| auth.meet.jitsi | jigasi | accounts | stored_key | string | 356c9********************************61 |
| auth.meet.jitsi | jigasi | accounts | salt | string | 81ec97********************************45 |
| meet.jitsi | user001 | accounts | iteration_count | number | 4096 |
| meet.jitsi | user001 | accounts | server_key | string | 01451********************************9c |
| meet.jitsi | user001 | accounts | salt | string | 0ee24********************************d8 |
| meet.jitsi | user001 | accounts | stored_key | string | 563d7********************************4b |
+---------------------+----------+----------+------------------+--------+-----------------------------------------------+
26 rows in set (0.00 sec)
mysql>
Jitsiの接続確認
うまくいくと、ブラウザからつながります。
今後の課題
docker-compose にlua-dbi-mysqlを導入する方法の検討と実装が必要です。
あと、DBにユーザーを追加するにあたって、コマンドは面倒なので、何らかのGUIを作りたいですね。(はやりのWebフレームワークで作りたいですね。)
今回の所要時間
恥ずかしながら、docker-composeのvolunesの設定で、PATHを間違えるというイージーミスに気が付かなくて、数時間ロスなどもあったので、結局8時間ぐらいかかりました。
※現実逃避で、レールガン観ながらというのもあります。T・キハラは許せんな。
※複数人でやってると、思い込みのミスは減ると思います。
Discussion