Matrixは、VoIP、インスタントメッセージング、およびビデオコール、つまりリアルタイム通信のオープンソース標準(プロトコル)です。エンドツーエンドの暗号化を提供し、Slack、IRC、Telegram、その他のXMPPクライアントなどの他のさまざまなメッセージング代替手段へのブリッジをサポートします。低帯域幅の接続でも機能します。
このチュートリアルでは、Dockerコンテナを使用してMatrixホームサーバーSynapseをインストールする方法を紹介します。
マトリックスホームサーバーとは何ですか?
Matrix自体は単なる仕様であり、公開されているMatrixプロトコルの多くの実装があります。
ホームサーバーは基本的に、サーバーにデプロイされた実装のいずれかであり、Elementなどの任意のMatrixクライアントを介してアクセスできます。
発生する可能性のある問題は、一部がすでに公開されているのに、なぜプライベートホームサーバーを設定するのかということです。
さて、初心者のために、あなたはあなたの友人、家族または同僚の間であなたのプライベートホームサーバーを共有し、あなたの日常のコミュニケーション媒体としてそれを使うことができます。別のホームサーバーのユーザーと会話しない限り、サーバー内のすべてのデータは安全です。
これにより、パブリックホームサーバーでは提供できないあらゆる側面を制御できます。
Dockerコンテナを使用したSynapseMatrixhomserver実装の提供
このチュートリアルでは、人気のあるMatrixホームサーバーの実装であるSynapseを使用します。 Pythonで記述されたSynapseは、Matrixのコアチームによって開発されました。
Linuxハンドブックでは、ネイティブデプロイメントよりもDockerを優先しているため、次のセクションでは、Dockerを使用して実行されるSynapseデプロイメントについて説明します。
- Linuxシステム/サーバー。 Linuxサーバーをクラウドにすばやくデプロイするには、Linodeを使用することをお勧めします。
- 機能しているドメインとそのDNSレコードへのアクセス(ローカルホストで設定する場合を除く)
- dockerとdocker-composeの両方がインストールされている必要があります。 CentOSへのDockerとDockerComposeのインストールに関するガイドに従うことができます。
- あなたは重要なLinuxコマンドの知識があり、設定ファイルの編集にターミナルを使用することを恐れていないと思います。
- Dockerの基本的な知識は役に立ちますが、Dockerがなくてもチュートリアルに従うことができます。
ステップ1:リバースプロキシを設定する
Synapseで手を汚す前に、まず、リバースプロキシコンテナとそのコンパニオンであるLet's EncryptコンテナをTLS証明書用に設定する必要があります(httpsが必要です。信頼してください)。
リバースプロキシコンテナの構成
実稼働環境では、docker run ...
を使用しません 、docker-compose
を使用します 。それでは、jwilder/nginx-proxy
を構成しましょう。 リバースプロキシとして。
reverse-proxyという名前のディレクトリを作成し、この新しく作成されたディレクトリに切り替えます。
mkdir reverse-proxy && cd reverse-proxy
次に、お気に入りのテキストエディタを開き、docker-compose.yml
という名前のファイルを作成します。 、次のコンテンツを追加します:
version: "3.3"
services:
proxy:
image: "jwilder/nginx-proxy"
container_name: "proxy"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/tmp/docker.sock:ro"
networks: ["server"]
restart: "always"
ports:
- "80:80"
- "443:443"
したがって、ここでは、最初にproxy
という名前のサービスを定義します 。覚えておくべき主な特徴は次のとおりです。
- ボリュームcerts、vhost、およびhtmlは、
jwilder/nginx-proxy
間で共有されます。 およびjrcs/letsencrypt-nginx-proxy-companion
コンテナ。 - Dockerソケットは
/tmp/docker.sock
に読み取り専用でマウントされます 。 - デフォルトのブリッジネットワーク以外のネットワークを使用します。
- ポート80と443は、それぞれhttpとhttpsにバインドされています。
letsencrypt-nginx-proxy-companionを構成する
同じ作成ファイルの最後に以下を追加します
letsencrypt:
image: "jrcs/letsencrypt-nginx-proxy-companion"
container_name: "letsencrypt"
volumes:
- "certs:/etc/nginx/certs"
- "vhost:/etc/nginx/vhost.d"
- "html:/usr/share/nginx/html"
- "/run/docker.sock:/var/run/docker.sock:ro"
environment:
NGINX_PROXY_CONTAINER: "proxy"
networks: ["server"]
restart: "always"
depends_on: ["proxy"]
ここに、letsencryptという名前の別のサービスが定義されています。これも見てみましょう:
- 以前のサービスのすべてのボリュームは、ここでも同じ場所にマウントされています。
- dockerソケットは、
/var/run/docker.sock
で読み取り専用にバインドされています 。 - 環境変数
NGINX_PROXY_CONTAINER
はリバースプロキシコンテナのコンテナ名に設定されます。この場合は「プロキシ」です。 - 同じ「サーバー」ネットワークを共有します。
これら2つのサービスの説明の最後に、以下のようにボリュームの定義とネットワーク定義を追加します。
networks:
server:
external: true
volumes:
certs:
vhost:
html:
ここで注意すべき2つの重要な点:
- Synapse用に別の作成ファイルを使用します。このように、モジュラーデプロイメントが可能になり、別のYAMLファイルを使用してリバースプロキシとコンパニオンをデプロイすることで、他のサービスに影響を与えることなく、1つのサービスを簡単に停止できます。
- ネットワークは外部です。これは、
docker-compose
が原因で、同じネットワークを共有していない他のコンテナの問題から逃れるためです。 そのままにしておくと、ボリュームとネットワークに名前が付けられ、自動的に作成されます。これで、ネットワークの作成に取り掛かります。コマンドdocker network create server
を使用します ネットワークを作成します。
すべてが完了したので、ファイルを保存してエディターを終了します。
次に、リバースプロキシサーバーを起動します。
docker-compose up -d
ステップ2:シナプスを設定する
さて、あなたはついに良い部分に焦点を合わせ始める時が来ました。したがって、シナプスの展開は実際には2段階のプロセスです。
まず、構成を生成するために必要です。次に、構成を整理してホームサーバーを展開します。
作成ファイルの取得から始めましょう。
構成を生成
「synapse」という名前の別のディレクトリを作成し、それに切り替えます。
mkdir synapse && cd synapse
docker-compose.yml
という名前のファイルを作成します それを開けて、あなたはドリルを知っていますよね?
sub.domain.com
に正しい値を使用していることを確認してください ここのymlファイル:
version: "3.3"
services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "synapse"
volumes:
- "./data:/data"
environment:
VIRTUAL_HOST: "sub.domain.com"
VIRTUAL_PORT: 8008
LETSENCRYPT_HOST: "sub.domain.com"
SYNAPSE_SERVER_NAME: "sub.domain.com"
SYNAPSE_REPORT_STATS: "yes"
networks: ["server"]
networks:
server:
external: true
これは見た目では標準の作成ファイルですが、それでもいくつかの傑出したオプションについて以下で説明します。
- ボリュームの代わりにバインドマウントを使用しています。これは、構成ファイルがボリュームで生成され、編集するためです。ボリュームは確実に使用できますが、
/var/lib/docker/volumes/<name>/_data
にあるファイルを編集する必要があります。 。 - 環境変数
VIRTUAL_HOST
&LETSENCRYPT_HOST
これは、letsencryptおよびリバースプロキシコンテナ用であり、手動で介入しなくても、証明書とともに必要な構成変更を生成します。 -
SYNAPSE_SERVER_NAME
を確認してください SynapseサーバーのFQDNを(サブドメインとともに)指します。 -
VIRUAL_PORT
を設定します シナプスコンテナは、クライアントがシナプスコンテナと通信できるようにHTTPポート8008を公開します。 - 最後に、このコンテナがリバースプロキシコンテナと同じネットワークを使用していることを確認してください。そうしないと、コンテナが通信できなくなり、プロセス全体が中断されます。
サーバーのIPがDNSのAレコードに追加されており、CNAMEレコードが正確なサブドメインを指していることを確認してください。
data
を作成します ディレクトリを作成し、次のコマンドを実行します
docker-compose run --rm synapse generate
これにより、。/data内に「homeserver.yaml」という名前の構成ファイルが生成されます。
シナプスを構成する
homeserver.yaml
には設定可能なオプションがたくさんあります このチュートリアルの範囲外のファイル。そのファイルのコメントを読んで、ここを読むことをお勧めします。
今のところ、次の変更を確認してください。
-
server_name
変数は、環境変数SYNAPSE_SERVER_NAME
で設定されているように、選択したサブドメインに設定されます。 。 - TLSはfalseに設定されています。リバースプロキシを使用しているため、TLSはWebサーバーを介して処理されます。ポートをそのままにしておきます。
-
enable_registration
を確認してください はtrueに設定されているため、サインアップしてホームサーバーを使用できます。
ファイルを保存して終了します。
SynapseMatrixホームサーバーを導入する
すべてが整ったので、
と同じくらい簡単なコマンドを使用してシナプスを開始できます。docker-compose up -d
これで、ホームサーバーを使用する準備が整いました。 Webブラウザでサブドメインにアクセスすると、次のようなメッセージが表示されます。
デフォルトでは、synapseはデータベースにSQLiteを使用します。これで、テストやカジュアルな使用には適していますが、より重要なユースケースには、PostgreSQLを使用することをお勧めします。
シナプス作成ファイルにPostgreSQLを追加
まだそこにいない場合はsynapseディレクトリに移動し、docker-compose.yml
を開きます。 。この作成ファイルに次の行を追加します。
postgresql:
image: postgres:latest
restart: always
environment:
POSTGRES_PASSWORD: somepassword
POSTGRES_USER: synapse
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: "--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"
volumes:
- "postgresdata:/var/lib/postgresql/"
networks: ["server"]
POSTGRES_INITDB_ARGS
変数は非常に必要です。 postgresデータベースに使用される照合、ctype、およびエンコーディングを設定します。これらはシナプスが機能するために絶対に必要です。ボリュームセクションにボリュームを追加します:
volumes:
postgresdata:
シナプスの構成
次に、Synapseにpostgresqlデータベースについて通知する必要があります。これを行うには、古いhomeserver.yaml
を編集します。 ファイル。そのファイルを開いて、次の行を見つけます。
database:
name: sqlite3
args:
database: /path/to/homeserver.db
不要になったので削除してください。代わりに以下を追加してください:
database:
name: psycopg2
args:
user: synapse
password: somepassword
host: postgresql
database: synapse
cp_min: 5
cp_max: 10
データベースの名前はpsycopg2で、これはpython用のPostgreSQLアダプターです。
よく見ると、これと、postgresqlコンテナ用に設定した環境変数との類似点がわかります。
ホストに関しては、docker-compose
を使用しているため カスタムネットワークの場合、synapseはサービス名を自動的に解決できるようになります。それについて心配する必要はありません。
ファイルを保存して終了します。
展開
さて、本当に何をする必要がありますか?デプロイします。
docker-compose up -d
SynapseMatrixホームサーバーの展開をテストする
ホームサーバーの準備が整いました。テストしてみましょう。 Matrixは単なるプロトコルであり、Synapseは単なる実装です。メッセージングツールのように使用するには、Matrixクライアントが必要です。
利用可能なさまざまなMatrixクライアントのリストを次に示します。 Elementは、おそらく使用できる最も人気のあるMatrixクライアントの1つです。
Matrixクライアントをインストールしたら、それを実行します。ここでアカウントを作成します。
登録ページですべての詳細を入力し、ホームサーバーで以前に使用したサブドメインを入力します。登録をクリックします。
これで、データが保存されている場所などを気にすることなく、家族や友人と一緒に使用できる、完全に機能するSynapseデプロイメントができました。
SynapseでDockerを使用してフェデレーションを設定する[オプション]
フェデレーションは基本的に、別のホームサーバー上のユーザーと通信する機能です。
たとえば、ユーザーIDが@ coolguy:coolserver.meの場合、@ Greatme:awesome.usのような人をホームサーバーの部屋に招待できます。
同様に、他のホームサーバーでホストされているルームに参加することもできます。
すでにシナプスを実行している場合は、コンテナを停止する必要はありません。 NGINXプロキシコンテナに変更を加えるだけです。これは、3つ以下の短くて簡単なステップで構成されています。
フェデレーションを機能させる方法はいくつかありますが、その中でも、非常に簡単に実行でき、既存の設定に最小限の変更を加えるだけでよい方法は、ポート委任と呼ばれます。
デフォルトでは、各マトリックスサーバーはポート8443を介して別のマトリックスサーバーに到達しようとします。次のプロセスは、基本的に他のサーバーに異なるポートを使用するように指示します。 httpsはすでにポート443で機能しているため、デフォルトのマトリックス通信ポートを443に委任するだけです。
ステップ1:リバースプロキシの構成ファイルを作成します
Nginxリバースプロキシディレクトリに入ります。 synapse-federation
という名前のファイルを作成します 。このファイルに次のテキストを追加します:
location /.well-known/matrix/server {
return 200 '{"m.server": "$VIRTUAL_HOST:443"}';
}
$VIRTUAL_HOST
を変更します 適切な値に変更します。これは基本的に、マトリックスインスタンスが提供されるドメインです(synapseのdocker-composeファイルに従って設定されます)。
ステップ2:docker-compose.ymlを編集する
docker-compose.yml
を開きます ファイルを作成し、ボリュームアレイに別のエントリを追加します:
- ./synapse-federation:/etc/nginx/vhost.d/$VIRTUAL_HOST
繰り返しますが、$VIRTUAL_HOST
を変更します 適切な値に。
ステップ3:プロキシサーバーを再起動します
次に、プロキシサーバーを再起動する必要があります。
docker-compose up -d proxy
これにより、リバースプロキシコンテナが再作成されます。展開後に手動で何かを変更しない限り、以前の構成が失われることを心配する必要はありません。構成は動的であるため、すべてが正常になります。
変更は2つの方法でテストできます。
#servers:matrix.org
のような部屋に参加してみてください 。 jq
がある場合は、次のコマンドを実行します インストール済み:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | jq -r '.FederationOK'
または、このもっとハックなものを使用してください:
curl https://federationtester.matrix.org/api/report?server_name=$VIRTUAL_HOST --silent | awk '/FederationOK/ {print $2}'
これは「true」を出力するはずです。そして明らかに$VIRTUAL_HOST
を変更します シナプスインスタンスを提供するドメインに移動します。
役に立ちましたか?
これが私にとっての経験と同じくらいあなたにとって役に立ったことを願っています。このような記事がもっと必要な場合は、以下にコメントしてください。問題が発生した場合は、コメントを残してください。サポートさせていただきます。