在 Debian 11 上使用矩阵突触和元素创建聊天服务器

Matrix 是去中心化和端到端加密通信的开放标准。它使用通过互联网相互通信的家庭服务器进行联合。家庭服务器存储有关其用户的数据以及创建的聊天室(包括来自其他家庭服务器的聊天室)。由于去中心化的性质,当创建房间的原始家庭服务器脱机时,其他家庭服务器可以继续通信而不会出现问题。由于这种设计,不存在单点故障。

Synapse 是由 Matrix.org 团队创建的 Matrix 主服务器的参考实现,也是最流行、最成熟和最完整的实现。

遵循本指南时,请将所有出现的 替换为您的域名。example.org

一、准备工作

  • 在 Vultr 部署 Debian 11 实例
  • IPv4地址可选择下载元素和Coturn。
  • 更新服务器
  • 创建具有 sudo 权限的非 root 用户
  • 将域和子域指向您的服务器matrixelementturn

二、 安装突触

添加 Matrix.org apt 存储库。

$ 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

安装突触。

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

在安装过程中,输入主服务器的名称,该名称构成矩阵 ID 的一部分。您可以稍后更改此设置。/etc/matrix-synapse/conf.d/server_name.yaml

三、安装和配置 PostgreSQL

虽然 Synapse 支持使用 SQLite 作为数据库,但由于性能问题,不建议在生产中使用。

安装 PostgreSQL。

$ sudo apt install postgresql

登录 PostgreSQL 用户。

$ sudo -su postgres

为 PostgreSQL 创建一个用户和一个数据库。synapsesynapse

$ createuser --pwprompt synapse
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapse

离开帐户。postgres

$ exit

四、使用 TLS 安装和配置 Nginx

Synapse 支持在没有反向代理的情况下独立运行,但不建议在生产中这样做。

安装 Nginx 和 Certbot。

$ sudo apt install nginx certbot python3-certbot-nginx

Open the HTTP, HTTPS, and Synapse ports in the firewall.

$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 8448

Get a TLS certificate from Let’s Encrypt.

$ sudo certbot certonly --nginx -d matrix.example.org -d example.org

Create a new Nginx configuration file.

$ sudo nano /etc/nginx/sites-available/synapse

将以下行添加到配置文件中。

server {
    server_name matrix.example.org;

    # Client port
    listen 80;
    listen [::]:80;

    return 301 https://$host$request_uri;
}

server {
    server_name matrix.example.org;

    # Client port
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Federation port
    listen 8448 ssl;
    listen [::]:8448 ssl;

    # TLS configuration
    ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    location ~ ^(/_matrix|/_synapse/client) {
            proxy_pass http://localhost:8008;
            proxy_http_version 1.1;

            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;

            # Default Synapse upload size.
            # If you change max_upload_size in Synapse config, update it here too.
            client_max_body_size 50M;
    }
}

如果在 Synapse 安装 () 期间设置的矩阵服务器名称的 DNS 记录指向托管 Synapse () 的同一服务器的 IP 地址,请在末尾添加以下行。如果没有,请在另一台服务器上 () 上为 Nginx 配置文件的适当位置添加以下行。example.orgmatrix.example.org/etc/nginx/sites-available/synapseexample.org

server {
    server_name example.org;

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # TLS configuration
    ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    # Redirect
    location ~ ^(/_matrix|/_synapse/client) {
            return 301 "https://matrix.example.org$request_uri";
    }

    # Client homeserver autodiscovery
    location /.well-known/matrix/client {
        default_type application/json;
        add_header Access-Control-Allow-Origin *;

        return 200 '{ "m.homeserver": { "base_url": "https://matrix.example.org" } }';
    }

    # Domain delegation
    location /.well-known/matrix/server {
        default_type application/json;
        add_header Access-Control-Allow-Origin *;

        return 200 '{ "m.server": "matrix.example.org" }';
    }
}

启用配置。

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

重新加载 Nginx 配置。

$ sudo systemctl reload nginx.service

五、 配置突触

您可以在以下位置编辑配置文件,但您应该改为放置 更改 在 APT 中不会要求在每次更新 Synapse 后覆盖配置文件。/etc/matrix-synapse/homeserver.yaml/etc/matrix-synapse/conf.d/

创建新的数据库配置文件。

$ sudo nano /etc/matrix-synapse/conf.d/database.yaml

将以下行添加到配置文件中。将该值替换为之前为 PostgreSQLuser 设置的密码。如果您在其他服务器上托管 PostgreSQL,请替换为其地址。passwordsynapselocalhost

database:
  name: psycopg2
  args:
    user: synapse
    password: 'password'
    database: synapse
    host: localhost
    cp_min: 5
    cp_max: 10

创建秘密注册密钥。确保其安全,因为任何拥有密钥的人都可以注册新用户,即使注册被禁用也是如此。

$ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee /etc/matrix-synapse/conf.d/registration_shared_secret.yaml

默认情况下,Synapse 启用状态指示器,以显示某人是否在线。这可能会导致高 CPU 使用率,并且许多家庭服务器会禁用它们。为此,请创建一个新的配置文件。

$ sudo nano /etc/matrix-synapse/conf.d/presence.yaml

将以下行添加到配置文件中。

presence:
  enabled: false

重新启动 Synapse 以应用新配置。

$ sudo systemctl restart matrix-synapse.service

创建一个新的矩阵用户。

$ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008

若要打开公共注册,请创建新配置。

$ sudo nano /etc/matrix-synapse/conf.d/registration.yaml

将以下行添加到配置文件中。

enable_registration: true

默认情况下,Synapse 不允许在未经验证的情况下进行注册。 要启用电子邮件验证,请添加以下行。

