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



Инструкция по установке и настройке сервера Matrix с собственным сервером идентификации



После первой установки мною matrix прошло пару лет. Наконец настали светлые времена, когда не нужно устанавливать сервер из исходников, танцевать с бубном для установки сервера идентификации, а потом и мостов. На свете появился замечатльный инструмент причем официально опубликованный на сайте matrix.org, это набор скриптов Playbook для запуска на рабочей станции с которой можно поднять полноценный сервер matrix без лишних заморочек, а потом им управлять так же.

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

Забегая вперед скажу, что почти все известные косяки исправили, сделали новый приятный клиент Element.

Единственный баг, который я нашел это ошибка при видеозвонках с android на iphone, видимо баг не такой частый, но мне он попался.

По опыту минимальные требования



2Гб ОЗУ + swap, либо 4Гб ОЗУ без него (особенно, важно если будете открывать большие группы) Это если ставить без собственного jitsi!
По данному мануалу мы ставим его свой, минимально бы я закладывал под такой инстанс 4Гб+swap
2 ядра, иначе если 1 то будет часто под 100% загружено
Поддерживаемые ОС
CentOS (Только 7 версия)
Debian (9/Stretch и новее)
Ubuntu (16.04 и новее, с 20.04 есть проблемы)
Archlinux

Я пробовал ставить на ubuntu 18.04 и CentOS 7

Playbook можно запускать и на самом сервере матрикс для этого в файле hosts скриптов нужно изменения внести (прочтите в нем что вписать где), мне удобнее с рабочей станции запустить скрипты, а так же можно использовать временный сервер второй, главное сохранить ключи, что бы потом не потерять доступ к серверу матрикс.

Подготовка
Готовим DNS



Сначала нужно прописать все поддомены в ДНС, прописывать нужно именно такие, менять нельзя иначе не взлетит. Убедитесь, что все работает с помощью nslookup в сети, например: https://2whois.ru/?t=nslookup

Основной домен 2 уровня ваш обычно используется под сайт или блог, ну или просто заглушка он использоваться при установке не будет, в нем нужно будет только в nginx сделать настройку локации, что бы передать делегирование matrix на поддомен.

В качестве примера домена я буду использовать example.com

ТИП ХОСТ ПРИОРИТЕТ ВЕС ПОРТ ЦЕЛЬ
A matrix - - - matrix-server-IP
CNAME element - - - matrix.example.com
CNAME dimension - - - matrix.example.com
CNAME jitsi - - - matrix.example.com
SRV _matrix-identity._tcp 10 0 443 matrix.example.com

Готовим сервер



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

sudo apt-get update && apt-get upgrade && reboot


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

Готовим рабочую станцию


Как избавиться от входа по паролю на сервер, кратко. Если не генерили ключи, сделайте это на рабочей станции:

ssh-keygen


Копируем ключи на сервер, где будет жить матрикс

ssh-copy-id root@example.com


Пробуем зайти на сервер, пароль спросить не должен.

ssh root@example.com


Попав на сервер отключаем на нём возможность входа по паролю

sudo nano /etc/ssh/sshd_config


Добавляем запись

PasswordAuthentication no


Рестартуем сервис ssh

sudo systemctl restart ssh


От сервера можно отключаться.

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

Обновляемся как и в случае сервера и ребутаемся.

Установка Python3 pip и ansible и генератор

sudo apt install python-pip
sudo pip install ansible
sudo apt install pwgen


Либо если не находит питоняку без указания версий, то так:

sudo apt install python3-pip
sudo pip3 install ansible


Установка


Получаем из гита скрипты. Делаем это на рабочей станции!

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


Настройка


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

cd matrix-docker-ansible-deploy


Базовая конфигурация


Примеры настроек каждого отдельного сервиса можно найти в папках по такому пути:

roles/ROLE_NAME_HERE/defaults/main.yml


В этих папках примеры конфигов, обычно хватает только строчки с командой включить или не включить, но бывает так, что в официально документации настройки были не верные, а в файлах верные. Я попался на синтаксисе. Вот тут официальная документация, если чего-то не хватит вам.

Создаем каталог для конфигурации нашего сервера

mkdir inventory/host_vars/matrix.example.com


Копируем стандартные файлы конфигурации

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


Отредактируем файл хоста, в него вносим данные по нашему серверу, который будем настраивать

nano inventory/hosts


В нём я думаю всё понятно будет:

matrix.example.com ansible_host=1.2.3.4 ansible_ssh_user=root


Вместо 1.2.3.4 внешний ip сервера, вместе example.com свой домен, а вот пользователь может быть и не root, вот только если нужно будет вводить пароль sudo, то нужно будет в команду установки добавлять всегда ключ -K скажу это ещё раз ниже.

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

