Synapse 安装部署完全指南:从服务器命名到生产环境配置的实战手册
【免费下载链接】synapseSynapse: Matrix homeserver written in Python/Twisted.项目地址: https://gitcode.com/gh_mirrors/sy/synapse
本文基于 Matrix 开源仓库中
docs/setup/installation.md编写,围绕 Python/Twisted 实现的 Matrix homeserver —— Synapse 展开,覆盖安装前的服务器命名决策、各大平台预编译包安装、PyPI 源码安装、配置生成与启动,以及 PostgreSQL、TLS、Well-Known、邮件、用户注册、TURN、URL 预览等上线必需环节。读者读完可以独立完成一套可运行、可联邦、可投入生产的 Synapse 部署,并理解每个关键步骤背后的配置原理与源码行为。
一、安装之前:慎重选择你的服务器名(server name)
选择服务器名是整个部署中最重要、且不可事后更改的决定,必须在安装 Synapse 之前完成。
服务器名决定了本服务器上所有用户 ID 的“域名”部分,例如@user:my.domain.name。它同时也决定了其他 Matrix 服务器如何通过联邦(federation)协议找到你的服务器。
- 测试配置:直接使用你服务器的 hostname 即可;
- 生产配置:更推荐使用你的业务域名(如
example.com)而非矩阵专用主机名。这与电子邮件地址的习惯一致——user@example.com比user@email.example.com更自然。但选择域名方式通常需要更高级的配置(端口 8448、DNS 委派等),详见 联邦配置指南。
从源码看,server_name是 Synapse 的核心身份标识:在 synapse/app/homeserver.py 中,HomeServer实例以config.server.server_name作为构造参数,并拼装出Synapse/{VERSION}的版本字符串,对外标识本服务器的身份。因此,一旦对外发布并被其他服务器缓存,更换server_name会导致既有用户 ID 与联邦身份全部失效。
二、安装 Synapse:预编译包路线(推荐大多数用户)
对于大多数用户,官方推荐直接使用各平台的预编译包,省去编译依赖的麻烦。
2.1 Docker 镜像与 Ansible Playbook
官方 Synapse 镜像发布在 Docker Hub 的matrixdotorg/synapse与ghcr.io/matrix-org/synapse,可配合仓库内提供的 docker-compose 文件使用,见 contrib/docker/README.md 与 contrib/docker/docker-compose.yml。
仓库自带的 compose 文件给出了一个可直接参考的骨架:synapse服务使用docker.io/matrixdotorg/synapse:latest镜像,通过环境变量SYNAPSE_CONFIG_PATH=/data/homeserver.yaml指定配置路径,并将./files挂载到/data;同时内置一个postgres:12-alpine数据库服务,并特别设置POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C以确保数据库以正确编码初始化(这与 PostgreSQL 使用指南 中的建库要求一致)。
生成初始配置的方式:
docker-compose run --rm -e SYNAPSE_SERVER_NAME=my.matrix.host -e SYNAPSE_REPORT_STATS=yes synapse generate该命令会同时生成必要的签名密钥。之后按需修改配置并启动:
docker-compose up -d此外社区还有 avhost 的单镜像 Dockerfile、以及 Slavi Pantaleev 的matrix-docker-ansible-deployPlaybook(后者会一并部署 Postgres、Element、coturn、ma1sd、SSL 等周边服务)。Docker 镜像的完整环境变量说明见 docker/README.md。
2.2 Debian / Ubuntu
Matrix.org 官方仓库
Matrix.org 提供 amd64 架构的官方 Debian/Ubuntu 软件包,仓库地址为https://packages.matrix.org/debian/。安装最新正式版:
sudo apt install -y lsb-release wget apt-transport-https sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list sudo apt update sudo apt install matrix-synapse-py3如果需要安装发布候选版本(release candidate),在sources.list行末尾追加prerelease启用预发布通道:
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main prerelease" | sudo tee /etc/apt/sources.list.d/matrix-org.list sudo apt update sudo apt install matrix-synapse-py3仓库签名密钥指纹为AAF9AE843A7584B5A3E4CD2BCF45A512DE2DA058(可用gpg /usr/share/keyrings/matrix-org-archive-keyring.gpg核对)。
升级友好小技巧:使用 Debian 包安装时,建议将自定义配置放在/etc/matrix-synapse/conf.d/目录下覆盖主配置,而不要直接编辑/etc/matrix-synapse/homeserver.yaml。这样在升级 Debian 包时不会被询问是否替换配置文件。
Debian 下游仓库
Debian 官方仓库维护了matrix-synapse包(bookworm与sid可直接安装):
sudo apt install matrix-synapsebullseye-backports中也有可用版本(使用 backports 的方法参见 Debian 官方 backports 文档)。注意:buster及更早版本已不再维护matrix-synapse包。
Ubuntu 下游仓库(不推荐)
默认 Ubuntu 源中的 Synapse 包版本过旧且存在已知安全漏洞,官方不推荐使用。如需在 Ubuntu 上获取最新版本,请从上面的 Matrix.org 官方仓库 安装。
2.3 Fedora / OpenSUSE / SLES
Fedora 官方仓库内置matrix-synapse:
sudo dnf install matrix-synapseOpenSUSE 仓库同样提供matrix-synapse:
sudo zypper install matrix-synapseSLES 15 可在 openSUSE:Backports:SLE-15 仓库获取非官方构建包。
2.4 ArchLinux / Alpine / Void / FreeBSD / OpenBSD / NixOS
- ArchLinux:官方 extra 仓库的
matrix-synapse包会拉取大部分依赖。若pip版本过旧(如 6.0.7-1 需升级到 6.0.8-1):sudo pip install --upgrade pip若在 x64 系统上遇到
py-bcrypt的Wrong ELF Class: ELFCLASS32错误,可重装该包使其在正确的架构下编译(virtualenv 环境下一般无需处理):sudo pip uninstall py-bcrypt sudo pip install py-bcrypt - Alpine Linux:社区仓库提供
synapse:sudo apk add synapse - Void Linux:void 仓库提供
synapse:xbps-install -Su xbps-install -S synapse - FreeBSD:Ports 或 Packages 均可安装:
cd /usr/ports/net-im/py-matrix-synapse && make install clean pkg install py38-matrix-synapse - OpenBSD:自 OpenBSD 6.7 起提供预编译二进制包。注意 homeserver 目录(默认
/var/synapse)所在的文件系统必须以wxallowed挂载(参见mount(8)),因此建议单独划分文件系统挂载到/var/synapse:doas pkg_add synapse - NixOS:nixpkgs 中已有
services/matrix/synapse.nix模块化打包。
三、PyPI 源码安装:从 virtualenv 到首个 homeserver
当目标平台没有预编译包,或需要自定义构建时,可以将 Synapse 作为 Python 模块从 PyPI 安装。走这条路之前,务必先完成 平台专属前置依赖 的安装。
3.1 系统要求
- POSIX 兼容系统(已在 Linux 与 macOS 上测试通过);
- Python 3.8 及以上,最高支持到 Python 3.11(与 pyproject.toml 中
python = "^3.8.0"的约束一致); - 若想加入
#matrix:matrix.org这类大型公共房间,至少需要1GB 可用内存。
如果在无预编译 wheel 的冷门架构上构建,还需要较新的 Rust 编译器(推荐通过 rustup 安装)。这是因为 Synapse 的部分组件(如 push 规则评估、ACL 等)由 Rust 实现,构建时会通过build_rust.py编译synapse.synapse_rust扩展(见 pyproject.toml 与 build_rust.py)。
3.2 创建虚拟环境并安装
mkdir -p ~/synapse virtualenv -p python3 ~/synapse/env source ~/synapse/env/bin/activate pip install --upgrade pip pip install --upgrade setuptools pip install matrix-synapse上述命令会从 PyPI 下载matrix-synapse及其 Python 依赖库,安装到~/synapse/env虚拟环境中(目录可自选)。日后升级同样简单:
source ~/synapse/env/bin/activate pip install -U matrix-synapse3.3 生成配置文件与签名密钥
启动 Synapse 前必须先生成配置文件。在虚拟环境中执行:
cd ~/synapse python -m synapse.app.homeserver \ --server-name my.domain.name \ --config-path homeserver.yaml \ --generate-config \ --report-stats=[yes|no]--server-name:替换为你的服务器名;--report-stats:选择是否向开发团队上报使用统计信息(主机名、Synapse 版本、运行时长、用户总数等)。
这个命令背后的逻辑可以在 synapse/app/homeserver.py 中看到:setup()调用HomeServerConfig.load_or_generate_config(),当配置只用于生成(--generate-config)时不会返回配置对象,进程直接以退出码 0 结束。生成过程本身由 synapse/_scripts/generate_config.py 实现,它支持--config-dir、--data-dir、--server-name、--report-stats、--generate-secrets等参数。
生成配置的同时还会生成一组签名密钥,用于让本 homeserver 向其他 homeserver 标识自己的身份:
- 千万不要丢失或删除这些密钥,建议备份到安全位置;
- 若确需更换签名密钥,其他服务器可能仍缓存着旧密钥;更换后应修改
<server name>.signing.key文件中的密钥名(第二个词),详见 Matrix 服务端规范中关于密钥管理(Retrieving server keys)的说明。
3.4 启动 homeserver
选择 Synapse 的工作目录(如~/synapse),然后:
cd ~/synapse source env/bin/activate synctl startsynctl是 Synapse 自带的管理脚本(入口定义在 pyproject.toml 的synctl = "synapse._scripts.synctl:main"),其实现位于 synapse/_scripts/synctl.py。从源码看:
synctl start读取配置中的pid_file,若进程已在运行会提示 "already running" 并直接返回;否则以python -m synapse.app.homeserver -c <config> [--daemonize]拉起主进程(见 synctl.py);- 支持
start/stop/restart三种动作,还支持-w <worker配置>管理单个 worker、-a <worker配置目录>管理全部进程、--no-daemonize前台运行以便调试; - 若配置文件不存在,
synctl会提示用python -m synapse.app.homeserver -c <file> --generate-config --server-name=<name> --report-stats=<yes/no>生成。
3.5 平台专属前置依赖(Platform-specific prerequisites)
Synapse 本身是 Python 写的,但部分依赖库是 C 实现(如bcrypt、lxml、psycopg2、PyICU等),因此需要可用的 C 编译器与 Python C 扩展头文件。
Debian / Ubuntu / Raspbian:
sudo apt install build-essential python3-dev libffi-dev \ python3-pip python3-setuptools sqlite3 \ libssl-dev virtualenv libjpeg-dev libxslt1-dev libicu-devArchLinux:
sudo pacman -S base-devel python python-pip \ python-setuptools python-virtualenv sqlite3 icuCentOS / Fedora:
sudo dnf install libtiff-devel libjpeg-devel libzip-devel freetype-devel \ libwebp-devel libxml2-devel libxslt-devel libpq-devel \ python3-virtualenv libffi-devel openssl-devel python3-devel \ libicu-devel sudo dnf groupinstall "Development Tools"macOS:
xcode-select --install可能需要通过 Homebrew 安装额外的依赖,尤其是 ICU(请遵循 PyICU 的官方安装指引)。ARM 版 Mac 还需要:
brew install jpeg libpqmacOS Catalina(10.15)上可能需要显式安装 OpenSSL 并告知 pip,以便psycopg2能正常构建:
brew install openssl@1.1 export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include"OpenSUSE:
sudo zypper in -t pattern devel_basis sudo zypper in python-pip python-setuptools sqlite3 python-virtualenv \ python-devel libffi-devel libopenssl-devel libjpeg62-devel \ libicu-develOpenBSD:net/synapse端口可用。除了前述wxallowed挂载要求外,构建 Python 依赖时WRKOBJDIR也必须位于wxallowed文件系统上(默认 OpenBSD 安装中/usr/local即满足),可按需执行:
doas mkdir /usr/local/pobj_wxallowed doas chown _pbuild:_pbuild /usr/local/pobj_wxallowed echo WRKOBJDIR_lang/python/3.7=/usr/local/pobj_wxallowed \nWRKOBJDIR_lang/python/2.7=/usr/local/pobj_wxallowed >> /etc/mk.conf cd /usr/ports/net/synapse make installWindows:Synapse不官方支持在 Windows 上原生运行。如需在 Windows 上运行或开发,请使用 WSL(Windows Subsystem for Linux)获得 Linux 环境,从而复用 Debian、Fedora 或源码安装方式。
四、安装后的配置与上线准备
4.1 使用 PostgreSQL(强烈建议)
Synapse 默认使用 SQLite 数据库——这是以性能换取便利的选择。几乎所有安装都应改用 PostgreSQL,其优势包括:
- 更优秀的线程与缓存模型、更智能的查询优化器带来的显著性能提升;
- 允许数据库运行在独立硬件上。
SQLite 仅适用于测试场景,绝不能用于生产服务器——Synapse 在 SQLite 下性能很差,尤其是在大型房间中。详细的安装与配置方法见 PostgreSQL 使用指南。
4.2 TLS 证书与 HTTPS 暴露
默认配置只在本机接口暴露一个 HTTP 端口:http://localhost:8008。这适合本地测试,但任何实际使用场景都需要通过 HTTPS 提供 API。
推荐方式:反向代理 + 端口 8448。在 8448 端口前架设反向代理,具体配置见 反向代理文档。
备选方式:Synapse 直接暴露 HTTPS 端口。编辑homeserver.yaml:
- 在
listeners下增加启用 TLS 的监听器:
listeners: - port: 8448 type: http tls: true resources: - names: [client, federation]- 同时添加
tls_certificate_path与tls_private_key_path两个配置项,证书的签发与续期需要自行管理。
关于上述选项的完整说明见 配置手册。特别提醒:如果使用自有证书,请使用包含完整证书链(含中间证书)的.pem文件——例如使用 certbot 时应选fullchain.pem而非cert.pem。
从源码实现看,TLS 监听器最终由 synapse/app/homeserver.py 的start_listening()统一处理:http类型的监听器会经由_listener_http()挂载client、federation、media、keys等命名资源,而tls: true的配置会驱动 Twisted 的 TLS context 工厂完成握手。更详细的联邦部署指引见 联邦配置指南。
4.3 客户端 Well-Known URI(可选但推荐)
配置 Well-Known URI 后,支持 well-known 查询的客户端允许用户直接输入完整用户名(如@user:<server_name>),客户端会自动解析出 homeserver 与 identity server 地址,用户无需记忆实际的服务器 URL。
要求https://<server_name>/.well-known/matrix/client返回如下 JSON:
{ "m.homeserver": { "base_url": "https://<matrix.example.com>" } }可选地,还可以附带 identity server 信息:
{ "m.homeserver": { "base_url": "https://<matrix.example.com>" }, "m.identity_server": { "base_url": "https://<identity.example.com>" } }浏览器客户端要求:文件必须带有正确的跨域(CORS)头,推荐值Access-Control-Allow-Origin: *,允许所有浏览器客户端访问。nginx 配置示例:
location /.well-known/matrix/client { return 200 '{"m.homeserver": {"base_url": "https://<matrix.example.com>"}}'; default_type application/json; add_header Access-Control-Allow-Origin *; }同时确保homeserver.yaml中的public_baseurl设置正确——它应指向客户端连接本服务器所用的 URL,与上面m.homeserver的base_url保持一致:
public_baseurl: "https://<matrix.example.com>"4.4 邮件(SMTP)配置
Synapse 具备发信能力后可以实现三类功能:密码重置邮件、邮箱添加验证、新消息邮件通知。配置email配置段,至少填写smtp_host、smtp_port与notif_from三个字段;若 SMTP 服务器需要认证,还需设置smtp_user、smtp_pass,必要时开启require_transport_security。
注意:如果邮件未配置,密码重置、邮件注册与邮件通知功能都将被禁用。
4.5 注册用户
创建新用户有两种途径:
方式一:从客户端注册。使用 Element 等客户端注册,前提是在配置中启用enable_registration设置。
方式二:命令行注册(推荐,可创建管理员)。步骤如下:
- pip 安装的 Synapse 先激活虚拟环境(预编译包安装则
register_new_matrix_user已在 PATH 中):cd ~/synapse source env/bin/activate synctl start # 如果尚未运行 - 执行注册脚本:
register_new_matrix_user -c homeserver.yaml
脚本会交互式询问新用户信息,然后连接运行中的 Synapse 创建用户,示例输出:
New user localpart: erikj Password: Confirm password: Make admin [no]: Success!从源码看,该脚本(synapse/_scripts/register_new_matrix_user.py)的工作机制很值得了解:
- 它基于配置中的
registration_shared_secret(或registration_shared_secret_path指向的文件)与 Synapse 共享密钥(见 config_documentation.md 中registration_shared_secret说明)。两个选项同时出现会报错退出(见 register_new_matrix_user.py); - 实现上先
GET /_synapse/admin/v1/register获取 nonce,再用 HMAC-SHA1 对nonce \x00 username \x00 password \x00 admin/notadmin [\x00 user_type]计算 MAC,最后POST提交注册(见 register_new_matrix_user.py); - 支持
-u/--user、-p/--password、-t/--user_type、-a/--admin、--no-admin、-k/--shared-secret等参数;不传 server_url 时,脚本会尝试从配置的listeners中自动寻找 client HTTP 监听器(见 register_new_matrix_user.py),找不到时回退到http://localhost:8008。
安全提示:registration_shared_secret的值无关紧要(--generate-config会生成随机值),但必须严格保密——任何掌握该密钥的人都可以在你的服务器上注册用户(包括管理员账号),即使enable_registration为false。
4.6 配置 TURN 服务器(VoIP 必需)
要让 VoIP 通话可靠地经由本 homeserver 路由,必须配置 TURN 服务器。详细步骤见 TURN 服务器配置指南。
4.7 URL 预览(默认关闭,开启需谨慎)
Synapse 内置 URL 预览功能,默认关闭。开启需满足两个条件:
- 设置
url_preview_enabled: True; - 在
url_preview_ip_range_blacklist中显式指定 Synapse 禁止抓取的 IP 范围。这是关键的安全措施,用于防止任意 Matrix 用户借预览功能爬取你内网的“内部” URL。至少应把 loopback 与 RFC1918 私网地址加入黑名单。
此外还需要安装可选依赖lxml,它依赖系统库libxml2——Debian/Ubuntu 下为apt-get install libxml2-dev(其他系统等价)。这与 pyproject.toml 中lxml = { version = ">=4.2.0", optional = true }以及url-preview = ["lxml"]extra 的定义一致,即pip install matrix-synapse[url-preview]可一并安装。
五、安装排障(Troubleshooting)
pip安装时内存泄漏严重:例如 512MB 内存的 Linux 主机可能在安装 Twisted 时耗尽内存。此时需要逐个安装失败的依赖,例如:pip install twisted逐个装完后再继续整体安装即可。
其他问题可前往
#synapse:matrix.org房间(Matrix 官方社区)寻求帮助。
六、进一步阅读
- 联邦配置指南:如何让其他服务器访问你的 homeserver、端口委派与常见故障排查;
- PostgreSQL 使用指南:在生产环境中正确配置数据库;
- 反向代理文档:在 8448 端口前配置 Nginx/Caddy 等反向代理;
- 配置手册:全部配置项、默认值与示例,可用
python -m synapse.config -c <path to config>校验配置; - TURN 服务器配置指南:为 VoIP 通话配置 TURN;
- Docker 使用说明 与 docker-compose 示例:容器化部署参考;
- synctl 管理脚本 与 注册脚本:管理进程与用户的源码级实现。
【免费下载链接】synapseSynapse: Matrix homeserver written in Python/Twisted.项目地址: https://gitcode.com/gh_mirrors/sy/synapse
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考