如何在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 安装。

第 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客户端以其他方式参与项目 .