【Docker】部署去中心化聊天室

一、项目介绍

需要搭建 Matrix 服务和 Element Web端应用

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

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

Matrix 官方网站:https://matrix.org/
Matrix GitHub 官方仓库:https://github.com/matrix-org/synapse
Element 官方网站:https://element.io/
Element 自建 GitHub 地址:https://github.com/vector-im/element-web

二、安装步骤

1、绑定域名

需要分别为 MatrixElement 绑定域名,各添加一条A记录

image-20231216103439701

2、添加反向代理

使用 Nginx Proxy Manager 添加反向代理,我分别使用8008和8009端口,注意开放相应防火墙

image-20231216104143585

image-20231216104035864

可以再设置一下SSL

image-20231216104305597

3、部署服务

创建目录

1
2
3
mkdir -p /root/docker_data/matrix

cd /root/docker_data/matrix

拉取并运行镜像,注意修改 SYNAPSE_SERVER_NAME 为自己刚才设置的matrix需绑定的域名

1
2
3
4
5
sudo docker run -it --rm \
-v /root/docker_data/matrix/data:/data \
-e SYNAPSE_SERVER_NAME=matrix.shiguangdev.eu.org \
-e SYNAPSE_REPORT_STATS=yes \
matrixdotorg/synapse:latest generate

修改 homeserver.yaml 文件

1
2
3
cd /root/docker_data/matrix/data

vim homeserver.yaml

在最底部添加以下内容,打开注册功能以及跳过注册验证

1
2
enable_registration: true
enable_registration_without_verification: true

如图所示

image-20231216111207502

创建 docker-compose.yml 文件

1
2
cd /root/docker_data/matrix
vim docker-compose.yml

粘贴以下内容,注意将 VIRTUAL_HOSTLETSENCRYPT_HOSTSYNAPSE_SERVER_NAME 替换为自己的域名

如端口需调整,注意修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: "3.3"

services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "matrix_synapse"
restart: unless-stopped
ports:
- 8008:8008
volumes:
- "./data:/data" # it will look at the current directory where you save the file and look for the data folder inside
environment:
VIRTUAL_HOST: "matrix.shiguangdev.eu.org"
VIRTUAL_PORT: 8008
LETSENCRYPT_HOST: "matrix.shiguangdev.eu.org"
SYNAPSE_SERVER_NAME: "matrix.shiguangdev.eu.org"
SYNAPSE_REPORT_STATS: "yes"
element-web:
ports:
- '8009:80'
#volumes:
# - '/etc/element-web/config.json:/app/config.json'
image: vectorim/element-web
restart: unless-stopped

执行 docker-compose up -d

通过 ip+端口 或者域名即可访问

Matrix服务

image-20231216111940434

Element

image-20231216112511645

若出现以下错误,需用域名访问,并且使用https的方式访问,反向代理时,SSL可勾选 Force SSL 强制https访问

image-20231216115239099

4、注册账号与使用

4.1 注册账号

可以调整语言为简体中文

image-20231216113640915

创建账户 => 编辑 => 使用自己搭建的Matrix服务

image-20231216113802377

设置用户名及密码

image-20231216113954180

这个界面可以跳过

image-20231216114256868

至此账号已经创建完成

image-20231216114342244

点击头像可以查看账户地址

image-20231216120215840

或者在所有设置 => 通用 => 个人资料查看

image-20231216120419789

4.2 日常对话

新创建跟个账户模拟聊天,输入对方账户地址,前往

image-20231216120549415

模拟向对方发送一条消息

image-20231216120646646

对方会收到邀请通知

image-20231216120805384

对方可以接受聊天或者拒绝

image-20231216120846117

回复一条消息

image-20231216120958779

你接收到的消息

image-20231216121114678

4.3 房间及视频通话

可以创建房间,类似群的功能

image-20231216121439987

如果需要视频通话,可以在设置 => 实验室 => 加入beta

image-20231216121623465

加入beta 后就可以创建视频房间了

image-20231216121807060

模拟创建一个视频房间

image-20231216122131578

要求成员加入,被要求人也需加入beta

image-20231216122125001

被邀请人加入beta后可接受要求

image-20231216122205067

开启视频和麦克风权限后就能开启视频通话了

image-20231216122342282

5、更新服务

1
2
3
4
5
6
7
8
9
10
11
cd /root/docker_data/matrix

docker-compose pull


# 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止
# docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,可以节省一些时间
docker-compose up -d

# prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
docker image prune

6、卸载服务

1
2
3
4
5
6
7
cd /root/docker_data/matrix

docker-compose down

cd ..

rm -rf /root/docker_data/matrix # 完全删除

参考文章

https://blog.laoda.de/archives/docker-compose-install-matrix-element/