前書き

Matrixは、分散コミュニケーションのオープンスタンダードです。 これは、リアルタイムで同期する標準化されたAPIを話すオンラインメッセージングに使用されるサーバーとサービスのコレクションです。

Matrixは_homeservers_を使用して、アカウント情報とチャット履歴を保存します。 電子メールクライアントがIMAP / SMTPを介して電子メールサーバーに接続する方法と同様に機能します。 メールと同様に、他の人がホストするMatrixホームサーバーを使用するか、自分のホストを使用して自分の情報と通信を制御できます。

このガイドに従って、Matrixのリファレンスホームサーバー実装であるSynapseをインストールします。 終了したら、https://matrix.org/beta/ [Matrix client]を介してホームサーバーに接続し、他のMatrixフェデレーションホームサーバーを介して他のユーザーと通信できるようになります。

前提条件

このガイドを始める前に、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [この初期サーバーセットアップガイド]に従って、sudo非ルートユーザーを含む1つのUbuntu 16.04サーバーをセットアップおよびファイアウォール。

  • サーバーにインストールされたNginx(HTTPSトラフィックを許可);これを行うには、https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04 [Ubuntu 16.04のこのNginxチュートリアル]を実行します。

  • https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [このホスト名チュートリアル]に従って、適切なDNSレコードで設定された登録済みドメイン名。 必要なDNSレコードは、ドメインの使用方法によって異なります。

  • Synapse専用にドメインを使用している場合、または同じサーバーを使用してWebサイトとSynapseをホストする場合、ホスト名が「+ @ +」のAレコードのみが必要です。

  • Synapseを別のサーバーにインストールする場合、ホスト名が「+ matrix。」のような使用するサブドメインに設定されたAレコードと、ホスト名が「 _matrix._tcp 」のSRVレコードが必要です。ポート ` 8448 +`の同じサブドメインを指し、デフォルトの優先度と重みはそれぞれ10と100です。 これにより、MatrixクライアントとホームサーバーにSynapseインストールの場所がわかります。

ステップ1-Matrix Synapseのインストール

開始するには、非rootユーザーとしてサーバーにログインします。

インストールを開始する前に、ローカルパッケージインデックスが最新であることを確認してください。

sudo apt-get update

次に、公式のMatrixリポジトリをAPTに追加します。

sudo add-apt-repository https://matrix.org/packages/debian/

サーバーのセキュリティを確保するには、リポジトリキーを追加する必要があります。 これにより、インストールとアップデートが開発者によって署名されていることを確認し、サーバーに不正なパッケージがインストールされるのを防ぎます。

wget -qO - https://matrix.org/packages/debian/repo-key.asc | sudo apt-key add -

次の出力が表示されます。

OutputOK

リポジトリを追加した後、ローカルパッケージインデックスを更新して、新しいリポジトリが含まれるようにします。

sudo apt-get update

リポジトリを追加すると、Synapseのインストールは、単一のAPTコマンドを実行するのと同じくらい簡単です。

sudo apt-get install matrix-synapse

インストール中に、サーバー名を入力するよう求められますが、これはドメイン名である必要があります。 また、ホームサーバーに関する匿名統計をMatrixに送信するかどうかを選択するよう求められます。 その後、Synapseがインストールされます。

完了したら、サーバーが起動するたびに `+ systemctl +`を使用してSynapseを自動的に起動します。

sudo systemctl enable matrix-synapse

このコマンドは、サーバー全体の起動時にのみSynapseを起動します。 サーバーはすでに実行されているので、 `+ systemctl +`を使用して手動でSynapseを起動してください。

sudo systemctl start matrix-synapse

これでSynapseがサーバーにインストールされ実行されましたが、使用を開始する前にユーザーを作成する必要があります。

手順2-Synapseのユーザーの作成

Synapseの使用を開始する前に、ユーザーアカウントを追加する必要があります。 新しいユーザーを追加する前に、共有シークレットを設定する必要があります。 _shared secret_は、登録が無効になっていても、それを知っている人なら誰でも登録に使用できる文字列です。

