跳至主要內容

安装matrix服务器Synapse

大约 4 分钟

安装matrix服务器Synapse

这玩意的安装好麻烦的样子,,找的教程要么过时要么不全

不过我总算搞好了,所以记下来吧

安装

这个东西有好几种安装方法,包括docker,apt,python,我用的是ubuntu18.04,使用的是apt安装

几种安装方式可以看官方文档open in new window

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生成
  • 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

更多的设置在官网文档open in new window

访问

它默认不会对外网开放,只能从本地端口访问,要测试可以使用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 插件
  • --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

参考

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.0.0-alpha.10