Установка matrix сервера с помощью playbook 2021

Введение

Если вы подбираете себе чат сервер и проверяете различные варианты, рекомендую так же посмотреть на сервер MyChat. Я его тестировал и достаточно подробно описал. Возможно, вам он подойдет больше, чем все остальное.

Информация по Matrix Synapse без проблем гуглится, поэтому не буду подробно рассказывать, что это такое. Кратко пройдемся по основному:

  1. Matrix – это открытый протокол для децентрализованной коммуникации. Он может быть реализован в различных серверах и мессенджерах.
  2. Synapse – локальный сервер, который работает на протоколе matrix, обеспечивает возможность подключения и общения клиентов.
  3. Riot – клиент, который может подключаться к любому серверу, работающему по протоколу matrix, в том числе к synapse. Представлен в виде десктропной или web версии, которую можно установить на свой сервер.

Далее мы займемся установкой локальной версии Matrix Synapse для подключения своих клиентов. На этом же сервере разместим веб клиента Riot. Все это дело снабдим ssl сертификатом. В общем, на выходе должны получить готовое бесплатное локальное решение для корпоративного чата.

Сразу хочу предупредить, что мое описание не подходит под готовое руководство, которое позволит простым копипастом все настроить. Это руководство именно по matrix и riot, вы должны как минимум уметь настраивать web сервер с nginx, устанавливать сертификаты, проксировать запросы, если вам это понадобится.

Что есть что?

 — это протокол обмена сообщениями. Помимо текстовых сообщений через него можно пересылать документы, картинки, звонить и т. д.

Сервер (homeserver) — удаленный хост, на котором установлено ПО, реализующее протокол Matrix, например, Synapse. Там хранятся ваши сообщения, их вложения и учетная запись. Matrix предлагает свой homeserver — matrix.org, который можно использовать для ознакомления. При желании можно найти другой сервер или создать свой. Имя пользователя будет выглядеть так: @login:server.com. Серверы могут связываться между собой, образуя тем самым федерацию, так что можно спокойно писать пользователю, который зарегистрирован на matrix.org, в то время как сами вы находитесь на matrix.iriscot.org!

Иллюстрация федерации. Здесь в сети находятся три пользователя, каждый на своем сервере.

Клиент — программа на компьютере или телефоне конечного пользователя. Через нее устройство связывается с сервером, а пользователь пишет сообщения. Самый популярный клиент матрицы на данный момент — Riot, его мы и рассмотрим в этой статье.

Комната — место, где общаются пользователи. Иными словами, это чат. Может содержать от одного до бесконечности участников. Адреса комнат начинаются с символа #.

Группа (community) — тематическое объединение пользователей и комнат. Адрес начинается с символа +.

Synapse Development

To check out a synapse for development, clone the git repo into a working
directory of your choice:

git clone https://github.com/matrix-org/synapse.git
cd synapse

Synapse has a number of external dependencies, that are easiest
to install using pip and a virtualenv:

virtualenv -p python3 env
source env/bin/activate
python -m pip install --no-use-pep517 -e "."

This will run a process of downloading and installing all the needed
dependencies into a virtual env.

Once this is done, you may wish to run Synapse’s unit tests, to
check that everything is installed as it should be:

python -m twisted.trial tests

This should end with a ‘PASSED’ result:

Additional things to do after the workshop

There’s server config we skipped over because this is a pretty short workshop.

We’d recommend going back to your server and doing some of these things later if you actually want to use Matrix/Riot properly.

  • Deploy a firewall with iptables
  • Configure auto-update (unattended-upgrades)
  • Protect your Debian server with two-factor authentication
  • Replace sqlite database with psql (if you expect lots of users): https://github.com/matrix-org/synapse/blob/master/docs/postgres.rst
  • Configure email notifications () — beware, may leak sensitive data!
  • Add room integrations
    • GitHub bot
    • RSS bot
    • Giphy
  • Add TURN support for audio/video calls (this is also not 100% secure, use with caution)
  • Set up certificate auto-renewal for Let’s Encrypt by running and inserting the following line:

Install Synapse

Create a virtual environment for your Synapse application. Python virtual environment is used to create an isolated virtual environment for a Python project. A virtual environment contains its own installation directories and doesn’t share libraries with global and other virtual environments.

Provide the ownership of the directory to the current user.

Now activate the virtual environment.

