一、介绍
Matrix 是一组用于去中心化和端到端加密通信的开放 API。它跨联合服务器集合工作,以实时提供即时消息、IP 语音 (VoIP) 和物联网 (IoT) 通信。它使用家庭服务器来存储帐户信息和聊天记录。联合的工作方式类似于电子邮件,这意味着您可以使用由某人托管的服务器,也可以托管您的 Matrix 服务器,从而更好地控制您的数据。服务器的分散性确保了如果托管聊天的一台服务器离线,通信在其他服务器上继续。
Synapse是用Python编写并由 Matrix.org 团队创建的Matrix的流行家庭服务器实现。本指南将教您在 Ubuntu 22.04 服务器上安装 Matrix Synapse 和 Element Web 客户端。
二、准备工作
- 部署至少具有 2 GB RAM 和一个 vCPU 内核的 Ubuntu 22.04 服务器。
- 创建具有 sudo 权限的非 root 用户。
- 更新服务器。
- 创建子域 、 并指向您的服务器。
matrix.example.com
element.example.com
coturn.example.com
三、配置防火墙
Matrix Synapse 需要 HTTP 和 HTTPS 端口才能工作。
使用简单防火墙 (UFW) 打开它们。
$ sudo ufw allow http
$ sudo ufw allow https
根据矩阵的要求打开端口 8448。
$ sudo ufw allow 8448
检查防火墙状态以确认。
四、安装矩阵突触
下载并导入 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
安装矩阵突触。
$ sudo apt install matrix-synapse-py3
在安装过程中输入您的矩阵域名作为服务器名称。您可以稍后在文件中更改它。输入以停止报告匿名统计信息。/etc/matrix-synapse/conf.d/server_name.yaml
N
五、安装和配置 PostgreSQL
Synapse 默认支持 SQLite 数据库,由于性能问题,该数据库不适合生产环境。
安装 PostgreSQL 服务器。
$ sudo apt install postgresql postgresql-contrib
登录到 PostgreSQL shell。
$ sudo -su postgres psql
创建 Synapse SQL 用户。
# CREATE ROLE syanpse LOGIN PASSWORD 'yourpassword`;
创建突触数据库。
# CREATE DATABASE synapsedb OWNER synapse LOCALE 'C' ENCODING 'UTF-8' TEMPLATE template0;
退出。
# exit
六、 安装云
Ubuntu 22.04 附带了旧版本的 Nginx。添加官方 Nginx 存储库以安装最新版本。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库列表。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
启动 Nginx 服务器。
$ sudo systemctl start nginx
七、安装 SSL
发出以下命令以确保您具有安装 Certbot 所需的最新版本。snapd
$ sudo snap install core
$ sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
为 Certbot 创建一个指向目录的符号链接。/usr/bin
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
颁发 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d matrix.example.com
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
试运行 SSL 续订过程以确保其正常工作。
$ sudo certbot renew --dry-run
八、配置突触
您可以使用该文件配置 Snypase,但不应在生产环境中使用它,因为它在 APT 更新期间会被覆盖。/etc/matrix-synapse/homeserver.yaml
应通过在目录中创建文件来配置 Synapse。/etc/matrix-synapse/conf.d/
创建数据库配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/database.yaml
将以下行粘贴到编辑器中。替换为步骤 3 中设置的数据库用户。yourpassword
database:
name: psycopg2
args:
user: synapse
password: 'yourpassword'
database: synapsedb
host: localhost
cp_min: 5
cp_max: 10
按 + 保存文件,然后按 。CTRLXY
创建注册密钥并将其存储在文件中。/etc/matrix-synapse/conf.d/registration_shared_secret.key
$ 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
创建一个新的矩阵用户。键入以将其设置为管理员。yes
$ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008
默认情况下,Synapse 不允许公共注册。创建配置文件以启用它。
$ 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: 'noreply@example.com'
smtp_pass: 'password'
# Optional, require encryption with STARTTLS
require_transport_security: true
app_name: 'Example Chat' # defines value for %(app)s in notif_from and email subject
notif_from: "%(app)s <noreply@example.com>"
您可以使用以下代码禁用用户验证。
enable_registration_without_verification: true
按 + 保存文件,然后按 。CTRLXY
默认情况下,Synapse 显示用户的联机状态,这可能会导致高 CPU 使用率。要禁用状态,请创建新的配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/presence.yaml
粘贴以下行。
presence:
enabled: false
按 + 保存文件,然后按 。CTRLXY
重新启动 Synapse 以应用更改。
$ sudo systemctl restart matrix-synapse
九、配置 Nginx
打开 Nginx 配置文件。
$ sudo nano /etc/nginx/nginx.conf
在该行之前添加以下行。/etc/nginx/conf.d/*.conf
server_names_hash_bucket_size 64;
按 + 保存文件,然后按 。CTRLXY
为 Synapse 创建一个 Nginx 配置文件。
$ 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_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
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;
}
}
按 + 保存文件,然后按 。CTRLXY
验证配置文件语法。
$ sudo nginx -t
重新启动 Nginx 服务器。
$ sudo systemctl restart nginx
十、 安装 Coturn
您需要在 NAT (TURN) 服务器周围安装使用中继的遍历才能使用视频和语音呼叫。
安装Coturn。
$ sudo apt install coturn
打开 TURN 和 UDP 端口。
$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp
为 Coturn 颁发 SSL 证书。
$ sudo certbot certonly --nginx -d coturn.example.com
备份默认配置文件。
$ sudo mv /etc/turnserver.conf /etc/turnserver.conf.bak
生成身份验证密钥并将其存储在配置文件中。
$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf
打开 Coturn 配置文件。
$ sudo nano /etc/turnserver.conf
将以下行粘贴到身份验证密钥下方。
use-auth-secret
realm=coturn.example.com
cert=/etc/letsencrypt/live/coturn.example.com/fullchain.pem
pkey=/etc/letsencrypt/live/coturn.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
按 + 保存文件,然后按 。CTRLXY
重新启动Coturn以应用设置。
$ sudo systemctl restart coturn
为 Coturn 创建一个 Synapse 配置文件。
$ sudo nano /etc/matrix-synapse/conf.d/turn.yaml
将以下行粘贴到编辑器中。将该值替换为文件中变量的值。turn_shared_secret
static-auth-secret
\etc\turnserver.conf
turn_uris: [ "turn:coturn.example.com?transport=udp", "turn:coturn.example.com?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True
按 + 保存文件,然后按 。CTRLXY
重新启动 Synapse 以应用配置。
$ sudo systemctl restart matrix-synapse
十一、 使用矩阵
可以通过任何可用的矩阵客户端使用 Synapse。Element 是最受欢迎的客户端,可作为 Web 应用程序、桌面和移动应用程序使用。
登录时添加您的地址。使用您在步骤 6 中创建的凭据。登录后,使用安全密钥或短语为您的加密邮件和数据创建安全备份。homeserver
https://matrix.example.com
如果要托管 Element Web 客户端的实例,请按照以下说明操作。
十二、安装元素
安装 JSON 文本处理器。
$ sudo apt install jq
为 Element 创建一个公共目录。
$ sudo mkdir -p /var/www/element
切换到目录。
$ cd /var/www/element
从其GitHub发布页面获取最新版本的Element。
$ latest="$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r .tag_name)"
下载元素。
$ sudo wget https://github.com/vector-im/element-web/releases/download/${latest}/element-${latest}.tar.gz
提取存档。
$ sudo tar xf element-${latest}.tar.gz
创建另一个目录作为软链接。
$ sudo ln -s element-${latest} current
若要在将来更新 Element,请在解压缩存档后运行以下命令以更新软链接。
$ sudo ln -nfs element-${latest} current
十三、配置元素
切换到目录。current
$ cd current
使用示例创建元素配置文件。
$ sudo cp config.sample.json config.json
打开配置文件。
$ sudo nano config.json
编辑引用矩阵子域和基本域的 和 属性。base_url
server_name
"m.homeserver": {
"base_url": "https://matrix.example.com",
"server_name": "matrix.element.com"
},
如果要自定义网站标题,请更改品牌名称。
"brand": "My Example Chat",
编辑变量以禁止来宾使用元素。disable_guests
"disable_guests": true,
按 + 保存文件,然后按 。CTRLXY
为元素客户端生成 SSL 证书。
$ sudo certbot certonly --nginx -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_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
按 + 保存文件,然后按 。CTRLXY
验证 Nginx 配置文件语法。
$ sudo nginx -t
重新启动 Nginx 服务器。
$ sudo systemctl restart nginx
您可以通过 URL 访问元素。https://element.example.com