- Системные требования
- Аренда сервера VPS
- Настройка записей DNS на домене
- Подготовка системы
- Установка Matrix Synapse
- Загрузка установочных файлов
- Настройка Ansible Playbook
- Загрузка шаблона базовой конфигурации
- Настройка SSH подключения Ansible к серверу
- Генерация ключей для Matrix Synapse и Jitsi
- Настройка основных параметров Synapse
- Запуск установки Matrix Synapse
- Документация и дополнительные настройки Matrix Synapse Ansible
- Регистрация первого пользователя и делаем его администратором
- Установка Dimension
- Ативация виджета Jitsi
- Регистрация по приглашению
- Панель администратора
- Правила фаервола
- Конфигурация Nginx вручную
- Обновление и обслуживание
- Удаление Synapse
Данная инструкция предполагает полную установку 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 и т.д., или вообще для корпоративной связи, но с одним большим отличием от популярных мессенджеров, а именно:
- Вы можете использовать для связи собственный сервер с собственным ключом шифрования и усиленной защитой перехвата данных. Все популярные мессенджеры используют собственные сервера и ключи шифрования, которые могут быть доступны некоторым гос. структурам и мошенникам
- Несмотря на использование собственного сервера, вы можете коммуницировать с пользователями других серверов Matrix (функционал федерации)
- Вы можете настроить мост и общаться с пользователями любого другого мессенджера, к примеру Telegram или Whatsapp
- Полное отсутствие слежки со стороны системы
- Качественная и максимально стабильная аудио и видео связь при достаточных характеристиках сервера на который установлен Synapse
- Усиленная защита от сбора личных данных и кражи ваших переписок
- Минимальная верификация в сети, вы можете не использовать свой номер телефона или почту для регистрации (кроме некоторых публичных серверов, часто требуется ввод электронной почты) Пример использования публичного сервера 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
Лично устанавливал только на Ubuntu 24.04 LTS и Debian 11-12.
Сервер с 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 update -y &&
apt upgrade -y
Усиливаем безопасность сервера и отключаем вход по паролю по следующей памятке при помощи SSH ключа:
Устанавливаем необходимые зависимости (Python3-pip, ansible и pwgen для генерации паролей):
apt install pipx
pipx ensurepath
pipx 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 -p 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-core:
pipx install ansible-core
Перезагрузите сервер:
reboot
Установите роли Ansible необходимые для установки Synapse:
rm -rf roles/galaxy &&
ansible-galaxy install -r requirements.yml -p roles/galaxy/ --force
Установите модули Ansible Galaxy community.general, ansible.posix и community.docker:
ansible-galaxy collection install community.general
ansible-galaxy collection install ansible.posix
ansible-galaxy collection install community.docker
Устанавливаем, если пользователь в 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.
Регистрация по приглашению
Данная функция уже включена в шаблоне вашей конфигурации. Для создания ссылки-приглашениявоспользуйтесь следующей командой:
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!»
Доброго времени суток. Статья оказалось полезной. Установщик вылетал с ошибкой TURN сервера, пока не добавил в vars.yml строку matrix_coturn_turn_external_ip_address: ‘IP сервера’. После этого все установилось и завелось.
Спасибо большое за уточнение. У меня установка сработала без данного параметра, но ваш комментарий очень полезен.
После в команды 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!
Прошу помощи
Разобрался
Скажите пожалуйста, а по умолчанию включено какое то логирование? До установки было 120гб, после осталось 80. Понимаю что сам по себе вещь это массивная), но стало интересно, переписки,звонки, видео конференции, как то забивают память в дальнейшем? Если да то возможно ли это отключить?
Конечно забивают память. Максимум что можно отключить это только федеративность, т.е. доступ к другим серверам Matrix
А можно попросить вас расписать механизм очистки данных матрикса? Ну к примеру раз в месяц как профилактика, зайти в такую то директорию и удалить такие то файлы, или просто очистить их без удаления самих файлов.
Я кстати добавил в конфиг файл, под спойлер #Обязательно, вот эти три строчки:
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 ]
прочитал, что это минимизирует логирование матрикса.
Я делал вот так https://opensource.angellive.ru/ustanovka-synapse-matrix-na-ubuntu-22-04-postgresql-coturn/, в днс всего 2 записи, и конференции запускаются, тест тоже полноценно проходит, плюс можно полноценно управлять. Сейчас решаю вопрос с мостами. Попробую ставить отсюда https://docs.mau.fi/bridges/go/setup.html?bridge=whatsapp
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]
Немного актуализировал инструкцию. Сейчас без проблем устанавливается с traefic вместо nginx. Федерация также работает