matrix.org - децентрализованная система обмена сообщениями. Децентрализованная - значит любое сообщество может организовать себе связь, которую будет контролировать только оно само. По такому же принципу как работает почтовый сервер, вы можете поднять свой сервер мгновенных сообщений и звонков. Для этого вам нужен домен, белый IP, сервер. Клиент matrix не хуже клиента telegram или whatsapp. Нет проблем с push на телефонах, есть тёмная тема, есть голосовые сообщения, web-клиент, аудио-видео звонки, режим конференции. Серверная часть мессенджера открыта, в связи с чем у вас есть возможность доверять своему мессенджеру "как себе". Используем на своём предприятии в течение 3-х месяцев. Люди реально пользуются, их не пришлось в мессенджер палкой (как в случае с tox). Скорость передачи файлов на своём сервере не снилась ни telegram ни whatsapp. Настроек по безопасности, таких как в element - нет ни в каком другом мессенджере. Ниже будет представлена инструкция по разворачиванию synapse + postgres, element-web, synapse-admin и coturn, а так же настройке обратного прокси на примере NPM для корректной работы федерации (чтобы другие сервера matrix к вам могли обращаться по домену). По выполнению инструкции вы сможете поднять свой работающий matrix сервер, на котором можно будет регистрироваться только обладателям почты с вашим доменом, для того чтобы пользователей не надо было регистрировать вручную. Заводим lxc контейнер, даём ему отдельно /data и /pgdata, для данных matrix и базы pgsql: Оба доменных имени example.org и matrix.example.org во внешней и во внутренней сети должны быть нацелены на машину с обратным прокси. Подготавливаем машину, ставим docker & docker-compose Инициализируем конфиг synapse:   Тут важный момент, который сначала меня смутил. Тут надо указывать именно свой домен, а не доменное имя машины synapse. Тут указывается то, что попадёт в адрес вашего пользователя: @someuser:example.org. После инициализации изменить "название сервера" нельзя. Об этом подробно написано тут https://matrix.org/docs/guides/understanding-synapse-hosting.   После инициализации появится файл /data/homeserver.yaml. В нём нужно заменить ветку database. Суть замены в переключении synapse на хранение базы в postgres. Остальное оставляйте как есть и добавляйте в конец настройки регистрации, SMTP и TURN.  Указываю пока только synapse (матрикс сервер), postgres для synapse. Блоки с element-web и synapse-admin, упомянутые ниже, впишите в конец этого файла, если они вам нужны. Поехали!   upd 09.06.23 Подсказал товарищВ база postgresql не должна находиться в корне точки монтирования. При появлении в папке данных data папки lost+found - постгри не запускается. Чтобы избежать этого, создайте в /pgdata/ папку db и натравите /var/lib/postgresql/data на неё. Matrix, конечно использует ssl-сертификаты, и скорее всего вы уже давным-давно поставили обратный прокси, который заведует LE сертификатами и вешает ssl "замки" на ваши сервисы.В моём случае стоит NPM и домен example.org, конечно же ведёт на сайт организации. На примере NPM показываю как получить работающую федерацию и ssl на своём matrix. Настраивать будем узлы matrix.example.org и example.org. Если у вас NPM запущен через compose, то нужно добавить проброс 8448 порта из docker наружу.  И не забыть организовать NAT 8448 с внешней IP -> NPMupd 09.06.23Оказалось, что на одном моём домене с matrix не пробрасывался 8448 порт. При этом тест на федерацию домен проходил. То есть 443-го порта достаточно. Текст, касательно 8448 не убираю может быть кому-то будет удобно использовать порт отличный от 443 Его необходимо направить на внутреннюю IP с matrix.example.org: И добавить блок в Advanced->Custom Nginx Configuration: Этот хост у вас наверняка занят, не надо ничего переносить, надо добавить немного локаций. Локации добавляются так: Помимо самих локаций нужно добавлять блок в Advanced у некоторых локаций "/.well-known/matrix/server" -> matrix.example.org:443 "/.well-known/matrix/client"  -> matrix.example.org:443 "/_matrix/client" -> "192.168.XX.XX"/_matrix/client 8008(http) "/_synapse/client" -> "192.168.XX.XX/_synapse/client" 8008(http) Теперь вы можете использовать "matrix.example.org" в качестве сервера при настройке matrix клиента. Работать будет и во внешней сети и во внутренней. Для проверки работы федерации вводите на странице https://federationtester.matrix.org свой домен - "example.org". Проверка покажет всё ли у вас в порядке и над чем ещё стоит поработать. Если всё будет в порядке, то ваши абоненты смогут общаться с абонентами других доменов. Ставьте куда-нибудь Element.io (он есть на всё).В качестве сервера указывайте "matrix.example.org", регистрируйтесь с использованием электронной почты *@example.orgПри регистрации на почту придёт ссылка, перейдите по ней. Теперь вы зарегистрированы. За админскими правами идём на докер машину, заходим в контейнер с postgres и отмечаем свежесозданного себя как администратора:  https://matrix-org.github.io/synapse/latest/usage/administration/admin_faq.html Дописываем в тот же docker-compose.yaml блок с element-web: Рядом с docker-compose.yaml кладём element-config.jsonЕсть гайды, по настройке element-web. Пришлось потратить некоторое количество времени на то, чтобы мой экземпляр работал только с моим сервером. Выкладываю работающий конфиг: Для доступа к element-web, добавил узел "m.example.org" -> IP matrix.example.org:80 Честно говоря, не знаю, нужен он мне или не нужен. Раз уж разобрался с ним, то опишу. Туда же - в конец docker-compose.yaml Synapse admin будет доступен на 8080 порту. Для его работы потребуется токен доступа админа. Его можно взять из клиентской админской сессии. Например в Element-web токен находится в "Настройки" -> "Помощь и о программе" -> "Токен доступа" (в самом низу). Как ни странно больше всего геморра создал именно он. Я до сих пор не пробовал располагать его за NAT. Мой NAT ящик работает на debian, поэтому я разместил coturn прям на нём. Это первый момент. Второй момент - Element не работает с turn сервером через ssl сертификат, выпущенный LE. По итогу я вырубил ssl, так как это касается только управления, голос и видео всегда зашифрованы. Третий момент - рекомендуют список к блокировке внутренних ip, типа denied-peer-ip=192.168.0.0-192.168.255.255 (https://matrix-org.github.io/synapse/v1.41/turn-howto.html). Это правило просто блочит моё соединение, если я нахожусь на NAT, например дома. Убрал все эти denied-peer-ip. Насколько понял, моим turn сервером нельзя воспользоваться без знания static-auth-secret - и меня это устраивает. С аудио-видео звонками бывают проблемы. Не могу сказать точно в какой комбинации, но бывает соединение происходит не сразу, бывает - вообще не происходит. Проблемы возникают не часто, но тем не менее они есть. Товарищи! Где может быть зарыта собака с этим Turn? Можете поделиться работающим coturn сервером, спрятанным за NAT?  1С Программист