🦈

Jitsi のログインユーザー情報をMySQLに格納する

2021/12/31に公開

みなさんこんにちは

本日のお題

OSSのWeb会議システムのJitsiのユーザー認証は、コマンド運用であり、ユーザー追加コマンド入力後、システム再起動が必要です。
これでは、システム再起動のタイミングを、誰も利用していない時間帯にする必要があり、通常は不便です。
これを解決するためには、ログインユーザーの情報をDBに格納して別運用にすることで解決できると考えました。(未確認)
上記を確認するために、Jitsiのログインユーザー情報をMySQLに格納します。
https://community.jitsi.org/t/jitsi-and-mysql-db/99010
https://community.jitsi.org/t/how-to-change-authentication-and-storage-after-quick-install/99378/9
上記を見た感じ、おそらく、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