Matrix 家庭聊天室

萌森
萌森
发布于 2024-10-31 / 116 阅读
0
1

Matrix 家庭聊天室

Matrix 是一个开放的联邦式的用 于即时通信( IM )、 IP 语音( VoIP )和物联网 ( IoT )的开放 API。

Matrix 的工作方式有点像电子邮件,但更即时、更安全:

  • 您需要在服务提供商处注册一个账户

  • 无论你的服务提供商是谁,你都可以与其他服务提供商的用户进行交流

  • 同样,您可以使用 Outlook 或 Thunderbird 访问同一个邮箱账户,您也可以使用不同的 Matrix 应用程序访问同一个 Matrix 账户。

概念

中心服务器

一个 homeserver 是一个托管 Matrix 用户账户的软件。它绑定到一个单一的域名,该域名在时间上不能改变。服务器上的账户有一个标识符,由本地部分(用户名)和服务器部分组成,后者是 homeserver 的(虚拟)域名。
一个典型的标识符会是这样的:

@username:example.com

客户端

服务器之间通过服务器-服务器/联邦 API 进行通信,但它们也与客户端以标准方式进行通信:客户端-服务器 API。

客户端是能够使用 Matrix 账户从特定 homeserver 接收和发送事件的软件组件。客户端本身仅与它们所使用的账户的 homeserver 进行通信。如果客户端使用 @alice:example.com 账户,它们将只与 example.com 进行通信。

最常见类型的客户端是面向用户的。在即时通讯的情况下,这些客户端将聊天室显示为消息的时间线,用户加入、离开、撤回消息

应用服务

许多 Matrix机器人 是非人类客户端。它们可以使用与常规客户端相同的 SDK 进行构建,而不是显示 UI 来展示正在发生的事情,它们将监听事件、解析它们,例如发送自动回复。

简单与高级机器人

一个简单的机器人示例可以是 RSS 机器人:它会订阅完全位于 Matrix 之外的 RSS 源,每当它看到源中新的条目时,就会在特定的 Matrix 房间中发布一条消息,消息中包含条目的名称。
这样的机器人不过是一个非常有限且专业的客户端。

但有时你需要获得一个更全面的视角,了解你的家庭服务器上正在发生的事情,以便采取行动。
如果您想编写一个反垃圾邮件模块,例如,您需要能够读取公共房间中的每一条消息,以检测模式并触发警报或直接采取行动。

要在机器人中实现这一功能,您需要将机器人邀请到每个需要进行监控的房间中。应用服务能够监控其命名空间内所有未加密的事件(发送/编辑/撤回的消息,人员加入或离开房间)。

桥接器

有时,你需要做的不仅仅是成为一双无所不见的眼睛:你还需要能够自动创建用户和房间。一个典型的用例是桥接。桥接器允许你将 Matrix 社区连接到第三方平台,例如 IRC、Discord 或 Slack。这些社区的用户在 Matrix 上看起来像是原生用户,理想情况下,在第三方平台上也是如此。

  • Matrix端通过网关创建的,用以模拟第三方平台用户的用户名为 ghosts

  • 第三方平台通过网关创建的模拟 Matrix 用户的用户名为 puppets

为了实现这一点,该桥接器需要能够在 Matrix 上创建和冒充用户,以及控制房间。为了限制滥用风险,桥接器可以限制在控制一个命名空间。

自建服务

虽然 matrix.org 免费提供服务,但是由于地区限制,您的网络可能无法访问该节点。

前置准备

条件不是必须的,如果您不需要公网访问的情况下。

Linux 也不是绝对的,Nas系统,1Panel 面板,均可。

如果您使用 Windows 可以参考 WSL2 的部署安装

  • 域名 x1

  • Linux 服务器 x1

  • 网络可连接 Docker Hub

安装 1Panel

请参考 Docker 应用商店 - 1Panel 版本 的安装

通过 Docker-Compose 安装

可参考配置文件

服务端

https://github.com/QYG2297248353/appstore-1panel/tree/custom/apps/synapse

服务端 - 用户管理

https://github.com/QYG2297248353/appstore-1panel/tree/custom/apps/synapse-admin

客户端 - 网页版

https://github.com/QYG2297248353/appstore-1panel/tree/custom/apps/element-web

通过 1Panel 安装