Все секретные ключи желательно генерировать автоматически командой, сделайте их несколько, штук 10 и скопируйте в блокнот, будем использовать дальше в конфиге:

pwgen -s 64 1


Для Jitsi сгенерировать сразу строчки для конфига с паролями можно командой, тоже генерим и сохраняем где-нибудь:

bash inventory/scripts/jitsi-generate-passwords.sh


Теперь к основному конфигурационному файлу:

nano inventory/host_vars/matrix.example.com/vars.yaml


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

#Обязательное
matrix_domain: example.com
matrix_ssl_lets_encrypt_support_email: 'ssl@example.com'
matrix_coturn_turn_static_auth_secret: 'большой ключ'
matrix_synapse_macaroon_secret_key: 'большой ключ'
matrix_postgres_connection_password: 'пароль на БД любой ставьте'

#Jitsi
matrix_jitsi_enabled: true
matrix_jitsi_jicofo_component_secret: большой ключ
matrix_jitsi_jicofo_auth_password: большой ключ
matrix_jitsi_jvb_auth_password: большой ключ
matrix_jitsi_jibri_recorder_password: большой ключ
matrix_jitsi_jibri_xmpp_password: большой ключ

#Регистрация для своих
matrix_registration_enabled: true

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

#Если у вас нет сайта на домене 2 уровня example.com то можно обойтись без пункта настройки на нем ngninx а добавить пункт ниже, что бы он обслуживался на этом сервере
#matrix_nginx_proxy_base_domain_serving_enabled : true


Конфиг выше даст нам сразу:

СЕРВИС ОПИСАНИЕ
Synapse homeserver сам сервер Matrix
PostgreSQL хранение истории в БД
Coturn STUN/TURN сервер для маршрутизации трафика видео\аудиозвонков
Let's Encrypt SSL бесплатный сертификат
Element Web веб клиент настроенный по умолчанию на ваш сервер
ma1sd собственный сервер идентификации
Exim почтовый сервер для отправки уведомлений
Nginx Веб-сервер
Jitsi видеоконференции
Synapse-admin веб морда для администрации клиентов и комнат
Matrix-registration регистрация для своих с помощью инвойса

Вот в таком виде нужно запустить установку. Если что-то вам не нужно просто удалите строчку из конфигурационного файла.

Устанавливаем, если пользователь в 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


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

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


Для этого на той же рабочей станции выполняем команду

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


Установка Dimension



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

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

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


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

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

Откройте Element можно веб-версию
Авторизуйтесь под dimension
Нажмите на имя вверху где аватарка
В настройках найдите пункт "Help & About", проскрольте ниже и найдите пункт Access Token: . Жмакайте по нему и копируйте токен, запишите куда нибудь временно в блокнот
Просто закройте браузер, не разлогиневайтесь!
Через 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.com/vars.yaml


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

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


Пропишите администратором свою первую учетку, которую создавали. От пользователя dimension нам нужен был только токен.

Ну а теперь как обычно проводим сборку

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


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

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

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


Регистрация для своих


Мы ее уже подключили, а пользоваться ей вот так

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


ne_time - да нет, то есть если нужен просто постоянный токен, этакий инвойс ставьте no, дату до которой он действительный меняем в ex_date= в том же формате.

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


Админка


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

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

В конце файвол включить



sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/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


