通过 Docker 和 Clouflare Workers 搭建 Matrix Synapse 实例

这篇文章主要是为了记录搭建 Matrix Synapse,部署在子域名方法,希望能对你有所帮助。

准备工具

一台至少 2H4G 的服务器,建议 4H8G 且服务器位于境外,否则可能对互联有些影响……

(建议,推荐)提前准备好 PostgreSQL 数据库。

这里我们会说到两个域名,matrix.example.com 为实际的 Matrix 服务器地址,example.com 为显示的 Matrix 服务器地址。

广告位招租

通过 Docker Compose 部署 Synapse

Docker Compose 文件示例如下,你应该自行修改成符合自己要求的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3.3"

networks:
matrix-network:
external: true

services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "matrix_example_synapse"
restart: unless-stopped
ports:
- 8008:8008
volumes:
- "./data:/data"
environment:
VIRTUAL_HOST: "example.com"
VIRTUAL_PORT: 8008
SYNAPSE_SERVER_NAME: "example.com"
SYNAPSE_REPORT_STATS: "yes"
networks:
- matrix-network

然后,相同目录下,运行:

1
docker run -it --rm -v ./data/:/data/ -e SYNAPSE_SERVER_NAME=example.com -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate

接着,进入 ./data 目录,自行修改你需要的配置于 homeserver.yaml

这里说几个非常关键的点:

  • 如果实例部署在子域,但是实例标识符在主域,务必在配置文件中写入 public_baseurl: https://matrix.example.com/ 为你的实际域名
  • Synapse 对数据库有特殊的要求,请参照官方文档手动创建数据库。

部署 Cloudflare Workers 以实现联合发现

如果你把 Matrix 部署在了子域名下,但是标识符又是主域名,那么这一步非常关键

worker.js 文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const HOMESERVER_URL = "https://matrix.example.com";
const IDENTITY_SERVER_URL = "https://vector.im";
const FEDERATION_SERVER = "matrix.example.com:443";

export default {
async fetch(request) {
const path = new URL(request.url).pathname;
switch (path) {
case "/.well-known/matrix/client":
return new Response(
`{"m.homeserver": {"base_url": "${HOMESERVER_URL}"},"m.identity_server": {"base_url": "${IDENTITY_SERVER_URL}"}}`,
{
status: 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
},
}
);
case "/.well-known/matrix/server":
return new Response(`{"m.server": "${FEDERATION_SERVER}"}`, {
status: 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "application/json",
},
});
default:
return new Response("Invalid request", {
status: 400,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "text/plain",
},
});
}
},
};

部署到 Cloudflare 后,转到 设置 - 域和路由,添加路由为 example.com/.well-known/matrix/*

请确保你的主域名开启了 Cloudflare CDN,否则 Workers 不会生效!


通过 Docker 和 Clouflare Workers 搭建 Matrix Synapse 实例
https://blog.byteloid.one/2025/01/18/selfhost-matrix-server/
作者
bingxin666
发布于
2025年1月19日
许可协议