LemonHX

LemonHX

CEO of Limit-LAB 喜欢鼓捣底层的代码,意图改变世界
twitter
tg_channel

「マトリックス司令部を砲撃し、私の大きなプラカード」

新建项目 - 300x300.jpg

作者 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_serverkey_serverの 2 つのコンポーネントの設定、user_api.account_databaseuser_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 つの方法があります:

  1. (安全ではない) YAML のclient_api.registration_disabledfalseに設定し、dendrite-monolith-serverの起動パラメータに-really-enable-open-registrationを追加します。
  2. reCAPTCHA 検証登録を有効にする。(Google にあなたの脳の計算能力を無料で提供する

デプロイ#

デプロイする前に、global.server_nameglobal.well_known_server_nameglobal.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 はあなたには向いていないでしょう。まず、鍵を手動で管理する必要があります。もし鍵を失くした場合、以下のようになります: missing_key-138x300.jpg

もしもあなたがおしゃれなギークであるなら、上記の状況はあなたにとって問題ではないかもしれません。しかし、その UI はあなたを失望させるかもしれません。例を挙げましょう: awful_layout-300x106.jpg

もしもあなたが重度の IM ユーザーであるなら、ステッカーは非常によく使われる機能であるはずです。しかし、ステッカーエコシステムを置いておいて、ステッカーを送信するためには、まず入力ボックスの左側のプラスボタンをクリックし、次に 2 番目の「Send Sticker」をクリックし、ポップアップウィンドウが完全に読み込まれるのを待たなければなりません。

EOF#

命を大切にし、Matrix から離れましょう。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。