完成 第三方应用商店 安装后,即可即可进行下一步。

安装服务端

请重点记住 持久化目录,修改配置需要在此目录下进行。

查看配置文件

通过 主机 >> 文件 >> 查看持久化目录

查看以下配置文件是否存在

  • homeserver.yaml 服务端配置文件

  • {域名}.signing.key 签名文件

  • {域名}.log.config 日志配置文件

这些是服务端运行的基础配置文件,缺一不可,将无法启动。

修改配置

修改 homeserver.yaml 配置,不存在的配置追加到末尾即可

开启注册功能
enable_registration: true

【可选】 开启邮箱验证

开启此配置,需要配置电子邮件功能

registrations_require_3pid:
  - email
allowed_local_3pids:
  - medium: email
    pattern: '^[^@]+@qq\.com$'
  - medium: email
    pattern: '^[^@]+@163\.com$'
  - medium: email
    pattern: '^[^@]+@126\.com$'
  • registrations_require_3pid 其他支持

    • email 邮箱

    • msisdn 手机号

  • allowed_local_3pids 【可选】限定验证类型

    • medium 验证类型,匹配 registrations_require_3pid

    • pattern 验证正则规则

【可选】电子邮件配置
email:
  smtp_host: mail.server  # SMTP 服务器地址
  smtp_port: 587  # SMTP 端口
  smtp_user: "exampleusername"  # SMTP 用户名
  smtp_pass: "examplepassword"  # SMTP 密码
  force_tls: true  # 是否强制使用 TLS
  require_transport_security: true  # 是否需要传输安全
  enable_tls: false  # 是否启用 TLS
  notif_from: "您的朋友 %(app)s 即时通讯服务器 <noreply@example.com>"  # 通知邮件的发件人
  app_name: my_branded_matrix_server  # 应用程序名称
  enable_notifs: true  # 是否启用通知
  notif_for_new_users: false  # 是否为新用户启用通知
  client_base_url: "http://localhost/riot"  # 客户端基础 URL
  validation_token_lifetime: 15m  # 验证令牌有效期
  invite_client_location: https://app.element.io  # 邀请链接客户端位置

  subjects:
    message_from_person_in_room: "[%(app)s] 您收到了来自 %(person)s 在 %(room)s 房间的消息..."  # 来自房间中某人的消息通知
    message_from_person: "[%(app)s] 您收到了来自 %(person)s 的消息..."  # 来自某人的消息通知
    messages_from_person: "[%(app)s] 您收到了来自 %(person)s 的多条消息..."  # 来自某人的多条消息通知
    messages_in_room: "[%(app)s] 您在 %(room)s 房间中有新消息..."  # 房间中的新消息通知
    messages_in_room_and_others: "[%(app)s] 您在 %(room)s 房间及其他房间中有新消息..."  # 房间及其他房间中的新消息通知
    messages_from_person_and_others: "[%(app)s] 您收到了来自 %(person)s 和其他人的消息..."  # 来自某人和其他人的消息通知
    invite_from_person_to_room: "[%(app)s] %(person)s 邀请您加入 %(room)s 房间..."  # 来自某人的房间邀请通知
    invite_from_person: "[%(app)s] %(person)s 邀请您聊天..."  # 来自某人的聊天邀请通知
    password_reset: "[%(server_name)s] 密码重置"  # 密码重置通知
    email_validation: "[%(server_name)s] 验证您的邮箱"  # 邮箱验证通知

【可选】管理员联系方式

admin_contact: 'mailto:admin@server.com'

【可选】网页客户端重定向

web_client_location: https://riot.example.com/
数据库配置

默认采用 SQLite 存储数据

database:
  name: sqlite3
  args:
    database: /path/to/homeserver.db

我们推荐您使用 PostgreSQL 作为数据引擎

database:
  name: psycopg2
  txn_limit: 10000
  # allow_unsafe_locale: true
  args:
    user: synapse_user
    password: synapse_password
    dbname: synapse
    host: localhost
    port: 5432
    cp_min: 5
    cp_max: 10
  • 将 sqlite3 配置进行覆盖

  • 修改配置

    • user:synapse_user 连接 用户名

    • password:synapse_password 连接 密码

    • dbname:synapse 数据库 名称

    • host:localhost 数据库 主机地址

    • port:5432 数据库 端口

  • allow_unsafe_locale

    • 如果postgres db设置为非C语言环境,Synapse将拒绝启动。

    • 如果您发现您的服务无法启动,可以尝试取消注释此配置

