设置 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 匹配。

步骤:

  1. 编辑 homeserver.yaml 文件:打开 Matrix 服务器配置文件,通常是/home/user/web/domain/public_html/matrix-synapse/homeserver.yaml
  2. 设置 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"
  }
}

如果一切配置正确,就可以自动发现并连接到的服务器。

Matrix Federation Tester

启用 URL 预览 功能

URL 预览 功能允许客户端在发送消息时自动生成包含链接内容的预览(如标题、描述、图片等)。这增强了用户体验,使得聊天内容更加丰富和直观。

要在 Synapse 中启用 URL 预览,需要修改 homeserver.yaml 配置文件,进行以下设置:

url_preview_enabled: true

为了安全起见,必须指定 Synapse 在生成 URL 预览时不允许访问的 IP 范围。这防止了恶意用户利用 URL 预览功能来扫描或访问内部网络资源。

推荐的做法是将 回环地址(如 127.0.0.1)和 RFC1918 私有 IP 地址(如 10.0.0.0/8172.16.0.0/12192.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 服务

HestiaCP 安装 Coturn STUN/TURN 服务教程
Coturn 是一个开源的 TURN(Traversal Using Relays around NAT)服务器,主要用于网络中的 NAT 穿透,特别是在实时通讯(如 WebRTC)中,帮助客户端绕过 NAT(网络地址转换)和防火墙,建立点对点的连接。TURN 服务器通过中继数据流,确保即使在复杂的网络环境下,客户端也能顺利通信。 GitHub - coturn/coturn: coturn TURN server projectcoturn TURN server project. Contribute to coturn/coturn development by creating an account on GitHub.GitHubcoturn 安装 Coturn
  1. 安装 Coturn 服务
    首先,参考上面的教程,完成coturn 服务的安装。
  2. 生成 static-auth-secret
    为了提高安全性,您需要为 coturn 配置一个 静态认证密钥 (static-auth-secret)。生成 static-auth-secret 的一种方法是使用 pwgen 工具:pwgen -s 64 1
    该命令会生成一个 64 位的随机密钥。请记下生成的密钥,并在 coturn 配置文件中进行设置。
  3. 配置 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

HestiaCP 安装 MinIO 教程
在Hestiacp中新建网站,配置ssl,新建数据库的操作就不再赘述了。如果你是第一次看到hestiacp系列教程,请点击下方链接,就能看到完整的一系列教程了。 HestiaCP - HOSTEYEHOSTEYE由 FOXCOO 如果你想利用hestiacp的备份与恢复功能,那就将minio安装到网站目录下。这里将以此类情况演示。 安装 MinIO 服务器 这里新建用户不建议用minio 你可以使用minio-user 。 因为要利用hestiacp的备份与恢复功能,所以我们全部自定义安装。 然后进入网站目录/home/minio-user/web/xxx.com/public_html/ 使用以下命令下载最新的稳定 MinIO 二进制文件并将其安装到系统 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio 使用 systemd 守护进程 在 /etc/systemd/

推荐使用带有 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 存储。

Chevereto 图床迁移指南:将文件转移到 MinIO
在 Chevereto 4.2 版本之前,我一直使用 FTP 作为外置存储来管理图床文件,因为那时 Chevereto 并不支持 MinIO 的路径模式。 但随着 4.2 版本的更新,Chevereto 终于支持了 MinIO,这让我可以将存储迁移到更高效、更安全的云存储方案。本文将分享如何将原本存储在 FTP 上的图床文件迁移到 MinIO,并优化存储管理。 安装 MinIO HestiaCP 安装 MinIO 教程在Hestiacp中新建网站,配置ssl,新建数据库的操作就不再赘述了。如果你是第一次看到hestiacp系列教程,请点击下方链接,就能看到完整的一系列教程了。 HestiaCP - HOSTEYEHOSTEYE由 FOXCOO 如果你想利用hestiacp的备份与恢复功能,那就将minio安装到网站目录下。这里将以此类情况演示。 安装 MinIO 服务器 这里新建用户不建议用minio 你可以使用minio-user

当新文件或图片上传到Synapse服务器时,新的文件和图片会先存储在本地,再存储到远程 S3 存储。

你可以定时迁移并删除本地文件。

/home/user/web/domain/public_html/synapse_data/media_store/

包含的标签:

教程, HestiaCP, Docker

最后更新: December 17, 2024