记录一些搭建 synapse 的经历,采用 matrix-synapse-py3 包来安装,没有采用 docker,前端和后端没有分开
2022年12月:这次修改很多,想让安装步骤更清晰
配置 Postgresql
安装 PostgreSQL
sudo apt install postgresql
进入 postgres
用户
sudo su - postgres
创建用户,输入这一行后,会让你设置用户密码
createuser --pwprompt synapse_user
创建数据库
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
生成需要长度的密钥
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
修改 hba_file
官网上关于 postgresSQL
需要修改 hba_file
的内容,有说明。如果提示 FATAL: Ident authentication failed for user "synapse_user"
,需要更换除了ident
以外的数据库认证方式。
这里说明一下如何找到 hba_file
的位置,进入 psql
(需要先进入 postgres 用户
)
进入和退出 psql,使用 \q;
向 postgresSQL
询问 hba_file
的位置
SHOW hba_file;
安装 matrix-synapse-py3
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
跟随提示输入server name
配置 homeserver.yaml
sudo nano /etc/matrix-synapse/homeserver.yaml
在 Synapse version 1.73.0 的时候,homeserver.yaml 只保留有自动生成的最基本配置,别的需要看官方说明来增加
这部分参照官方说明来改,这里记录一些 homeserver.yaml
基本配置的说明
server_name: "SERVER_NAME" # 这个 SERVERNAME,会被自动替换为,安装 matrix-synapse-py3 时输入的 server name
# public_baseurl: # 这个参数,默认为 https://<server_name>/.如果你前端和后端没有分开,就不用写出这个参数来赋值
pid_file: DATADIR/homeserver.pid
listeners:
- port: 8008 # 服务运行的端口号,可自己修改
tls: false
type: http
x_forwarded: true
bind_addresses: ['::1', '127.0.0.1'] # 建议删掉 '::1',
resources:
- names: [client, federation]
compress: false
# 数据库配置,建议修改为 Postgresql,配置如下面的注释部分
database:
name: sqlite3
args:
database: DATADIR/homeserver.db
# database:
# name: psycopg2
# txn_limit: 10000
# args: # 下面的三个参数,来自最开始新建的 postgres 数据库
# user:
# password:
# database:
# host: localhost
# port: 5432
log_config: "CONFDIR/SERVERNAME.log.config"
media_store_path: DATADIR/media_store
signing_key_path: "CONFDIR/SERVERNAME.signing.key"
trusted_key_servers: # 如果包括 "matrix.org" ,就需要新增 suppress_key_server_warning,来阻止这个报错
- server_name: "matrix.org"
# suppress_key_server_warning: true
这里记录一部分额外配置
设置实例不开放注册
enable_registration: false registration_shared_secret: "xxxxxxxx" # 配置了这个的话,实例不开放注册时,可由管理员创建新帐号 registration_shared_secret_file: /path/to/secrets/file # 这是上一行的可替代做法,把registration_shared_secret以文本形式,放在外部文件中
Captcha 防机器人注册,如果开放了注册,会需要这个
enable_registration_captcha: true recaptcha_public_key: "xxxxxxx" recaptcha_private_key: "xxxxxxx"
打开这里,创建新网站,只能选择 reCAPTCHA v2 使用 “I’m not a robot” Checkbox
把得到的 public_key 和 private_key, 填到上面
- 是否显示用户在线状态
presence:
enabled: false # 不显示,默认为 true
如果需要设置邮件找回密码,在官方设置教程中,搜索
SMTP
,参照配置配置 redis
首先另外安装 redis (安装和设置教程很多,随便找一个就好),然后在
homeserver.yaml
添加
redis:
enabled: true
host: localhost
port: 6379
password: <secret_password> # 如果在安装 redis 时,没有设置密码,就不需要这一行
注意:需要另外安装 redis,不然添加 redis 配置后,synapse 会运行错误
- 如果不采用 8448 端口进行 federation(例如使用 CDN 时),需要增加
serve_server_wellknown: true
修改完 homeserver.yaml
之后,应该使用一下命令(尤其是第二个),重启服务
sudo systemctl enable matrix-synapse
sudo systemctl restart matrix-synapse
sudo systemctl status matrix-synapse
安装 TLS 证书和配置 NGINX
这里使用先生成证书,再配置 NGINX 的方法。如果需要直接配置 NGINX,由 certbot 自动获取证书的话,可以查看我的
Ubuntu|使用 Nginx 和 Certbot 申请 SSL 证书
那篇。
snap package
是安装 certbot
最容易的方式
sudo apt install snapd
sudo snap install core
检查安装正常
sudo snap install hello-world
hello-world
安装 certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
打开 port 80
,443
ufw allow 80
ufw allow 443
尤其注意打开
port 80
,容易忘记
获取证书。
sudo certbot certonly --nginx -d synapse.matrix.org
接下来按照提示,输入邮箱等信息,成功获取证书会有信息提示。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for synapse.matrix.orgSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/synapse.matrix.org/fullchain.pem
Key is saved at: /etc/letsencrypt/live/synapse.matrix.org/privkey.pem
This certificate expires on 2022-07-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.If you like Certbot, please consider supporting our work by:
- Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
- Donating to EFF: https://eff.org/donate-le
接下来安装 NGINX
,进行配置
sudo apt-get install nginx -y
新建并打开 NGINX
配置
sudo nano /etc/nginx/sites-available/synapse.matrix.org.conf
在 synapse.matrix.org.conf
填入配置
如果使用 8448 端口进行 federation,参考官方示例 Configuring a Reverse Proxy
如果使用 443 端口进行 federation,注释掉 8448 port 的两行,增加 .well-known delegation
## For the federation port # listen 8448 ssl http2 default_server; # listen [::]:8448 ssl http2 default_server; # 增加下面两部分 location /.well-known/matrix/client { return 200 '{"m.homeserver": {"base_url": "synapse.matrix.org"}}'; default_type application/json; add_header Access-Control-Allow-Origin *; } location /.well-known/matrix/server { return 200 '{"m.server": "synapse.matrix.org:443"}'; default_type application/json; add_header Access-Control-Allow-Origin *; } location .... # 原来有的别的部分
载入新配置
sudo ln -s /etc/nginx/sites-available/synapse.matrix.org.conf /etc/nginx/sites-enabled/
重启 NGINX
,可能用到的一些 NGINX 相关命令
sudo nginx -t
sudo nginx -s reload # 开启 nginx 之后,修改了配置,只需要用这个命令
sudo systemctl enable nginx
sudo systemctl restart nginx
sudo systemctl status nginx
测试 synapse 服务是否正常运行
在官方的测试网站,测试 synapse
是否正常运行,如果连接没有问题,会显示
> Checks Success
以及
DNS results
server name/.well-known result contains explicit port number: no SRV lookup done
注册新用户
开始注册新用户
register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
homeserver.yaml 的地址要写出来,不然会报错
按照提示为新用户增加信息
New user localpart: erikj
Password:
Confirm password:
Make admin [no]: # no / yes
Success!
配置 turn 语音服务
根据官方教程,就可以配置了,但是官方教程没有指出
sudo nano /etc/default/coturn
去除 TURNSERVER_ENABLED=1
的注释
添加管理面板 synapse-admin
docker run -d -p 8090:80 awesometechnologies/synapse-admin # 8090 是 synapse-admin 出现的端口号
在设置 reverse-proxy 的时候,需要 access to the following endpoints:
/_matrix
/_synapse/admin
如果设置没问题,在 synapse-admin
页面输入 Homeserver URL
的时候,应该显示 synpase 服务器的版本号
手动重置用户密码
如果你忘记了自己的管理员帐号密码,又没有设置邮件服务,那你会需要这部分。
参考 MATRIX - reset password (synapse),SQLite
和 postgreSQL
有各自的操作
我的数据库是 postgreSQL
,首先获得新密码的哈希值
hash_password
进入 postgreSQL
su postgres
psql
依次输入一些数据库操作
\connect synapse
UPDATE users SET
password_hash='$2a$12$q...sp3m' WHERE name='@username:synapse.matrix.org';
\q
\connect synaps
e 是连接到 synapse 的数据库,这里的synapse
是 你在homeserver.yaml
写的数据库名字password_hash
为上面计算出的新密码哈希值WHERE name
后面要换成你自己的用户名
其它
- Hostwinds 更换IP
通过工具检测 ip 情况,国内叉国外勾,说明 ip 可能需要换一个了。
如果是 Hostwinds ,可以免费更换 ip 。这时候在中间灰色一栏选择 Manage IP’s
,再点击最右边的 Fix ISP Block
进行一个换 ip 的操作,耐心等待一会再ping。
注意:
- 选择Fix ISP Block,不要选成Change Main IP了,后面那个换 ip 要加钱
- account 信息中 country 必须填写 China,才有这个免费服务
- 删除 package 相关
查询目前存在的 package 名称和地址
dpkg-statoverride --list
移除 package
dpkg-statoverride --remove <path>
- 永久移除文件的命令:rm
sudo rm /etc/nginx/sites-enabled/synapse.matrix.org.conf
退出 > 的方法:输入
\q;
配置和使用 ufw:记得要打开port 22,教程
Nano操作
- CTRL键 + 6 (或按住 转移 并移动光标)以标记设置并标记您想要的内容。
- ALT + 6 用于复制标记的文本。
- 用Ctrl+Y到上一页,Ctrl+V到下一页
- scp命令:用 scp 可以实现从当前用户拷贝文件到别的用户。
参考
感谢 狐狸
和 chn
,对我的网络之旅的帮助。
官方教程
[1] https://github.com/matrix-org/synapse/blob/develop/docs/setup/installation.md
[2] https://github.com/matrix-org/synapse/blob/develop/docs/postgres.md
[3] https://github.com/matrix-org/synapse/blob/develop/docs/reverse_proxy.md
其它
[3] https://www.informaticar.net/install-matrix-synapse-on-ubuntu-20-04/
[4] https://www.atlantic.net/vps-hosting/how-to-install-matrix-synapse-on-ubuntu-20-04/