Ensure that you have the latest version of and .

Install the latest version of Synapse using pip.

The above command will take some time to execute as it pulls and installs the latest version of Synapse and all the dependencies from Github repository.

Настройка сервера Synapse

Теперь можем приступить к настройке. Базовый файл конфигурации /etc/synapse/homeserver.yaml очень хорошо документирован, поэтому мы рассмотрим лишь самые необходимые его директивы, без которых нормальная работа сервера будет невозможна.

Настройка TLS:

# Сертификат TLS с цепочкой
tls_certificate_path: "/etc/synapse/example.org.tls.crt"

# Приватный ключ TLS сертификата в формате PEM
tls_private_key_path: "/etc/synapse/example.org.tls.key"

# Файл параметров механизма обмена ключами Диффи-Хеллмана
tls_dh_params_path: "/etc/synapse/example.org.tls.dh"

Настоятельно рекомендуется вместо сгенерированных автоматически самоподписанных сертификатов использовать полноценные от Let’s Encrypt. В сети уже существует огромное количество хороших статей по настройке Let’s Encrypt, поэтому мы опустим данную тему в данной статье. После получения сертификатов будет достаточно лишь исправить значение указанных выше директив и перезапустить сервер Synapse.

Основные настройки Synapse:

# Доменное имя Matrix сервера. Будет частью пользовательского ID.
server_name: "example.org"

# Разрешить или запретить хостинг веб-клиента.
web_client: False

# Публичный URL сервера.
public_baseurl: https://example.org:8448/

# Настройки СУБД.
database:
  # Тип движка СУБД. По умолчанию используется sqlite3.
  name: "sqlite3"
  # Параметры движка, например имя-пароль.
  args:
    # В случае sqlite3 это путь к файлу с БД.
    database: "/var/lib/synapse/homeserver.db"

# Каталог, в котором будут храниться все загруженные
# на сервер медиа-файлы и изображения.
media_store_path: "/var/lib/synapse/media_store"

# Каталог для загружаемых пользовательских файлов.
uploads_path: "/var/lib/synapse/uploads"

# Максимальный размер загружаемого на сервер файла.
max_upload_size: "10M"

# Максимальный размер изображения или прочего медиа-файла,
# для которого разрешено сгенерировать preview.
max_image_pixels: "32M"

# Разрешает или запрещает создавать preview для любых
# гиперссылок на стороне сервера.
url_preview_enabled: False

# Разрешает или запрещает анонимную регистрацию пользователей
# на текущем сервере из клиентов.
enable_registration: False

# Разрешает или запрещает анонимным пользователям без регистрации
# получать доступ к серверу и в том числе созданным на нём каналам.
allow_guest_access: False

Настроим виртуальные хосты, заменив весь блок listeners целиком:

# Настройка блока обработчиков протоколов.
listeners:
  # Главный обработчик HTTPS.
  -
    # Задаёт порт, который будет слушать наш сервер.
    port: 8448

    # Задаёт сетевые адреса интерфейсов, которые будет слушать сервер.
    # По умолчанию это все доступны на хосте IPv4 и IPv6 интерфейсы.
    bind_addresses:
      - '::'
      - '0.0.0.0'

    # Задаёт тип обработчика.
    type: http

    # Включает или отключает TLS шифрование. Должно быть включено всегда.
    tls: true

    # Включает или отключает X-Forwarded-For HTTP заголовок. Включать
    # необходимо только если нужно спрятать сервер за другой кэширующий
    # прокси, например nginx.
    x_forwarded: false

    # Задаёт список разрешённых ресурсов внутри обработчика.
    resources:
      -
        # List of resources to host on this listener.
        names:
          - client

        # Разрешает или запрещает сжатие данных для клиентов с поддержкой.
        compress: true

      - names: 
        compress: false

Используйте в качестве фронтэнда nginx

Это позволит упростить работу с сертификатами доменов, т.к. нет необходимости что-то прописывать в настройках synapse, использовать nginx в качестве прокси при переносе сервера synapse на другой IP адрес, т.е. уменьшить время простоя.

