🗒️Matrix 搭建全记录(一)—— 使用 Docker 部署 Dendrite
2024-7-4|2024-7-4
麦克伊文斯
AI summary
type
status
date
slug
summary
tags
category
icon
password
😀 前言
由于我的老域名 mykeyvans.space 最近要续费了,但续费的价格一年一年上涨,实在是太高了。于是我决定启用 mykeyvans.com 的新域名
之前一直使用的是 Synapse 作为 Matrix 的服务器,搭配各种 Bridge 让我在统一收取其他聊天软件的信息,例如 WhatsApp 和 Instagram 等。但 Synapse 比较大而全,个人实例不需要这么多的功能,资源占用也比较大,与此同时,我现在大多数的聊天软件也已经使用 Beeper 代收了,不再需要自建太多的 Bridge
鉴于域名弃用,架构精简的原因,我决定选用 Dendrite 作为 Matrix 重建的根基,并且记录我搭建的全过程作为参考。
之后还会有使用 Amazon S3 / CloudFlare R2 作为媒体源,启用最新特性,导入丰富的 Telegram 表情包以及备份和迁移的介绍,敬请期待!
📙 我的部署哲学
- 使用 Docker:减少对系统的改动,不受架构限制,便于备份、管理以及平滑迁移
- 组件最小化:只搭建服务端必要组件,不部署客户端,使用官方网页/客户端即可
- 非侵入性:尽可能少改动现有服务,不影响其他服务的正常运行
💼 准备工作
- 一个在 Cloudflare 托管的域名和子域名,需要解析并开启 CDN
- Homeserver 域名: 比如我的实例是 matrix.mykeyvans.com
- 根域名: 我的实例是 mykeyvans.com ,作为用户标识的域名
- 有一个云服务器(最少 1H1G),比如我的实例服务器搭建在本地的 Oracle ARM 上
⚒️ 开始部署
创建必要目录
首先,在你想要储存数据的路径下,先创建相应的目录,目录名称对应的就是这些功能储存的数据
准备数据库
替换 postgres 用户密码后,在数据路径下执行
新开一个终端,输入指令进入交互模式
执行完毕后,关闭新开的终端,并且在原执行终端里面按 Ctrl+C 结束执行,创建数据库步骤就成功了
准备 Denrite 服务
创建私钥
在项目目录下执行,生成 Matrix 服务器私钥。
注意:以下命令只可以执行一次!否则会覆盖掉你的密钥文件
生成配置
在项目目录下执行以下命令,初步生成配置
生成配置后,用文本编辑器打开
/dendrite/config/dendrite.yaml
,修改以下内容其中你可以使用
openssl rand -base64 32
来生成填写在 registration_shared_secret
随机的字符配置 Nginx 反向代理
生成网页证书
由于我们使用 Cloudflare CDN,我建议使用自签的空证书来保证安全性,防止泄露源站IP
如果你决定不使用 CDN,你需要自行配置有效的证书,推荐使用 Caddy 来自动管理
以下指令逐行执行,生成证书部分全部回车并采用默认值即可
写入 Nginx 配置文件
修改你的域名,将以下内容粘贴到
./nginx/nginx.conf
请记得修改其中的 <Homeserver 域名>
运行 Docker 镜像
基于 Dendrite 提供的 docker-compose.yml 稍作修改,我制作了以下的文件,直接复制粘贴即可
当所有的配置完成后,目录结构大致如下:
没有任何问题的话,在项目目录下运行
docker compose up -d
,运行上述镜像首次运行:创建账户
当所有镜像成功运行后,我们需要执行
docker compose exec dendrite /bin/sh
进入 dendrite 的交互命令行来创建用户只需要输入用户名部分即可,不需要输入完整的用户名+域名
使用 Cloudflare Worker 提供服务发现信息
如果需要让主域名成为你的 Matrix 服务域名(如 @me:mykeyvans.com),则这个步骤是必需的。如果只想使用子域名(如 @me:homeserver.mykeyvans.com),则这步可以跳过
服务发现是 Matrix 网络发现服务器位置的一种方式。我们的实际服务运行在子域名上,而我们需要让其他服务器/客户端知道我们想使用主域名,则需要提供
/.well-known/matrix
信息。由于我们的主域名托管在 Cloudflare 上,同时可能主域名运行着其他一些其他服务,因此使用 Cloudflare Worker 就能够优雅地在不修改其他项目文件的情况下,为主域名添加这个服务发现信息
创建 Cloudflare Worker
在 Cloudflare Dashboard → Workers & Pages 中创建一个新的 Worker
使用 Edit Code 的功能,粘贴以下代码并修改其中的 Homeserver 域名
这段代码的功能是:
- 匹配 /.well-known/matrix 路径
- 将服务发现的网络请求转发到 Matrix 服务器
粘贴并修改完毕之后,点击 Deploy 将代码部署到 Cloudflare 网络上
设置路由规则
在 Workers & Pages → Settings → Triggers 中,添加一个新的路由(Route)
- Route:输入
<主域名>/.well-known/matrix/*
- Zone :选择你的主域名
点击 Add Route 即可添加规则,之后你可以通过在浏览器中访问
https://<主域名>/.well-known/matrix/server
和 https://<主域名>/.well-known/matrix/server
来检查是否已经生效🏃♂️ 开始使用
在上述所有的步骤都完成之后,就可以正式开始使用 Matrix 了!
在浏览器上打开 https://app.element.io ,切换 Homeserver 到你的根域名
如果配置正确,你就可以输入用户名和密码,登录进你刚配置好的服务器了!
首次登录时,会出现设置并保存密钥的相关提示,请务必下载并在安全的地方保存你的密钥,否则在之后很可能会丢失聊天信息
Now we can talk on Matrix!
🎉 拓展内容
在部署完服务器之后,接下来我还打算设置以下功能
高级略缩图和 CloudFlare R2 储存
导入丰富的 Telegram 表情包
启用 Sliding Sync ,使用最新的 Element X 客户端
(还有更多,想到补充……)
敬请期待!
📎 参考文章
Loading...