Установка 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 , смогла подключиться к серверу без ввода паролей. Сделайте по инструкции и проходите дальше.

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

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

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

Установка

Получаем из гита скрипты.

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_secrеt: 'большой ключ'
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_jvd_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 -vars='username=dimension password=хорошийпароль admin=no' --tags=register-user

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

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

  1. Откройте Element можно веб-версию
  2. Авторизуйтесь под dimension
  3. Нажмите на имя вверху где аватарка
  4. В настройках найдите пункт "Help & About", проскрольте ниже и найдите пункт Access Token: <click to reveal>. Жмакайте по нему и копируйте токен, запишите куда нибудь временно в блокнот
  5. Просто закройте браузер, не разлогиневайтесь!

Через 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 в обоих окошках не стирая остального на счёт рубилнька не уверен, может глючить. Сохраните.

Настройка виджета Jitsi в Matrix self-host

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

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

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

one_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 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/

Установка ботов, мостов

Я не использу их, но поставил инстаграммный директ проверить, пробовал facebook всё работает. Делается все по аналогии с другими модулями, в конфиг добавляется строчка с режимом true.

Вот ссылки на мануалы, в которых без труда можно разобраться:

spantaleev/matrix-docker-ansible-deploy
Matrix (An open network for secure, decentralized communication) server setup using Ansible and Docker - spantaleev/matrix-docker-ansible-deploy

Обратите внимание, что читать нужно именно то, что относится к установке через playbook.

Например: see docs/configuring-playbook-bridge-mx-puppet-instagram.md for setup documentation

Втыкаете в конфиг новую строчку, запускаете установку всего заново, он установит то, чего не хватает и всё.

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

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"

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

0 Комментарии
Загрузка...