8
0

Matrix 服务器部署(Docker)+ FluffyChat 安卓端安装 — 完整调研报告

文章摘要
|

Matrix 服务器部署(Docker)+ FluffyChat 安卓端安装 — 完整调研报告

写在前面:本文是给自己留底的自建笔记。
你拿到的内容是 2026-08-05 调研时间点的快照 — Element 官方文档 + GitHub 仓库 + F-Droid/Play 商店 + 中文社区 docker-compose 实践四路源头交叉验证。


一、Matrix 协议 & Synapse 是什么

Matrix 是开源、联邦化、E2EE 实时通信协议(类似 SMTP,不是单一产品)。客户端可自由选择,服务端可自建或联邦。

Synapse 是 Element 维护的 Matrix homeserver(服务端)参考实现,Python 写,AGPL/商业双协议。当前最新主分支 develop(GitHub element-hq/synapse)。

替代品
- Dendrite(Go — 性能更好但特性较少)
- Tuwunel(Rust fork,低内存,适合小团队)
- Conduit(Rust,更轻量)

本文走的是官方推荐的 Synapse 路线。


二、硬件需求

场景 CPU 内存 磁盘 来源
官方最低(小房间) 1 核 1 GB(建议 ≥ 2 GB) 5 GB Element 官方文档
推荐(多用户 / 联邦活跃) 2 核 4 GB 50 GB SSD selfhostvps 2026 评测
跑大公共房间 ≥ 1 GB 富裕 官方 README

关键提醒:资源消耗不是跟着用户数走,而是跟着联邦房间活跃度走。一个号挂在大公共房间里可能比 10 个内部号还费内存。建议起步 2 vCPU / 4 GB / 50 GB SSD,留升级空间。


三、官方 Docker 镜像

  • Docker Hubmatrixdotorg/synapse:latest(默认 SQLite,不适合生产)
  • GitHub Container Registryghcr.io/element-hq/synapse:latest(Element 官方构建,alpha/beta 同步更及时)
  • 官方 README 强调:生产必须切 PostgreSQL
  • 镜像内置 jemalloc(默认开启)
  • TURN 服务在外部自己搭(Synapse 容器不内置)

四、最小可跑 docker-compose(生产精简版)

version: "3"

networks:
  synapse:
    name: synapse
    driver: bridge

services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: matrix-synapse
    restart: unless-stopped
    volumes:
      - ./data:/data        # 配置 / 签名密钥 / 媒体存储
    environment:
      - SYNAPSE_SERVER_NAME=matrix.example.com
      - SYNAPSE_REPORT_STATS=yes
      - TZ=Asia/Shanghai
    depends_on:
      - db
    networks:
      - synapse

  db:
    image: postgres:15
    container_name: matrix-pg
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=changeme
      - POSTGRES_INITDB_ARGS=--encoding=UTF8 --lc-collate=C --lc-ctype=C
    volumes:
      - ./postgres:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d
    networks:
      - synapse

数据库初始化脚本 ./init/matrix.sql

CREATE USER matrix WITH PASSWORD 'changeme';
CREATE DATABASE matrix WITH OWNER = matrix
  ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE = template0;
GRANT ALL PRIVILEGES ON DATABASE matrix TO matrix;

五、配置文件生成与 Postgres 切换

# 1. 生成 homeserver.yaml + 签名密钥
docker run -it --rm \
  -v ./data:/data \
  -e SYNAPSE_SERVER_NAME=matrix.example.com \
  -e SYNAPSE_REPORT_STATS=yes \
  matrixdotorg/synapse:latest generate

# 2. 改 homeserver.yaml 切 Postgres
database:
  name: psycopg2
  args:
    user: matrix
    password: changeme
    dbname: matrix
    host: db
    cp_min: 5
    cp_max: 10

# 3. 加 .well-known & 客户端地址
serve_server_wellknown: true
public_baseurl: https://matrix.example.com

六、反向代理(外网访问必备)

