自建Matrix服务器
Matrix——开源,去中心化,自建,完美。
Tip
这篇只讲原生部署,不走 Docker。Matrix Synapse 搭建(PostgreSQL)
- 自己域名可登录
- 未来能开 Federation
- 服务重启后自动拉起,日志能查
0. 准备条件
先确认这几件事:
- 一台公网 Linux 服务器,这里我用的阿里云学生优惠的2C2G机
- 一个域名,A 记录已经指向服务器 IP
- 开放端口:
80、443、8448(8448 给联邦用)
1. 安装基础组件
sudo apt update
sudo apt install -y lsb-release wget apt-transport-https gnupg2 ca-certificates \
nginx postgresql postgresql-contrib2. 安装 Synapse(原生)
先添加 Matrix 官方软件源,然后安装:
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 -y matrix-synapse-py3安装过程中会让你填 Server Name(比如 example.com),这个别填错。
3. 配置 PostgreSQL
3.1 创建数据库和用户
sudo -u postgres psql进 psql 后执行:
CREATE USER synapse WITH PASSWORD '改成一串强密码';
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;
\q3.2 把 Synapse 切到 PostgreSQL
编辑配置文件:
sudo nano /etc/matrix-synapse/homeserver.yaml找到 database: 段,改成类似这样:
database:
name: psycopg2
args:
user: synapse
password: "改成你的数据库密码"
database: synapse
host: 127.0.0.1
cp_min: 5
cp_max: 10顺手检查几个关键项:
server_name: "example.com"
public_baseurl: "https://example.com/"
enable_registration: false如果你想先自己测一圈再关注册,enable_registration 可以临时设 true。
4. 反向代理(Nginx)
新建站点配置:
sudo nano /etc/nginx/sites-available/matrix写入:
server {
listen 80;
listen [::]:80;
server_name example.com;
location /.well-known/matrix/server {
default_type application/json;
return 200 '{"m.server":"example.com:443"}';
}
location /.well-known/matrix/client {
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '{"m.homeserver":{"base_url":"https://example.com"}}';
}
location / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}启用并检查:
sudo ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/matrix
sudo nginx -t
sudo systemctl reload nginx5. 配置 HTTPS(Let's Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com成功后会自动改 Nginx 配置并加上证书。
6. Federation 端口(8448)
很多人第一次卡在这里。客户端能登录,不代表联邦能通。
最稳妥的做法:
- 让外网
8448也到 Nginx - Nginx 把
8448代理到 Synapse 的8008
在同一个 Nginx 配置里再加一个 server:
server {
listen 8448 ssl;
listen [::]:8448 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}改完重载:
sudo nginx -t
sudo systemctl reload nginx7. 启动与自启动
sudo systemctl enable matrix-synapse
sudo systemctl restart matrix-synapse
sudo systemctl status matrix-synapse看日志:
sudo journalctl -u matrix-synapse -f8. 创建管理员账号
如果你关了开放注册,用这个命令手动建:
sudo register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008按提示输入用户名、密码,然后选择是否管理员。
9. 快速自检
9.1 本机健康检查
curl -s http://127.0.0.1:8008/_matrix/client/versions有 JSON 返回就说明 Synapse 本体在工作。
9.2 外网联邦检查
curl -s https://example.com/_matrix/federation/v1/version同样有 JSON 返回,基本就通了。
10. 我自己踩过的坑
server_name一旦上线最好别改,改了会影响用户 ID。- PostgreSQL 密码里如果有特殊字符,YAML 里记得加引号。
- 只开了 443 没开 8448,经常导致别人搜不到你这个 homeserver。
- 先别急着装一堆桥接机器人。先把登录、拉群、联邦这三件事跑通。
11. 客户端怎么选
Synapse 只是服务端,日常聊天还得配客户端。下面是我自己用下来比较稳的选择。
12.1 桌面端
- Element Desktop:功能最全,文档和教程最多,适合当主力。
- FluffyChat(桌面版):界面更轻,适合只想专注聊天的人。
刚开始用 Matrix,建议先装 Element Desktop,排查问题更省时间。
12.2 手机端
- ElementX(iOS/Android):和桌面端一致性最好,跨设备切换顺手。
- FluffyChat(iOS/Android):更清爽,日常聊天体验不错。
如果你不想折腾,手机端直接用 Element 就行。
12.3 浏览器端
- Element Web:适合临时登录、公用电脑应急,或者给朋友一个网页入口。