registrations_require_3pid:
  - email

email:
  smtp_host: mail.example.org
  smtp_port: 587

  # If mail server has no authentication, skip these 2 lines
  smtp_user: 'noreply@example.org'
  smtp_pass: 'password'

  # Optional, require encryption with STARTTLS
  require_transport_security: true

  app_name: 'Example Chat'  # defines value for %(app)s in notif_from and email subject
  notif_from: "%(app)s <noreply@example.org>"

若要不进行任何形式的验证,请添加以下行。

enable_registration_without_verification: true

重新启动 Synapse 以应用新配置。

$ sudo systemctl restart matrix-synapse.service

要验证 Synapse 是否正在运行,请在浏览器中打开您的 Matrix 域。例如:/_matrix/static/

https://matrix.example.org/\_matrix/static/

检查与其他主服务器的联盟是否 工作时,打开联合测试器,键入您的 Matrix 服务器名称,然后单击 Go。

 六、安装和配置 Coturn

您通常需要在 NAT (TURN) 服务器周围使用中继进行遍历,以使语音和视频通话正常工作。如果不需要此功能,可以跳过此部分。

安装 Coturn。

$ sudo apt install coturn

打开 TURN 和 UDP 防火墙端口。

$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp

从Let’s Encrypt获取TLS证书。

$ sudo certbot certonly --nginx -d turn.example.org

生成身份验证密钥。

$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf

编辑配置文件。

$ sudo nano /etc/turnserver.conf

将以下行添加到配置文件中。

use-auth-secret
realm=turn.example.org
cert=/etc/letsencrypt/live/turn.example.org/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.org/privkey.pem

# VoIP is UDP, no need for TCP
no-tcp-relay

# Do not allow traffic to private IP ranges
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff

# Limit number of sessions per user
user-quota=12
# Limit total number of sessions
total-quota=1200

重新启动 Coturn 以重新加载配置。

$ sudo systemctl restart coturn.service

创建新的突触配置文件。

$ sudo nano /etc/matrix-synapse/conf.d/turn.yaml

将以下行添加到配置文件中。将值替换为 from。turn_shared_secretstatic-auth-secret/etc/turnserver.conf

turn_uris: [ "turn:turn.example.org?transport=udp", "turn:turn.example.org?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True

重新启动 Synapse 以应用新配置。

$ sudo systemctl restart matrix-synapse.service

七、使用矩阵

Synapse 现已配置完毕,您可以将其与任何 Matrix 客户端一起使用。Element 是最受欢迎的 Matrix 客户端,可作为托管的 Web 应用程序、桌面和移动应用程序使用。

如果要托管自己的 Element 实例,请进一步阅读有关如何安装和配置它的说明。

要登录您的矩阵客户端,请在用户名字段中输入您的完整矩阵 ID(例如)。大多数客户端(如 Element)会自动获取主服务器信息。如果这不起作用,请检查矩阵服务器上的 URL 是否具有正确的主服务器信息。如果是,则您的客户端不支持主服务器发现,您需要手动插入主服务器地址。@bob:example.org/.well-known/matrix/client/

八、安装元素

安装 jq。

$ sudo apt install jq

为 Element 创建一个目录。

$ sudo mkdir -p /var/www/element

创建一个新文件以获取最新的元素版本。

$ sudo nano /var/www/element/update.sh

将以下行添加到文件中。

#!/bin/sh
set -e

install_location="/var/www/element"
latest="$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r .tag_name)"

cd "$install_location"

[ ! -d "archive" ] && mkdir -p "archive"
[ -d "archive/element-${latest}" ] && rm -r "archive/element-${latest}"
[ -f "archive/element-${latest}.tar.gz" ] && rm "archive/element-${latest}.tar.gz"

wget "https://github.com/vector-im/element-web/releases/download/${latest}/element-${latest}.tar.gz" -P "archive"
tar xf "archive/element-${latest}.tar.gz" -C "archive"

[ -L "${install_location}/current" ] && rm "${install_location}/current"
ln -sf "${install_location}/archive/element-${latest}" "${install_location}/current"
ln -sf "${install_location}/config.json" "${install_location}/current/config.json"

将文件标记为可执行文件。

$ sudo chmod +x /var/www/element/update.sh

执行文件以下载元素。

$ sudo /var/www/element/update.sh

若要在将来更新元素,请重新运行该命令。

九、配置元素

复制示例元素配置。

$ sudo cp /var/www/element/current/config.sample.json /var/www/element/config.json

编辑配置文件。

$ sudo nano /var/www/element/config.json

将默认 Matrix.org 主服务器地址更改为主服务器。

"m.homeserver": {
    "base_url": "https://matrix.example.org",
    "server_name": "example.org"
},

如果要在网站标题和其他地方使用自己的名称而不是Element,请更改品牌名称。

"brand": "My Example Chat",

从Let’s Encrypt获取TLS证书。

$ sudo certbot certonly --nginx -d element.example.org

创建一个新的 Nginx 配置文件。

$ sudo nano /etc/nginx/sites-available/element

将以下行添加到配置文件中。

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

    server_name element.example.org;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name element.example.org;

    root /var/www/element/current;
    index index.html;

    add_header Referrer-Policy "strict-origin" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;

    # TLS configuration
    ssl_certificate /etc/letsencrypt/live/element.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/element.example.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
}

启用配置。

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

重新加载 Nginx 配置。

$ sudo systemctl reload nginx.service

您现在可以从子域访问元素(例如,)。要登录,请输入您的用户名或完整的矩阵 ID。elementhttps://element.example.org

赞(0)
未经允许不得转载:主机百科 » 在 Debian 11 上使用矩阵突触和元素创建聊天服务器