将Matrix的Homeserver Synapse安装到Debian 10上

2020年4月5日 添加+

以下是关于在Debian 10环境中使用apt安装Synapse的文章内容已经迁移到我管理的非官方日语Matrix.org维基页面。以后的更改将在迁移后的页面上进行。

太长不看;简单来说。

    • matrix-jp.netというサーバを立てたよ

 

    • レファレンス実装のサーバである、SynapseでMatrixサーバを構築していく記事だよ

 

    • Synapseはインストールが簡単だから是非インストールしてみてね

 

    matrixの規格についてはまだわからない部分があるので追い追い記事にしていくよ

经过、背景、经历

我一直对IM等感兴趣,而且经常喜欢使用XMPP等协议。但之前一直注意到一个叫做matrix的聊天协议,最近想试试看,所以搭建了一个名为matrix-jp.net的服务器。

“Matrix”是什么?

簡要概括一下https://en.wikipedia.org/wiki/Matrix_(protocol) 的內容:

    • グループコミュニケーションからインスタントメッセンジャーはもちろん、VoIP、IoTまでを見据えたプロトコル

 

    • オープンかつRESTfulな規格

 

    • JSONを用いて通信

 

    • 通信は暗号化可能

 

    • KDEが標準のコミュニケーション手段として採用し、インスタンスを運営?

 

    • 2019年6月にAPIの規格がv1.0になった

 

    Bridge機能を用いることでIRCやSlackなど有名なコミュニケーション手段とも接続可能

我們剛剛已經提到了關於《Matrix》的詳細概述,稍後我們將進行總結。同時,官方網站上也有更詳盡的資訊。

安装

请注意

本次文章只专注于Synapse的安装。因此,请阅读其他文章以了解 SSH、Let’s Encrypt、Web 服务器等的安装和配置。
此外,尽管在 Synapse 中介绍了使用 Ansible 和 Docker 进行构建的方法,但本次文章中不使用这些方法。
本文是我根据自己的安装方法重新编辑的。由于可能存在重新编辑不完善的情况,如果出现问题,请随时联系我。基本上,我遵循了 Synapse 官方的安装方法,详细信息请参考官方指南。
Synapse 官方也介绍了在除 Debian 以外的 Linux 发行版或 BSD 上安装的方法,因此也适用于其他发行版。

安装步骤

大多数的顺序如下所示。

    1. 安装Synapse

 

    1. 配置反向代理和PostgreSQL设置

 

    1. 修改Synapse配置文件

 

    1. 创建管理员用户

 

    配置联邦功能

环境 –

paraphrased:

自然或人造周围的气氛、条件、地点或情况。

首先,我将列举本次使用的软件版本。

$ uname -vm
#1 SMP Debian 4.19.37-5 (2019-06-19) x86_64
$ sudo nginx -v
nginx version: nginx/1.14.2
$ sudo ufw version
ufw 0.36
Copyright 2008-2015 Canonical Ltd.
$ sudo psql --version
psql (PostgreSQL) 11.5 (Debian 11.5-1+deb10u1)
$ apt list | grep matrix-synapse-py3
matrix-synapse-py3/unknown,now 1.3.1+buster1 amd64 [installed]

Synapse的安装

Synapse 是用 Python3 开发的,并且已经注册在 PyPI 上。因此可以使用 pip 安装。
此外,也可以从 Debian 官方仓库和 Synapse 官方 apt 仓库获取提前构建好的软件包。但是,由于 Debian 官方仓库中的 Synapse 版本稍旧(0.99),所以我们选择从 Synapse 官方仓库安装。

首先,安装依赖包。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get install build-essential python3-dev libffi-dev \
                     python-pip python-setuptools sqlite3 \
                     libssl-dev python-virtualenv libjpeg-dev libxslt1-dev

接下来,将Synapse官方存储库添加到apt注册。

sudo apt install -y lsb-release wget apt-transport-https
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" |
    sudo tee /etc/apt/sources.list.d/matrix-org.list

安装Synapse。

$ sudo apt update
$ sudo apt-get install matrix-synapse-py3

Synapse的安装已经完成了。

反向代理的设置

我使用Nginx,但当然也可以使用像Apache这样的反向代理。

将mozilla.org的ssl配置与Matrix官方配置的示例结合起来,取一个合适的名称保存。

如果没有问题,运行 “sudo nginx -t”,然后重新启动Nginx,此时Nginx配置完成。

在设置了nginx之后,我运行了CertBot并获取了证书。

PostgreSQL的设置(可选)

Synapse的默认设置是将SQLite作为数据库,但也可以使用PostgreSQL。在这里,我们将介绍如何创建PostgreSQL的用户和数据库。在下一步中,我们将解释如何在Synapse中指定数据库的位置。

首先,我們創建一個名為synapse_user的用戶來操作Synapse的數據。

su - postgres
createuser --pwprompt synapse_user

下一步开始PostgreSQL控制台,并创建以下数据库,所有者为synapse_user。

