Dendrite原仓库已归档,已转移至新仓库,请注意辨别!
Matrix聊天服务器有多种实现方法,例如Synapse、Dendrite等(Matrix.org - Servers),Dendrite理论上要优于Synapse,但是由于有关Dendrite的内容在网上是少之又少,所以写篇文章记录一下Dendrite搭建过程
Dendrite的搭建方法其实非常简单,几乎可以一键安装Dendrite和Postgresql只是官方文档写的有点太简单了
本文章将介绍使用Docker搭建Dendrite-Matrix聊天服务器
Matrix官网:Matrix.org
Dendrite官方文档:Installation | Dendrite (matrix-org.github.io)
文件结构规划
预计将Dendrite根目录放在/root/dendrite
,所以现在/root
下新建一个dendrite
文件夹:
mkdir -p ./dendrite
然后进入目录/dendrite
:
cd dendrite
然后创建目录/config
:
mkdir -p ./config
完成文件夹创建,结构应当为:
- root
- dendrite
- config
- dendrite.yaml
- matrix_key.pem
- docker-compose.yml
- config
- dendrite
准备工作
生成私钥
首先,我们将生成私钥(matrix_key.pem
),用于对事件进行签名
注意:这只需要执行一次,否则会覆盖密钥
docker run --rm --entrypoint="/usr/bin/generate-keys" \
-v $(pwd)/config:/mnt \
matrixdotorg/dendrite-monolith:latest \
-private-key /mnt/matrix_key.pem
下载docker-compose文件
前往下载官方提供的docker-compose.yml
文件(dendrite/build/docker/docker-compose.yml at main · matrix-org/dendrite · GitHub)
修改docker-compose.yml
文件,至少需要修改以下内容:
POSTGRES_PASSWORD
:修改为需要设置的数据库密码
以下为docker-compose.yml
的示例:
version: "3.4"
services:
postgres:
hostname: postgres
image: postgres:15-alpine
restart: always
volumes:
# This will create a docker volume to persist the database files in.
# If you prefer those files to be outside of docker, you'll need to change this.
- dendrite_postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: passwd
POSTGRES_USER: dendrite
POSTGRES_DATABASE: dendrite
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dendrite"]
interval: 5s
timeout: 5s
retries: 5
networks:
- internal
monolith:
hostname: monolith
image: matrixdotorg/dendrite-monolith:latest
ports:
- 8008:8008
- 8448:8448
volumes:
- ./config:/etc/dendrite
# The following volumes use docker volumes, change this
# if you prefer to have those files outside of docker.
- dendrite_media:/var/dendrite/media
- dendrite_jetstream:/var/dendrite/jetstream
- dendrite_search_index:/var/dendrite/searchindex
depends_on:
postgres:
condition: service_healthy
networks:
- internal
restart: unless-stopped
networks:
internal:
attachable: true
volumes:
dendrite_postgres_data:
dendrite_media:
dendrite_jetstream:
dendrite_search_index:
修改完后上传到服务器,上传位置参考上文文件规划结构
生成配置
接下来需要生成dendrite.yaml
配置文件
执行以下命令来生成配置文件,你至少需要修改以下内容与docker-compose.yml
中填写的内容保持一致:
-
itsasecret
:替换为之前输入的需要设置的数据库密码 -
YourDomainHere
:替换为你的服务器地址(如果需要反向代理,则输入反向代理后的地址)
docker run --rm --entrypoint="/bin/sh" \
-v $(pwd)/config:/mnt \
matrixdotorg/dendrite-monolith:latest \
-c "/usr/bin/generate-config \
-dir /var/dendrite/ \
-db postgres://dendrite:itsasecret@postgres/dendrite?sslmode=disable \
-server YourDomainHere > /mnt/dendrite.yaml"
此处同时完成了对环境变量db
的定义,所以可以在下文中使用db
此时dendrite.yaml
应当已经生成在了/root/config
下
修改dendrite.yaml
按需修改,至少需要修改以下内容:
connection_string
:修改为上一步中postgres://
开头的内容
启动!
完成配置更改后,现在执行以下命令启动 Dendrite
docker-compose -f docker-compose.yml up
这将自动安装Postgresql和Dendrite
之后在访问服务器地址或反向代理80端口后的地址,看见it works!
的提示即为成功