Если вы используете на фронтенде nginx, то нет необходимости разбираться с настройками сертификатов непосредственно в synapse, как их получать, куда их размещать. Используя nginx, вы можете использовать имеющийся опыт работы с сертификатами на других веб-серверах, либо получить этот опыт на своём Matrix-сервере и использовать его при настройке других сервисов. Получение сертификата для домена, например, с Let’s Encrypt, легко автоматизируется в nginx. При этом если вы захотите перенести свой synapse на другую машину, то достаточно будет на nginx прописать настройки прокси, а сертификат необходимый у вас уже будет настроен и доступен. Нужно лишь немного изменить настройку виртуального хоста в nginx на вашей старой машине.

Пример конфигурации nginx

В данной конфигурации производится прослушивание двух портов (443 и 8448), а также двух типов IP адресов IPv4 и IPv6. При этом по IPv4 на порту 443 кроме Matrix можут находиться другие веб-сайты. Для IPv6 для сервиса Matrix выделен отдельный адрес (укажите свой) и другие сайты недоступны через этот порт, поэтому указан параметр default_server.

Порт 8448 используется исключительно для synapse. Для этого порта не используется SNI (Server Name Indication, с которым были проблемы в старых версиях synapse). Кроме этого, т.к. порт используется для федерации с дургими серверами Matrix, я не включаю протокол http2, на всякий случай.

В качестве server_name укажите своё доменное имя.

Файлы логов доступа и ошибок размещены в стандартном месте. Если они не нужны, укажите вместо пути значение off. Если просто закомментировать строки, то лог будет писаться в общий лог nginx.

Пути сертификату и ключу указаны стандартные для сертификатов Let’s Encrypt, полученных через certbot. Эти строки необходимы для работы протокола https.

Ключ client_max_body_size указывает на максимальный размер запроса, фактически это ограничение на размер загружаемых на сервер файлов, т.к. эти запросы самые объёмные. В данном случае указано ограничение в 10 мегабайт.

Ключи root и index указывают на папку с содержимым веб-сайта и файл по умолчанию. В данном случае рассчитывается, что по данному пути будет расположен веб-клиент Riot.im. Благодаря этому подключиться к серверу через браузер можно будет просто введя адрес https://matrix.example.com/. При этом будет запущен клиент Riot.im.

Секция location обеспечивает доступ к API matrix-synapse. Закомментированные строки позволяют получить реальный IP адрес пользователя, если он был подключен через доверенный прокси по адресу xx.xx.xx.xx. Адрес клиента в этом случае берётся из заголовка X-Forwarded-For, который добавляет вышестоящий прокси, а не из IP-адреса источника. По этом причине не следует указывать адреса прокси серверов, которым вы не доверяете, поскольку они могут легко указать любой адрес или не указывать заголовок совсем. Эти же настрйки вышестоящего прокси могут быть перенесены непосредственно в секцию server, тогда они будут действовать на любые контексты на сайте matrix.example.com.

При смене IP адреса вашего matrix-synapse пропишите в настройках nginx на старом сервере следующее:

В качестве адреса сервера yy.yy.yy.yy необходимо указать IP адрес вашего нового сервера (не доменное имя, т.к. оно может всё ещё указывать на текущий сервер).

Последний пункт конфигурации нужен для прохождения проверки при получении нового сертификата Let’s Encrypt. Содержимое файла /etc/nginx/acme.conf:

Папка /var/letsencrypt создана вручную и должна быть указана при создании нового сертификата как webroot, например:

О self-hosted чатах в целом

Установить чат на свой сервер будет определенно хорошим решением, если вас волнует вопрос приватности в Сети. Тем не менее, из этого вытекают несколько потенциальных проблем:

  • придется агитировать друзей переходить на новый мессенджер;
  • от того, насколько корректно и надежно настроен ваш сервер зависит, сможете ли вы кому-то написать, или вам кто-либо. С другой стороны, это мотивирует строить более отказоустойчивые системы;
  • вам придется всё время тянуть за собой всю историю чата и даже аккаунты ваших друзей, обеспечивать надежное их хранение. Ведь обычно они хранятся где-то там, далеко, на облаке крупной корпорации, а так их судьба лежит на вас лично.

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

Использование ssl сертификата Let’s Encrypt

Прежде чем начать настройку сервера, установим на него полноценный ssl сертификат. Если вам это не нужно, можно пропустить данный пункт. Просто посмотреть на чат можно и с самописным сертификатом, который мы получили ранее. Но есть один нюанс. Клиент Riot, который я буду использовать для подключения к серверу, не будет работать с самописным сертификатом. Он будет ругаться на него во время подключения. Так что если вы хотите полноценно протестировать работу мессенджера Riot в связке с matrix synapse, придется установить нормальный сертификат.

