始める前に#
私のブログのこの記事関連する概念にあまり詳しくない場合は、一番下の紹介にジャンプできます。
デプロイ#
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には以下の特徴があります:
- 分散型アーキテクチャ:Matrixは分散型アーキテクチャを採用しており、単一の中央サーバーはなく、複数の独立したサーバーで構成されています。これにより、ユーザーは自分のサーバーを選択したり、自分でサーバーをホストしたりでき、単一のサービスプロバイダーに依存する必要がありません。
- エンドツーエンド暗号化:Matrixはエンドツーエンド暗号化をサポートしており、メッセージは送信者と受信者の間で暗号化され、中間サーバーはメッセージの内容にアクセスできません。これにより、高度な通信プライバシーと安全性が提供されます。
- 相互運用性:Matrixの主な目標の一つは、異なる通信アプリケーション間の相互運用性を実現することです。これにより、ユーザーは異なるクライアントアプリケーションを使用しても、他のユーザーと通信できるようになります。
- オープンソースとオープンスタンダード:Matrixプロトコルはオープンスタンダードであり、誰でも確認し実装できます。このオープン性は、安全性とスケーラビリティを確保し、隠れたバックドアのリスクを減少させます。
- 多様な認証メカニズム:Matrixは、ユーザー名とパスワード、シングルサインオン、OpenID Connectなど、さまざまな認証方法をサポートしており、ユーザーは自分のニーズに合った認証方法を選択できます。
- 活発なコミュニティサポート: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(最も知られ、一般的に使用される)があります。