Matrix является открытым стандартом для децентрализованной и сквозной зашифрованной связи. Он объединяется с помощью домашних серверов, которые общаются друг с другом через Интернет. Домашние серверы хранят данные о своих пользователях и историю чата созданных комнат (включая комнаты, происходящие от других домашних серверов). Из-за природы децентрализации, когда оригинальный домашний сервер, который создал комнату, отключается, другие домашние серверы могут продолжать общение без проблем. Из-за этой конструкции нет ни одной точки отказа.

В этой статье рассмотрим установку и настройку собственного сервера Matrix Synapse ( Home server ) с возможностью осуществления аудио и видео звонков.

Предпосылки

  • Сервер с Ubuntu 24.04 в качестве ОС
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo.

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя.

Шаг 1. Обновите систему

Свежая установка Ubuntu 24.04 требует обновления пакетов до последних доступных версий.

1
$ sudo apt update -y && sudo apt upgrade -y

Шаг 2. Установите Synapse

Подключаем репозиторий Matrix Synapse и устанавливаем Synapse Home server.

1
2
$ 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

Установите Synapse.

1
2
$ sudo apt update
$ sudo apt install matrix-synapse-py3

Во время установки введите имя сервера, который является частью вашего идентификатора матрицы. Вы можете изменить это позже в /etc/matrix-synapse/conf.d/server_name.yaml.

Управление сервисом.

1
2
3
$ sudo systemctl stop matrix-synapse.service — остановка
$ sudo systemctl start matrix-synapse.service — запуск
$ sudo systemctl restart matrix-synapse.service — перезагрузка

Шаг 3. Установите PostgreSQL

Хотя Synapse поддерживает использование SQLite в качестве базы данных, он не рекомендуется в производстве из-за проблем с производительностью.

1
sudo apt install postgresql

После установки PostgreSQL сервис автоматически запустится. Войдите в пользователь PostgreSQL.

1
$ sudo -su postgres

Создайте synapse_user пользователя и synapse_db базы данных для PostgreSQL.

1
2
3
4
5
6
$ createuser --pwprompt synapse_user
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse_db
$ psql
postgres=# ALTER USER synapse_user with PASSWORD 'YourStrongPasswordHere';
postgres=# \q
$ exit

Шаг 4. Установка и настройка Nginx с помощью TLS

Synapse поддерживает автономное функционирование без обратного прокси, но в производстве это не рекомендуется.

Установите Nginx и Certbot.

1
$ sudo apt install nginx certbot python3-certbot-nginx

Откройте порты HTTP, HTTPS и Synapse в брандмауэре.

1
2
3
$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 8448

Получите сертификат TLS от Let’s Encrypt.

1
$ sudo certbot certonly --nginx -d matrix.example.org -d example.org

Создайте новый файл конфигурации Nginx.

1
$ sudo nano /etc/nginx/sites-available/synapse.conf

Добавьте следующие строки в файл конфигурации.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {
    server_name matrix.example.org;

    # Client port
    listen 80;
    listen [::]:80;

    return 301 https://$host$request_uri;
}

server {
    server_name matrix.example.org;

    # Client port
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Federation port
    listen 8448 ssl;
    listen [::]:8448 ssl;

    # TLS configuration
    ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers 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;

            # Default Synapse upload size.
            # If you change max_upload_size in Synapse config, update it here too.
            client_max_body_size 50M;
    }
}

Замените matrix.example.org своим доменным именем или поддоменным именем, указывающим на IP-адрес вашего сервера. Затем сохраните файл и выйдите из редактора.

Включите конфигурацию.

1
$ sudo ln -s /etc/nginx/sites-available/synapse.conf /etc/nginx/sites-enabled/synapse.conf

Проверка конфигурации и перезагрузите службу Nginx.

1
2
$ sudo nginx -t
$ sudo systemctl reload nginx.service

Шаг 5. Настройте Synapse

Вы можете редактировать файл конфигурации на /etc/matrix-synapse/homeserver.yaml, но вместо этого вы должны размещать изменения в /etc/matrix-synapse/conf.d/, чтобы apt не просил перезаписывать файл конфигурации после каждого обновления Synapse.

Создайте новый файл конфигурации базы данных.

1
$ sudo nano /etc/matrix-synapse/conf.d/database.yaml

Добавьте следующие строки в файл конфигурации. Замените значение пароля на пароль, установленный ранее для пользователя synapse PostgreSQL.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
database:
  name: psycopg2
  args:
    user: synapse_user
    password: 'YourStrongPasswordHere'
    database: synapse_db
    host: localhost
    port: 5432
    cp_min: 5
    cp_max: 10

Создайте секретный регистрационный ключ. Держите его в безопасности, потому что любой, у кого есть ключ, может зарегистрировать нового пользователя, даже если регистрация отключена.

1
$ 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

По умолчанию Synapse позволяет использовать индикаторы присутствия, которые показывают, находится ли человек в сети. Это может привести к высокому использованию процессора, и многие домашние серверы отключают их. Для этого создайте новый файл конфигурации.

1
$ sudo nano /etc/matrix-synapse/conf.d/presence.yaml

Добавьте следующие строки в файл конфигурации.

1
2
presence:
  enabled: false

Перезагрузите Synapse для применения новой конфигурации.

1
$ sudo systemctl restart matrix-synapse.service

Для тестирования в командной строке создаются пользователи.

1
$ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008

Чтобы открыть публичную регистрацию, создайте новую конфигурацию.

1
$ sudo nano /etc/matrix-synapse/conf.d/registration.yaml

Добавьте следующие строки в файл конфигурации.

1
enable_registration: true

