这篇文章主要是为了记录搭建 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 不会生效!