本页内容
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Matrix Synapse
- 第 3 步 - 安装并配置 PostgreSQL
- 第 4 步 - 安装 Nginx
- 第 5 步 - 安装 SSL
- 第 6 步 - 配置 Matrix Synapse
- 第 7 步 - 配置 Nginx
- 第 8 步 - 安装 Coturn
- 第 9 步 - 访问 Matrix
- 第 10 步 - 安装 Element
- 第 11 步 - 配置 Element
- 结论
Matrix 是一种用于去中心化和端到端加密通信的开放标准。它是一组服务器和服务的集合,这些服务器和服务使用标准化的 API 相互通信,并实时同步。它使用 homeserver 来存储账户信息和聊天历史记录。如果某个 homeserver 宕机,由于去中心化的特性,其他服务器可以继续通信而不会出现问题。你可以使用他人托管的 Matrix homeserver,也可以自行托管以维护对自己数据的控制。
在本教程中,你将学习如何使用 Synapse(Matrix 的一个 homeserver 实现)来安装并创建一个聊天服务器。Element 是一个使用 Matrix React SDK 构建的 Matrix Web 客户端。这将使你能够在 Web 上提供 Matrix 聊天服务。你也可以使用你选择的任何其他 Matrix 客户端来使用此服务器。我们还将安装 Coturn 服务器以启用语音和视频通话。如果你不打算使用,Coturn 服务是可选的。
先决条件
- 一台运行 Debian 12 的服务器。
- 一个具有 root 权限的非 sudo 用户。
- uncomplicated Firewall(UFW)已启用并正在运行。
- 指向你服务器的 Matrix、Element 和 Coturn 的完全限定域名(FQDN)。我们将为这三个服务分别使用 matrix.example.com、element.example.com 和 coturn.example.com。
- 确保所有内容都已更新。$ sudo apt update && sudo apt upgrade
一台运行 Debian 12 的服务器。
一个具有 root 权限的非 sudo 用户。
uncomplicated Firewall(UFW)已启用并正在运行。
指向你服务器的 Matrix、Element 和 Coturn 的完全限定域名(FQDN)。我们将为这三个服务分别使用 matrix.example.com、element.example.com 和 coturn.example.com。
确保所有内容都已更新。
$ sudo apt update && sudo apt upgrade
第 1 步 - 配置防火墙
在安装任何软件包之前,第一步是配置防火墙以开放 HTTP、HTTPS 和 Synapse 的端口。
检查防火墙的状态。
$ sudo ufw status
你应该会看到类似以下的内容。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
在防火墙中开放 HTTP、HTTPS 和 Synapse 端口。
$ sudo ufw allow 8448
$ sudo ufw allow http
$ sudo ufw allow https
再次检查状态以确认。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
8448 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
8448 (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 Matrix Synapse
添加 Matrix 的 GPG 密钥。
$ sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
添加 Matrix 的 APT 仓库。
$ 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
安装 Matrix Synapse。
$ sudo apt install matrix-synapse-py3
在安装过程中,系统会要求你输入服务器名称,它构成了你 Matrix ID 的一部分。请输入你的 Matrix 域名来代替它。这将作为你的 homeserver 地址。

系统还会询问你是否愿意将关于你 homeserver 的匿名统计信息发送回 Matrix。输入 N 以拒绝。

你可以在稍后通过文件 /etc/matrix-synapse/conf.d/server_name.yaml 更改这些设置。
Matrix Synapse 的服务在安装期间已启用并启动。检查该服务的状态。
$ sudo systemctl status matrix-synapse
? matrix-synapse.service - Synapse Matrix homeserver
Loaded: loaded (/lib/systemd/system/matrix-synapse.service; enabled; preset: enabled)
Active: active (running) since Mon 2023-10-02 07:47:43 UTC; 1min 33s ago
Process: 1558 ExecStartPre=/opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/ --generate-keys (code=>
Main PID: 1563 (python)
Tasks: 8 (limit: 2315)
Memory: 102.7M
CPU: 3.609s
CGroup: /system.slice/matrix-synapse.service
??1563 /opt/venvs/matrix-synapse/bin/python -m synapse.app.homeserver --config-path=/etc/matrix-synapse/homeserver.yaml --config-path=/etc/matrix-synapse/conf.d/
Oct 02 07:47:41 lomp matrix-synapse[1558]: Generating signing key file /etc/matrix-synapse/homeserver.signing.key
Oct 02 07:47:43 lomp matrix-synapse[1563]: This server is configured to use 'matrix.org' as its trusted key server via the
Oct 02 07:47:43 lomp matrix-synapse[1563]: 'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
Oct 02 07:47:43 lomp matrix-synapse[1563]: server since it is long-lived, stable and trusted. However, some admins may
Oct 02 07:47:43 lomp matrix-synapse[1563]: wish to use another server for this purpose.
Oct 02 07:47:43 lomp matrix-synapse[1563]: To suppress this warning and continue using 'matrix.org', admins should set
Oct 02 07:47:43 lomp matrix-synapse[1563]: 'suppress_key_server_warning' to 'true' in homeserver.yaml.
Oct 02 07:47:43 lomp matrix-synapse[1563]: --------------------------------------------------------------------------------
Oct 02 07:47:43 lomp matrix-synapse[1563]: Config is missing macaroon_secret_key
Oct 02 07:47:43 lomp systemd[1]: Started matrix-synapse.service - Synapse Matrix homeserver.
第 3 步 - 安装并配置 PostgreSQL
我们将使用 PostgreSQL 的官方 APT 仓库来安装最新版本的 PostgreSQL。运行以下命令以添加 PostgreSQL 的 GPG 密钥。
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
将 APT 仓库添加到你的源列表中。
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
更新系统仓库。
$ sudo apt update
现在,你可以使用以下命令安装 PostgreSQL。
$ sudo apt install postgresql postgresql-contrib
在编写本教程时,PostgreSQL 16 是最新版本。要安装其他版本,请按如下方式修改命令,该命令将改为安装 PostgreSQL 14。
$ sudo apt install postgresql-14 postgresql-contrib-14
检查 PostgreSQL 服务的状态。
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
Active: active (exited) since Mon 2023-10-02 07:51:10 UTC; 13s ago
Main PID: 4001 (code=exited, status=0/SUCCESS)
CPU: 1ms
Oct 02 07:51:10 lomp systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Oct 02 07:51:10 lomp systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
你可以看到该服务默认已启用并正在运行。
登录到 postgres 系统账户。
$ sudo -su postgres
为 PostgreSQL 创建一个新的数据库用户和数据库。
$ createuser --pwprompt synapse
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapsedb
退出 postgres 账户。
$ exit
第 4 步 - 安装 Nginx
对于生产环境,建议使用 Nginx 代理来运行 Synapse 服务器。
Debian 12 自带的 Nginx 版本较旧。要安装最新版本,你需要下载官方的 Nginx 仓库。
导入 Nginx 的签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版的仓库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
更新系统仓库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。由于我们使用的是 Debian,以下命令需要使用 sudo 权限运行。
$ sudo nginx -v
nginx version: nginx/1.24.0
启动 Nginx 服务器。
$ sudo systemctl start nginx
检查服务的状态。
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Mon 2023-10-02 07:59:12 UTC; 1s ago
Docs: https://nginx.org/en/docs/
Process: 5767 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 5768 (nginx)
Tasks: 2 (limit: 2315)
Memory: 1.7M
CPU: 7ms
CGroup: /system.slice/nginx.service
??5768 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??5769 "nginx: worker process"
第 5 步 - 安装 SSL
我们需要安装 Certbot 来生成由 Let's Encrypt 提供的免费 SSL 证书。你可以使用 Debian 的仓库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Debian 12 默认未安装 Snapd。运行以下命令以安装 Snapd。
$ sudo apt install snapd -y
运行以下命令以确保你的 Snapd 版本是最新的。
$ sudo snap install core
$ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令,通过创建指向 /usr/bin 目录的符号链接,确保 Certbot 命令可以运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
检查 Certbot 版本。
$ certbot --version
certbot 2.6.0
运行以下命令以生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d matrix.example.com
上述命令会将证书下载到你服务器上的 /etc/letsencrypt/live/matrix.example.com 目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查 Certbot 续期调度服务。
$ sudo systemctl list-timers
你会发现 snap.certbot.renew.service 是计划运行的服务之一。
NEXT LEFT LAST PASSED UNIT ACTIVATES
.....
Mon 2023-10-02 16:33:00 UTC 8h left - - snap.certbot.renew.timer snap.certbot.renew.service
Tue 2023-10-03 00:00:00 UTC 15h left - - dpkg-db-backup.timer dpkg-db-backup.service
Tue 2023-10-03 00:00:00 UTC 15h left Mon 2023-10-02 07:38:16 UTC 26min ago exim4-base.timer exim4-base.service
对流程进行一次演练(dry run),以检查 SSL 续期是否正常工作。
$ sudo certbot renew --dry-run
如果你没有看到任何错误,说明一切就绪。你的证书将自动续期。
第 6 步 - 配置 Matrix Synapse
你可以通过 /etc/matrix-synapse/homeserver.yaml 文件配置 Matrix 服务器,但不建议这样做,因为该文件在每次升级后都会被覆盖。对于生产环境,你应将配置文件放在 /etc/matrix-synapse/conf.d 文件夹中。
Synapse 的安装会在 /etc/matrix-synapse/conf.d 文件夹中创建两个配置文件。
$ ls /etc/matrix-synapse/conf.d
report_stats.yaml server_name.yaml
为数据库创建一个新的配置文件并将其打开以进行编辑。
$ sudo nano /etc/matrix-synapse/conf.d/database.yaml
在编辑器中粘贴以下行。将 your-password 字段替换为你在第 3 步创建的 PostgreSQL 用户密码。如果你在其他地方托管数据库,请将 localhost 替换为你的服务器 IP 地址。
database:
name: psycopg2
args:
user: synapse
password: 'your-password'
database: synapsedb
host: localhost
cp_min: 5
cp_max: 10
按 Ctrl + X 保存文件,并在提示时输入 Y。
创建一个私密注册密钥。该密钥应妥善保管,因为它将允许任何人注册新用户,即使注册功能已禁用。
$ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee /etc/matrix-synapse/conf.d/registration_shared_secret.yaml
registration_shared_secret: 'vgd73p26ZDaFExpX4OPv45DsA2ZMAxiVZR7um9fBoBoFESmg5MSs68xAMUhwQ8Zn3NqcZMRSqxLeIFatppfne7xD2RHL16YfuIKmNeJ1FClQszO1SZknUVwOPyDiPe5gCCWgD9cHfa3dLTdZND5Y0SdH7GBkwYqKjibAe0JoQc8mKty3HWd6uIga3QewhtXr3b3Hpk8sr6zYpXvaBtWRHwaSWcLooqbWF8LPbSyrC0BVAKzXObUwqRGyDpkrnMiY'
默认情况下,Synapse 启用了显示某人是否在线状态指示器。这可能会导致较高的 CPU 使用率,因此你可以禁用它。为此创建一个新的配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/presence.yaml
在编辑器中粘贴以下行。
presence:
enabled: false
按 Ctrl + X 保存文件,并在提示时输入 Y。
重启 Synapse 服务以应用更改。
$ sudo systemctl restart matrix-synapse
创建一个新的 Matrix 用户。系统会要求你输入用户名和密码。由于这是我们创建的第一个用户,当被问及是否将该用户设为管理员时,请输入 yes。
$ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008
New user localpart [navjot]: navjot
Password:
Confirm password:
Make admin [no]: yes
Sending registration request...
Success!
如果你想开放公开注册,请创建一个新的配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/registration.yaml
在其中粘贴以下行。
enable_registration: true
默认情况下,Synapse 不允许在没有电子邮件验证的情况下注册。要启用电子邮件验证,请粘贴以下行。
registrations_require_3pid:
- email
email:
smtp_host: mail.example.com
smtp_port: 587
# If mail server has no authentication, skip these 2 lines
smtp_user: '
[email protected]
'
smtp_pass: 'password'
# Optional, require encryption with STARTTLS
require_transport_security: true
app_name: 'HowtoForge Example Chat' # defines value for %(app)s in notif_from and email subject
notif_from: "%(app)s <
[email protected]
>"
要禁用电子邮件验证,请改为粘贴以下行。
enable_registration_without_verification: true
按 Ctrl + X 保存文件,并在提示时输入 Y。
重启 Synapse 以应用配置。
$ sudo systemctl restart matrix-synapse
第 7 步 - 配置 Nginx
打开文件 /etc/nginx/nginx.conf 进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下行。
server_names_hash_bucket_size 64;
按 Ctrl + X 保存文件,并在提示时输入 Y。
创建并打开文件 /etc/nginx/conf.d/synapse.conf 进行编辑。
$ sudo nano /etc/nginx/conf.d/synapse.conf
在其中粘贴以下代码。
# enforce HTTPS
server {
# Client port
listen 80;
listen [::]:80;
server_name matrix.example.com;
return 301 https://$host$request_uri;
}
server {
server_name matrix.example.com;
# Client port
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Federation port
listen 8448 ssl http2 default_server;
listen [::]:8448 ssl http2 default_server;
access_log /var/log/nginx/synapse.access.log;
error_log /var/log/nginx/synapse.error.log;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
tcp_nopush on;
gzip on;
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size 50M;
}
}
完成后按 Ctrl + X 保存文件,并在提示时输入 Y。上述配置基于以下假设:example.com 和 matrix.example.com 这两个域名的 IP 地址指向同一台服务器。如果不是这样,则请使用以下针对 example.com 服务器的配置文件。
server {
server_name example.com;
listen 443 ssl http2;
listen [::]:443 ssl http2;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# Redirect
location ~ ^(/_matrix|/_synapse/client) {
return 301 "https://matrix.example.com$request_uri";
}
# Client homeserver autodiscovery
location /.well-known/matrix/client {
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '{ "m.homeserver": { "base_url": "https://matrix.example.com" } }';
}
# Domain delegation
location /.well-known/matrix/server {
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '{ "m.server": "matrix.example.com" }';
}
}
验证 Nginx 配置文件语法。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务。
$ sudo systemctl restart nginx
第 8 步 - 安装 Coturn
要启用语音和视频通话,你需要安装一个 NAT 穿透中继(TURN)服务器。为此,我们将安装 Coturn 软件包。如果你不需要此功能,可以跳过此步骤。
安装 Coturn。
$ sudo apt install coturn
开放 TURN 和 UDP 端口。
$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp
为 Turn 生成 SSL 证书(turn.example.com)。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d turn.example.com
生成一个认证密钥(secret)并将其保存在配置文件中。
$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf
static-auth-secret=OcKBLuwpE6IyMoi9mPccjVFaL7PwJRFUuKh5EvGBVcvB7tunevQ3cpP74we8cF4XSN8lFNrgqxJeyItKOcoOABwjdTNChmJeB4WMrsLV2JNsPs3U61s9rRijj3OxBpZux0CGft8CiyNDweVLqqxNaYphNesoAT4y51RxLVdAP2ros9S3jRR7IYRccJVRMpqTa8USBuBqAkzRRPLbFOHsC6QHur2oiySuW6sqs4YkH65N8kReSzgi7Fq2Zll3RO5e
打开配置文件进行编辑。
$ sudo nano /etc/turnserver.conf
在认证密钥下方粘贴以下行。
use-auth-secret
realm=turn.example.com
cert=/etc/letsencrypt/live/turn.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.com/privkey.pem
# VoIP is UDP, no need for TCP
no-tcp-relay
# Do not allow traffic to private IP ranges
no-multicast-peers
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Limit number of sessions per user
user-quota=12
# Limit total number of sessions
total-quota=1200
按 Ctrl + X 保存文件,并在提示时输入 Y。
重启 Coturn 以应用配置。
$ sudo systemctl restart coturn
为 Coturn 创建一个新的 Synapse 配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/turn.yaml
在其中粘贴以下行。将 turn_shared_secret 的值替换为来自 \etc\turnserver.conf 文件中的 static-auth-secret 的值。
turn_uris: [ "turn:turn.example.com?transport=udp", "turn:turn.example.com?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True
按 Ctrl + X 保存文件,并在提示时输入 Y。
重启 Synapse 以应用更改。
$ sudo systemctl restart matrix-synapse
第 9 步 - 访问 Matrix
你可以使用位于 https://app.element.io 的 Element Web 客户端访问 Matrix Chat。点击 Sign in 按钮继续。

点击 Homeserver 下方的 Edit 链接。输入 matrix.example.com 作为你的 homeserver。

如果客户端正确检测到你的 homeserver,边框和文本将变为绿色,否则将显示为红色。点击 Continue 继续。

点击 Sign in 按钮登录。系统会要求你创建一个安全的加密备份。

选择 Enter a Security Phrase 选项,创建一个安全短语,每次登录时都需要它。点击 Continue 继续。

输入一个安全短语并点击 Continue 按钮继续。在下一个屏幕上,系统会要求你再次确认。

再次输入该短语并点击 Continue 继续。

系统会提供一组安全密钥,如果你忘记安全短语,可以使用它们。点击 Download 按钮将其保存。
点击 Continue 按钮继续。

系统会要求你输入账户密码。输入密码并点击 Continue 按钮,完成加密备份的设置。

我们使用主页上的 Create a Group Chat 按钮创建了一个名为 HowtoForge 的群聊房间。点击该按钮时,你会看到以下弹窗。

你可以通过展开高级菜单并选择相应选项,将成员限制在该域名内。点击 Create room 按钮完成房间创建。
第 10 步 - 安装 Element
安装 jq 软件包,它是一个 JSON 文本处理器。我们将使用它从 Element 的 GitHub 仓库获取最新版本,这样无需手动添加版本号,并且可以使用单条命令进行更新。
$ sudo apt install jq
为 Element 创建一个目录。
$ sudo mkdir -p /var/www/element
创建一个用于获取最新 Element 版本的新文件。
$ sudo nano /var/www/element/update.sh
向其中添加以下行。
#!/bin/sh
set -e
install_location="/var/www/element"
latest="$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r .tag_name)"
cd "$install_location"
[ ! -d "archive" ] && mkdir -p "archive"
[ -d "archive/element-${latest}" ] && rm -r "archive/element-${latest}"
[ -f "archive/element-${latest}.tar.gz" ] && rm "archive/element-${latest}.tar.gz"
wget "https://github.com/vector-im/element-web/releases/download/${latest}/element-${latest}.tar.gz" -P "archive"
tar xf "archive/element-${latest}.tar.gz" -C "archive"
[ -L "${install_location}/current" ] && rm "${install_location}/current"
ln -sf "${install_location}/archive/element-${latest}" "${install_location}/current"
ln -sf "${install_location}/config.json" "${install_location}/current/config.json"
按 Ctrl + X 保存文件,并在提示时输入 Y。
使该文件可执行。
$ sudo chmod +x /var/www/element/update.sh
运行脚本以下载 Element。
$ sudo /var/www/element/update.sh
第 11 步 - 配置 Element
复制同样的 Element 配置文件。
$ sudo cp /var/www/element/current/config.sample.json /var/www/element/config.json
打开配置文件进行编辑。
$ sudo nano /var/www/element/config.json
找到以下行。
"m.homeserver": {
"base_url": "https://matrix-client.matrix.org",
"server_name": "matrix.org"
},
将默认的 Matrix homeserver 地址更改为你的 homeserver,并移除 server_name 变量。
"m.homeserver": {
"base_url": "https://matrix.example.com",
"server_name": "example.com"
},
如果你想在网站标题中使用你自己的名称而不是 Element,请更改品牌名称(brand name)。
"brand": "HowtoForge Example Chat",
将 disable_guests 变量设为 true,以禁止访客(Guests)使用 Element。
"disable_guests": true,
按 Ctrl + X 保存文件,并在提示时输入 Y。
为 Element 客户端生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d element.example.com
创建并打开文件 /etc/nginx/conf.d/element.conf 进行编辑。
$ sudo nano /etc/nginx/conf.d/element.conf
在其中粘贴以下行。
server {
listen 80;
listen [::]:80;
server_name element.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name element.example.com;
root /var/www/element/current;
index index.html;
access_log /var/log/nginx/element.access.log;
error_log /var/log/nginx/element.error.log;
add_header Referrer-Policy "strict-origin" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/element.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/element.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/element.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
}
按 Ctrl + X 保存文件,并在提示时输入 Y。
验证 Nginx 配置文件语法。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务。
$ sudo systemctl restart nginx
你可以在浏览器中通过 URL https://element.example.com 访问 Element 客户端。登录后,你将进入应用仪表板。系统会要求你先使用 https://app.element.io 验证该应用。确保你已登录原始 Element 应用,系统会要求你匹配表情符号(emoji)。验证完成后,你将看到以下仪表板。

结论
至此,我们关于在 Debian 12 机器上使用 Nginx 作为代理服务器安装 Matrix Synapse 聊天服务器以及 Coturn 和 Element Web 客户端的教程就结束了。如果你有任何问题,请在下方评论中发表。