Мой сервер с чатом напрямую не смотрит в интернет. Я буду проксировать все подключения к нему через web сервер, на котором установлен nginx. Поэтому получение сертификата нужно выполнять именно на нем. Если у вас matrix сервер будет смотреть напрямую в интернет, то настраивать получение ssl сертификата надо именно на нем.

Прежде чем получить сертификат, нарисовал примерно такой конфиг виртуального домена для nginx.

server {
 listen 80;
 server_name chat.serveradmin.ru;

location /.well-known {
 root /web/sites/chat.serveradmin.ru/www/;
 }
}

Подробно про получение сертификатов Let’s Encrypt я рассказывал в статье по настройке веб сервера. За всеми подробностями можете заглянуть туда. Здесь же без подробных пояснений выполняем необходимые действия.

Устанавливаем certbot.

# yum install certbot

Запускаем запрос сертификата.

# certbot certonly

При первом запуске на сервере, нужно будет зарегистрировать новую учетную запись на сервер и указать почтовый ящик. Я все это уже ранее делал, так что просто выбираю тип подтверждения домена:

2: Place files in webroot directory (webroot)

Далее указываю имя домена:

Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): chat.serveradmin.ru

Указываю директорию веб сервера:

Input the webroot for chat.serveradmin.ru: (Enter 'c' to cancel): /web/sites/chat.serveradmin.ru/www

Сертификат получил. Дальше рисую следующий конфиг для виртуального хоста nginx уже для работы по https.

upstream matrix {
 server 77.37.225.129:22991;
}

server {
 listen 80;
 server_name chat.serveradmin.ru;
 return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl http2;
 server_name chat.serveradmin.ru;
 ssl on;
 ssl_certificate /etc/letsencrypt/live/chat.serveradmin.ru/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/chat.serveradmin.ru/privkey.pem;
 ssl_session_timeout 5m;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;
 ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:10m;

location /.well-known {
 root /web/sites/chat.serveradmin.ru/www/;
}

 location / {
 client_max_body_size 50M;
 proxy_set_header Connection "";
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Frame-Options SAMEORIGIN;
 proxy_pass http://matrix;
 }
}

На сервере 77.37.225.129 сделан проброс внешнего порта 22991 на локальный 8008. На этом порту работает synapse по незащищенному соединению. Редиректить надо именно на этот порт, так как если сделать переадресацию на защищенный порт, который работает со своим сертификатом, будут проблемы при совместной работе этого локального сертификата и внешнего от Let’s Encrypt.

С сертификатом и самим сервером synapse разобрались. Дальше я предлагаю сначала установить и настроить бесплатный web клиент для чата — Riot. Если он вам не нужен, можно сразу переходить к настройке самого сервера.

Клиент Riot.im

Если вы обычный пользователь, первое на что вы будете смотреть — это клиент. Вот так выглядит Riot.im:

Комната со скриншотов: .

Возможности программы:

Текстовые сообщения. Здесь все стандартно, отметить можно лишь форматирование сообщений с помощью Markdown или визуального редактора, кому как удобно.

Картинки можно отправлять из памяти устройства, камеры или буфера обмена. Единственное, что может встать на вашем пути — лимит на загрузку на сервере. Мобильный клиент Riot умеет сжимать картинки, что очень удобно.

Голосовые сообщения и аудио файлы. Голосовые сообщения доступны только на мобильном клиенте. По сути он просто запускает приложение диктофона и отправляет записанный файл. Также можно отправить любой аудио файл и он отобразится в виде плеера.

Видео. То же самое, что с аудио файлами.

Отправка других файлов. Можно отправлять любые файлы, их размер ограничен настройкой сервера.

Звонки. Аудио- и видео-звонки реализованы через WebRTC. В отсутствие TURN-сервера идут напрямую, что неизбежно взаимно палит IP-адрес собеседников, но здесь уже надо понимать разницу между анонимностью и приватностью.

Оконечное шифрование. Riot реализует поддержку алгоритмов Olm и Megolm, а также резервное копирование ключей.

Стикеры. Так, погодите радоваться. Реализованы они через сервер интеграции, и очень вероятно, что не будут работать, если у вас self-hosted сервер. На официальном сервере не проверял.

