作者 Ho229v3
Dendrite は Go で書かれた第 2 世代のMatrix ホームサーバーです。今日はちょっとした問題について触れてみます。
デプロイプロセス全体は公式のGet startedに基づいています。
注意: もしもあなたが本当に Matrix のエキスパートになりたいわけでも、分散化の熱狂的な支持者でもないのであれば、この記事はあなたの時間を無駄にするだけです。私は誰にも Dendrite を自分でデプロイすることをおすすめしません、暇な人以外はです。
コンパイルとキーの生成#
コンパイルとキーの生成には特に問題はありませんでした。
私は AWS の 1g1c インスタンスを使用しており、システムは Ubuntu 22.04-amd64、Go のバージョンは 1.18.1 linux/amd64 です。
設定ファイル#
データベースの設定#
コンパイルとキーの生成が完了した後、dendrite-monolith-server
を実行すると以下のエラーが発生します(Get started == Get new shit):
PANI[2022-11-02T05:02:46.231645575Z] Failed to set up global database connections error="failed to find maximum connections: dial tcp: lookup hostname: no such host"
panic: (*logrus.Entry) 0xc0002a5c70
...
このエラーは非常に曖昧であり、私が初心者であるため、有用な情報を見つけることができませんでした。ソースコードを読んだ後、このエラーは設定の実行時にパニックが発生していることがわかりました。つまり、公式のdendrite-sample.monolith.yaml
は直接使用できないことを意味します。(ターゲットユーザーをフィルタリング)
YAML を開いてみると、global.database
で直接 PostgreSQL を使用していることがわかりますが、私は PostgreSQL を使用してデプロイする予定はありません。コメントを調べた結果、global.database
は PostgreSQL 専用であり、SQLite ではglobal.database
(つまり、Dendrite のグローバルデータベース接続プール)を使用できないことがわかりました。また、各コンポーネントに対して個別にデータベースを指定する必要があります。つまり、各コンポーネントの下に次のように追加する必要があります(こんな簡単なことをユーザーに手伝ってもらえないのはなぜですか?なぜ SQLite の接続プールを使用できないのですか?):
database:
connection_string: file:dendrite_<component>.db
max_open_conns: 10
max_idle_conns: 2
conn_max_lifetime: -1
注意すべき点は、各コンポーネントは同じ.db ファイルを使用できず、同時にglobal.database
もコメントアウトする必要があるということです。
不足しているコンポーネントの設定を追加#
再度dendrite-monolith-server
を実行すると、次のエラーが表示されます:
INFO[2022-11-02T05:25:53.722317580Z] Dendrite version 0.10.5+8c7b274e
PANI[2022-11-02T05:25:53.756013624Z] failed to connect to room server db error="sqlutil.Open: no database connections configured"
...
しかし、私の YAML には room server の設定がありません。明らかに例がいくつかのフィールドを抜けていることがわかります。そこで、SQLite を使用する Dendrite の設定ファイルを見つけ、比較した結果、例がroom_server
とkey_server
の 2 つのコンポーネントの設定、user_api.account_database
とuser_api.device_database
も欠けていることがわかりました。(サンプルを書けないなら書かないでください)
解決策は、オンラインの設定ファイルを参考にして追加することです。ただし、database.connection_string
のパスを変更することに注意してください。
再度dendrite-monolith-server
を実行すると、サーバーが正常に起動します。アドレスはhttp://localhost:8008です。
アカウントの作成#
Get startedの最後のステップに従ってアカウントを作成しようとすると、次のエラーが表示されます:
FATA[0000] Shared secret registration is not enabled, enable it by setting a shared secret in the config: 'client_api.registration_shared_secret'
このエラーは非常に明確であり、YAML でclient_api.registration_shared_secret
を設定していないためです。解決策は、共有シークレットとしてランダムな文字列を記述することです。
パブリックアカウントの登録#
サーバー上ではなくクライアントでアカウントを登録したい場合は、パブリックアカウントの登録が必要です。
パブリックアカウントの登録には 2 つの方法があります:
- (安全ではない) YAML の
client_api.registration_disabled
をfalse
に設定し、dendrite-monolith-server
の起動パラメータに-really-enable-open-registration
を追加します。 - reCAPTCHA 検証登録を有効にする。(Google にあなたの脳の計算能力を無料で提供する)
デプロイ#
デプロイする前に、global.server_name
、global.well_known_server_name
、global.well_known_client_name
を自分のサーバーのドメインに変更することを忘れないでください。
-http(s)-bind-address
を使用して HTTP (S) のポートを変更できます。HTTP ポートはデフォルトで 8008、HTTPS ポートはデフォルトで 8448 です。
統合マネージャー#
現在、Matrix の主流の統合マネージャーはDimensionです。
統合マネージャーをデプロイする場合、Nginx を使用して Dimension のポートを 443(または 80)に逆プロキシする必要があります。詳細な手順については、Installing Dimensionを参照してください。(読むのが面倒なことを願っています。あなたが一生懸命デプロイしても、いくつかのブリッジとオープンソースコミュニティの愛によるステッカーしかありません)
使用方法#
テストに使用したクライアントは、Android 版とデスクトップ版のElementです。
テストの結果、Android 版では電話アイコンとビデオアイコンがそれぞれ電話会議とビデオ会議を開始し、デスクトップ版では音声通話とビデオ通話を開始します。デスクトップ版で開始したビデオ通話は接続できず、常に接続中の状態になります。(なんて分裂した現場なんだ)
もしもあなたが普通のユーザーで、IM の代替を探しているだけなら、Matrix はあなたには向いていないでしょう。まず、鍵を手動で管理する必要があります。もし鍵を失くした場合、以下のようになります:
もしもあなたがおしゃれなギークであるなら、上記の状況はあなたにとって問題ではないかもしれません。しかし、その UI はあなたを失望させるかもしれません。例を挙げましょう:
もしもあなたが重度の IM ユーザーであるなら、ステッカーは非常によく使われる機能であるはずです。しかし、ステッカーエコシステムを置いておいて、ステッカーを送信するためには、まず入力ボックスの左側のプラスボタンをクリックし、次に 2 番目の「Send Sticker」をクリックし、ポップアップウィンドウが完全に読み込まれるのを待たなければなりません。
EOF#
命を大切にし、Matrix から離れましょう。