1. 创建一个工作目录
1 | mkdir -p /var/matrix-synapse-data/ |
2. 生成 Synapse 配置文件
1 | docker run -it --rm -v /var/matrix-synapse-data/:/data/ -e SYNAPSE_SERVER_NAME=houkunlin.cn -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate |
-v /var/matrix-synapse-data/:/data/
映射的具体路径,按需修改-e SYNAPSE_SERVER_NAME=houkunlin.cn
域名,建议使用一级域名。如果要用二级域名对外提供服务,这里也填写一级域名,然后参照后面的双域名配置方式。-e SYNAPSE_REPORT_STATS=no
是否发送匿名统计数据
3. 安装运行
1 | docker run -d --name synapse -v /var/matrix-synapse-data/:/data/ -p 8008:8008 -p 8009:8009 -p 8448:8448 matrixdotorg/synapse:latest |
默认情况下,其他服务器将尝试通过端口 8448 访问我们的服务器,参见文档:https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html#serve_server_wellknown 如果使用了反向代理,则可以忽略 8448 端口的绑定
4. 创建用户
1 | docker exec -it synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -a -u 用户名 -p 密码 |
5. 安装管理面板
1 | docker run -d -p 12234:80 awesometechnologies/synapse-admin |
6. 配置 synapse
编辑 /var/matrix-synapse-data/homeserver.yaml
配置可注册:
1 | # 为新用户启用注册。 |
配置其他服务器与我们的服务器通信(更多详情可参考 Delegation of incoming federation traffic ):
1 | # 客户端用于访问此 Homeserver 的面向公众的基本 URL,这与用户可能在其客户端的“自定义主服务器 URL”字段中输入的 URL 相同。如果您将 Synapse 与反向代理一起使用,这应该是通过代理访问 Synapse 的 URL。 |
serve_server_wellknown: true
配置实际主要是为了访问 https://houkunlin.cn/.well-known/matrix/server
路径内容返回 {"m.server":"houkunlin.cn:443"}
格式的内容,告诉其他服务器我的通信地址和端口,请注意,这个端口是需要使用 HTPPS 协议通信的,也就是说如果填写了 HTTP 端口,则会出现与其他服务的通信问题。
public_baseurl: https://houkunlin.cn
配置是为了告诉客户端我们 synapse
服务的真实通信地址,客户端会访问 https://houkunlin.cn/.well-known/matrix/client
拿到 {"m.homeserver":{"base_url":"https://houkunlin.cn/"}}
服务器地址信息。
当只使用一级域名对外提供服务的时候,如上配置即可。如果要使用二级域名对外提供服务,请查阅后面的双域名配置方式。
配置访客匿名查看公开房间:
1 | # 允许用户在没有密码/电子邮件/等的情况下注册为访客,并参与此服务器上托管的房间,匿名用户可以访问这些房间。 |
更多的配置请查阅 官方文档
7. 反向代理(HTTP+HTTPS)
如果无法访问 https://houkunlin.cn/.well-known/matrix/client
地址,将直接向 https://houkunlin.cn
服务发起后续登录请求。
Element App 和 Element Web 版需要启用 HTTPS 功能,下面是 HTTP+HTTPS 合并配置:
1 | map $http_upgrade $connection_upgrade { |
下面提供一个 HTTP 的配置(删掉了HTTPS配置),在使用 cloudflare.com 来保护我们的网站的时候可以免掉 HTTPS 的配置,未经验证的判断:在与其他服务通信时(这里指的是默认的8448端口的功能)依旧需要在我们的服务器上设置 HTTPS 配置
1 | map $http_upgrade $connection_upgrade { |
8. 域名自定义配置(双域名)
原文: Delegation of incoming federation traffic
例如我有一个域名 houkunlin.cn
,但是我的 houkunlin.cn
需要用来做其他的网页服务,并不提供 matrix-synapse
服务,但是又想要让 matrix-synapse
的用户地址看起来像 @houkunlin:houkunlin.cn
这样的形式,那么需要对nginx做一些特殊的配置。
如果无法访问 https://houkunlin.cn/.well-known/matrix/client
地址,将直接向 https://houkunlin.cn
服务发起后续登录请求。
预期场景
主域名:houkunlin.cn
提供普通的网页服务
synapse服务域名:matrix.houkunlin.cn
提供 matrix-synapse
服务
用户地址样式:@houkunlin:houkunlin.cn
操作内容
1. 生成配置文件时指定主域名(houkunlin.cn)
1 | docker run -it --rm -v /var/matrix-synapse-data/:/data/ -e SYNAPSE_SERVER_NAME=houkunlin.cn -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate |
2. 配置nginx:主域名(houkunlin.cn)
- 拦截
/.well-known/matrix/server
路径请求:与其他服务器通信时必须的参数,告诉其他服务器我们的地址和端口 - 拦截
/.well-known/matrix/client
路径请求:告诉客户端我们matrix-synapse
服务的实际访问地址
1 | server { |
/.well-known/matrix/server
返回的JSON中的服务地址必须指向 matrix.houkunlin.cn:443
,请注意,这个端口是需要使用HTTPS协议进行通信的,如果返回了HTTP协议端口,在与其他服务器通信时会出现通信问题
/.well-known/matrix/client
返回的JSON中的服务地址必须指向 https://matrix.houkunlin.cn/
3. 配置nginx:synapse服务域名(matrix.houkunlin.cn)
与前面的 【7. 反向代理(HTTP+HTTPS)】 基本保持一致,但需要设置 server_name
。
1 | server { |
这里已经不用关心 http://matrix.houkunlin.cn/.well-known/matrix/server
和 http://matrix.houkunlin.cn/.well-known/matrix/client
这两个地址的内容了,因为我们对外的域名是 https://houkunlin.cn
,只会访问 https://houkunlin.cn/.well-known/
下的内容。
【未经验证的判断】:> 也就是不需要配置 /var/matrix-synapse-data/homeserver.yaml
的 public_baseurl
和 serve_server_wellknown
内容。
4. 修改 synapse
配置(未经验证下方的配置是否是必须的)
编辑 /var/matrix-synapse-data/homeserver.yaml
指定 public_baseurl
服务地址
1 | # 客户端用于访问此 Homeserver 的面向公众的基本 URL,这与用户可能在其客户端的“自定义主服务器 URL”字段中输入的 URL 相同。如果您将 Synapse 与反向代理一起使用,这应该是通过代理访问 Synapse 的 URL。 |
OK,重启nginx和synapse就大功告成了!
9. 完整的所有配置文件内容(双域名)
域名:houkunlin.cn
和 matrix.houkunlin.cn
路径:/var/matrix-synapse-data/
和 /var/www/element/
(WEB客户端) 和 /var/www/
(主域名的普通网站服务)
synapse 配置文件
1 | server_name: "houkunlin.cn" |
nginx: houkunlin.cn 配置文件
1 | map $http_upgrade $connection_upgrade { |
nginx: matrix.houkunlin.cn 配置文件
1 | map $http_upgrade $connection_upgrade { |
10. 完整的所有配置文件内容(单域名)
域名:houkunlin.cn
路径:/var/matrix-synapse-data/
和 /var/www/element/
(WEB客户端)
synapse 配置文件
1 | server_name: "houkunlin.cn" |
nginx: houkunlin.cn 配置文件
1 | map $http_upgrade $connection_upgrade { |