次のコマンドを使用して、32文字の文字列を生成します。

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1

作成した文字列をコピーして、 `+ nano +`またはお好みのテキストエディターでSynapse設定ファイルを開きます。

sudo nano /etc/matrix-synapse/homeserver.yaml

登録セクションで、「+ registration_shared_secret 」キーを探します。 その値をコピーしたランダムな文字列に更新し、引用符の間に挿入します( `” “`)。 行のコメントを解除して、キーをアクティブにすることを忘れないでください(つまり、 行の先頭にある「#+」を削除します)。

パブリック登録も有効にしたい場合は、ここで `+ enable_registration `の値を ` True +`に更新できます。

/etc/matrix-synapse/homeserver.yaml

. . .

## Registration ##

# Enable registration for new users.
enable_registration:

# If set, allows registration by anyone who also has the shared
# secret, even if registration is otherwise disabled.
registration_shared_secret: ""

. . .

ファイルを保存して閉じます。

設定を変更した後、変更を有効にするにはSynapseを再起動する必要があります。

sudo systemctl restart matrix-synapse

再起動したら、コマンドラインを使用して新しいユーザーを作成します。 `+ -c `フラグは設定ファイルを指定し、ポート ` 8448 +`でリッスンしているローカルSynapseインスタンスを使用します。

register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml https://localhost:8448

ユーザー名とパスワードを選択するように求められます。 ユーザーを管理者にするかどうかも尋ねられます。あなた次第ですが、このチュートリアルでは管理者は必要ありません。

ユーザーが作成されたら、ウェブサーバーがSynapseリクエストを処理できることを確認しましょう。

手順3-NginxとSSLの構成

Matrixクライアントは、Synapseに接続するために `+ https:/// _ matrix / `にリクエストを送信します。 これらの要求をリッスンし、ポート「+8008」でローカルにリッスンしているSynapseに渡すように、Nginxを設定する必要があります。 また、Let’s Encryptがサポートするhttps://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs[SSLを使用]でセットアップを保護します。

これを行うには、Webサイト用のカスタムNginx構成ファイルを作成します。 この新しい構成ファイルを作成します。

sudo nano /etc/nginx/sites-available/

以下の `+ location / _matrix `ブロックは、NginxがMatrixクライアントからのリクエストを処理する方法を指定します。 リクエストの処理に加えて、 ` /。well-known +`ブロックは同じ名前のディレクトリをLet’s Encryptで利用できるようにします。

以下をコピーしてファイルに貼り付けます。

/etc/nginx/sites-available/example.com

server {
   listen 80;
   listen [::]:80;

   root /var/www/html;
   index index.html index.htm index.nginx-debian.html;

   server_name  www.;

   location /_matrix {
       proxy_pass http://localhost:8008;
   }

   location ~ /.well-known {
       allow all;
   }
}

https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04 [このNginxサーバーブロックチュートリアル]に関する詳細情報これらのようなファイルの仕組み。 サーバーを構成したら、ファイルを保存して閉じることができます。

この設定を有効にするには、このファイルのシンボリックリンクを `+ / etc / nginx / sites-enabled +`ディレクトリに作成します。

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

コマンドを実行して、構成ファイルの構文エラーをテストします。

sudo nginx -t

エラー出力がある場合は、それに基づいて構文を修正します。 エラーが報告されない場合、変更を有効にするために、 + systemctl + reload Nginxを使用します。

sudo systemctl reload nginx

Let’s Encrypt証明書でNginxの保護を完了するには、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04 [this Ubuntu 16.04でNginxを暗号化するチュートリアル]。 デフォルトの設定ファイルの代わりに `+ / etc / nginx / sites-available / `を使用することを忘れないでください。 そのチュートリアルのステップ2で言及した `〜/ .well-known +`ブロックはすでに追加されています。

Let’s Encryptがセットアップされたら、Synapseが他のホームサーバーと通信するために必要なトラフィックを許可するようにファイアウォールの設定に進むことができます。

ステップ4-ファイアウォールを介したシナプスの許可

クライアントトラフィックはHTTPSポート「443」を介してSynapseに接続します(Nginxガイドからファイアウォールで既に開いています)。 ただし、他のサーバーからのトラフィックはNginxプロキシを経由せずにポート `+ 8448 +`でSynapseに直接接続するため、このトラフィックもファイアウォールを通過できるようにする必要があります。

sudo ufw allow 8448

UFWのステータスを確認します。

sudo ufw status

これは次のようになります。

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
8448                       ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)
8448 (v6)                  ALLOW       Anywhere (v6)

