Установка и настройка сервера Matrix Synapse с ипользованием Ansible и Docker

Docker

Данная инструкция предполагает полную установку Synapse на собственный сервер (или VPS) и базовую настройку всех его функций. Для установки Synapse используется множество Docker контейнеров разворачиваемых совместно с cистемой управления конфигурациями Ansible. Официальную документацию по данному методу установки и ссылки на неё, вы можете найти на Github и Matrix.org.

Synapse — это домашний сервер для общения через Matrix с открытым исходным кодом, написанный и поддерживаемый Matrix.org Foundation. Для общения через Matrix используются следующие мессенджеры https://matrix.org/clients/

Метод установки Synapse с помощью Ansible и Docker я выбрал в связи с тем что он наиболее легкий в плане установки и настройки дополнительных зависимостей и расширений Synapse, а также данный способ предполагает автоматическую установку nginx, ssl, postgresql.

Вкратце, Matrix — это открытый стандарт для связи в Интернете используемый для мессенджеров, поддерживающий федерацию, шифрование, голосовую и видео связь, видеоконференции. Также возможны интеграции с Telegram, Discord, Whatsapp и т.д., полный список возможных интеграций вы найдете тут: https://github.com/spantaleev/matrix-docker-ansible-deploy#bridges

На текущий момент Matrix возможно использовать как для Приватного общения между друзьями и близкими, так и для полноценной замены Whatsapp, Telegram и т.д., или вообще для корпоративной связи, но с одним большим отличием от популярных мессенджеров, а именно:

  1. Вы можете использовать для связи собственный сервер с собственным ключом шифрования и усиленной защитой перехвата данных. Все популярные мессенджеры используют собственные сервера и ключи шифрования, которые могут быть доступны некоторым гос. структурам и мошенникам
  2. Несмотря на использование собственного сервера, вы можете коммуницировать с пользователями других серверов Matrix (функционал федерации)
  3. Вы можете настроить мост и общаться с пользователями любого другого мессенджера, к примеру Telegram или Whatsapp
  4. Полное отсутствие слежки со стороны системы
  5. Качественная и максимально стабильная аудио и видео связь при достаточных характеристиках сервера на который установлен Synapse
  6. Усиленная защита от сбора личных данных и кражи ваших переписок
  7. Минимальная верификация в сети, вы можете не использовать свой номер телефона или почту для регистрации (кроме некоторых публичных серверов, часто требуется ввод электронной почты) Пример использования публичного сервера Matrix тут https://habr.com/ru/post/665766/

То есть Synapse позволяет вам присоединиться к сети Matrix, используя ваш собственный идентификатор @<имя пользователя>:<ваш-домен>, и все они размещены на вашем собственном сервере или арендованном VPS.

Все службы запускаются в контейнерах Docker что позволяет нам иметь предсказуемую и актуальную настройку. Установка (обновления) и некоторые задачи обслуживания автоматизированы с помощью Ansible.

Системные требования

Без видеоконференций (jitsi):

4ГБ оперативной памяти (или 2ГБ+swap), процесcор 2 ядра (с частотой не ниже 3,4 ГГц)

С видеоконференциями (jitsi):

6ГБ оперативной памяти (или 4ГБ+swap), процессор 2 ядра (с частотой не ниже 3,4 ГГц)

Поддерживаемые ОС:

CentOS 7
Debian (9, 10, 11)
Ubuntu (16.04 и новее)
Archlinux

Лично устанавливал только на Debian 11.

Сервер с 2ГБ ОЗУ без swap также может работать с Synapse, но только для личных звноков (без видео) и личных переписок (проверено, но с некоторыми ограничениями). Федеративные чаты с множеством подписок перегрузят сервер с подобными характеристиками намертво (придется перезагружать сервер и экстренно удалять Synapse с последующей переустановкой)

Покупка домена

Приобретаем домен для вашего сервера Matrix, я рекомендую покупать домен у hostland.ru

Аренда сервера VPS

Для аренды VPS я рекомендую следующих провайдеров:

aeza.net — хостер с серверами в разных странах, рекомендация из чата поддержки, подходит для VPN с каналом в 1 гигабит. Для Synapse желательно выбирать Hi-CPU сервера.

vdsina.ru — (скидка 10% по ссылке) хостер с серверами в разных странах, рекомендация из чата поддержки, подходит для VPN с каналом в 1 гигабит

