简介

Conduit 是一个用 Rust 编写的 Matrix 服务端,它是一个轻量级的 Matrix 服务器,旨在提供一个快速、可靠的 Matrix 服务端,同时保持简单和可读性。

Matrix 是一个安全和去中心化的开放网络通信协议。来自任何 Matrix 主机服务器的用户都可以与其他 Matrix 服务器上的用户进行聊天。 你甚至可以使用桥接器(也称为 Matrix 应用服务)与 Matrix 之外的用户进行通信,比如 Discord 上的社区。

在 nanopi R5S 上运行时,CPU 占用率在 1%左右,内存占用率在 100MB 左右。

安装和编译

从官方仓库克隆源代码,然后使用cargo编译。

你需要先安装rust,可以参考这里

# 克隆仓库
git clone https://gitlab.com/famedly/conduit
cd conduit
# 安装编译所需的依赖
sudo apt install libclang-dev build-essential
# 编译
cargo build --release

创建用户

创建一个名为conduit的用户,用于运行conduit服务。

sudo adduser --system conduit --group --disabled-login --no-create-home

防火墙配置

Conduit 使用端口 443 和 8448,这两个端口需要在防火墙中打开。

如果 Conduit 运行在路由器后面或容器中,并且具有与主机系统不同的公共 IP 地址,则需要直接或间接地将这些公共端口转发到配置中提到的端口。

配置 systemd 服务

创建/etc/systemd/system/conduit.service文件,内容如下:

[Unit]
Description=Conduit Matrix Server
After=network.target

[Service]
Environment="CONDUIT_CONFIG=/etc/conduit/conduit.toml"
User=conduit
Group=conduit
Restart=always
ExecStart=/path/to/conduit

[Install]
WantedBy=multi-user.target

重新加载systemd配置。

sudo systemctl daemon-reload

配置

Conduit 的配置文件位于/etc/conduit/conduit.toml,内容如下:

[global]
# 这是 Conduit 服务器的名称,它将作为用户和房间 ID 的后缀。
#server_name = "your.server.name"

# 这是 Conduit 将保存其数据的唯一目录
database_path = "/var/lib/matrix-conduit/"
database_backend = "rocksdb"

# Conduit 运行的端口。您需要在您的 Web 服务器(例如 apache 或 nginx)中设置反向代理,
# 以便将端口 443 和 8448 的所有请求转发到运行在此端口上的 Conduit 实例
# Docker 用户:不要更改此项,您需要将外部端口映射到此端口。
port = 6167

# 上传的最大大小
max_request_size = 20_000_000 # in bytes

# 启用注册。如果设置为 false,则无法在此服务器上注册用户。
allow_registration = true

allow_federation = true
allow_check_for_updates = true

# 从中获取公钥的服务器。
trusted_servers = ["matrix.org"]

#max_concurrent_requests = 100 # Conduit 同时发送给其他服务器的请求数量
#log = "warn,state_res=warn,rocket=off,_=off,sled=off"

address = "127.0.0.1" # 这样可以确保只能通过反向代理访问 Conduit
#address = "0.0.0.0" # # 如果 Conduit 在容器中运行,请确保反向代理可以访问它。

配置文件夹权限

我们使用 Conduit 特定的用户,需要允许它读取配置文件。在 Debian 或 RHEL 上,可以运行以下命令:

sudo chown -R root:root /etc/matrix-conduit
sudo chmod 755 /etc/matrix-conduit

如果使用默认的数据库路径,还需要运行以下命令:

sudo mkdir -p /var/lib/matrix-conduit/
sudo chown -R conduit:conduit /var/lib/matrix-conduit/
sudo chmod 700 /var/lib/matrix-conduit/

配置反向代理

Conduit 服务器需要一个反向代理,以便将端口 443 和 8448 的所有请求转发到运行在此端口上的 Conduit 实例。

nginx

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    listen 8448 ssl http2;
    listen [::]:8448 ssl http2;
    server_name your.server.name; # EDIT THIS
    merge_slashes off;

    # Nginx defaults to only allow 1MB uploads
    # Increase this to allow posting large files such as videos
    client_max_body_size 20M;

    location /_matrix/ {
        proxy_pass http://127.0.0.1:6167$request_uri;
        proxy_set_header Host $http_host;
        proxy_buffering off;
        proxy_read_timeout 5m;
    }

    ssl_certificate /etc/letsencrypt/live/your.server.name/fullchain.pem; # EDIT THIS
    ssl_certificate_key /etc/letsencrypt/live/your.server.name/privkey.pem; # EDIT THIS
    ssl_trusted_certificate /etc/letsencrypt/live/your.server.name/chain.pem; # EDIT THIS
    include /etc/letsencrypt/options-ssl-nginx.conf;
}

ssl

你可以使用certbot来获取免费的证书。

sudo certbot -d your.server.name

启动服务

sudo systemctl enable conduit
sudo systemctl start conduit

参考