轻量级matrix服务端tuwunel搭建

Posted on Jan 1, 2026

前言

先祝大家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服务器
  • ❌ 不适合大量桥接或高并发场景