По умолчанию Synapse не разрешает регистрацию без проверки. Чтобы включить проверку электронной почты, добавьте следующие строки.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
registrations_require_3pid:
  - email

email:
  smtp_host: mail.example.org
  smtp_port: 587

  # If mail server has no authentication, skip these 2 lines
  smtp_user: 'noreply@example.org'
  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.org>"

Чтобы не иметь какой-либо формы проверки, добавьте следующую строку.

1
enable_registration_without_verification: true

Перезагрузите Synapse для применения новой конфигурации.

1
$ sudo systemctl restart matrix-synapse.service

Чтобы убедиться, что Synapse работает, откройте /_matrix/static/ на вашем домене Matrix в вашем браузере. Например:

1
https://matrix.example.org/\_matrix/static/

Чтобы проверить, работает ли федерация с другими домашними серверами, откройте тестер федерации, введите имя сервера Матрицы и нажмите «Перейти».

Шаг 6. Установите и настроите Coturn

Для поддержки голосовые и видеозвонки потребуется установка и настройка собственного TURN-сервера.

1
$ sudo apt install coturn

Откройте порты TURN и UDP.

1
2
3
$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp

Получите сертификат TLS от Let’s Encrypt.

1
$ sudo certbot certonly --nginx -d turn.example.org

Создайте секрет аутентификации.

1
$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf

Простейший рабочий файл конфигурации TURN-сервера.

1
$ sudo nano /etc/turnserver.conf

Добавьте следующие строки в файл конфигурации.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use-auth-secret
realm=turn.example.org
cert=/etc/letsencrypt/live/turn.example.org/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.org/privkey.pem

# VoIP — это UDP, нет необходимости в TCP
no-tcp-relay

# Не допускайте трафик в частные IP-диапазоны
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

# Ограниченное количество сеансов на пользователя
user-quota=12
# Ограничение общего числа сессий
total-quota=1200

Перезагрузите Coturn для перезагрузки конфигурации.

1
$ sudo systemctl restart coturn.service

Создайте новый файл конфигурации Synapse.

1
$ sudo nano /etc/matrix-synapse/conf.d/turn.yaml

Добавьте следующие строки в файл конфигурации. Заменить значение turn_shared_secret значением static-auth-secret от /etc/turnserver.conf.

1
2
3
4
turn_uris: [ "turn:turn.example.org?transport=udp", "turn:turn.example.org?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True

Перезагрузите Synapse для применения новой конфигурации.

1
$ sudo systemctl restart matrix-synapse.service

Шаг 7. Использование Matrix

Synapse теперь настроен, и вы можете использовать его с любым клиентом Matrix. Element является самым популярным клиентом Matrix, который доступен в качестве размещенного веб-приложения.

Если вы хотите разместить свой собственный экземпляр элемента, ознакомьтесь с инструкциями по его установке и настройке.

Чтобы войти в свой клиент Matrix, введите полный идентификатор Matrix (например, @bob:example.org) в поле имени пользователя. Большинство клиентов, таких как Element, автоматически получают информацию о домашнем сервере. Если это не работает, проверьте, имеет ли URL-адрес /.well-known/matrix/client/ на вашем сервере Matrix правильную информацию о домашнем сервере. Если это так, ваш клиент не поддерживает обнаружение домашнего сервера, и вам нужно вставить адрес домашнего сервера вручную.

Шаг 8. Установите Element

Установить jq.

1
$ sudo apt install jq

Создайте каталог для Element.

1
$ sudo mkdir -p /var/www/element

Создайте новый файл для получения новейшего выпуска Element.

1
$ sudo nano /var/www/element/update.sh

Добавьте в файл следующие строки.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/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"

Сделайте файл как исполняемый.

1
$ sudo chmod +x /var/www/element/update.sh

Выполните файл для загрузки элемента.

1
$ sudo /var/www/element/update.sh

Чтобы обновить Element в будущем, перезапустите команду.

Шаг 9. Настройте Element

Скопируйте конфигурацию Element образца.

1
$ sudo cp /var/www/element/current/config.sample.json /var/www/element/config.json

Отредактируйте файл конфигурации.

1
$ sudo nano /var/www/element/config.json

Измените адрес домашней службы matrix.org по умолчанию на свой домашний сервер.

1
2
3
4
"m.homeserver": {
    "base_url": "https://matrix.example.org",
    "server_name": "example.org"
},

Если вы хотите использовать свое имя вместо Element в названии сайта и других местах, измените название бренда.

1
"brand": "My Example Chat",

Получите сертификат TLS от Let’s Encrypt.

1
$ sudo certbot certonly --nginx -d element.example.org

Создайте новый файл конфигурации Nginx.

1
$ sudo nano /etc/nginx/sites-available/element.conf

Добавьте следующие строки в файл конфигурации.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
    listen 80;
    listen [::]:80;

    server_name element.example.org;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name element.example.org;

    root /var/www/element/current;
    index index.html;

    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.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/element.example.org/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
}

Включите конфигурацию.

1
$ sudo ln -s /etc/nginx/sites-available/element.conf /etc/nginx/sites-enabled/element.conf

Проверка конфигурации и перезагрузите службу Nginx.

1
2
$ sudo nginx -t
$ sudo systemctl reload nginx.service

Теперь вы можете получить доступ к Элементу из поддомена элемента (например, https://element.example.org). Чтобы войти в систему, введите свое имя пользователя или полный идентификатор матрицы.

Завершение

Поздравляю! Вы успешно установили Matrix Synapse и Element на свой сервер Ubuntu 24.04.

Если вам понравился этот пост об установке Matrix Synapse и Element на Ubuntu 24.04, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.