Dorimu

Dorimu

Matrix Synapse 去中心化暗号チャットサーバーのデプロイメントチュートリアル(オープンソースno IM)

始める前に#

私のブログのこの記事

関連する概念にあまり詳しくない場合は、一番下の紹介にジャンプできます。

デプロイ#

1. PostgreSQLのデプロイ#

インストールプロセスは検索エンジンを参照してください。ここでは詳しく説明しません。

データベースの作成#

あなたのデータベースのスーパーユーザー名がuserの場合:

psql -U user # データベースに入る

新しいユーザーを作成します(ユーザー名をsynapse_userと仮定):

CREATE USER synapse_user WITH PASSWORD 'password';

passwordを設定したいパスワードに置き換えてください。

データベースsynapseを作成します。

CREATE DATABASE synapse
    WITH ENCODING 'UTF8'
    LC_COLLATE 'C'
    LC_CTYPE 'C'
    TEMPLATE template0;
GRANT ALL PRIVILEGES ON DATABASE synapse TO synapse_user;

2. Synapseのインストール#

私はSynapseサーバーのserver_name(ユーザーIDのサフィックス、例:@user:my-example.com)を実際にアクセスするドメイン名(例:chat.my-example.com、あなたのサーバーに割り当てられたドメイン名)と一致させたいので、Delegation(委任)を通じて実現します。

 server_name のルートドメイン(my-example.com)の下に、 .well-known/matrix/server というファイルを作成し、内容は以下の通りです:

{
  "m.server": "chat.my-example.com:443"
}

このファイルは他のMatrixサーバーに、実際のSynapseサーバーのアドレスが chat.my-example.com:443であることを伝えます。

dockerデプロイ#

dockerのインストール手順は検索エンジンを参照してください。

docker run -it --rm -v /data/matrix-synapse-data/:/data/ -e SYNAPSE_SERVER_NAME=あなたのサーバードメイン名 -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate

各パラメータの説明:

-e SYNAPSE_REPORT_STATS は匿名統計データを送信するかどうか

-v /data/matrix-synapse-data/:/data/ はマッピングされる具体的なパスで、変更する必要はありません。

-e SYNAPSE_SERVER_NAME はあなたのサーバードメイン名で、server_nameではありません。

Synapseの設定#

このチュートリアルの最も難しい部分に来ました。注意が必要です。また、ymlには厳格なインデントと句読点があり、エラーが発生した場合は注意深く排除してください。

Synapseの設定は主に/data/matrix-synapse-data/にあるhomeserver.yamlを設定します。

ここに私の例を示します。注意してください!他の内容は公式ドキュメントConfiguration - Synapseを参照してください。

server_name: "my-example.com"
public_baseurl: https://chat.my-example.com/ #あなたのドメインを入力
pid_file: /data/homeserver.pid
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    resources:
      - names: [client, federation, openid]
        compress: false
database:  #あなたのデータベース設定に従って
    name: psycopg2
    args:
        user: synapse_user
        password: password
        database: synapse
        host: 192.168.1.1
        cp_min: 5
        cp_max: 10
        keepalives_idle: 30
        keepalives_interval: 10
        keepalives_count: 3
log_config: "/data/dorimu.cn.log.config"
media_store_path: /data/media_store

# これらの行は自動生成されるもので、内容を変更しないでください
registration_shared_secret: ""
report_stats: false
macaroon_secret_key: ""
form_secret: ""
signing_key_path: ""


trusted_key_servers:
  - server_name: "matrix.org"
suppress_key_server_warning: true
# 新しいユーザーの登録を有効にする
enable_registration: true
# 電子メールやrecaptchaの検証なしで登録可能(実際には推奨されません)
enable_registration_without_verification: false
email: #メール設定
  smtp_host: smtp-mail.outlook.com
  smtp_port: 587
  smtp_user: "11" #ユーザー名
  smtp_pass: "11"
  force_tls: false
  require_transport_security: false
  enable_tls: true
  notif_from: "user" #ユーザー名
  enable_notifs: true
  notif_for_new_users: false
  client_base_url: "https://my-example.com"
  validation_token_lifetime: 15m
  invite_client_location: https://my-example.com
registrations_require_3pid:
  - email

実行#

docker run -d --name synapse -v /data/matrix-synapse-data/:/data/ -p 8008:8008 -p 8009:8009 -p 8448:8448 matrixdotorg/synapse:latest

管理者ユーザーの作成#

docker exec -it synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -a -u ユーザー名 -p パスワード

3. Nginxリバースプロキシ#

location ^~ /_matrix/ {
    proxy_pass http://127.0.0.1:8008; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_http_version 1.0; 
    add_header X-Cache $upstream_cache_status; 
    add_header Cache-Control no-cache; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
}
location ^~ /_synapse/ {
    proxy_pass http://127.0.0.1:8007; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header REMOTE-HOST $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    proxy_set_header X-Forwarded-Proto $scheme; 
    proxy_http_version 1.0; 
    add_header X-Cache $upstream_cache_status; 
    add_header Cache-Control no-cache; 
    proxy_ssl_server_name off; 
    proxy_ssl_name $proxy_host; 
}