これは、必要なトラフィックがすべてファイアウォールを通過できることを意味します。 最後のステップは、SSL証明書を更新してSynapseのセキュリティを改善することです。

手順5-SSLでフェデレーションをセキュリティで保護する(推奨)

Synapseが設定され、他のホームサーバーと通信できるようになったので、ステップ3の最後でLet’s Encryptからリクエストしたのと同じSSL証明書を使用して、セキュリティを強化できます。 デフォルトでは、Synapseはジョブを実行する自己署名証明書を使用しますが、Let’s Encrypt証明書を既にリクエストしたので、それらを使用してセキュリティを向上させるのは簡単です。

証明書をSynapseディレクトリにコピーします。

sudo cp /etc/letsencrypt/live//fullchain.pem /etc/matrix-synapse/fullchain.pem
sudo cp /etc/letsencrypt/live//privkey.pem /etc/matrix-synapse/privkey.pem

これらの証明書が更新されたときに更新されるようにするには、これらのコマンドをcronタブに追加する必要があります。 編集用に開きます。

sudo crontab -e

そして、次の行を追加します。

crontab entry35 2 * * 1 sudo cp /etc/letsencrypt/live//fullchain.pem /etc/matrix-synapse/fullchain.pem
35 2 * * 1 sudo cp /etc/letsencrypt/live//privkey.pem /etc/matrix-synapse/privkey.pem
36 2 * * 1 sudo systemctl restart matrix-synapse

次に、ファイルを保存して閉じます。 次に、 `+ nano +`またはお好みのテキストエディターでSynapse設定ファイルを開きます。

sudo nano /etc/matrix-synapse/homeserver.yaml

手順3でLets Encryptから要求した同じ証明書を使用して、構成ファイルのパスを置き換えます。

/etc/matrix-synapse/homeserver.yaml

. . .

tls_certificate_path: ""

# PEM encoded private key for TLS
tls_private_key_path: ""

# PEM dh parameters for ephemeral keys
tls_dh_params_path: ""

. . .

Synapseを再起動して、構成の変更を有効にします。

sudo systemctl restart matrix-synapse

すべてがセットアップされているので、Matrixクライアントを使用してホームサーバーに接続し、他のユーザーとの通信を開始できます。 たとえば、https://matrix.org/beta/ [MatrixのWebサイトのクライアント]を使用できます。

適切なフィールドに次を入力します。

  • * Matrix ID *は、 + @ user:server_name +`の形式です(例: `+ @ sammy:example.com +)。 他のフェデレーションサーバーはこれを使用して、ホームサーバーがホストされている場所を見つけます。

  • *パスワード*は、このユーザーを作成するときに設定した安全なパスワードです。

  • * Home Server *は、ステップ1で選択したサーバー名です。

ステップ2でパブリック登録を有効にした場合、[アカウントの作成]リンクをクリックして、新しいアカウントを作成したり、他のユーザーがホームサーバーに新しいアカウントを作成できるようにすることもできます。

そこから、ルームにログインしてチャットを開始できます。 Matrixの公式サポートルームは `+#matrix:matrix.org +`です。

結論

このガイドでは、Let’s EncryptのSSL証明書を使用して、Nginxを使用してMatrix Synapseを安全にインストールしました。 ホームサーバーへの接続に使用できるhttps://matrix.org/docs/projects/try-matrix-now.html#clients [多くのMatrixクライアント]があります。http://matrix.org/docs /guides/client-server.html [独自のMatrixクライアントを作成する]またはhttp://matrix.org/docs/guides/ [他の方法でプロジェクトに参加する]。