设置 Well-Known URI
要设置客户端的 Well-Known URI,需要确保在服务器上正确配置相应的 .well-known/matrix/client
路径,并返回符合要求的 JSON 响应。
此外,还需要确保在 Nginx 配置文件中设置适当的 CORS 头,以便基于浏览器的客户端可以访问该文件。
1. 配置 Nginx 来返回 JSON 响应
首先,需要确保 Nginx 正确地处理 .well-known/matrix/client
请求,并返回一个包含您家庭服务器(homeserver)URL 的 JSON 响应。如果您的身份服务器也需要暴露,您可以在此 JSON 响应中包含它。
编辑 Nginx 配置文件,添加以下配置:
location /.well-known/matrix/client {
return 200 '{"m.homeserver": {"base_url": "https://<matrix.example.com>"}}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
- 请替换
https://<matrix.example.com>
为 Matrix 服务器的实际 URL。
这将使 Nginx 在收到 .well-known/matrix/client
请求时,返回一个包含家庭服务器信息的 JSON 响应。
如果还需要包含身份服务器的信息,可以扩展 JSON 内容,例如:
location /.well-known/matrix/client {
return 200 '{
"m.homeserver": {
"base_url": "https://<matrix.example.com>"
},
"m.identity_server": {
"base_url": "https://<identity.example.com>"
}
}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
同样,替换为实际 URL。
还要设置一个告诉其他家庭服务器他们在哪里可以找到您的服务器的Delegation
location /.well-known/matrix/server {
return 200 '{"m.server": "xxxxx.com:443"}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
同样,替换为实际 URL。
2. 设置 Homeserver 配置(homeserver.yaml)
接下来,确保 homeserver.yaml 配置文件中的 public_baseurl
参数设置正确。这个 URL 是客户端将用来连接到您的服务器的公共 URL。它应该与在上面设置的 base_url
匹配。
步骤:
- 编辑 homeserver.yaml 文件:打开 Matrix 服务器配置文件,通常是
/home/user/web/domain/public_html/matrix-synapse/homeserver.yaml
- 设置 public_baseurl: 找到
public_baseurl
配置项,并将其设置为您的服务器 URL(包括 HTTPS 和域名)。
public_baseurl: "https://<matrix.example.com>"
请确保这个 URL 与在 .well-known/matrix/client
配置中使用的 URL 匹配。
3. 重启 Nginx 和 Matrix 服务器
完成上述配置后,需要重启 Nginx 和 Matrix 服务器以使更改生效。
4. 测试配置
完成所有设置后,可以通过访问以下 URL 来测试配置是否正确:https://<matrix.example.com>/.well-known/matrix/client
它应该返回一个 JSON 响应,类似于:
{
"m.homeserver": {
"base_url": "https://matrix.example.com"
},
"m.identity_server": {
"base_url": "https://identity.example.com"
}
}
如果一切配置正确,就可以自动发现并连接到的服务器。
启用 URL 预览 功能
URL 预览 功能允许客户端在发送消息时自动生成包含链接内容的预览(如标题、描述、图片等)。这增强了用户体验,使得聊天内容更加丰富和直观。
要在 Synapse 中启用 URL 预览,需要修改 homeserver.yaml
配置文件,进行以下设置:
url_preview_enabled: true
为了安全起见,必须指定 Synapse 在生成 URL 预览时不允许访问的 IP 范围。这防止了恶意用户利用 URL 预览功能来扫描或访问内部网络资源。
推荐的做法是将 回环地址(如 127.0.0.1
)和 RFC1918 私有 IP 地址(如 10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
)加入黑名单。
在 homeserver.yaml
中添加或修改 url_preview_ip_range_blacklist
参数:
url_preview_ip_range_blacklist:
- "127.0.0.1/32" # 回环地址
- "10.0.0.0/8" # 私有网络
- "172.16.0.0/12" # 私有网络
- "192.168.0.0/16" # 私有网络
设置 TURN 服务器开启语音视频通话
部署 Coturn 服务
- 安装 Coturn 服务
首先,参考上面的教程,完成coturn 服务的安装。 - 生成
static-auth-secret
为了提高安全性,您需要为 coturn 配置一个 静态认证密钥 (static-auth-secret
)。生成 static-auth-secret 的一种方法是使用pwgen
工具:pwgen -s 64 1
该命令会生成一个 64 位的随机密钥。请记下生成的密钥,并在 coturn 配置文件中进行设置。 - 配置
static-auth-secret
打开 coturn 配置文件 (turnserver.conf
),并添加以下行,替换为生成的密钥:
static-auth-secret=[your secret key here]
配置 Coturn 安全性
为了保护您的 TURN 服务器并避免滥用,建议您做出以下安全配置:
# VoIP 流量通常是通过 UDP 传输的,因此没有必要让用户通过 TURN 中继连接到任意的 TCP 端口。
no-tcp-relay
# 禁止连接到 私有 IP 地址 范围,以确保 TURN 服务器不会尝试连接到您网络中的内部地址。
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
# 阻止对一些特殊地址的连接,这些地址常用于内部网络或保留地址,以减少外部访问到内部服务的风险。
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
# 为了确保 TURN -> TURN -> 客户端 流程能够正常工作,需要允许 TURN 服务器自身 作为对等地址。
allowed-peer-ip=10.0.0.1
# 为了防止 DoS 攻击,可以限制每个用户和总的流量配额:
user-quota=12 # 每个用户最多12个流,假设一个视频通话需要4个流,这样每个用户最多支持3个同时通话
total-quota=1200 # 总共最多1200个流
修改完配置后,保存文件并重启 coturn 服务。
配置 Synapse 集成 Coturn
在 Synapse 配置文件中,需要添加 TURN 服务器 的相关配置,以便 Synapse 使用 coturn 提供的中继服务。
turn_uris:
- "turn:xxxx.com?transport=udp"
- "turn:xxxx.com?transport=tcp"
turn_shared_secret: "xxxxxxxxxxxxx" # 这里的密钥与 coturn 配置中的 static-auth-secret 一致
turn_user_lifetime: 86400000 # TURN 用户的生命周期,单位为毫秒(1天)
turn_allow_guests: true # 允许访客使用 TURN 服务
配置完成后,需要重启 Synapse 服务使其生效。
配置 S3 存储
首先你可以参考这个搭建一个 MinIO
推荐使用带有 S3 插件的 Docker 镜像:dotwee/matrix-synapse-s3。
在 Synapse 配置文件 homeserver.yaml
中,填入 MinIO 的相关信息,确保配置正确。
media_storage_providers:
- module: s3_storage_provider.S3StorageProviderBackend
store_local: True #是否存储新上传的本地文件
store_remote: True #是否存储新下载的本地文件
store_synchronous: True #是否等待本地上传的成功存储
config:
bucket: synapse # S3 存储桶的名称
# 以下选项是可选的,可用于与非 AWS 的 S3 服务兼容,或者用于指定访问令牌,而不是外部方法。
region_name: hz-de-fsn-1 # S3 存储桶所在的区域
endpoint_url: xxxxxxxx # 如果使用的是非 AWS 的 S3 类服务,可以指定该 S3 兼容服务的端点 URL
access_key_id: xxxxxxxxxx # S3 访问密钥 ID
secret_access_key: xxxxxxxxxxxxx # S3 秘密访问密钥
# session_token: <S3_SESSION_TOKEN> # S3 会话令牌(如果需要的话,通常用于临时凭证)
# 客户提供的密钥的服务器端加密
#sse_customer_key: <S3_SSEC_KEY> # 用于加密对象的 SSE-C 密钥(如果使用)
# 默认算法通常是 AES256,除非您指定了其他算法
#sse_customer_algo: <S3_SSEC_ALGO> # 服务器端加密算法,默认是 AES256。
# 上传文件到 S3 存储桶时使用的存储类别。
# 默认是 STANDARD。
#storage_class: "STANDARD_IA" # 存储类别(例如 "STANDARD_IA" 表示低频访问存储)
# 上传到桶中的所有媒体文件的前缀,在文件上传后不能更改。
# 如果多个 Synapse 共享同一个存储桶,这个选项会非常有用
# 如果不需要前缀,留空即可
#prefix: "prefix/to/files/in/bucket" # 文件存储的前缀路径
# 用于连接 S3 的最大并发线程数。每个线程管理一个连接。默认是 40。
# 你可以根据需求调整线程池大小以优化性能。
#threadpool_size: 20 # 线程池的大小,默认是 40
然后可以参考这里的内容,使用 MinIO 的 mc
工具将本地文件迁移到 MinIO 存储。
当新文件或图片上传到Synapse服务器时,新的文件和图片会先存储在本地,再存储到远程 S3 存储。
你可以定时迁移并删除本地文件。
/home/user/web/domain/public_html/synapse_data/media_store/