轻量级matrix服务端tuwunel搭建
前言
先祝大家26年新年快乐
最近需要重新搭建matrix服务端,刚好发现了tuwunel这个更轻量的实现
虽然官方文档有搭建说明,但比较简略,实际操作中踩了一些小坑,刚好现在没事干,干脆写点东西记录一下
相比于synapse,tuwunel在空载或少量聊天的情况下,内存占用约80mb左右
更加省资源,适合个人/小型聊天室/朋友之间使用

1.基础环境准备
本文基于debian和docker compose部署 反代个人习惯用caddy,用nginx原理是一样的,只需要反代 8008 端口,其余配置可自行调整
开始前,先创建一个docker网络,方便caddy和matrix服务端通信
docker network create caddy
创建两个目录,分别用于管理caddy和matrix的配置文件:
mkdir -p /root/caddy /root/matrix
2.配置matrix服务端(tuwunel)
进入matrix目录并创建 docker-compose.yml:
cd /root/matrix
nano docker-compose.yml
示例配置如下(可替换域名直接使用):
services:
matrix:
image: ghcr.io/matrix-construct/tuwunel:latest
container_name: matrix_server # 反代时使用的容器名,可自行修改
restart: always
volumes:
- ./db:/var/lib/tuwunel/ # 数据库与聊天记录
environment:
- TUWUNEL_SERVER_NAME=你的域名
- TUWUNEL_ALLOW_REGISTRATION=false # 是否允许注册,true 为开启
- TUWUNEL_ADDRESS=0.0.0.0
- TUWUNEL_PORT=8008 # 容器内服务端口
networks:
- caddy
networks:
caddy:
external: true
启动matrix容器:
docker compose up -d
3.配置caddy反代
进入caddy目录并创建docker-compose.yml:
cd /root/caddy
nano docker-compose.yml
示例配置如下:
services:
caddy:
image: caddy:latest
container_name: caddy_server
restart: always
ports:
- "80:80"
- "443:443"
- "8448:8448" #matrix联邦常用端口
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
networks:
- caddy
networks:
caddy:
external: true
volumes:
caddy_data:
caddy_config:
接着编辑Caddyfile:
nano Caddyfile
caddyflie示例配置:
#【可选】禁止直接通过ip+端口访问,防止被扫描
:80, :443, :8448 {
abort
}
你的域名 {
reverse_proxy matrix_server:8008
#【可选】客户端输入根域名自动识别matrix地址
handle_path /.well-known/matrix/client {
header Access-Control-Allow-Origin "*"
header Content-Type "application/json"
respond `{"m.homeserver": {"base_url": "https://你的域名"}}`
}
#【可选】告诉其他服务器可通过443端口进行联邦通信
handle_path /.well-known/matrix/server {
header Access-Control-Allow-Origin "*"
header Content-Type "application/json"
respond `{"m.server": "你的域名:443"}`
}
}
#【可选】小部分服务器仍使用8448端口,以防万一
你的域名:8448 {
reverse_proxy matrix_server:8008
}
如果服务器还运行了其他站点,使用
abort前请确认不会影响其他站点
启动caddy:
docker compose up -d
4.手动创建账号并设置管理员
如果你开启了注册(TUWUNEL_ALLOW_REGISTRATION=true),可以跳过这一步
当关闭注册时,需要手动创建第一个账号
停止matrix服务
cd /root/matrix
docker compose stop
进入tuwunel控制台
docker run --rm -it \
-v $(pwd)/db:/var/lib/tuwunel/ \
-e TUWUNEL_SERVER_NAME=你的域名 \
ghcr.io/matrix-construct/tuwunel:latest \
--console
看到 uwu> 提示符后,依次执行:
创建用户:
admin users create-user 用户名
设置密码:
admin users reset-password @用户名:你的域名 密码
赋予管理员权限:
admin users make-user-admin @用户名:你的域名
退出控制台:
ctrl+\(enter上面那个)- 或
ctrl+d
重启matrix服务
docker compose up -d
5.联邦测试
官方联邦测试工具:
https://federationtester.matrix.org/
输入你的域名,如果全部显示为绿色,说明服务器可以被正常发现,并且可以和其他matrixm服务器互通

什么是「联邦」?
简单说一句话:
联邦=不同matrix服务器之间可以互相聊天
比如:
- 你在自己搭的matrix服务器上
- 朋友在别的matrix服务器上
只要开启了联邦,你们就能互相加好友、进同一个房间聊天 就像不同邮箱之间可以互相发邮件一样
6.关于cf的说明
如果开了cf小黄云:
- SSL/TLS模式务必设置为Full(完全)
- 否则可能会出现无限重定向的问题
适用场景说明
- ✅ 个人使用/朋友聊天/小型社区
- ❌ 不适合大型公共matrix服务器
- ❌ 不适合大量桥接或高并发场景