搭建一个自用的端到端加密服务器 - 以 Matrix-Conduit 为后端

发布时间 2023-06-21 19:40:52作者: wsm25

Conduit 是一个用 Rust 编写的、支持基础Matrix 协议 的服务器后端。不建议用在生产环境中,因为功能真的很少,只支持基础的加密聊天、语音视频、文件分享,文档又少。如果买了小内存机、想弄一个自用的端到端加密聊天服务器的可以试试。

注意:

  • 它要求 glibc 版本在 2.29 以上,所以至少需要 Debian 11, Ubuntu 20 或 Arch 大法(大雾)。
  • 在 electron 界面注册的第一个用户为 admin,后续为普通。把普通用户拉入 Admin Room 就可以变成 admin 了。无需手动添加。

安装笔记[1]如下:

# 安装 Element-Web(可选,若使用客户端可以忽略)
wget https://github.com/vector-im/element-web/releases/download/v1.11.33/element-v1.11.33.tar.gz # 最好更改为最新版本,下面一并更改
tar xf element-v1.11.33.tar.gz 
cp element-v1.11.33/config.sample.json element-v1.11.33/config.json 
vim element-v1.11.33/config.json # 修改 m.homeserver 为你的服务器
# gzip 静态压缩(可选,推荐)
for i in element-v1.11.33/bundles/*/*.js; do 
    if [ `ls -l $i | head -1 | awk '{print $5}'` -gt $((1024)) ]; then
        gzip -k $i -7
    fi
done
for i in element-v1.11.33/bundles/*/*.css; do 
    if [ `ls -l $i | head -1 | awk '{print $5}'` -gt $((1024)) ]; then
        gzip -k $i -7
    fi
done

sudo mv element-v1.11.33 /var/www/element
sudo vim /etc/nginx/nginx.conf # 看下面,这里使用 nginx 作为代理服务器

# 安装 conduit 后端
sudo wget -O /usr/local/bin/matrix-conduit "https://gitlab.com/famedly/conduit/-/jobs/artifacts/master/raw/build-output/linux_amd64/conduit?job=docker:master" && sudo chmod +x /usr/local/bin/matrix-conduit
sudo vim /etc/systemd/system/conduit.service # 看下面
sudo mkdir /etc/matrix-conduit
sudo vim /etc/matrix-conduit/conduit.toml # 看下面
sudo systemctl daemon-reload
sudo systemctl start conduit

/etc/nginx/nginx.conf

...
http {
	...
    tcp_nopush on;
    tcp_nodelay on;
	gzip on; # gzip 配置
    gzip_min_length 1k;
    gzip_comp_level 5;
    gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css application/json;
    gzip_static  on;  # 若不用 element-web 或没有前述 gzip 静态压缩,可以删除此行
    server { # https 跳转
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        location / {
            return 301 https://$host$request_uri;
        }
    }
    server {
        listen       443 ssl http2; # 支持 http2
        server_name  你的域名;
        root /var/www/element; # 若不用 element-web 可删除
        
        location /.well-known/matrix/client {
            return 200 '{"m.homeserver": {"base_url": "https://你的域名"}}';
            default_type application/json;
            add_header Access-Control-Allow-Origin *;
        }


        location /.well-known/matrix/server {
            return 200 '{ "m.server": "你的域名:443" }';
            default_type application/json;
            add_header Access-Control-Allow-Origin *;
        }

        location ~ ^(/_matrix) {
            proxy_pass http://127.0.0.1:8008;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;
            client_max_body_size 40M; # 根据 conduit.toml 中设置决定
            proxy_http_version 1.1;
        }
    }
}
...

/etc/systemd/system/conduit.service

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

[Service]
Environment="CONDUIT_CONFIG=/etc/matrix-conduit/conduit.toml"
User=conduit
DynamicUser=yes
LogsDirectory=matrix-conduit
StateDirectory=matrix-conduit
Restart=always
ExecStart=/usr/local/bin/matrix-conduit

[Install]
WantedBy=multi-user.target

/etc/matrix-conduit/conduit.toml

[global]
server_name = "你的域名"
database_path = "/var/lib/matrix-conduit/"
database_backend = "rocksdb"
port = 8008
max_request_size = 40_000_000 # in bytes
allow_registration = true
allow_federation = true
trusted_servers = ["你的域名"]
log = "warn,state_res=warn,rocket=off,_=off,sled=off"
address = "127.0.0.1" 


  1. 由于很多地方需要手动更改或者需要编辑配置文件,这段 bash 并不能作为一键脚本复制粘贴运行。 ↩︎