如何在Ubuntu16.04上安装MatrixSynapse
介绍
Matrix 是分布式通信的开放标准。 它是用于在线消息传递的服务器和服务的集合,它们使用实时同步的标准化 API。
Matrix 使用 homeservers 来存储您的帐户信息和聊天记录。 它们的工作方式类似于电子邮件客户端通过 IMAP/SMTP 连接到电子邮件服务器的方式。 与电子邮件一样,您可以使用由其他人托管的 Matrix 家庭服务器,也可以托管自己的主机并控制自己的信息和通信。
按照本指南,您将安装 Synapse,这是 Matrix 的参考家庭服务器实现。 完成后,您将能够通过任何 Matrix 客户端 连接到您的主服务器,并通过其他 Matrix 联合主服务器与其他用户进行通信。
先决条件
在开始本指南之前,您需要以下内容:
- 按照 this initial server setup guide 设置一台 Ubuntu 16.04 服务器,包括 sudo 非 root 用户和防火墙。
- 安装在您的服务器上的 Nginx(允许 HTTPS 流量); 你可以按照this Nginx on Ubuntu 16.04 tutorial来做到这一点。
- 按照 this hostname tutorial 使用适当的 DNS 记录设置的注册域名。 您需要哪些 DNS 记录取决于您使用域的方式。
- 如果您将域专门用于 Synapse,或者如果您将使用同一台服务器来托管您的网站和 Synapse,您只需要主机名
@
的 A 记录。 - 如果您将在单独的服务器上安装 Synapse,您将需要一个主机名设置为您要使用的子域的 A 记录,例如
matrix.example.com
,以及一个主机名_matrix._tcp
的 SRV 记录指向端口8448
上的相同子域,默认优先级和权重分别为10和100。 这将告诉 Matrix 客户端和家庭服务器在哪里可以找到您的 Synapse 安装。
- 如果您将域专门用于 Synapse,或者如果您将使用同一台服务器来托管您的网站和 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: False # If set, allows registration by anyone who also has the shared # secret, even if registration is otherwise disabled. registration_shared_secret: "randomly_generated_string" . . .
保存并关闭文件。
修改配置后,需要重启 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 客户端向 https://example.com/_matrix/
发出请求以连接到 Synapse。 您需要配置 Nginx 以侦听这些请求并将它们传递给 Synapse,后者在端口 8008
上进行本地侦听。 您还将通过 使用由 Let's Encrypt 支持的 SSL 来保护您的设置。
为此,您将为您的网站创建一个自定义 Nginx 配置文件。 创建这个新的配置文件。
sudo nano /etc/nginx/sites-available/example.com
下面的 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 example.com www.example.com; location /_matrix { proxy_pass http://localhost:8008; } location ~ /.well-known { allow all; } }
这个 Nginx 服务器块教程 有更多关于这些文件如何工作的信息。 配置服务器后,您可以保存并关闭文件。
要启用此配置,请在 /etc/nginx/sites-enabled
目录中为此文件创建符号链接。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
通过运行命令来测试配置文件的语法错误。
sudo nginx -t
根据错误输出更正语法(如果有)。 当没有报错时,使用 systemctl
重新加载 Nginx 使更改生效。
sudo systemctl reload nginx
要完成使用 Let's Encrypt 证书保护 Nginx,请遵循 this Let's Encrypt for Nginx on Ubuntu 16.04 教程 。 请记住使用 /etc/nginx/sites-available/example.com
而不是默认配置文件。 您已经添加了该教程第 2 步中提到的 ~/.well-known
块。
设置 Let's Encrypt 后,您可以继续配置防火墙,以允许 Synapse 与其他家庭服务器通信所需的流量。
第 4 步 — 允许 Synapse 通过防火墙
客户端流量通过 HTTPS 端口 443
(已在 Nginx 指南中的防火墙中打开)连接到 Synapse。 但是,来自其他服务器的流量直接连接到端口 8448
上的 Synapse,而不通过 Nginx 代理,因此您还需要允许此流量通过防火墙。
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/example.com/fullchain.pem /etc/matrix-synapse/fullchain.pem sudo cp /etc/letsencrypt/live/example.com/privkey.pem /etc/matrix-synapse/privkey.pem
为了在更新这些证书时更新它们,您需要将这些命令添加到您的 cron 选项卡。 打开它进行编辑。
sudo crontab -e
并添加以下行:
crontab entry35 2 * * 1 sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /etc/matrix-synapse/fullchain.pem 35 2 * * 1 sudo cp /etc/letsencrypt/live/example.com/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: "/etc/matrix-synapse/fullchain.pem" # PEM encoded private key for TLS tls_private_key_path: "/etc/matrix-synapse/privkey.pem" # PEM dh parameters for ephemeral keys tls_dh_params_path: "/etc/ssl/certs/dhparam.pem" . . .
重新启动 Synapse,使配置更改生效。
sudo systemctl restart matrix-synapse
一切都设置好了,现在您可以使用任何 Matrix 客户端连接到您的家庭服务器并开始与其他人通信。 例如,您可以使用 Matrix 网站上的 客户端 。
为相应的字段输入以下内容:
- 您的 Matrix ID 格式为
@user:server_name
(例如@sammy:example.com
)。 其他联合服务器使用它来查找您的主服务器的托管位置。 - 您的 Password 是您在创建此用户时设置的安全密码。
- 您的 Home Server 是您在步骤 1 中选择的服务器名称。
如果您在步骤 2 中启用了公开注册,您还可以单击 创建帐户 链接创建新帐户或允许其他人在您的主服务器上创建新帐户。
从那里,您可以登录房间并开始聊天。 Matrix的官方支持室是#matrix:matrix.org
。
结论
在本指南中,您使用 Nginx 安全地安装了 Matrix Synapse,并由 Let's Encrypt 的 SSL 证书提供支持。 有许多Matrix客户端你可以用来连接你的家庭服务器,你甚至可以编写自己的Matrix客户端或以其他方式参与项目 .