Docker推荐 · 自己的去中心化聊天室——Matrix

概述

Matrix:

  • Matrix是一个开放的通信协议,用于实时通信,包括即时消息、音频和视频通话。
  • 它是去中心化的,这意味着任何人都可以设置自己的 Matrix 服务器,并与其他 Matrix 服务器通信。
  • Matrix 的目标是为所有不同的通信服务提供一个统一的标准,使得不同的服务可以互相通信。

每个 Homeserver 有自己的域名,每个 Matrix 用户属于一个 Homeserver,因此有一个唯一的 ID @user:xxx.com ,不同的 Homeserver 之间可以互相沟通信息,使得所有用户之间可以互相交流。 Matrix 没有区分私聊和群聊,所有聊天都是在聊天室 Room 中进行的,私聊就是只有两个人的聊天室。 Room 也是属于某个 Server #room:xxx.com 的,不过 Homeserver 负责维护所有所属 User 所在的 Room,也要从别的 Homeserver 同步 Room 的信息过来。

Element:

  • Element是基于 Matrix 协议的一个客户端应用。
  • 它允许用户通过 Matrix 协议进行即时消息、音频和视频通话。
  • Element 有多个版本,包括 Web、桌面和移动应用。
  • 它是 Matrix 生态系统中最流行的客户端之一。

除了自建Matrix以外,你也可以从这里选择一个公共服务器加入以开始你的聊天之旅。

我的聊天室 服务器地址:https://matrix.yisrime.xyz/

部署

首先创建安装目录,运行如下命令,注意www.example.com改成自己的域名:

docker run -it --rm 
-v /root/Matrix/:/data -e SYNAPSE_SERVER_NAME=www.example.com -e SYNAPSE_REPORT_STATS=yes matrixdotorg/synapse:latest generate

然后编辑homeserver.yaml,参照官方文档配置以下的各种参数:

注意:少量用户的情况下可以使用内置的SQlite作为数据库,如果用户较多,还是建议使用PostgreSQL作为数据库。

# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "www.example.com"
pid_file: /data/homeserver.pid
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    resources:
      - names: [client, federation]
        compress: true
database:
  name: sqlite3
  args:
    database: /data/homeserver.db
log_config: "/data/www.example.com.log.config"
media_store_path: /data/media_store
registration_shared_secret: "自动生成"
report_stats: false
macaroon_secret_key: "自动生成"
form_secret: "自动生成"
signing_key_path: "/data/www.example.com.signing.key"
suppress_key_server_warning: true
trusted_key_servers:
  - server_name: "matrix.org"
  - server_name: "example.com"

tls_certificate_path: "/data/acme.pem"
tls_private_key_path: "/data/acme.key"

# vim:ft=yaml

编辑完成后,然后继续运行如下命令部署Matrix

docker run -it --name=synapse --restart=unless-stopped -v /root/Matrix/:/data --net=host -e VIRTUAL_HOST=www.example.com -e VIRTUAL_PORT=8088 -e LETSENCRYPT_HOST=www.example.com  -e SYNAPSE_SERVER_NAME=www.example.com -e SYNAPSE_REPORT_STATS=yes matrixdotorg/synapse:latest  //需使用Ctrl+C终止进程
docker start synapse

注意:VIRTUAL_HOST LETSENCRYPT_HOST SYNAPSE_SERVER_NAME需要完全一致

运行命令后,即可部署完成,通信端口为8088,数据存放在/root/Matrix/中,可根据需要自行修改。

运行如下命令部署Element

docker run -it --name=element --restart=unless-stopped -p 8009:80 vectorim/element-web
docker start element

添加Nginx反向代理

配置模板如下,可根据需要自行修改,也可查看官方文档

注意:

  • Matrix不能使用自签名证书
  • Element必须进行加密
  • Matrix和Element都需要进行反向代理
server {  
    listen 443 ssl;
	http2 on;
    server_name www.example.com;

    ssl_certificate     /etc/nginx/cert/acme.pem;
    ssl_certificate_key /etc/nginx/cert/acme.key;

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;

    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA;
    ssl_prefer_server_ciphers off;

    location / {
        proxy_set_header    Upgrade            $http_upgrade;
        proxy_set_header    Connection         $connection_upgrade;
        proxy_set_header    Host               $host:$server_port;
        proxy_set_header    X-Real-IP          $remote_addr;
        proxy_set_header    X-Scheme           $scheme;
        proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_pass http://0.0.0.0:8000;
    }
}
server {
    listen 80;
    server_name www.example.com;
    return 301 https://$host$request_uri; 
}

与其它服务器进行通信

如果想要你的服务器上的用户能与其它服务器上的用户相互通信,则需要对链接进行加密。可以在Matrix Federation Tester测试你的服务器是否能与其他服务器通信。如果没有错误,那么恭喜您,一切已经就绪。

在Synapse的配置中,server_name变量决定了用户ID后面的域名,就像电子邮件地址@符号后面的域名一样。假设我们要搭建的服务器名server_name=my-example.com,那么服务器上的一个叫做user用户名,其完整的用户名就是@user:my-example.com。默认情况下,Matrix Federation里的其他服务器,会通过server_name:8443来连接我们的服务器。

如果您打算使用 Synapse 服务器的实际域名(即 Traefik 路由中的Host(`my-example.com`)内部域名),与用户名后缀(即server_name)部署是一致的,而且也开放了8443端口,那么可以跳过本节,直接开始服务。但要注意下面所有代码中的my-example.comchat.my-example.com域名,全部替换成自己的同一个域名,即前面我所提到的保证VIRTUAL_HOST LETSENCRYPT_HOST SYNAPSE_SERVER_NAME完全一致。

版权声明:此篇文章《Docker推荐 · 自己的去中心化聊天室——Matrix》作者:湙凇。未经许可严禁转载,转载与引用请首先注明作者(湙凇)、出处(https://blog.yisrime.xyz/02/06/docker%e6%8e%a8%e8%8d%90-%c2%b7-%e8%87%aa%e5%b7%b1%e7%9a%84%e5%8e%bb%e4%b8%ad%e5%bf%83%e5%8c%96%e8%81%8a%e5%a4%a9%e5%ae%a4-matrix.html)以及此段内容。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇

版权所有 严禁复制