timeweb.com — (300 рублей подарок на счет по ссылке) хороший хостер, но я им давно не пользуюсь. Канал 200 мегабит

Настройка записей DNS на домене

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

Основной домен использоваться для Synapse не будет, так как он обычно используется под основной сайт или блог. Для Synapse будут использоваться поддомены типа matrix.example.ru и element.example.ru

Вместо example.ru подставьте свой домен подготовленный для Synapse.

Необходимые записи DNS для домена:

ТИП ХОСТ ПРИОРИТЕТ ВЕС ПОРТ ЗНАЧЕНИЕ
A matrix — — — matrix-server-IP
CNAME element — — — matrix.example.ru
CNAME dimension — — — matrix.example.ru
CNAME jitsi — — — matrix.example.ru
SRV _matrix-identity._tcp 10 0 443 matrix.example.ru

Пример настройки записей DNS домена в панели управления Hostland.ru:

Проверку обновления записей DNS для домена можно провести тут https://2ip.ru/dig/

Подготовка системы

Обновляем систему

apt-get update && apt-get upgrade

Усиливаем безопасность сервера и отключаем вход по паролю по следующей памятке при помощи SSH ключа:

Устанавливаем необходимые зависимости (Python3-pip, ansible и pwgen для генерации паролей):

apt install python3-pip
pip3 install ansible
apt install pwgen

Перегружаем сервер:

reboot

Также для установки Ansible в качестве альтернативного способа можно воспользоваться официальной документацией https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html#installing-ansible-on-debian

Установка Matrix Synapse

Загрузка установочных файлов

Загружаем установочные файлы на сервер

git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git

Настройка Ansible Playbook

Загрузка шаблона базовой конфигурации

Ansible Playbook в данной инструкции мы будем запускать непосредственно на сервере, для этого нам нужно скопировать шаблон конфигурации в каталог конфигурации Synapse и указать настройки SSH подключения в файле matrix-docker-ansible-deploy/inventory/hosts

Переходим в директорию с установочными файлами

cd matrix-docker-ansible-deploy

Создаем каталог для конфигурации нашего сервера (вместо example.ru укажите свой домен)

mkdir inventory/host_vars/matrix.example.ru

Копируем шаблонные файлы конфигурации vars.yml и hosts (вместо example.ru укажите свой домен)

cp examples/vars.yml inventory/host_vars/matrix.example.ru/
cp examples/hosts inventory/hosts

Настройка SSH подключения Ansible к серверу

Для редактирования конфигурационного файла подключения к серверу выполните команду:

nano inventory/hosts

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

[matrix_servers]
matrix.example.ru ansible_host=IP-сервера ansible_ssh_user=root ansible_ssh_port=ПОРТ-SSH ansible_ssh_private_key_file=~/.ssh/id_rsa

Вместо example.ru укажите свой домен приобретенный ранее.

В ansible_host укажите внешний IP адрес своего сервера.

В ansible_ssh_user укажите имя пользователя используемого для SSH (по умолчанию root и я не менял его, пользователь может быть отличным от root). Также если у вас используется sudo вам нужно будет в конце команд установки Ansible добавлять ключ -K

В ansible_ssh_port укажите свой порт SSH (по умолчанию 22, но я изменил его и рекомендую вам сделать также согласно памятке безопасности)

В ansible_ssh_private_key_file укажите путь к ключу SSH (по умолчанию ~/.ssh/id_rsa, в памятке используется такой же путь)

Если SSH ключ не используется и порт SSH не изменен, то содержимое будет таким (но это не наш случай так как мы заботимся о безопасности):

[matrix_servers]
matrix.example.ru ansible_host=IP-сервера ansible_ssh_user=root

Генерация ключей для Matrix Synapse и Jitsi

Заранее сгенируйте ключи для конфигурации Matrix Synapse, вам понадобится для этого 10 ключей. Сгенериуйте ключи следующей командой и сохраните их в на компьютере в блокнот:

pwgen -s 64 1

Настройка основных параметров Synapse

Основные параметры Synapse содержатся в файле vars.yml по пути matrix-docker-ansible-deploy/inventory/host_vars/matrix.example.ru

Для редактирования vars.yml выполните следующую команду (вместо example.ru укажите свой домен):

nano inventory/host_vars/matrix.example.ru/vars.yml

Вы можете использовать готовый шаблон конфигурации vars.yml приведенный ниже полностью заменив все строки файла и заполнить его своими данными.