Виджеты. То же самое, что и со стикерами.

Говоря о перспективах развития Riot, уже сейчас разрабатывается RiotX — полная переработка Riot на Android с нормальным дизайном. Попробовать можно в Google Play.

Установка Matrix Synapse home server

Я буду устанавливать чат сервер на CentOS 7

Если у вас еще нет сервера, то смотрите мои статьи по установке и базовой настройке centos.Сразу обращаю внимание, что у меня на сервере будет отключен selinux. Как это сделать, смотрите в статье по настройке сервера, ссылка на которую выше

Для работы synapse server необходим Python 2.7, который в CentOS 7 установлен по-умолчанию. Убедиться в этом можно введя в консоли:

Сервер чата synapse может использовать различные базы данных. По-умолчанию, он работает с SQLite, что подходит только для теста. В продакшене использовать эту базы плохое решение. Но даже для теста у меня не получилось настроить работу с SQLite. По-умолчанию, в CentOS устанавливается очень старая версия базы. При ее использовании возникает ошибка и сервер не работает. Я обновил базу до последней версии, но как оказалось, с ней тоже возникают проблемы. Я почитал на эту тему обсуждения и понял, что проблема распространенная, а не уникальная, поэтому решил в ней не разбираться. Вместо этого сразу буду использовать postgresql, что является самым надежным и разумным выбором.

Устанавливаю соответствующий моей версии репозиторий:

Ставим самую свежую на момент написания статьи версию postgresql:

Инициализируем базу данных:

Редактируем конфигурационный файл для включения MD5 аутентификации.

Меняем строки в самом конце:

на

Запускаем PostgreSQL и добавляем в автозагрузку:

Заходим в систему под пользователем postgres:

Создаем пользователя базы данных:

Запускаем консольный клиент для работы с базой данных:

Задаем пароль userpass для только что созданного пользователя:

Создаем базу данных для чат сервера matrix synapse:

Выходим из консоли управления и учетной записи postgres.

Установим еще несколько пакетов, необходимых для взаимодействия synapse с postgresql.

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

Устанавливаем менеджер пакетов Python — pip.

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

Устанавливаем необходимые пакеты питона.

Обновляем setuptools:

Устанавливаем сам сервер matrix synapse.

Перед запуском сервера, необходимо создать файл конфигурации. Делаем это.

Я использую доменное имя для своего чат сервера chat.serveradmin.ru

Обращаю внимание на этот параметр. Он важен, если вы захотите использовать полноценный ssl сертификат и https подключения

Используйте реальное доменное имя, на которое потом будете получать сертификат. После выполнения команды вы получите примерно такой вывод:

По умолчанию, в файле конфигурации homeserver.yaml будет указано использовать базу данных SQLite. Комментируем строки, отвечающие за эту настройку и добавляем параметры для подключения созданной ранее postgresql базы.

Обращаю внимание на отступы в файле конфигурации. Они принципиально важны

Должно быть именно так, как показано — database без отступа, name, args один пробел с начала строки. Все остальное — два пробела.

На этом установка сервера закончена, двигаемся дальше.

Identity Servers

They are not where accounts or credentials are stored — these live on home
servers. Identity Servers are just for mapping 3rd party IDs to matrix IDs.

