为什么要自建聊天服务
微信、Slack、Discord—这些工具好用是好用,但它们都有一个共同点:你的数据在别人手里。
服务器在美国,公司说关就关。聊天记录说没就没。没有端到端加密,服务商想看就看。想迁移?对不起,导不出来。
去中心化通信解决就是这个问题。协议是开放,客户端是开源,服务器你可以自己跑。换个服务器不用重新注册,联系人、聊天记录全部带走。
这就是 Matrix 做的事情。
Matrix 是什么
Matrix 是一个开放去中心化通信协议。它的核心设计理念是「联邦」—你可以自己搭一个服务器,这个服务器可以和全球其他 Matrix 服务器上用户自由通信,就像邮件一样。
- 协议开源,有完整规范文档
- 端到端加密(E2EE)默认开启
- 支持文字、文件、图片、语音消息
- 支持群组、频道概念
- 服务器之间可以互通(联邦)
- 客户端多样:Element 是官方桌面端,也有移动端
对于个人和小团队来说,自建 Matrix 服务器成本很低。一台 2G 内存的 VPS 足够跑起来。
Synapse 是什么
Synapse 是 Matrix 协议的官方参考实现,用 Python 写的。可以理解成 Matrix 的「服务端」—用户通过客户端(Element)连接到 Synapse,Synapse 负责存储和转发消息,同时和其他 Matrix 服务器联邦通信。
选择 Synapse 的原因:
- 官方维护,更新稳定
- 文档最全,社区活跃
- Docker 部署简单,10 分钟跑起来
- 支持 PostgreSQL,生产级存储
环境准备
- 一台 Linux 服务器(Ubuntu 22.04 或 Debian)
- 域名(可选,用于 HTTPS 和联邦)
- Docker 和 Docker Compose
- 2GB 以上内存(建议 4GB)
假设你域名是 matrix.example.com。
安装 Docker
如果没有 Docker,先装一下:
apt update && apt install -y docker.io docker-compose
systemctl start docker
配置 docker-compose.yml
创建一个目录,比如 ~/matrix,然后写一个 docker-compose.yml:
version: '3'
services:
synapse:
image: matrixdotorg/synapse:latest
container_name: matrix-synapse
restart: unless-stopped
ports:
- "8008:8008"
- "8448:8448"
volumes:
- ./data:/data
environment:
- SYNAPSE_SERVER_NAME=matrix.example.com
- SYNAPSE_REPORT_STATS=no
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8008/health"]
interval: 30s
timeout: 10s
retries: 3
postgres:
image: postgres:15
container_name: matrix-postgres
restart: unless-stopped
environment:
POSTGRES_DB: synapse
POSTGRES_USER: synapse
POSTGRES_PASSWORD: your_strong_password_here
volumes:
- ./postgres:/var/lib/postgresql/data
这里把数据库从默认 SQLite 改成了 PostgreSQL。生产环境推荐用 PostgreSQL,性能和可靠性都更好。
生成配置文件
先启动一次让 Synapse 自动生成配置:
cd ~/matrix
docker-compose up -d postgres
sleep 5
docker-compose run --rm synapse generate
命令执行完后,会在 data 目录下生成 homeserver.yaml,这就是 Synapse 的主配置文件。
配置注册方式
Synapse 默认关闭公开注册,但自己用话可以打开:
编辑 data/homeserver.yaml,找到 enable_registration 改成 true:
enable_registration: true
注意:生产环境建议配合注册验证码(Captcha)或邀请制使用,防止恶意注册刷服务器。
配置反向代理
直接暴露 Synapse 的端口不安全,而且 Synapse 内部的 API 需要通过反向代理访问。Nginx 配置如下:
server {
listen 443 ssl http2;
server_name matrix.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://localhost:8008;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
记得申请 SSL 证书:
apt install -y certbot
certbot certonly --nginx -d matrix.example.com
配置联邦(.well-known)
要让其他 Matrix 服务器能找到你服务器,需要在主域名添加一个 .well-known 记录:
server {
listen 80;
server_name example.com;
location /.well-known/matrix/client {
default_type application/json;
return 200 '{"m.server": "matrix.example.com:443"}';
}
location / {
# 原有配置
}
}
这一步不能省。没有这个,其他服务器就不知道怎么跟你通信。
启动服务
docker-compose up -d
检查健康状态:
curl http://localhost:8008/health
返回 {"status":"ok"} 就说明跑起来了。
创建管理员账号
Synapse 没有单独创建管理员命令,需要通过注册接口创建,然后手动提升权限:
先在配置里开启 registration shared secret:
registration_shared_secret: "your_very_long_random_secret_here"
重启服务后用这个 secret 注册:
curl -X POST http://localhost:8008/_matrix/client/r0/register \
-H "Content-Type: application/json" \
-d '{
"auth": {"session": null, "type": "m.login.dummy"},
"username": "your_username",
"password": "your_password"
}'
然后用 Matrix 客户端(Element)登录就可以了。创建第一个账号后,把这个账号设为管理员:
docker exec matrix-synapse register_new_matrix_user \
-u admin_username \
-p admin_password \
-a \
http://localhost:8008
-a 参数表示创建管理员账号。
使用 Element 客户端
Synapse 跑起来之后,下载 Element,填入你服务器地址 https://matrix.example.com 就可以登录了。
第一次用可以先加入几个公共房间体验一下:
#matrix:matrix.org— Matrix 官方公告室#synapse:matrix.org— Synapse 开发讨论
端到端加密
Matrix 的端到端加密(E2EE)默认是开启。新设备首次登录会提示你设置恢复密钥,保存好这个密钥,丢了就再也解密不了历史消息了。
加密的作用是:服务器本身也看不到你消息内容。服务器只负责转发密文,私钥存在你设备上。这个设计保证了数据主权—即使服务器入侵,攻击者拿到也只是乱码。
日常维护
备份
Synapse 的数据在 data 目录,PostgreSQL 的数据在 postgres 目录。定期打包备份就好。
更新
cd ~/matrix
docker-compose pull
docker-compose up -d
Synapse 更新比较频繁,建议每个月更新一次。
监控
Synapse 自带 metrics 接口,可以接 Prometheus 和 Grafana 做监控。看几个关键指标就够了:
synapse_federation_client_sent_pdu_seconds— 发送消息数synapse_handlers_delta_replication_data— 联邦延迟- 内存使用量 — 超过 80% 就该考虑升级了
写在
自建 Matrix 服务的感觉是:终于有一个聊天工具是你真正拥有。
数据在自己服务器上,协议是开放,换服务器不用换账号。和朋友聊天用是同一个协议,只是服务器不同—这才是互联网该有样子。
Synapse 的缺点也要说一下:Python 写的,资源占用不算低;E2EE 在多设备场景下管理起来有点麻烦;移动端推送在国内网络环境下不太好用。这些问题在长期使用中会感受到,但整体来说瑕不掩瑜。
如果你对数据主权有要求,或者只是想摆脱中心化平台控制,Matrix 是一个值得投入方案。
种下你的想法
在花园里留下一条评论,和这篇文章一起生长。