Как установить Matrix Synapse на Ubuntu 24.04

Дата публикации: 2025-02-19T17:56:26

Теги: ["ubuntu", "matrix", "synapse"]

⏪ Вернуться домой
⏪ В Gemlog

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

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

Предпосылки

Конвенции

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

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

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

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

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

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

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

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

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

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

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

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

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

sudo apt install postgresql

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

$ sudo -i -u postgres

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

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

$ sudo apt install nginx certbot python3-certbot-nginx

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

$ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 8448

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

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

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

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

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

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-адрес вашего сервера. Затем сохраните файл и выйдите из редактора.

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

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

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

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

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

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

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

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

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

database:
  name: psycopg2
  args:
    user: synapse_user
    password: 'YourStrongPasswordHere'
    database: synapse_db
    host: localhost
    port: 5432
    cp_min: 5
    cp_max: 10

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

$ 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 позволяет использовать индикаторы присутствия, которые показывают, находится ли человек в сети. Это может привести к высокому использованию процессора, и многие домашние серверы отключают их. Для этого создайте новый файл конфигурации.

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

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

presence:
  enabled: false

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

$ sudo systemctl restart matrix-synapse.service

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

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

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

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

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

enable_registration: true

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

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 "

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

enable_registration_without_verification: true

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

$ sudo systemctl restart matrix-synapse.service

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

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

Чтобы проверить, работает ли федерация с другими домашними серверами, откройте [тестер федерации](https://federationtester.matrix.org/), введите имя сервера Матрицы и нажмите «Перейти».

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

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

$ sudo apt install coturn

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

$ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp

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

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

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

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

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

$ sudo nano /etc/turnserver.conf

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

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 для перезагрузки конфигурации.

$ sudo systemctl restart coturn.service

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

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

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

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 для применения новой конфигурации.

$ sudo systemctl restart matrix-synapse.service

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

Synapse теперь настроен, и вы можете использовать его с любым клиентом [Matrix](https://matrix.org/ecosystem/clients/). Element является самым популярным клиентом Matrix, который доступен в качестве размещенного веб-приложения.

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

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

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

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

$ 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/element-hq/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"

export latest="v1.11.109" && wget "https://github.com/element-hq/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"

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

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

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

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

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

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

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

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

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

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

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

"m.homeserver": {
    "base_url": "https://matrix.example.org",
    "server_name": "example.org"
},

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

"brand": "My Example Chat",

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

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

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

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

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

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;
}

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

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

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

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

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

Завершение

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

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