Конфиг вашего основного сайта domain на Nginx


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

	location /.well-known/matrix {
		proxy_pass https://matrix.example.com/.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/

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


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

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

Процесс обновления

Войдите в директорию со скриптами на рабочей станции подтяните обновления скриптов из гита:

cd matrix-docker-ansible-deploy
git pull


Запустите переустановку и перезапустите сервисы


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


Единственное только мажорные версии БД Postgress не будут установлены автоматически. Если захотите обновите руками.

Решение проблем


Почему-то при проверке последний раз с последней версией скриптов на убунту установка выпала в ошибку при проверке docker репозиториев:

TASK [matrix-base : Ensure Docker repository is enabled] **************************************************************************************************************** fatal: [matrix.example.com]: FAILED! => {"msg": "The conditional check 'matrix_docker_installation_enabled|bool and matrix_docker_package_name == 'docker-ce and not ansible_distribution_release == 'bullseye'' failed. The error was: template error while templating string: expected token 'end of statement block', got 'bullseye'. String: {% if matrix_docker_installation_enabled|bool and matrix_docker_package_name == 'docker-ce and not ansible_distribution_release == 'bullseye' %} True {% else %} False {% endif %}\n\nThe error appears to be in '/home/user/matrix-docker-ansible-deploy/roles/matrix-base/tasks/server_base/setup_debian.yml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Ensure Docker repository is enabled\n ^ here\n"} 


c CentOS проблем не заметил. Я нашел причину. Если будет такая же проблема отредактируйте файл.

roles/matrix-base/tasks/server_base/setup_debian.yml 


В нем нужно удалить или закоментировать вот этот кусок кода c 26 по 33 строку :

 when: matrix_docker_installation_enabled|bool and matrix_docker_package_name == 'docker-ce and not ansible_distribution_release == 'bullseye'

- name: Ensure Docker repository is enabled (using Debian Buster on Debian Bullseye, for which there is no Docker yet)
  apt_repository:
    repo: "deb [arch={{ matrix_debian_arch }}] https://download.docker.com/linux/{{ ansible_distribution|lower }} buster stable"
    state: present
    update_cache: yes
  when: matrix_docker_installation_enabled|bool and matrix_docker_package_name == 'docker-ce and ansible_distribution_release == 'bullseye'


И вставить вот этот код из предыдущей версии этого файла версии:

when: matrix_docker_installation_enabled|bool and matrix_docker_package_name == 'docker-ce'


Dimension не включается, а используется vector для виджетов


Поймал такую ошибку сегодня при инсталяции на любой ОСи, дело в том, что я использовал темаетический домен место стандатных ru, com и других. Видимо в этом проблема была. Все остальное завелось. Решил прописав руками в конфиг пути урлы до своего инстанса дименшина.

Их можно посмотреть войдя по адресу https://dimension.example.com

matrix_dimension_integrations_ui_url: "https://dimension.example.com/element"
matrix_dimension_integrations_rest_url: "https://dimension.example.com/api/v1/scalar"
matrix_dimension_integrations_widgets_urls: ["https://dimension.example.com/widgets"]
matrix_dimension_integrations_jitsi_widget_url: "https://dimension.example.com/widgets/jitsi"


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

Комментарии (4)


Вы не зарегистрированы
  1. Вопрос. Какой пункт и где редактировать чтобы указать основной сервак не matrix.sample.com а а какой нить типа vasya.sample.com ?
    1. Здравствуйте. Все пункты которые относятся к matrix.example.com необходимо выполнять в vasya.sample.com
  2. здравствуйте вы ю мания и qiwi сможите подключить на сайт
    1. Здравствуйте. Не совсем понял. Необходимо подключить к какому сайту?

Последние комментарии
Скрипт рулетки Bellereve c 7 игровыми режимами
caz
Вчера, 18:10
есть намунал по установке
All In One Seo Extension [OCMod - Vqmod]
Гость иван
18 мая 2022 12:58
Не работает c opencart 3
Панель управления игровым хостингом HOSTINPL 5.5 (Debian 9)
TrapManiak
18 мая 2022 04:10
не работает ваш скрипт :D
Слив скрипта Nvuti 8.0, 6 режимов
nvutinewfk
17 мая 2022 18:52
Можешь мне дать в тг @fr0zen93
Слив аналога nakrutka.by
tommygun
15 мая 2022 01:57
привет, админка не реагирует на функции , например на добавлении или изменении категорий , как
Слив интернет магазина от ScriptBerry
Гость Arthurr
14 мая 2022 21:07
65.21.218.141
Слив интернет магазина от ScriptBerry
Arthurr
14 мая 2022 21:06
65.21.218.141
VII ENGINE 2.0 НОВАЯ СБОРКА
Имран Абай
14 мая 2022 17:34
создаю соц сеть
Слив интернет магазина от ScriptBerry
VexBor
13 мая 2022 23:07
95.211.16.66
Скрипт рулетки PLAY2X WINBEE DICE MINE NVUTI CABURA
tommygun
13 мая 2022 19:18
бля я как немногу ларавелы установить никак у мя не работают
WP Guppy v2.3 NULLED - плагин живого чата для WordPress
Daniil_xxx
13 мая 2022 11:01
Подскажите. Есть последняя версия плагина 3.3 ?
Workreap v2.1.8 - шаблон биржи фриланса wordpress
Daniil_xxx
13 мая 2022 11:00
Добрый день. Подскажите есть последняя версия темы? 2.5.2
Unisite Board 4.4 NULLED NEW 2022
Гость 2022
12 мая 2022 23:25
hello. can you null this template? they wont sell it, and wont give it adbroad.
Скрипт лотереи(которую продают)
tommygun
11 мая 2022 01:32
после установки сборки белый экран , как решить ребята?
Скрипт WF-TICKET - Открытие кейсов + карточки
tommygun
10 мая 2022 23:47
нерабочая админка