绑定服务域名

例如,我们准备的域名为:matrix.example.com

请将该域名的 DNS 解析指向服务器地址。

访问域名,看到 running 说明服务端部署完成

创建管理员账户

<> 修改为对应参数

# 创建管理员账户
register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u <adminName> -p <password> -a

# 创建普通用户
register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u <userName> -p <password>

# 查看命令帮助
register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml --help

# 创建管理员示例
register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u root -p admin@root -a

至此服务端主体工作就已完成。

安装 服务端后台

可视化管理,注册账户,聊天房间。

安装 网页客户端

完成安装

浏览器不支持

如果您遇到此问题,请升级您的浏览器。

Element 仅支持最后版本的 Chrome、Edge、Firefox、Safari

修改配置

官方推荐配置

{
    "default_server_name": "matrix.org",
    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://matrix-client.matrix.org"
        },
        "m.identity_server": {
            "base_url": "https://vector.im"
        }
    },
    "brand": "Element",
    "integrations_ui_url": "https://scalar.vector.im/",
    "integrations_rest_url": "https://scalar.vector.im/api",
    "integrations_widgets_urls": [
        "https://scalar.vector.im/_matrix/integrations/v1",
        "https://scalar.vector.im/api",
        "https://scalar-staging.vector.im/_matrix/integrations/v1",
        "https://scalar-staging.vector.im/api",
        "https://scalar-staging.riot.im/scalar/api"
    ],
    "bug_report_endpoint_url": "https://element.io/bugreports/submit",
    "uisi_autorageshake_app": "element-auto-uisi",
    "show_labs_settings": false,
    "room_directory": {
        "servers": ["matrix.org", "gitter.im"]
    },
    "enable_presence_by_hs_url": {
        "https://matrix.org": false,
        "https://matrix-client.matrix.org": false
    },
    "terms_and_conditions_links": [
        {
            "url": "https://element.io/privacy",
            "text": "Privacy Policy"
        },
        {
            "url": "https://element.io/cookie-policy",
            "text": "Cookie Policy"
        }
    ],
    "posthog": {
        "project_api_key": "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
        "api_host": "https://posthog.element.io"
    },
    "privacy_policy_url": "https://element.io/cookie-policy",
    "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx",
    "setting_defaults": {
        "RustCrypto.staged_rollout_percent": 60
    },
    "features": {
        "feature_video_rooms": true,
        "feature_group_calls": true,
        "feature_element_call_video_rooms": true
    },
    "element_call": {
        "url": "https://call.element.io"
    }
}
  • 配置修改

    • default_server_name 修改为服务端地址

      • 示例:matrix.example.com

    • default_server_config 修改默认访问配置

      • m.homeserver 服务认证地址

        • base_url 修改为 服务端地址并携带协议

        • 示例:https://matrix.example.com

      • m.identity_server 身份服务认证地址

        • base_url 修改为 服务端地址并携带协议

        • 示例:https://matrix.example.com

    • brand 网页显示标题

      • 示例:聊天室

  • 其他可修改配置

{
    "room_directory": {
        "servers": [
            "matrix.example.com",
            "matrix.org"
        ]
    },
    "enable_presence_by_hs_url": {
        "https://matrix.example.com": false,
        "https://matrix.org": false,
        "https://matrix-client.matrix.org": false
    }
}

开始享受

客户端支持

移动客户端

Download on the App Store

Get it on Google Play

Get it on F-Droid

桌面客户端

Linux

sudo apt install -y wget apt-transport-https
‍
sudo wget -O /usr/share/keyrings/element-io-archive-keyring.gpg https://packages.element.io/debian/element-io-archive-keyring.gpg
‍
echo "deb [signed-by=/usr/share/keyrings/element-io-archive-keyring.gpg] https://packages.element.io/debian/ default main" | sudo tee /etc/apt/sources.list.d/element-io.list

sudo apt update

sudo apt install element-desktop

服务支持

如需远程部署安装,可通过以下服务下单。

该商城支持开票服务,如需开票,请在下单后联系客服说明情况。

PC 端

https://store.lifebus.top/

手机端

联图二维码.png


评论