Matrix Synapse 部署教程:搭建去中心化聊天服务器
引言
由于某些原因,保护个人隐私和通信秘密正变得越来越困难。
为满足私密通讯需求,开源社区一直在不断发展和改进即时通讯工具,Matrix 便是其中一个优秀的加密通信协议。
本人在研究这东西的时候,发现网上的教程比较零碎分散,于是干脆自己整理一篇比较完整的,希望对后来者有点帮助~
1. Synapse 安装
1.1 域名配置
先去你的域名管理面板,添加一条 DNS 解析 A 记录。
1.2 安装 docker
方便起见,切换到 root 用户:
sudo su
更新一下软件源:
sudo apt upadte
安装 docker 和 docker compose:
curl -L https://get.docker.com | sh
1.3 创建一个工作目录
cd /
mkdir -p /root/data/docker_data/matrix
cd /root/data/docker_data/matrix
1.4 生成 Synapse 配置文件
注意:后续无法更改域名
sudo docker run -it --rm \
-v /root/data/docker_data/matrix/data:/data \
-e SYNAPSE_SERVER_NAME=你的域名 \
-e SYNAPSE_REPORT_STATS=no \
matrixdotorg/synapse:latest generate
解释一下各个参数:
-v /root/data/docker_data/matrix/data:/data
是映射的具体路径,可以不用修改
-e SYNAPSE_SERVER_NAME
是你的服务端域名,本文按照“客户端/服务端共用一个域名”的情况撰写
-e SYNAPSE_REPORT_STATS
是否发送匿名统计数据
1.5 修改homeserver.yaml
文件
cd /root/data/docker_data/matrix/data
vim homeserver.yaml
1.5.1 添加PostgreSQL数据库配置,将原来的SQLite配置删除,替换为以下配置
database:
name: psycopg2
args:
user: 用户名
password: 密码
database: synapse
host: postgres
port: 5432
cp_min: 5
cp_max: 10
1.5.2 其他配置
# 为新用户启用注册(可选)
enable_registration: true
# 无需电子邮件或 recaptcha 验证即可注册(其实不推荐,可选)
enable_registration_without_verification: true
# 客户端用于访问此 Homeserver 的面向公众的基本 URL
public_baseurl: 你的服务端域名
# 默认情况下,其他服务器将尝试通过端口 8448 访问我们的服务器,告诉其他服务器将流量发送到端口 443,使用nginx反向代理必须加上,同时nginx配置域名ssl证书
serve_server_wellknown: true
修改切换成中文输入法,好之后,按一下esc,然后:wq保存退出。
1.6 安装运行
cd /root/data/docker_data/matrix
vim docker-compose.yml
以下是我修改的,供参考:
version: "3.3"
services:
postgres:
image: postgres:15-alpine
container_name: postgres
restart: unless-stopped
environment:
POSTGRES_USER: 用户名
POSTGRES_PASSWORD: 密码
POSTGRES_INITDB_ARGS: --encoding='UTF8' --lc-collate='C' --lc-ctype='C'
POSTGRES_DB: synapse
volumes:
- "/root/data/docker_data/matrix/postgres:/var/lib/postgresql/data" # 持久化数据
healthcheck:
test: ["CMD-SHELL", "pg_isready -U 用户名 -d synapse"]
interval: 10s
timeout: 5s
retries: 5
networks:
- synapse_network
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "synapse"
restart: unless-stopped
ports:
- 8008:8008
volumes:
- "/root/data/docker_data/matrix/data:/data"
networks:
- synapse_network # 引用了一个自定义网络
networks:
synapse_network:
driver: bridge
1.6.1 在同目录下执行以下命令运行
docker-compose up -d
1.7 创建管理员账号或其他账号
把 用户名
和 密码
改为你想要设置的值:
docker exec -it synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
此命令将会:
- 通过 Synapse 提供的
register_new_matrix_user
脚本来创建一个新的 Matrix 用户。 -c /data/homeserver.yaml
指定 Synapse 的配置文件路径。http://localhost:8008
是你的 Synapse 服务器地址,通常情况下是容器内的服务地址。
你会看到类似的交互式提示,要求输入以下信息:
- Username: 输入新管理员用户名,例如
admin
. - Password: 输入密码。
- Confirm password: 再次确认密码。
- Is the user admin?: 输入
yes
以将此用户设置为管理员。
1.8 配置Nginx 反向代理
1.8.1 利用宝塔面板
直接新建一个站点,不要数据库,不要 php,纯静态即可。
然后打开下面的配置,修改 Nginx 的配置。
加入以下代码,两种代码二选一:
第一种:
# Matrix 客户端请求的反向代理
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008; # 转发到本地的 Synapse 或 Dendrite 服务
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
client_max_body_size 50M; # 文件上传大小限制
}
# 联邦通信请求的反向代理
location / {
proxy_pass http://localhost:8008; # 转发到本地的 Synapse 或 Dendrite 服务
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
}
第二种:
# 把 /.well-known/ 和 /_matrix/ 路径下的请求都转发给后端服务器
location ~ ^/(_matrix|.well-known|_synapse)/ {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Proxy-Host $proxy_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
}
重启或重载 nginx ,使配置生效:
nginx -s reload
访问 https://<你的域名>
,若 Matrix 实例启动成功则有提示页面。
1.9 完成
至此,祝贺你成功完成了 Synapse 服务器的搭建。
2. 更新 matrix
cd /root/data/docker_data/matrix
docker-compose pull
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
提示:
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
输入 y
利用 Docker 搭建的应用,更新非常容易~
3. 卸载 matrix
同样进入安装页面,先停止所有容器。
cd /root/data/docker_data/matrix
docker-compose down
cd ..
rm -rf /root/data/docker_data/matrix # 完全删除
可以卸载得很干净。
4. 关闭注册和设置额外的安全配置
搭建完成之后,注册了用户,之后建议关闭服务的注册功能
把这边homeserver.yaml里的这两项改为false
enable_registration: false
enable_registration_without_verification: false
其他配置:
allow_guest_access: false #禁止访客
#控制是否允许其他联邦服务器通过联邦协议查询本地用户的配置文件
allow_profile_lookup_over_federation: false
5. Synapse-admin (可选)
还记得刚才生成第一个管理员账号的步骤吗,是不是有点麻烦?
Synapse-admin 是一个很好用的管理面板,可以让你通过图形化界面轻松管理 Matrix 服务器上的用户、房间。
5.1 下载 Synapse-admin
从 https://github.com/Awesome-Technologies/synapse-admin/releases/latest 下载最新的 Synapse-admin 到你的服务器目录。
5.2 在网站目录新建一个文件夹
转到网站根目录,新建一个文件夹,你可以取一个类似 synapse-admin
、synapse-panel
这样的名字。
⚠ 注意
当然了,最好取一个复杂且只有你知道的名字,提高安全性。
5.3 把下载的 tar.gz 文件移动到此文件夹并解压
如题。接下来就可以正常使用了。
假如你的文件夹命名为 panel
,那么你可以通过 https://<你的域名>/panel
访问到 Synapse-admin 面板。
至此,已完成 Synapse-admin 的安装。