This process is very security-sensitive, as there is obvious risk of spam if it
is too easy to sign up for Matrix accounts or harvest 3PID data. In the longer
term, we hope to create a decentralised system to manage it (matrix-doc #712), but in the meantime,
the role of managing trusted identity in the Matrix ecosystem is farmed out to
a cluster of known trusted ecosystem partners, who run ‘Matrix Identity
Servers’ such as Sydent, whose role
is purely to authenticate and track 3PID logins and publish end-user public
keys.

1: Установка Synapse

Обновите индекс пакетов сервера:

Добавьте в APT официальный репозиторий Matrix:

Чтобы защитить сервер, нужно добавить ключ репозитория. Он позволяет подтвердить, что все файлы и обновления были подписаны разработчиками и репозиторий не содержит поддельных или поврежденных пакетов.

Обновите индекс пакетов, чтобы использовать новый репозиторий.

Теперь установить Synapse можно с помощью пакетного менеджера:

Во время установки будет предложено ввести имя сервера, укажите здесь ваш домен. Также будет предложено отправить анонимную статистику о homeserver в Matrix. Затем Synapse будет установлен.

После установки можно запустить Synapse с помощью systemctl.

Эта команда будет использоваться для запуска Synapse вместе с сервером. Если сервер уже запущен, запустите Synapse вручную с помощью команды:

Configure NGINX

We need to configure three sites, the “default” page, or the main site, where we’ll host the Riot Web app, and which is where Synapse is running.

We’ll mimic the Apache method of creating our site configs in and linking them to . This makes enabling/disabling sites easy for purposes of scaling.

Setup Sites

Default —

In many cases, this will already be configured and running a site. We need to be able to serve two files from , the below config identifies a SIMPLE configuration. The most important part for the operation of Synapse/Riot is the location

400: Invalid request

Nothing too fancy here, we’re just serving the static files, all the magic happens in the client.

400: Invalid request
400: Invalid request

Related Alibaba Cloud Products

can be integrated with Server Load Balancer, VPC, and other cloud services, allowing you to manage container applications from the console or terminal. The product maintains compatibility with native Kubernetes and provides security, high availability, and stable upgrading services. It is a fully managed cloud container management service that supports native Kubernetes and integrates with other Alibaba Cloud products. It replaces the need to install, operate and scale your container cluster infrastructure. Being a fully-managed service, Container Service for Kubernetes helps you to focus on your applications rather than managing container infrastructure.

Troubleshooting

If synapse runs out of file handles, it typically fails badly — live-locking
at 100% CPU, and/or failing to accept new TCP connections (blocking the
connecting client). Matrix currently can legitimately use a lot of file handles,
thanks to busy rooms like #matrix:matrix.org containing hundreds of participating
servers. The first time a server talks in a room it will try to connect
simultaneously to all participating servers, which could exhaust the available
file descriptors between DNS queries & HTTPS sockets, especially if DNS is slow
to respond. (We need to improve the routing algorithm used to be better than
full mesh, but as of March 2019 this hasn’t happened yet).

If you hit this failure mode, we recommend increasing the maximum number of
open file handles to be at least 4096 (assuming a default of 1024 or 256).
This is typically done by editing

Separately, Synapse may leak file handles if inbound HTTP requests get stuck
during processing — e.g. blocked behind a lock or talking to a remote server etc.
This is best diagnosed by matching up the ‘Received request’ and ‘Processed request’
log lines and looking for any ‘Processed request’ lines which take more than
a few seconds to execute. Please let us know at #synapse:matrix.org if
you see this failure mode so we can help debug it, however.

First, ensure you are running the latest version of Synapse, using Python 3
with a PostgreSQL database.

Synapse’s architecture is quite RAM hungry currently — we deliberately
cache a lot of recent room data and metadata in RAM in order to speed up
common requests. We’ll improve this in the future, but for now the easiest
way to either reduce the RAM usage (at the risk of slowing things down)
is to set the almost-undocumented environment
variable
. The default is 0.5, which can be decreased to reduce RAM usage
in memory constrained enviroments, or increased if performance starts to
degrade.

However, degraded performance due to a low cache factor, common on
machines with slow disks, often leads to explosions in memory use due
backlogged requests. In this case, reducing the cache factor will make
things worse. Instead, try increasing it drastically. 2.0 is a good
starting value.

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1

This can make a significant difference on Python 2.7 — it’s unclear how
much of an improvement it provides on Python 3.x.

If you’re encountering high CPU use by the Synapse process itself, you
may be affected by a bug with presence tracking that leads to a
massive excess of outgoing federation requests (see discussion). If metrics
indicate that your server is also issuing far more outgoing federation
requests than can be accounted for by your users’ activity, this is a
likely cause. The misbehavior can be worked around by setting
the following in the Synapse config file:

presence:
    enabled: false

The typical failure mode here is that you send an invitation to someone
to join a room or direct chat, but when they go to accept it, they get an
error (typically along the lines of «Invalid signature»). They might see
something like the following in their logs:

2019-09-11 19:32:04,271 - synapse.federation.transport.server - 288 - WARNING - GET-11752 - authenticate_request failed: 401: Invalid signature for server <server> with key ed25519:a_EqML: Unable to verify signature for <server>

This is normally caused by a misconfiguration in your reverse-proxy. See
docs/reverse_proxy.md and double-check that your settings are correct.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: