所有系统运行正常 21 支持的加密货币 · 欢迎使用 Monero 无需 KYC 政策
ChainVPS

聊天 · 无需 KYC

在离岸VPS上部署 Matrix (Synapse)

在离岸、无需KYC的VPS上运行属于你自己的Matrix主服务器(homeserver),掌握你自己端到端加密、联邦聊天网络的密钥。

这是什么

Synapse是Matrix的参考服务器实现,Matrix是一种用于去中心化、端到端加密实时聊天、语音和视频通信的开放协议。自行托管Synapse可以让你拥有自己的主服务器,它既可以与更广阔的Matrix网络进行联邦对接,也可以完全保持私密——每一条消息、每一个媒体文件和每一个账户都保存在你自己掌控的硬件上。

为何选择离岸托管

聊天元数据(谁在何时、从何地与谁交谈)正是中心化平台及其所在司法辖区惯于记录并移交的那类数据。而在一台无需KYC、以加密货币支付的离岸VPS上,承载着你的社区消息与加密密钥的主服务器不与任何真实身份绑定,并且位于你本国管辖范围之外的隐私友好司法辖区。

部署过程

一套可用的参考配置

将其复制到全新的 ChainVPS 实例中。替换占位符后即可启动。

docker-compose.yml
# ── One-time setup, run in order on Ubuntu 24.04 (Docker + compose-plugin installed) ──
#
# 1. Generate Synapse's config (replace matrix.example.com with your real domain):
#    mkdir -p synapse-data pgdata
#    docker run --rm -v "$(pwd)/synapse-data:/data" \
#      -e SYNAPSE_SERVER_NAME=matrix.example.com \
#      -e SYNAPSE_REPORT_STATS=no \
#      ghcr.io/element-hq/synapse:latest generate
#
# 2. In synapse-data/homeserver.yaml, REPLACE the generated sqlite `database:`
#    block with the postgres block shown at the bottom of this file, and add
#    `x_forwarded: true` under the port-8008 listener (you are behind a proxy).
#
# 3. Bring the stack up:  docker compose up -d
#
# 4. Create your admin user:
#    docker compose exec synapse register_new_matrix_user \
#      -u admin -a -c /data/homeserver.yaml http://localhost:8008
#
# 5. Put a TLS reverse proxy (Caddy/nginx) on 443 -> 127.0.0.1:8008 and serve
#    /.well-known/matrix/server + /.well-known/matrix/client for federation.

services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: synapse
      POSTGRES_PASSWORD: CHANGE_ME_STRONG_DB_PASSWORD
      POSTGRES_DB: synapse
      # Synapse REQUIRES the DB to use C locale — this is a hard requirement:
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U synapse"]
      interval: 10s
      timeout: 5s
      retries: 5

  synapse:
    image: ghcr.io/element-hq/synapse:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    environment:
      SYNAPSE_SERVER_NAME: matrix.example.com
      SYNAPSE_REPORT_STATS: "no"
    volumes:
      - ./synapse-data:/data
    ports:
      # Client + federation HTTP. Bound to localhost — TLS is terminated by
      # your reverse proxy. Never expose 8008 to the internet in the clear.
      - "127.0.0.1:8008:8008"

# ── Paste this into synapse-data/homeserver.yaml, replacing the sqlite block ──
# database:
#   name: psycopg2
#   args:
#     user: synapse
#     password: CHANGE_ME_STRONG_DB_PASSWORD
#     dbname: synapse
#     host: db
#     port: 5432
#     cp_min: 5
#     cp_max: 10

防火墙

需开放的端口

端口协议用途
443TCPHTTPS反向代理:Element/客户端API + /.well-known联邦委派(唯一必须面向公网开放的端口)
8008TCPSynapse客户端+联邦HTTP监听端口——仅绑定到127.0.0.1,TLS由反向代理处理
8448TCP可选的直接联邦端口;仅在不使用.well-known委派时才需要(需要自备TLS)
5432TCPPostgreSQL——仅限Docker内部网络使用,切勿发布到宿主机或公网

按需调配规格

您需要哪种套餐

轻量级

VPS Nano / Small (2 vCPU, 2-4 GB RAM)

个人或家庭服务器,用户数在10人以内,基本没有或很少联邦对接。Synapse相当消耗内存——2 GB是现实的最低门槛,如果你要加入大型公共房间,建议4 GB。

中等规模

VPS Pro (4 vCPU, 8 GB RAM)

适合几十到上百用户、有活跃联邦对接的小型社区。需要调优Synapse缓存和Postgres的shared_buffers;媒体文件和数据库对SSD存储的要求较高。