Element 官方文档给出 nginx / Apache / Caddy / HAProxy / NPM 完整模板。关键点

  1. 客户端走 443location ~ ^/_matrix 转发到 localhost:8008
  2. 联邦走 8448(用 _well-known/matrix/server 指到 443 即可不开 8448)
  3. 反代不得改 URL(不要做 path rewrite),否则签名校验失败
  4. client_max_body_size 至少 50M(synapse 默认 max_upload_size

Caddy 最小配置

matrix.example.com {
  reverse_proxy /_matrix/* localhost:8008
  reverse_proxy /_synapse/client/* localhost:8008
}

Nginx(联邦端口走 443 推荐)

server {
  listen 443 ssl;
  server_name example.com;
  location ~ ^(/_matrix|/_synapse/client) {
    proxy_pass http://localhost:8008;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    client_max_body_size 50M;
    proxy_http_version 1.1;
  }
  location /.well-known/matrix/server {
    return 200 '{"m.server": "matrix.example.com:443"}';
    add_header Content-Type application/json;
  }
}

七、TURN 服务(音视频必装)

homeserver.yaml 追加:

turn_uris:
  - "turn:turn.example.com:3478?transport=udp"
  - "turn:turn.example.com:3478?transport=tcp"
turn_shared_secret: "长随机串"
turn_user_lifetime: 86400000
turn_allow_guests: true

coturn 端口:3478 (TCP+UDP) + 5349 (TLS) + 49160-65535 (UDP relay 范围)。防火墙要全开。

完整 Tuwunel/coturn/element-web JWT/livekit 一站式(中文社区实践)

services:
  tuwunel:
    image: jevolk/tuwunel:latest
    restart: unless-stopped
    container_name: tuwunel
    ports:
      - "127.0.0.1:5001:6167"
    volumes:
      - ./tuwunel/db:/var/lib/tuwunel
      - ./tuwunel/config.toml:/etc/tuwunel.toml
  coturn:
    image: coturn/coturn:latest
    container_name: coturn
    restart: unless-stopped
    environment:
      DETECT_EXTERNAL_IP: "yes"
      DETECT_RELAY_IP: "yes"
      user: "用户名:密码"
      realm: "你反代的域名"
    ports:
      - "3478:3478/tcp"
      - "3478:3478/udp"
      - "5349:5349/tcp"
      - "5349:5349/udp"
      - "49160-49170:49160-49170/udp"
    command:
      - --min-port=49160
      - --max-port=49170
  element-web:
    container_name: element-web
    ports:
      - '127.0.0.1:8098:80'
    image: vectorim/element-web
    restart: unless-stopped

八、完整组件路线(Matrix 2.0 全栈)

Element 官方有现成的 Matrix 2.0 全栈 demo:element-hq/element-docker-demo,包含:

  • Synapse(带 worker 拆分)
  • Element Webvectorim/element-web
  • Element Callghcr.io/element-hq/element-call
  • Matrix Authentication Serviceghcr.io/element-hq/matrix-authentication-service
  • LiveKit(SFU 音视频)
  • nginx + Let's Encrypt
  • Postgres + Redis

注意:README 自写"no support, no HA, no monitoring, no backup" — 生产用 Element 商业版 ESS,或社区 spantaleev/matrix-docker-ansible-deploy Ansible 剧本。


九、创建用户

docker exec -it synapse register_new_matrix_user \
  http://localhost:8008 -c /data/homeserver.yaml
# 按提示输入用户名、密码、是否管理员

默认 不开 公开注册。homeserver.yamlenable_registration: true + enable_registration_without_verification: true 才开放(仅测试用)。

邮件通知配置

email:
  smtp_host: smtp.example.com
  smtp_port: 465
  smtp_user: matrix@example.com
  smtp_pass: <password>
  force_tls: true
  require_transport_security: true
  enable_tls: true
  notif_from: "Matrix <service@example.com>"
  enable_notifs: true

十、备案 / 国内特定坑

  • 国内:必须有 ICP 备案域名,否则 8448 联邦端口会被 GFW 干扰
  • 国内到 matrix.org 联邦会慢/不通,可考虑只内部用 + 不开联邦
  • 邮件通知用国内 SMTP(QQ/网易/阿里云),force_tls: true + smtp_port: 465

十一、安卓端 FluffyChat 安装

项目概况

  • 官网:https://fluffy.chat
  • GitHub:https://github.com/krille-chan/fluffychat
  • 当前版本2.8.0+3558(pubspec.yaml 确认)
  • 包名chat.fluffy.fluffychat
  • 技术栈:Flutter(Dart sdk >=3.11.1 <4.0.0),自带 Rust vodozemac 加密库
  • License:AGPL-3.0-or-later
  • 开发者:Christian Kußowski(Krille),独立非营利项目

三个官方安装渠道

渠道 链接 推送 备注
Google Play play.google.com/store/apps/details?id=chat.fluffy.fluffychat FCM(Google 服务) 国内访问困难,多数国产 ROM 无 GMS
F-Droid f-droid.org/packages/chat.fluffy.fluffychat 无 FCM,用 UnifiedPush 或本地 poll 最稳,国内可用
直接 APK APKPure / Uptodown / IzzyOnDroid / OpenAPK 同 F-Droid(不带 FCM) 适合华为/小米/OPPO 等无 GMS 的设备

安卓侧安装步骤(推荐 F-Droid 路线)

  1. 装 F-Droid 客户端
    - 手机浏览器开 https://f-droid.org → 点 "Download F-Droid"
    - 允许"安装未知来源"(设置 → 应用 → 特殊权限 → 安装未知应用 → F-Droid 允许)
    - 装好后保持 F-Droid 不被禁止后台自启(重要)

  2. F-Droid 里搜 "FluffyChat"
    - 看到 chat.fluffy.fluffychat
    - 点 Install
    - 装好后禁用/卸载 F-Droid 都行,但别在 F-Droid 里把 FluffyChat 卸载、然后再装 Play 版,跨渠道数据互不兼容

  3. 首次启动 FluffyChat
    - 选择 "Login" 或 "Register"
    - Homeserver 填 https://matrix.example.com(你的服务端域名)
    - 走 OIDC 或密码注册(看你服务端配置)

推送问题(国内无 GMS 设备)

这是 FluffyChat 在国产 ROM 上最大的坑

  • 有 GMS 的设备(Pixel / 三星 / 摩托等):登录自动启用 FCM 推送,息屏也收消息
  • 无 GMS 的设备(华为 / 小米国际版以外的 ROM / 一加部分):必须装一个 UnifiedPush distributor(推荐 ntfy),否则你必须保持 FluffyChat 在前台才能收到消息
  • 华为:HarmonyOS 杀后台很凶,建议把 FluffyChat 加入"电池不优化"和"应用启动管理 → 允许自启动"

安装后的连接设置

启动 FluffyChat 后会问三件事:
1. Homeserver URL:填 https://matrix.example.com(你的服务端)
2. Discover well-known:默认勾选,会自动读 https://example.com/.well-known/matrix/server 找到真正的 HS
3. 登录/注册账号:用你 register_new_matrix_user 创建的账号

如要连接第三方公服(不自己建服务端),FluffyChat 默认推荐三家:
- matrix.org(官方,需翻墙)
- mozilla.org
- tchncs.de


十二、推荐部署路线

路线 A:最小化(自用、不开联邦)

1 台 2 核 4 GB VPS + 1 个备案域名
├── docker compose: synapse + postgres
├── nginx 反代 443(客户端 + 联邦合并)
├── 不开 TURN(不打语音)
└── 安卓端:F-Droid 装 FluffyChat

路线 B:完整家庭/小团队(开音视频)

1 台 2 核 4 GB VPS
├── docker compose: synapse + postgres + coturn + element-web
├── nginx 反代 + Let's Encrypt
├── TURN TCP/UDP 3478 + 5349 + relay 49160-65535 全开
├── 公开注册 + enable_registration_without_verification=false(强制验证邮件)
└── 安卓端:F-Droid 装 FluffyChat + ntfy 推 UnifiedPush

路线 C:Matrix 2.0 全栈(前端 / 音视频 / OIDC)

直接用 element-hq/element-docker-demo(实验性)
├── 一键 ./setup.sh
├── 域名分四个:matrix / auth / element / call
├── 包含 livekit(SFU)
└── 生产不要用,演示用

路线 D:生产级(企业)

- Element Server Suite (ESS) 商业版
- 或社区:spantaleev/matrix-docker-ansible-deploy Ansible 剧本
- 拆分 worker(synapse-generic-worker / federation-sender)
- Postgres 主从 + Redis + Prometheus + Grafana

十三、不确定项 / 风险点

状态 备注
Docker Hub latest 当前具体版本号 ⚠️ 抓取 hub.docker.com 超时 推测 1.13x 系列(中文教程 2026 用 1.136.0),建议 docker pull matrixdotorg/synapse:latest && docker inspect 看 digest
FluffyChat 是否在国内应用商店有官方版 ❌ 未确认 国内小米/华为商店有第三方上传的旧版,不建议从那装,从 F-Droid 或 APKPure 拿官方 APK
国内自建 Matrix 服务器的合规性 ⚠️ 需自查 端到端加密可能被监管重点关注,私人家庭/小团队自用基本无碍,公开注册服务有合规风险
federaton 8448 端口在国内的可达性 ⚠️ 矛盾 官方说联邦必须 8448,但用 _well-known/matrix/server 指到 443 后可只开 443 — 实践可行
Coturn + Element Call 是否需要 livekit 完整组件 ✅ 明确 旧版 1:1 通话只装 coturn 即可;新版 Element Call 必须 livekit(demo compose 包含)

十四、信息源索引

官方一手

社区实践


十五、下一步想做的

  • 起草一份能直接使用的 docker-compose + .env + homeserver.yaml 三件套
  • 写一份服务端到客户端的端到端冒烟测试脚本(注册 → 登录 → 发消息 → 二次登录验持久化)
  • 对比 Synapse vs Tuwunel vs Dendrite 给出决策表
  • 整理一份极简部署 SOP(拷贝粘贴就能跑)

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论