🗒️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/serverhttps://<主域名>/.well-known/matrix/server 来检查是否已经生效

🏃‍♂️ 开始使用

在上述所有的步骤都完成之后,就可以正式开始使用 Matrix 了!
在浏览器上打开 https://app.element.io ,切换 Homeserver 到你的根域名
notion image
如果配置正确,你就可以输入用户名和密码,登录进你刚配置好的服务器了!
🔑
首次登录时,会出现设置并保存密钥的相关提示,请务必下载并在安全的地方保存你的密钥,否则在之后很可能会丢失聊天信息
notion image
Now we can talk on Matrix!

🎉 拓展内容

在部署完服务器之后,接下来我还打算设置以下功能
高级略缩图和 CloudFlare R2 储存
导入丰富的 Telegram 表情包
启用 Sliding Sync ,使用最新的 Element X 客户端
(还有更多,想到补充……)
敬请期待!

📎 参考文章

Giffgaff 现正升级支持 WiFi Calling 中Giffgaff eSIM 上车指南
Loading...