Вам необходимо заменить example.ru на свой домен и добавить ранее сгенерированные ключи вместо ‘большой ключ’.

В шаблоне используется основной домен, а не поддомен для того чтобы иметь красивые адреса типа @login:example.com без приставки matrix.

#Обязательное
matrix_domain: example.ru
matrix_homeserver_implementation: synapse
matrix_homeserver_generic_secret_key: 'большой ключ'
# matrix_ssl_lets_encrypt_support_email: '[email protected]'
# matrix_coturn_turn_static_auth_secret: 'большой ключ'
# matrix_synapse_macaroon_secret_key: 'большой ключ'
matrix_playbook_reverse_proxy_type: playbook-managed-traefik
devture_traefik_config_certificatesResolvers_acme_email: '[email protected]'
devture_postgres_connection_password: 'любой безопасный пароль для базы данных'


#Регистрация по приглашению
matrix_registration_enabled: true

#Админка
matrix_registration_admin_secret: "большой ключ"
matrix_synapse_admin_enabled: true

#Если у вас нет сайта на основном домене example.ru, то использовать данный параметр для автоматической настройки nginx, в противном случае закомментируйте его и настройте nginx самостоятельно
matrix_static_files_container_labels_base_domain_enabled: true
#matrix_nginx_proxy_base_domain_serving_enabled : true

#Jitsi - раскомментируйте (стереть #) строки ниже если у вас достаточно характеристик сервера для видеоконференций
#jitsi_enabled: true
#jitsi_jicofo_component_secret: большой ключ
#jitsi_jicofo_auth_password: большой ключ
#jitsi_jvb_auth_password: большой ключ
#jitsi_jibri_recorder_password: большой ключ
#jitsi_jibri_xmpp_password: большой ключ

Указанный шаблон конфигурации содержит:

  • Synapse homeserver — сервер Matrix Synapse
  • PostgreSQL — база данных
  • Coturn STUN/TURN — сервер для маршрутизации трафика видео\аудиозвонков
  • Let’s Encrypt SSL — бесплатный SSL сертификат для домена
  • Element Web — веб версия клиента Matrix доступная по адресу element.exapmle.ru настроенный по умолчанию на ваш сервер (вместо example.ru укажите свой домен)
  • ma1sd — собственный сервер идентификацииExim почтовый сервер для отправки уведомлений
  • Exim — почтовый сервер для отправки уведомлений
  • Nginx — веб-сервер
  • Synapse-admin — веб интерфейс панели администрирования клиентов и комнат
  • Matrix-registration — регистрация новых пользователей с помощью приглашения
  • Jitsi — модуль видеоконференции

После заполнения шаблона своими данными нужно запустить установку. Если что-то вам не нужно просто удалите строчку из конфигурационного файла или закмментируйте её.

Запуск установки Matrix Synapse

Установите роли Ansible необходимые для установки Synapse:

rm -rf roles/galaxy &&
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force

Устанавливаем, если пользователь в hosts не root и нужно получить пароль от sudo, добавьте в конце команды ключ -K и во всех командах его добавлять нужно будет

ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start

Дальше можно запустить проверку конфигурации

ansible-playbook -i inventory/hosts setup.yml --tags=self-check

Если у вас возникают ошибки, то возможно обновился Matrix Synapse Ansible и вам необходимо актуализировать указанный шаблон относительно examples/vars.yml (просьба написать об этом в комментариях) Также всегда внимательно и осмысленно читайте текст ошибки чтобы исключить ваш человеческий фактор.

Документация и дополнительные настройки Matrix Synapse Ansible

Регистрация первого пользователя и делаем его администратором

Для создания пользователя с правами администратора выполните команду:

ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=логин password=пароль admin=yes' --tags=register-user

Установка Dimension

Модуль для Matrix позволяющий добавлять виджеты в беседы. При помощи него можно добавить аккуратную кнопку для видеоконференций Jitsi в шапке беседы.

Зарегистрируйте нового пользователя для dimension без прав администратора

ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=dimension password=хорошийпароль admin=no' --tags=register-user

Теперь нужно получить его токен, что бы сервис работал из под него. Есть два способа как это сделать через curl или через клиент

Через клиент:

Откройте Element, можно веб-версию https://element.example.ru (вместо example.ru ваш домен)
Авторизуйтесь под пользователем dimension
Нажмите на имя вверху где аватарка, затем нажмите «Все настройки»
В настройках найдите пункт «Помощь и о программе», пролистайте вниз до «Подробности» и найдите пункт «Токен доступа», раскройте его нажатием и скопируйте токен в блокнот.
Просто закройте браузер, не разлогиневайтесь!

Через curl

curl -X POST --header 'Content-Type: application/json' -d '{
    "identifier": { "type": "m.id.user", "user": "YourDimensionUsername" },
    "password": "YourDimensionPassword",
    "type": "m.login.password"
}' 'https://matrix.example.com/_matrix/client/r0/login'

В команде замените «YourDimensionUser/Pass» URL на свои значения.

Добавляем в конфигурацию строки для активации Dimension

nano inventory/host_vars/matrix.example.ru/vars.yml

Добавьте строчки:

matrix_dimension_enabled: true
matrix_dimension_admins: '@логин:example.com'
matrix_dimension_access_token: "ВАШ ТОКЕН который копировали"

Для matrix_dimension_admins пропишите первую учетную запись с правами администратора которую вы создали.

Проведите повторную сборку Ansible с помощью команды:

ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start

Ативация виджета Jitsi

Так как Jitsi у нас локальный, а плейбук не умеет править конфиг чтобы виджет jitsi создавался сразу с локальным jitsi. Нужно самому руками это поправить в клиенте.

Откройте клиент Element, откройте любой чат, любую комнату и нажмите на инфу о ней справа вверху. Там будет ссылка добавить виджеты>Откроется экран Widgets жмакайте на шестеренку справа вверху>Widgets>Jitsi Conference карандашек>тут замените домен на свой jitsi.example.ru в обоих окошках не стирая остального на счёт рубилнька не уверен, может глючить. Сохраните. Данный пункт повзаимствовал тут, сам не тестировал так как на моем сервере не хватает характеристик для Jitsi.

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

Регистрация по приглашению

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

ansible-playbook -i inventory/hosts setup.yml \
--tags=generate-matrix-registration-token \
--extra-vars="one_time=yes ex_date=2022-12-31"

one_time=ставьте «no» если вам нужно приглашение без ограничения срока действия. Я рекомендую ставить значение «yes» и прописывать дату для ex_date= в формате как в образце команды

После запуска вышеупомянутой команды вы получите ссылку на регистрацию для ваших друзей.

Панель администратора

Доступна по адресу (/ в конце обязательно):

https://matrix.example.ru/synapse-admin/

Правила фаервола

Используемые правила фаервола (нужно согласовать с уже установленными правилами в системе. См. памятка безопасности пункт 5):

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow ВАШ-SSH-ПОРТ/tcp
sudo ufw allow 5349/tcp
sudo ufw allow 5349/udp
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 8448/tcp
sudo ufw allow 49152:49172/udp
sudo ufw allow 4443/tcp
sudo ufw allow 10000/udp
sudo ufw enable

Проверяем статус:

sudo ufw status verbose

Конфигурация Nginx вручную

Если основной домен используется вашим сайтом, то вам необходимо выполнить донастройку nginx вручную.

В конфиг nginx нужно вставить настройку, что бы всем сказать, что этот домен обслуживает сервер matrix находящийся по адрсесу matrix.example.ru и все и клиенты и федерация прозрачно работали, когда вы указываете адрес сервера example.ru

location /.well-known/matrix {
proxy_pass https://matrix.example.ru/.well-known/matrix;
proxy_set_header X-Forwarded-For $remote_addr;
}

Проверьте, что федерация работает:

https://federationtester.matrix.org/

Еще можно проверить правильно ли работает настройка TURN STUN для видео и аудио звонков, тут токен можно подсунуть или логин и пароль от учетки матриксовской врменной, url вводить matrix.example.com:

https://test.voip.librepush.net/

Обновление и обслуживание

С помощью Ansible можно не только проводить установку, но и устанавливать обновления Synapse и его модулей.

Канал, что бы следить за уведомлениями о новых версиях #homeowners:matrix.org.

Для обновления перейдите в каталог с ранее загруженным Matrix Synapse и запустите скачивание свежих файлов командой:

cd matrix-docker-ansible-deploy
git pull

Проведите повторную сборку Ansible с помощью команды:

ansible-playbook -i inventory/hosts setup.yml --tags=setup-all,start

Версию базы данных Postgres обновить возможно только вручную.

