安装matrix服务器Synapse
安装matrix服务器Synapse
这玩意的安装好麻烦的样子,,找的教程要么过时要么不全
不过我总算搞好了,所以记下来吧
安装
这个东西有好几种安装方法,包括docker,apt,python,我用的是ubuntu18.04,使用的是apt安装
几种安装方式可以看官方文档
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
它会有选择的窗口,用命令行显示的
- 第一个是确认域名,我也不知道之后能不能改,所以这里还是谨慎点
- 第二个是是否收集信息参与优化啥的,文档里有一些说明,对用户以随机的id跟踪以保护隐私,不过感觉会有些多余的通信,我就选否了
教程里说大概已经可以启动了
systemctl start matrix-synapse
systemctl enable matrix-synapse
不过我没启动,继续了后面的设置
配置
配置文件应该在/etc/matrix-synapse/homeserver.yaml
,域名大概在/etc/matrix-synapse/conf.d/server_name.yaml
设置
前者大概有好几百行,顺便,我开始时用的docker安装,大概只有十几行,可能是把注释都删了,和教程完全对不上,,
有一些需要注意的东西,不过总之,可以使用systemctl status matrix-synapse
来查看日志,然后进行对应的配置
registration_shared_secret
- 注册用户需要用的密钥,教程里使用的是32位随机秘钥,使用
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
生成
- 注册用户需要用的密钥,教程里使用的是32位随机秘钥,使用
macaroon_secret_key
- 不知道为什么启动时有这个警告,查看注释后,把这个的值也改为了上面生成的密钥
- 不填会导致不能注册用户
trusted_key_servers
- 必填,默认含有
matrix.org
suppress_key_server_warning
- 若
trusted_key_servers
中含有matrix.org
,这个需要为true
,不然会弹一个警告
- 若
- 必填,默认含有
url_preview_enabled
- 如果需要开启链接预览功能,将此项设为
true
url_preview_ip_range_blacklist
- 要一起开
- 如果需要开启链接预览功能,将此项设为
max_upload_size
- 设置文件上传大小,如果设置了反代,那么上传大小取它和反代的最小值
用systemctl重启来应用
systemctl restart matrix-synapse
更多的设置在官网文档
访问
它默认不会对外网开放,只能从本地端口访问,要测试可以使用curl localhost:8008
看看有没有返回(反正我是这么试的)
虽然好像可以改homeserver.yaml
的设置来开放,不过官方的推荐是使用反向代理
nginx
安装并创建虚拟主机文件,如果想知道这玩意是怎么加载的,总的设置在/etc/nginx/nginx.conf
sudo apt install nginx
sudo nano /etc/nginx/sites-available/matrix
接下来把这个粘贴进去,记得替换域名
server {
listen 80;
# 这里改改域名
server_name yourdomainname.info;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
# 这里改改域名
server_name yourdomainname.info;
# 这里改改2个域名,文件路径是后面步骤生成的文件的默认路径
ssl_certificate /etc/letsencrypt/live/yourdomainname.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomainname.info/privkey.pem;
location /_matrix {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
# Nginx 默认只允许1M的文件上传
# 需要同时设置homeserver.yaml的max_upload_size,否则取二者的最小值
client_max_body_size 10M;
}
}
# This is used for Matrix Federation
# which is using default TCP port '8448'
server {
listen 8448 ssl;
# 这里改改域名
server_name yourdomainname.info;
# 这里改改2个域名,文件路径是后面步骤生成的文件的默认路径
ssl_certificate /etc/letsencrypt/live/yourdomainname.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomainname.info/privkey.pem;
location / {
proxy_pass http://localhost:8008;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
ssl
反向代理需要 SSL 证书才能工作
建议使用acme.sh
# 如果采用standalone,需要先安装socat以支持
apt install socat
# 安装
curl https://get.acme.sh | sh -s email=my@example.com
# 如果80端口空闲,则直接生成,记得替换mydomain.com
acme.sh --issue -d mydomain.com --standalone
它生成了几个文件,其中3个是证书文件,一个是证书密钥,fullchain包含了另外2个证书文件
对于nginx可以这样填
server {
listen 443 ssl;
server_name mydomain.com;
ssl_certificate /root/.acme.sh/mydomain.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/mydomain.com_ecc/mydomain.com.key;
location / {
proxy_pass https://localhost:5173;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
// 如果要支持wss
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
可以使用 certbot 获得免费的 SSL 证书
sudo apt install certbot
这个命令将列出所有的证书,包括其域名、到期日期、证书路径等信息。
certbot certificates
生成证书,有效期三个月,你可以在快到期时重新生成证书,记得替换域名
sudo systemctl stop nginx
certbot certonly --rsa-key-size 2048 --standalone --agree-tos -d yourdomainname.info
sudo systemctl start nginx
或者
certbot certonly --rsa-key-size 2048 --nginx --agree-tos -d yourdomainname.info
如果想在证书到期或者出现其它问题时接收通知,可以设置邮件地址--no-eff-email --email user@yourdomainname.info
GPT给出的参数说明
certonly
:指示 Certbot 仅生成 SSL/TLS 证书,并不会自动安装或配置任何 Web 服务器软件。--rsa-key-size 2048
:指定证书的 RSA 密钥大小为 2048 位。较大的密钥通常更安全,但会对性能产生一定影响。--standalone
:指示 Certbot 使用独立模式进行验证。在这种模式下,Certbot 将启动自己的 Web 服务器以验证您的域名,并在验证完成后关闭该服务器。请注意,这意味着您的 Web 服务器必须在证书更新期间停止,以避免端口冲突。- 注:如果在使用 nginx,可以不使用
--standalone
,而使用--nginx
来告诉 certbot 使用 nginx 插件
- 注:如果在使用 nginx,可以不使用
--agree-tos
:指示您同意 Let's Encrypt 的服务条款。--no-eff-email
:指示您不希望接收来自 Let's Encrypt 的效率改进电子邮件。--email user@yourdomainname.info
:指定您的电子邮件地址,以便在证书到期或其他问题时接收通知。-d yourdomainname.info
:指定您要为其生成 SSL/TLS 证书的主要域名。如果您想要为多个域名生成证书,则可以在-d
参数后列出这些域名,中间用空格分隔。
在网页上打开https://yourdomainname.info:8448
应该能访问了
设置自动更新证书
首先
sudo certbot renew --nginx --dry-run
--nginx
表示使用 nginx 插件进行更新apt install python3-certbot-nginx
这将执行一个模拟运行,以确保在实际更新证书之前,一切都可以正常工作。
sudo crontab -e
在末尾添加以下行,这将在每天3:30检测证书是否可以更新,如果离过期不到30天,更新证书
30 3 * * * certbot renew --nginx --quiet --post-hook "systemctl reload nginx"
--quiet
参数使 Certbot 在执行时不产生任何输出--post-hook
参数指定在成功更新证书后重新加载 Nginx。
数据库
由于它原本自带的数据库(SQLite3)效率很低,所以要替换为其它数据库
这里安装PostgreSQL
apt-get install postgresql
切换用户
su postgres
进入命令行工具
psql
出现类似postgres=#
的玩意后,输入
ALTER USER postgres WITH PASSWORD '12345678';
这意味着给用户postgres设置密码12345678
这里的12345678
可以改成其它密码
创建数据库,数据库名为SYNAPSE,编码方式为UTF8,拥有者为postgres用户。
CREATE DATABASE synapse
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER postgres;
退出
\q
然后返回到root用户,修改用户postgres的密码,我也不知道要不要改成一样的,反正我改成一样的了
passwd postgres
编辑/etc/matrix-synapse/homeserver.yaml
注释掉类似于这个的东西
#database:
# name: sqlite3
# args:
# database: /var/lib/matrix-synapse/homeserver.db
加上
database:
name: psycopg2
args:
user: postgres
password: 12345678
database: synapse
host: 127.0.0.1
cp_min: 5
cp_max: 10
keepalives_idle: 30
keepalives_interval: 10
keepalives_count: 3
原本的位置有注释,不过我也没试过用注释的会怎么样
重启
systemctl restart matrix-synapse