如何在CVM上安装Matrix Synapse

介绍

Matrix是分散通信的开放标准。它使用标准化API实时同步的在线消息传递到其他服务器。

Matrix使用主服务器来存储您的帐户信息和聊天记录。它们的工作方式与E-mail客户端通过IMAP/SMTP连接到E-mail服务器的方式类似。与E-mail一样,您既可以使用由第三方的Matrix服务器,也可以自建Matrix服务器。

本文将介绍安装Matrix Synapse,安装完成后,您将能够通过任意Matrix客户端连接您的主Matrix服务器并与其他Matrix服务器上的其他用户进行通信。

准备

在开始本文之前,您需要以下内容:

  • 一台安装好Ubuntu系统的服务器,我建议您使用腾讯云免费的开发者专属在线实验平台进行试验。
  • 在您的服务器上安装Nginx(允许HTTPS流量打开443端口),你可以使用腾讯云CVM安全组进行设置
  • 您需要注册相关域名,可以在这里注册

第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 -

您将看到下面的输出:

OK

添加存储库后,更新本地包索引,以便包含新存储库的信息。

sudo apt-get update

添加存储库后,安装Synapse.

sudo apt-get install matrix-synapse

在安装过程中,系统将提示您输入服务器名称,该名称应为您的域名。还将选择是否要将有关您的主页服务器的匿名统计信息发送回Matrix。

完成后,使用systemctl命令使服务器启动时启动Synapse。

sudo systemctl enable matrix-synapse

该命令仅在整个服务器启动时启动Synapse。现在,您的服务器已在运行,请立即用systemctl命令手动启动Synapse。

sudo systemctl start matrix-synapse

Synapse现已在您的服务器上安装并运行,但您需要先创建一个用户才能开始使用。

第2步、为Synapse创建用户

在开始使用Synapse之前,您需要添加一个用户帐户。在添加新用户之前,您需要设置公共密钥。任何知道公共密钥的人都可以使用它来注册.

使用以下命令生成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

. . .

## 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端口上进行本地侦听。您还可以使用腾讯云SSL证书对您的服务进行保护。

为此,您将为您的网站创建自定义Nginx配置文件。

创建新的配置文件:

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

下面这块指定Nginx应如何处理来自Matrix客户端的请求。将以下内容复制并粘贴到文件中。

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;
    }
}

配置服务器后,可以保存并关闭文件。

要启用此配置,请在/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

请记住使用/etc/nginx/sites-available/example.com代替默认配置文件。您已经添加了该教程的第2步中提到的~/.well-known块。

设置好加密后,您可以继续配置防火墙,以便Synapse与其他主机服务器进行通信所需的流量。

第4步、防火墙允许Synapse

客户端流量通过HTTPS端口443连接到Synapse 。但是,来自其他服务器的流量直接连接到端口8448上的Synapse 而不通过Nginx代理,因此您还需要允许此流量通过防火墙。(如果对命令不熟悉的同学可以直接使用腾讯云CVM安全组进行设置)

sudo ufw allow 8448

检查UFW的状态。

sudo ufw status

它应该如下所示:

Status: 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

现在已经配置了Synapse并且可以与其他主服务器通信,您可以使用在步骤3时从腾讯云申请到的SSL证书来提高其安全性。

将证书复制到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

并添加以下行:

35 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中从腾讯云请求的相同证书,替换配置文件中的路径。

. . .

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的网站上使用客户端

为相应字段输入以下内容:

  • 您的MatrixID的格式为@user:server_name (例如@sammy:example.com)。其他服务器使用它来查找托管主服务器的位置。
  • 您的密码是您在创建此用户时设置的安全密码。
  • 您的主服务器是您在步骤1中选择的服务器名称。

如果您在步骤2中启用了公共注册,则还可以单击“ 创建帐户”链接以创建新帐户,或允许其他人在您的主页服务器上创建新帐户。

您可以登录房间并开始聊天。Matrix的官方支持聊天室是#matrix:matrix.org

结论

在本文中,您使用Nginx安全地安装了Matrix Synapse,并使用来自腾讯云的SSL证书作为后盾。你可以用主服务器来连接到您的Matrix客户们,你甚至可以编写自己的Matrix客户端涉足与其他领域的项目


参考文献:《How To Install Matrix Synapse on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漏斗社区

你们尽管绕dogByPass,绕不过算我输!

0x00 背景 这周学弟学妹经常提问到如何绕过安全防护软件的检测,那么本篇就以dog为例子带大家走一遍dogByPass的一条龙服务流程,本篇仅提供思路,后续可...

42380
来自专栏云计算教程系列

如何在Ubuntu 18.04上为用户目录设置vsftpd

FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多普通网民希望通过htt...

15700
来自专栏令仔很忙

新手学Linux(六)----安装Nginx

nginx是C语言开发,建议在linux上运行,本教程使用Centos7.0作为安装环境。

28920
来自专栏Youngxj

emlog后台登录失败邮件通知

14430
来自专栏惨绿少年

SSH服务详解

第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Wo...

61700
来自专栏谈补锅

ASP和ASP.NET发送邮件笔记

    这两天因公司网站邮件发不出去,然后研究了在asp网站发送邮件和在asp.net网站发送邮件的代码,把碰到的问题这里记录一下。

25640
来自专栏网络

一步步带你了解前后端分离利器之JWT

一、HTTP的无状态性 HTTP 是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 ...

39250
来自专栏赵俊的Java专栏

搭建一个自己的私有云 + 离线下载站

4.4K40
来自专栏IT可乐

邮件实现详解(二)------手工体验smtp和pop3协议

  上篇博客我们简单介绍了电子邮件的发送和接收过程,对参与其中的邮件服务器,邮件客户端软件,邮件传输协议也有简单的介绍。我们知道电子邮件需要在邮件客户端和邮件服...

519100
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Webmin

Webmin是适用于任何Linux机器的基于Web的控制面板,可让您通过基于Web的现代界面管理服务器。使用Webmin,您可以动态更改常用软件包的设置,包括W...

30910

扫码关注云+社区

领取腾讯云代金券