昨天受Peter先生的邀请,在他的 Matrix 服务器上注册了一个帐户,试用了一下感觉还不错。
正好 Mastodon 服务器上 CPU、内存好像都还有富裕,何不自己建一个 Matrix 服务器?
准备工作
所需物品:
域名一个
内存空间至少4G的服务器一台
本文所有命令均在 Debian 10 系统下执行。
在这里着重说一下域名选择,因为 Matrix 的分布式架构,server name 作为服务器的唯一标识一但确定,后续便无法更改,所以设置 server name 时一定要特别注意。
具体而言:不要用 .cf
、.tk
这类免费域名,也不要用域名注册局位于中国大陆的顶级域等等。
此外,Matrix 具有 Delegation 功能可与其他服务共用一个域名,因此 设置 server name 无需考虑该域名是否已经被现在服务占用,可以完全依靠自己的喜好来设置。
你喜欢是单独用一个子域 synapse.example.com
,还是直接使用 example.com
。
安装 Synapse
安装Synapse挺简单的,没有什么难度。我这里直接装包。
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
配置 Synapse
安装完毕,就到了配置环节了。 配置是大坑!
一切开始前先把服务停了。
大坑数据库
Synapse 默认使用 sqlite 数据库,性能非常坑爹,所以一定要将数据库更换为 PostgreSQL。
PostgreSQL 安装不再赘述。
创建用户
创建数据库
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse_user;
修改 pg_hba.conf
如果 synapse_user
设置了密码,向 pg_hba.conf
文件添加以下行:
如果 synapse_user
没有设置了密码:
性能调优
可以参考 PGTune ,以及官方维基 Tuning Your PostgreSQL Server 。
总而言之,数据库调参是玄学。
修改 homeserver.yaml
打开 /etc/matrix-synapse/homeserver.yaml
,找到 database
一节,注释掉 sqlite3 相关配置,找到 psycopg2
去除相应注释,填写配置。
下面是一个示例:
诸多小坑
除了上面的数据库,homeserver.yaml
配置文件里还有不少小坑。
-
trusted_key_servers
不能为空,默认为matrix.org
,可以填上一些自己认识的实例,例如:neo.angry.im
、bgme.me
。 suppress_key_server_warning
如果trusted_key_servers
中有matrix.org
,请将此项设为true
,否则启动时会有警告。
-
macaroon_secret_key
填上,不填启动服务时会报错。registration_shared_secret
填上,如果不填后面创建帐户的脚本无法运行。-
url_preview_enabled
如果需要开启链接预览功能,将此项设为true
。 url_preview_ip_range_blacklist
如开启链接预览,请去除该块注释,否则会报错无法启动。
-
如果只是自用,不打算开放注册,SMTP相关配置可以不填。
启动数据库,确定相应端口能正常连接后。
启动 Synapse 服务。
配置反代及Delegation
Delegation
如前所说,由于 Matrix 的 Delegation 功能 。 Matrix 的 server_name
可以与其它服务共用。
就本次情况而言。Matrix 的 server_name
为 bgme.me
,实际后端地址(客户端API、与其它实例互动)为 neo.bgme.me:443
。
因此需要在 https://bgme.me/.well-known/matrix/server 托管以下内容:
又因为 bgme.me 已经被 Mastodon 服务占据,因此还需在 https://bgme.me/.well-known/matrix/client 托管:
同时在 homeserver.yaml
将 public_baseurl
设为上面的 base_url,即 https://neo.bgme.me
。
由于本人使用 Caddy,所以直接向配置中添加如下内容:
{ "handle": [ { "body": "{\"m.server\": \"neo.bgme.me:443\"}", "close": true, "handler": "static_response", "headers": { "Content-Type": [ "application/json" ] }, "status_code": 200 } ], "match": [ { "path": [ "/.well-known/matrix/server" ] } ] }
{ "handle": [ { "body": "{\"m.homeserver\":{\"base_url\":\"https://neo.bgme.me\"}}", "close": true, "handler": "static_response", "headers": { "Access-Control-Allow-Origin": [ "*" ], "Content-Type": [ "application/json" ] }, "status_code": 200 } ], "match": [ { "path": [ "/.well-known/matrix/client" ] } ] }
如果你使用 nginx 的话,应为:
location /.well-known/matrix/server { return 200 '{"m.server": "neo.bgme.me:443"}'; default_type application/json; add_header Access-Control-Allow-Origin *; } location /.well-known/matrix/client { return 200 '{"m.homeserver": {"base_url": "https://neo.bgme.me"}}'; default_type application/json; add_header Access-Control-Allow-Origin *; }
配置反代
反代配置可参考官方文档。
由于没有使用默认的8448端口,而将端口改至443端口,官方文档中8448端口相关内容可以直接去除。
下面附上本人配置文件:
{ "@id": "neo.bgme.me", "handle": [ { "handler": "subroute", "routes": [ { "handle": [ { "handler": "headers", "response": { "set": { "Referrer-Policy": [ "same-origin" ], "Strict-Transport-Security": [ "max-age=31536000;" ], "X-Content-Type-Options": [ "nosniff" ], "X-Frame-Options": [ "DENY" ], "X-Robots-Tag": [ "noindex, nofollow" ], "X-Xss-Protection": [ "1; mode=block" ] } } }, { "encodings": { "gzip": {} }, "handler": "encode" } ] }, { "handle": [ { "handler": "reverse_proxy", "upstreams": [ { "dial": "169.254.12.38:8008" } ] } ] } ] } ], "match": [ { "host": [ "neo.bgme.me" ] } ], "terminal": true }
反代配置好之后,服务便已经上线可以使用了。
进入 federation tester 输入你的 server_name
,验证互连功能是否已正确配置。
如果没有问题,你的 Matrix 服务器已经部署完毕了。
后续
注册帐户
运行如下命令:
$ source ~/synapse/env/bin/activate $ synctl start # if not already running $ register_new_matrix_user -c homeserver.yaml http://localhost:8008 New user localpart: [username] Password: Confirm password: Make admin [no]: Success!
帐户注册完毕后,便可以通过客户端登录使用了。