在 Ubuntu 22.04 上使用矩阵突触和元素创建聊天服务器

一、介绍

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.comelement.example.comcoturn.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.yamlN

五、安装和配置 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_secretstatic-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 中创建的凭据。登录后,使用安全密钥或短语为您的加密邮件和数据创建安全备份。homeserverhttps://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_urlserver_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

赞(0)
未经允许不得转载:主机百科 » 在 Ubuntu 22.04 上使用矩阵突触和元素创建聊天服务器