保姆级Matrix+Synapse部署教程,部署去中心化在线加密匿名聊天室
为满足私密通讯需求,开源社区一直在不断发展和改进即时通讯工具,Matrix 便是其中一个优秀的加密通信协议。本人在研究这东西的时候,发现网上的教程比较零碎分散,于是干脆自己整理一篇比较完整的,希望对后来者有点帮助。
Matrix 协议支持诸多特性:去中心化通信、端到端加密、WebRTC 语音通话 / 视频通话、消息已读提示、输入状态提示、群组聊天 ...
我一开始关注Matrix+Synapse,原因其实很简单:本地聊天数据处理必须安全自控。现在市面上的在线网页聊天很多,功能强的不少,但往往都是封闭的,我也不知道他们要不要把聊天内容上传到第三方服务器;强调隐私的产品也有,但要么功能单一、要么部署门槛高。Matrix+Synapse吸引我的地方,就在于它把这些看似难以兼顾的点整合进了同一套系统里:所有操作和数据都在本地完成、文件绝不外发、功能却一点不少。
图片不仅于此,正如其名:“矩阵”,如果你是这台服务器的管理员,你还可以允许你的 Matrix 服务器与其它 Matrix 服务器组成矩阵网络,让用户与其它 Matrix 服务器的用户进行通信。
Matrix 服务器上的所有对话都支持端到端加密,非常安全。
关于Matrix+Synapse
图片🔺什么是Matrix+Synapse?Matrix+Synapse能做什么?
Martix是完全开源免费的通信协议
Martix是用于安全实时通信的去中心化端到端加密通信协议,可以保护您的隐私和通信自由。
Martix通过端到端加密来保护您的通信安全,可确保消息在发送方和接收方之间加密,中间服务器无法访问消息内容。Matrix 采用了分散式架构,没有单一的中央服务器,而是由多个独立的服务器通过联邦组成网络。
Martix支持去中心化端到端加密通信、WebRTC语音,视频通话、消息已读,输入状态提示、群组聊天等。
端到端加密可以理解为是两台终端的直接通信,我们举个例子更容易理解:
假设小明用A 设备给小红的B 设备发了一条消息,这时候小黑想看看他俩在聊什么,于是小黑盗取了小红的账号密码,并成功在C 设备上登录了小红的账号。
小黑能不能看到他们俩的聊天记录呢?不能。在端到端加密对话中,所有发出去的消息都会被自动加密。
当小明给小红发送一段消息时,还会自动附上一串用于解密这段消息的解密密钥。小红在B 设备上收到消息时,同时收到了这串解密密钥,所以能正常查看消息。但小黑并没有收到解密密钥,因此无法解密这些历史消息。
端到端加密算是当今相对最安全的一种隐私保护方式,能够满足大多数人的安全需求。
有人要说了:“我也不需要那么高的安全等级啊,这也太多余了!”
那么实际使用中,你可以在创建新对话时,将 “端到端加密” 选项取消勾选。
图片Synapse 是什么?它和 Matrix Synapse 是什么关系?
Matrix 是一个协议,而 Matrix Synapse 则是 Matrix 协议的一个具体实现。
另外,Synapse 本身也只是一个不包含图形界面的服务端,我们还需要一个支持 Matrix 协议的客户端才能正常聊天。常见支持 Matrix 协议的客户端包括:
Element (最为熟知和常用)
跨平台支持:包括桌面、移动和 Web 端。
功能丰富:音视频通话、插件支持等。
社区支持:Element 是 Matrix 社区内最受欢迎的客户端之一,社区更为活跃.
图片Cinny (新一代 Matrix 客户端,UI 设计简洁现代):
轻量级:Cinny 是新一代轻量级的 Matrix 客户端,更适合喜欢简洁界面的用户。
不足:发布日期较新,因此功能不如 Element 全面,例如 Cinny 暂不支持音视频通话;另外当前 Cinny 仅有 Web 端,无 Android 和 iOS 应用;
项目地址:
https://github.com/matrix-org/synapse
威联通Container Station安装Matrix+Synapse教程
Martix的安装和使用相对来说比较简单,使用 Docker 就可以直接安装,但是支持Yantr方式安装,所以如果你还没装Yangtr的话,我建议你去先装一下Yantr,我在前面的文章里面也写了Yantr的安装流程。
Martix内存占用大概 50MB 左右,所以大家无需担心资源占用。
图片🔺先打开Yantr的页面,在Chat标签里面找到Matrix+Synapse,直接点一键安装部署就行了。
部署好之后的Matrix服务,默认端口是8008和8448,客户端的端口是8008。
关于域名的重要说明:Matrix 的 server_name 一旦设定后无法更改。如果你还没有域名或暂时不想配置外网访问,可以先在本地测试。但如果未来计划开放给外部用户或与其他 Matrix 服务器互联(联邦功能),必须使用域名。
或者如果你觉得你还是喜欢手动自己安装,也可以用YAML方式安装。
图片🔺打开 File Station,进入 Container 共享文件夹
在 Container 文件夹下创建 data/matrix/synapse:逐层新建 data → matrix → synapse
同样方式,创建 data/matrix/postgres 和 data/matrix/element
配置 homeserver.yaml 文件
在 Container Station 中打开终端(或通过 SSH),执行以下命令生成默认配置:
docker run -it --rm
-v /share/Container/data/matrix/synapse:/data
-e SYNAPSE_SERVER_NAME=example.com
-e SYNAPSE_REPORT_STATS=no
matrixdotorg/synapse:latest generate
把 example.com 替换为你自己的域名
生成后,用文本编辑器打开配置文件:
/share/Container/data/matrix/synapse/homeserver.yaml
基础配置:
# 服务器域名(必填,一旦设定不可更改)
server_name: "example.com"
# 公共访问 URL(必填,供客户端访问)
public_baseurl: https://matrix.example.com/
数据库配置(推荐 PostgreSQL)
SQLite 仅适用于测试,生产环境强烈建议使用 PostgreSQL,性能和稳定性远超 SQLite。
替换原有的 database: 部分:
database:
name: psycopg2
args:
user: synapse_user
password: 你的强密码
database: synapse
host: postgres
port: 5432
cp_min: 5
cp_max: 10
如果你不知道如何替换,操作方法如下:
找到文件中以 database: 开头的行
从 database: 一直往下,直到遇到下一个顶格且不是继续缩进的行(通常是 log_config: 或 media_store_path:)
选中该段落,粘贴上面的 PostgreSQL 配置进行替换
安全密钥(必填,用 openssl rand -hex 32 生成)
# 注册共享密钥(必须,否则无法注册用户)
registration_shared_secret: "你的32位十六进制密钥"
# Macaroon 密钥(必须,否则会出现警告)
macaroon_secret_key: "你的另一个32位十六进制密钥"
# 表单密钥
form_secret: "你的第三个32位十六进制密钥"
功能配置(按需开启)
# 启用用户注册(测试阶段设为 true,正式上线后建议关闭)
enable_registration: true
enable_registration_without_verification: true
# 最大的正反向代理(限制文件上传大小,默认 50M)
max_upload_size: "50M"
# 启用 URL 预览(实验性功能)
url_preview_enabled: true
url_preview_ip_range_blacklist:
- '127.0.0.1/8'
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '::1/128'
- 'fe80::/64'
# 信任的密钥服务器(用于端到端加密)
trusted_key_servers:
- server_name: "matrix.org"
# 禁用 matrix.org 警告(与上面配合使用)
suppress_key_server_warning: true
监听器配置(配合反向代理)
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true # 识别反向代理转发的真实 IP
bind_addresses: ['0.0.0.0'] # 允许所有 IP 访问(Docker 环境)
- port: 8448
tls: false
type: http
bind_addresses: ['0.0.0.0']
resources:
- names: [federation] # 联邦端口,用于与其他 Matrix 服务器通信
为什么这样配置:x_forwarded: true 让 Synapse 能正确识别通过反向代理访问的真实客户端 IP;联邦端口 8448 是 Matrix 服务器间互联的标准端口
存储路径
# 媒体文件存储路径
media_store_path: "/data/media_store"
# 日志配置
log_config: "/data/example.com.log.config"
# PID 文件路径
pid_file: "/data/homeserver.pid"
最后检查一下配置项有没有完成:
图片最后才是编辑docker-compose.yml
version: '3.8'
services:
# PostgreSQL 数据库
postgres:
image: postgres:16-alpine
container_name: matrix-postgres
restart: unless-stopped
environment:
POSTGRES_DB: synapse
POSTGRES_USER: synapse_user
POSTGRES_PASSWORD: 你的强密码 # 与 homeserver.yaml 保持一致
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
volumes:
- /share/Container/data/matrix/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U synapse_user"]
interval: 5s
timeout: 5s
retries: 10
networks:
- matrix
# Synapse 主服务器
synapse:
image: matrixdotorg/synapse:latest
container_name: matrix-synapse
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
volumes:
- /share/Container/data/matrix/synapse:/data
ports:
- "8008:8008" # 客户端 API(仅反向代理访问)
- "8448:8448" # 联邦 API(必需,开放给外部服务器)
environment:
SYNAPSE_CONFIG_DIR: /data
SYNAPSE_CONFIG_PATH: /data/homeserver.yaml
networks:
- matrix
# Element Web 客户端(可选)
element:
image: vectorim/element-web:latest
container_name: matrix-element
restart: unless-stopped
volumes:
- /share/Container/data/matrix/element/config.json:/app/config.json:ro
ports:
- "8080:80"
networks:
- matrix
networks:
matrix:
driver: bridge
配置文件调整说明
POSTGRES_PASSWORD:在 environment 和 homeserver.yaml 的 args.password 中填入相同的强密码(建议 16 位以上,含大小写字母 + 数字 + 特殊字符)。
如果你要用 Element Web 客户端的话,需要额外创建配置文件
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.example.com",
"server_name": "example.com"
}
}
}
将 example.com 和 matrix.example.com 替换为你实际的域名
最后完成。
建议亲自阅读一遍官方文档:https://matrix-org.github.io/synapse/latest/welcome_and_overview.html
接下来都是一些可选配置。
还记得刚才生成第一个管理员账号的步骤吗,是不是有点麻烦?
Synapse-admin 是一个很好用的管理面板,可以让你通过图形化界面轻松管理 Matrix 服务器上的用户、房间。
图片图源 Synapse-admin 项目仓库
⚠ 注意
如果刚才的 “Nginx 反向代理” 步骤中,你直接照搬了我提供的配置文件,那么此处不需要进行任何额外配置,请跳过此栏继续阅读后面的内容。否则,请检查你配置文件的location是否包含/_matrix和/_synapse/admin两部分,以便将这个端口正确地暴露到互联网上。
下载 Synapse-admin
从 https://github.com/Awesome-Technologies/synapse-admin/releases/latest 下载最新的 Synapse-admin 到你的服务器目录。
在网站目录新建一个文件夹
转到网站根目录,新建一个文件夹,你可以取一个类似synapse-admin、synapse-panel这样的名字。
⚠ 注意
当然了,最好取一个复杂且只有你知道的名字,提高安全性。
把下载的 tar.gz 文件移动到此文件夹并解压
如题。接下来就可以正常使用了。
假如你的文件夹命名为panel,那么你可以通过https://<你的域名>/panel访问到 Synapse-admin 面板。
至此,已完成 Synapse-admin 的安装。
OIDC 登录 (可选)
OIDC,即 OpenID Connect,是一种第三方登录协议,可以看作是 OAuth 的分支
可以看看官方的服务器,支持很多种第三方登录:
图片
图片配置起来也很简单,只需要编辑刚刚那个 homeserver.yaml 的相关部分就可以了。
有关 OIDC 的这块内容,官方文档 写的非常详细,可以去看看。
Matrix+Synapse能干什么?为什么我会觉得它值得装?
第一,多客户端支持
图片🔺常见的 Matrix 客户端包括Element和Cinny。
Element(最为被大家熟知和常用):
跨平台支持:Element 提供了适用于多个平台的客户端,包括桌面、移动和Web版本。
功能丰富:Element 提供了广泛的功能,包括端到端加密、音视频通话、文件共享、插件支持等。
社区支持:Element 是 Matrix 社区内最受欢迎的客户端之一,拥有大量用户和支持。
第二,随便发文件和图,不用担心被屏蔽
这是我最看重的一点。Matrix+Synapse的核心思路是:专属于你自己的聊天软件。
图片🔺Matrix+Synapse几乎可以无限制组建群聊,也可以无限制发内容,也能无限制本地储存聊天内容,全程只会存在本地,不会放到云端。
具体来说,这个Matrix+Synapse就算是只当自己的一个文件传输助手,也是完全合格的。
第三,所有功能都免费开放,支持第三方 OIDC 登录 (可选)!
图片🔺Matrix+Synapse还支持第三方 OIDC 登录!
图片🔺Matrix+Synapse的所有交流功能都可以自定义,并且没有任何第三方介入。
图片🔺Matrix+Synapse的视频聊天有什么好处?至少不用频繁注册账号了,也不用担心自己多个设备要同时登录同一个视频聊天室的时候它还限制设备数量。
更好的一点是它是独立自主的,所以我们想开多长时间的视频就开多长时间,根本不用担心时间超了之后还要开会员。
这里简单把我遇到的问题列一下:
1. 国内的微信、QQ 没法配置 OIDC 登录,它们不遵循标准的 OpenID 协议,本人搞了很长时间也没成功。
2023/12 补充:
如果通过 auth0 这种中转一下,似乎有戏?还未研究
2. 微软 OIDC:如果按官方文档的去配置,你会发现个人账户无法登录。建议参考以下配置(改了终结点)
3. Apple OIDC:难搞。如果想开通 Login with Apple,则必须交 688 元开发者账户年费...
4. 每种登录方式都可以单独设置图标,但设置图标的方式就很有意思了:你需要先随便在一个聊天界面中发送这个图标文件,然后右键审查元素,获取这个图标的 mxc 资源地址 ,复制下来备用。然后再回到 homeserver.yaml文件的相关部分,把这个 mxc 地址填进去。头一次搞的时候,本人找了大半天,愣是一篇教程也没找到。。
结语
Matrix+Synapse是一款极具潜力的点对点聊天工具,它在隐私保护、成本控制和技术创新方面表现出色,特别适合对数据隐私有要求的用户。
对于普通用户,如果不怕折腾且重视隐私,Matrix+Synapse是绝佳选择;对于追求极致便利和全面功能的企业用户,可能需要等待其进一步发展。
总的来说,Matrix+Synapse代表着开源点对点聊天的正确方向——安全、可控、透明。 随着社区的壮大和功能的完善,它有望成为更多人信赖聊天解决方案。如果你想看更多 NAS、自托管Docker等相关玩法,也欢迎继续关注。没写过的内容,也可以评论区留言交流。
本篇就到这里,我们下篇再见。