psql=# CREATE DATABASE synapse
 ENCODING 'UTF8'
 LC_COLLATE='C'
 LC_CTYPE='C'
 template=template0
 OWNER synapse_user;

参考链接: https://github.com/matrix-org/synapse/blob/master/docs/postgres.rst

Synapse的设置

编辑homeserver.yaml文件

homeserver.yaml是记录Synapse设置的文件。如果通过Synapse的apt存储库进行安装,该文件位于/etc/matrix-synapse/homeserver.yaml。

首先

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

将结果放入registration_shared_secret的值中(顺便提一下,据说如果这个值泄露了,管理员账户会被自动创建,所以请严格保管[需要出处])。

请将”enable_registration”设置为”true”(否则似乎无法创建自己的账户[需要验证])。

请找到homeserver.yaml文件中的以下部分,并将其注释掉。

  - port: 8448
    type: http
    tls: true
    resources:
      - names: [client, federation]

PostgreSQL的设置。

homeserver.yaml文件中有一个名为database:的参数。在该参数中,我们将写入数据库的主机、端口、用户名和密码。顺便说一下,这些参数似乎是遵循psycopg2.connect()的。

参考链接:https://github.com/matrix-org/synapse/blob/master/docs/postgres.rst

参考链接:https://github.com/matrix-org/synapse/blob/master/docs/postgres.rst

让我们复制Let’s Encrypt的密钥

为了对服务器之间的通信进行TLS加密,需要密钥。有两种方法可以实现这一点。

    1. 让ACME挑战在Synapse上进行

 

    直接使用Let’s Encrypt发行的密钥

因为我在nginx部分已经提到过,已经从Let’s Encrypt获取了密钥,所以我想选择后者的方法。

我会复制已经取得的钥匙。

$ sudo cp /etc/letsencrypt/live/{yourdomain}/fullchain.pem /etc/matrix-synapse/fullchain.pem
$ sudo cp /etc/letsencrypt/live/{yourdomain}/privkey.pem /etc/matrix-synapse/privkey.pem

matrix-synapse-py3的软件包中包含matrix-synapse.service.
执行matrix-synapse.service的是matrix-synapse用户。所以,为了防止复制的密钥被拒绝访问,将其所有权交给组。

    groupaddでmatrix グループを作成
$ sudo groupadd matrix
    matrix groupにmatrix-synapse userを追加
$ sudo usermod -G matrix
    chown -Rで/etc/matrix-synapseをrootからmatrixグループに所有者を変更
$ sudo chown -R root:matrix /etc/matrix-synapse

homeserver.yamlを開いて、tls_certificate_pathにfullchain.pemのパスを、tls_private_key_pathにprivkey.pemのパスを書く

tls_certificate_path: /etc/matrix-synapse/fullchain.pem
tls_private_key_path: /etc/matrix-synapse/privkey.pem

matrix-synapse.serviceをrestartする

$ sudo systemctl restart matrix-synapse

创建管理员用户

请确认 matrix-synapse.service 已启动,并执行以下命令。

$ sudo register_new_matrix_user -u {youruserid} -p {yourpassword} -c /etc/matrix-synapse/homeserver.yaml http://localhost

联邦的设定
de

要与其他服务器进行交互

    1. 添加DNS的SRV记录

 

    将JSON文件放置在 /.well-known/matrix/server 目录下

有两种方法。顺便说一下,如果在先检查了/.well-known/matrix/server/之后发现没有任何内容,那么会去查看SRV。

编写SRV记录

按照以下表格的方式注册SRV记录。

項目内容Name_matrix._tcp.{yourdomain}Target{yourdomain}Port443Priority10Weight5

确认联邦

请检查 https://matrix.org/federationtester/api/report?server_name={example.net},如果没有错误就表示成功。

在Synapse中还有其他可以做的事情。

以下是一些本次未涉及的内容。如果您参考官方文档,您也可以将它们引入,请务必尝试一下。

    • STUNを用いてVoIP

 

    • WebクライアントであるRiotをサーバにホスティングする

 

    SMTPサーバと連携してパスワードリセットメールの送信

最后

由於Matrix的服務器和客戶端的spec已經公開,因此存在許多不同的實現(當然除了Synapse還有其他的服務器實現)。此外,也有豐富的客戶端SDK和Bot框架。您可以考慮在開發中使用它們。這裡提供了一份客戶端、服務器和Bot框架的列表,您可以試試不同的選項。

顺便说一句,在 matrix-jp.net 网站上有一些房间,例如 #matrix-research:matrix-jp.net 和 #negao_room:matrix-jp.net,大家热闹地聊天,欢迎你们来参加。

虽然对客户的说明还没有完全,但我打算尽快写到某个地方。

那么,祝你拥有美好的Matrix人生!

對於參考文獻,只需要一個選項。

    • https://github.com/matrix-org/synapse/blob/master/INSTALL.md

 

    • https://github.com/matrix-org/synapse/blob/master/docs/federate.md

 

    https://github.com/matrix-org/synapse/blob/master/docs/postgres.rst
广告
将在 10 秒后关闭
bannerAds