重度使用

Dedicated (8+ cores, 16-32 GB RAM)

数百至数千用户,或加入了非常大型的联邦房间。需要将Synapse拆分为多个worker(联邦发送、同步、媒体处理),并对Postgres单独调优;不限流量的带宽可确保媒体/联邦流量不受限制。

最佳地区: 为通信服务器选择一个隐私优先的机房位置:瑞士和冰岛拥有强有力的数据保护法律体系,是承载消息元数据与密钥的主服务器的天然归宿;而荷兰和卢森堡则提供低延迟、优质对等互联的欧洲线路,让实时聊天和语音通话更加流畅。由于Matrix是实时通信协议,应优先选择离你核心用户最近的隐私优先区域;不限流量的带宽和内置的DDoS防护也很重要,因为一台面向公网的联邦主服务器始终是攻击目标。

全面加固安全

安全加固清单

  • 禁用开放注册:设置enable_registration: false,或通过registration_requires_token搭配逐个邀请令牌来限制注册——开放注册的Matrix服务器在几天内就会被垃圾机器人发现并淹没。
  • 联邦控制:使用/.well-known/matrix/server委派,使你的server_name保持简洁(如@user:example.com);如果服务器是私有的,请设置federation_domain_whitelist(或完全禁用联邦功能),以防止未知服务器连接到你。
  • 锁定URL预览与媒体功能:url_preview_enabled会在服务器端拉取任意URL(存在SSRF风险)——请保留针对私有网段的默认url_preview_ip_range_blacklist设置,限制max_upload_size,并定期执行媒体保留/清理,因为媒体存储会无限增长。
  • 在反向代理之后收紧速率限制:在8008监听端口上设置x_forwarded: true,让Synapse能够看到真实的客户端IP,然后调整rc_login、rc_registration和rc_message以抵御暴力破解和滥用行为;ChainVPS的DDoS防护则覆盖其下的L3/4层。
  • 备份Postgres和签名密钥:定期导出数据库,并将synapse-data/*.signing.key复制到异地保存——一旦丢失签名密钥,你的服务器身份和所有联邦信任关系将永久丢失。
  • 保持更新:固定并定期升级ghcr.io/element-hq/synapse镜像的标签,保持report_stats: no,切勿将8008或5432端口发布到公网——只有443端口(以及可选的8448端口)应当可从外部访问。

问题

主机服务 Matrix (Synapse) — 常见问题

我需要自己的域名吗?

需要。Matrix用户ID和联邦对接都与域名绑定(例如@you:example.com)。你需要一个自己可控DNS的域名,将其指向VPS,并提供/.well-known联邦记录。该域名可以通过注重隐私的注册商注册;服务器本身仍然保持无需KYC。

我可以让Synapse完全私有、不进行联邦对接吗?

可以。将federation_domain_whitelist设置为空,或不启用联邦监听端口,这样你的主服务器就永远不会与公共Matrix网络通信。你的用户之间仍可获得完整的端到端加密聊天、语音和视频通话,一切都在你的离岸服务器上完成。

为什么用PostgreSQL而不是默认的SQLite?

Synapse默认自带SQLite,仅用于快速测试。它无法处理并发或联邦负载,也无法通过worker进行扩展。任何真正的生产部署都必须使用以C locale创建的PostgreSQL(上面的compose文件已为你完成此设置);之后再迁移会非常痛苦,所以一开始就应使用Postgres。

Synapse到底需要多少内存?

比大多数人预期的要多。一个安静的单用户服务器大约1.5-2 GB就够用,但一旦加入大型联邦房间,每个房间的缓存都会让内存占用迅速膨胀。为小型社区预留4 GB内存,并根据你的内存来调整缓存(caches: global_factor),而不是任由其无节制增长。

我的用户应该安装哪个客户端?

Element(网页版、桌面版、iOS、Android)是标准的Matrix客户端,只需输入你的主服务器URL即可连接。你在443端口提供的/.well-known/matrix/client记录,可以让Element仅凭用户的Matrix ID就自动发现你的服务器。

离岸托管会影响联邦对接或通话质量吗?

不会。联邦对接基于标准HTTPS运作,与所在位置无关,而内置的DDoS防护可以确保面向公网的服务器保持稳定。对于实时语音/视频通话,应选择离你的用户最近的隐私优先机房位置以降低延迟;荷兰和卢森堡在欧洲流量的对等互联方面表现优异。

立即创建 Matrix (Synapse)
在接下来的 60 秒内。

不限流量带宽 · 包含 DDoS 防护 · 21 种加密货币 · 无需 KYC。