Удаление Synapse

Для удаления Synapse введите следующую команду:

sh /matrix/bin/remove-all

затем скопировать и вставить для подтверждения текст «Yes, I really want to remove everything!»

Оцените статью
Кибер Лис
Добавить комментарий

  1. Гость

    Доброго времени суток. Статья оказалось полезной. Установщик вылетал с ошибкой TURN сервера, пока не добавил в vars.yml строку matrix_coturn_turn_external_ip_address: ‘IP сервера’. После этого все установилось и завелось.

    Ответить
    1. kiberlis автор

      Спасибо большое за уточнение. У меня установка сработала без данного параметра, но ваш комментарий очень полезен.

      Ответить
  2. TVEN

    После в команды ansible-playbook -i inventory/hosts setup.yml —tags=setup-all,start

    выдаёт ошибки

    failed: [matrix.sinamatrix.ru] (item=YOUR_BARE_DOMAIN_NAME_HERE) => changed=false
    ansible_loop_var: item
    item: YOUR_BARE_DOMAIN_NAME_HERE
    msg: Detected that you’re using an uppercase domain name — `YOUR_BARE_DOMAIN_NAME_HERE`. This will cause trouble. Please use all-lowercase!
    failed: [matrix.sinamatrix.ru] (item=matrix.YOUR_BARE_DOMAIN_NAME_HERE) => changed=false
    ansible_loop_var: item
    item: matrix.YOUR_BARE_DOMAIN_NAME_HERE
    msg: Detected that you’re using an uppercase domain name — `matrix.YOUR_BARE_DOMAIN_NAME_HERE`. This will cause trouble. Please use all-lowercase!
    failed: [matrix.sinamatrix.ru] (item=element.YOUR_BARE_DOMAIN_NAME_HERE) => changed=false
    ansible_loop_var: item
    item: element.YOUR_BARE_DOMAIN_NAME_HERE
    msg: Detected that you’re using an uppercase domain name — `element.YOUR_BARE_DOMAIN_NAME_HERE`. This will cause trouble. Please use all-lowercase!

    Прошу помощи

    Ответить
    1. TVEN

      Разобрался

      Ответить
  3. COPY

    Скажите пожалуйста, а по умолчанию включено какое то логирование? До установки было 120гб, после осталось 80. Понимаю что сам по себе вещь это массивная), но стало интересно, переписки,звонки, видео конференции, как то забивают память в дальнейшем? Если да то возможно ли это отключить?

    Ответить
    1. kiberlis автор

      Конечно забивают память. Максимум что можно отключить это только федеративность, т.е. доступ к другим серверам Matrix

      Ответить
      1. COPY

        А можно попросить вас расписать механизм очистки данных матрикса? Ну к примеру раз в месяц как профилактика, зайти в такую то директорию и удалить такие то файлы, или просто очистить их без удаления самих файлов.
        Я кстати добавил в конфиг файл, под спойлер #Обязательно, вот эти три строчки:
        matrix_synapse_log_level: «WARNING»
        matrix_synapse_storage_sql_log_level: «WARNING»
        matrix_synapse_root_log_level: «WARNING»
        По этой ссылке [ https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/f19ea93ac8a488a3d166ad2b4ebc169846b65aac/docs/maintenance-and-troubleshooting.md#increasing-synapse-logging ]
        прочитал, что это минимизирует логирование матрикса.

        Ответить
  4. Гость

    Я делал вот так https://opensource.angellive.ru/ustanovka-synapse-matrix-na-ubuntu-22-04-postgresql-coturn/, в днс всего 2 записи, и конференции запускаются, тест тоже полноценно проходит, плюс можно полноценно управлять. Сейчас решаю вопрос с мостами. Попробую ставить отсюда https://docs.mau.fi/bridges/go/setup.html?bridge=whatsapp

    Ответить
  5. kiberlis автор

    Unable to start service matrix-coturn.service: A dependency job for matrix-coturn.service failed. Как исправить ошибку читаем тут: https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/2562

    Нужно отредактировать файл /etc/systemd/system/matrix-coturn.service и закомментировать строки:
    #Requires=matrix-traefik-certs-dumper-wait-for-domain@matrix.service
    #[email protected]

    Ответить
  6. kiberlis автор

    Немного актуализировал инструкцию. Сейчас без проблем устанавливается с traefic вместо nginx. Федерация также работает

    Ответить