4. ウェブクライアントと管理クライアント(オプション)#

ウェブクライアント#

element-hq/element-web: ウェブ用の洗練されたMatrixコラボレーションクライアント。

リリースから最新バージョンをダウンロードし、サーバーのウェブサイトディレクトリに解凍するだけです(静的デプロイ)。

config.sample.jsonを変更することを忘れずに、あなたのサーバーアドレスに変更し、ファイル名をconfig.jsonに変更してください。

管理クライアント#

Awesome-Technologies/synapse-admin: Synapse Matrixホームサーバーの管理コンソール

リリースから最新バージョンをダウンロードし、サーバーのウェブサイトディレクトリに解凍するだけです(静的デプロイ)。

5. テスト#

Matrix Federation Testerを使用してテストします。server_nameを入力し、出力結果を観察します。

紹介#

Matrixとは何ですか?#

Matrixプロトコルの柔軟性と安全性は、特にプライバシーと通信の自由を重視するユーザーにとって強力な通信ソリューションとなります。オープン性と相互運用性により、Matrixプロトコルは非常に有望な通信標準となっています。

Matrixには以下の特徴があります:

  1. 分散型アーキテクチャ:Matrixは分散型アーキテクチャを採用しており、単一の中央サーバーはなく、複数の独立したサーバーで構成されています。これにより、ユーザーは自分のサーバーを選択したり、自分でサーバーをホストしたりでき、単一のサービスプロバイダーに依存する必要がありません。
  2. エンドツーエンド暗号化:Matrixはエンドツーエンド暗号化をサポートしており、メッセージは送信者と受信者の間で暗号化され、中間サーバーはメッセージの内容にアクセスできません。これにより、高度な通信プライバシーと安全性が提供されます。
  3. 相互運用性:Matrixの主な目標の一つは、異なる通信アプリケーション間の相互運用性を実現することです。これにより、ユーザーは異なるクライアントアプリケーションを使用しても、他のユーザーと通信できるようになります。
  4. オープンソースとオープンスタンダード:Matrixプロトコルはオープンスタンダードであり、誰でも確認し実装できます。このオープン性は、安全性とスケーラビリティを確保し、隠れたバックドアのリスクを減少させます。
  5. 多様な認証メカニズム:Matrixは、ユーザー名とパスワード、シングルサインオン、OpenID Connectなど、さまざまな認証方法をサポートしており、ユーザーは自分のニーズに合った認証方法を選択できます。
  6. 活発なコミュニティサポート:Matrixコミュニティは非常に活発で、多くの開発者やユーザーが参加しており、プロトコルを改善し拡張し続けています。

分散型通信プロトコルとして、あなたは異なるクライアント(クライアントがMatrixプロトコルをサポートしている限り)を使用して、任意のMatrixサーバーに接続できます。

Matrixプロトコルは多くの機能をサポートしています:

  • 分散型通信(任意のMatrixサーバーでアカウントを作成し、「連邦」を通じて他のサーバーのユーザーと通信)
  • エンドツーエンド暗号化
  • WebRTC音声通話/ビデオ通話(そうです!Matrixプロトコルはビデオ通話をサポートしています)
  • メッセージ既読通知
  • 入力状態通知
  • グループチャット

エンドツーエンド暗号化とは何ですか?#

エンドツーエンド暗号化は、2台の端末間の直接通信と理解できます。例を挙げると、より理解しやすくなります:

仮に小明が Aデバイス から小紅の Bデバイス にメッセージを送ったとします。この時、小黒が彼らの会話を見たくなり、小紅のアカウントのパスワードを盗み、 Cデバイス で小紅のアカウントにログインしました。

小黒は彼らのチャット履歴を見ることができるでしょうか?できません。エンドツーエンド暗号化された会話では、送信されたすべてのメッセージが自動的に暗号化されます。

小明が小紅にメッセージを送信すると、自動的にそのメッセージを解読するための 解読キー が添付されます。小紅が Bデバイス でメッセージを受け取ると、同時にこの 解読キー も受け取るため、メッセージを正常に確認できます。しかし、小黒が後にログインした Cデバイス は 解読キー を受け取っていないため、これらの過去のメッセージを解読することができません。

エンドツーエンド暗号化は、現在最も安全なプライバシー保護手段の一つとされており、大多数の人々の安全ニーズを満たすことができます。

Synapseとは何ですか?#

Matrixはプロトコルであり、Matrix SynapseはMatrixプロトコルの具体的な実装です。

Synapseの他にも、MatrixにはDendriteなどの多くの他のブランチがあります:

さらに、Synapse自体はグラフィカルインターフェースを持たないサーバーであり、正常にチャットするためにはMatrixプロトコルをサポートするクライアントが必要です。一般的にMatrixプロトコルをサポートするクライアントにはElement(最も知られ、一般的に使用される)があります。

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