Разместить объявление
хостинг
VIPAdmin / Статьи / Установка Matrix сервера с помощью playbook 2021

Установка 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"


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

Еще немного интересного

Способы заработка / Статьи Сайты с бесплатной накруткой TikTok | YouTube
Криптовалюта / Статьи Второй username в тг | Работа с fragment
Способы заработка / Статьи ЗАРАБОТОК НА YouTube
Криптовалюта / Статьи Как избежать бана на Binance
Раскрутка соц. сетей / Статьи Обучение по трафику с ТикТок. Июль 2021
Статьи / Другое Почему важен дизайн?
Статьи / Другое Запускаем AI стрим на Twitch
Статьи / Другое БЕСПЛАТНАЯ КАРТА «Zelf»
Статьи / Другое Поисковик файлов by DeCoded
Статьи / Безопасность [SIM]Спамблок без заморочек.
Способы заработка / Статьи / Арбитраж трафика Заработок на арбитраже трафика 💎💸
Сервисы / Парсинг A-PARSER - парсер сайтов № 1
Сервисы / Сервера и хостинги Хостинг PrivateAlps (Игнорирует DMCA)
Сервисы / Платёжные системы Merchant001- надежный эквайринг для сайта
Статьи Дорвеи 2023-2024
Арбитраж трафика / Статьи Арбитраж трафика на пуш уведомлениях
Статьи / Софт / Антидетект Браузеры ТОП ЛУЧШИХ АНТИДЕТЕКТ БРАУЗЕРОВ 2023
Сервисы / Трекеры / Клоака Keitaro PRO - трекер для арбитража трафика
Хостинг / Скрипты сайтов / Статьи Как настроить работу почты
Хостинг / Скрипты сайтов / Статьи Урок доступ mysql с любого ip
Хостинг / Скрипты сайтов / Статьи Как сделать моментальную установку сервера? HOSTINPL
Хостинг / Статьи Exim (Восстановление по e-mail)
Скрипты сайтов / Статьи JavaScript - Меняем CSS

Отзывы (11)




  1. Гость Тимур
    Гость Тимур9 марта 2022 13:59
    Вопрос. Какой пункт и где редактировать чтобы указать основной сервак не matrix.sample.com а а какой нить типа vasya.sample.com ?
    1. Enoot
      Enoot30 марта 2022 04:36
      Здравствуйте. Все пункты которые относятся к matrix.example.com необходимо выполнять в vasya.sample.com
  2. здравствуйте вы ю мания и qiwi сможите подключить на сайт
    1. Enoot
      Enoot30 марта 2022 05:51
      Здравствуйте. Не совсем понял. Необходимо подключить к какому сайту?
  3. Гость sergey
    Гость sergey20 июля 2022 14:12
    Добавлю комментарии по конфигурации в vars.yml:
    1. Если вы хотите логины на сервере типа @user:example.com то надо установить два параметра:
    matrix_domain: example.com
    matrix_server_fqn_matrix: matrix.example.com
    2. Если сервер работает через NAT и вы ставите свой coturn, то matrix_coturn_turn_external_ip_address: 'EXTERNAL_IP'
    3. И еще про coturn - пока не изменили диапазон портов, голос нормально не заработал, например так:
    matrix_coturn_turn_udp_min_port: 65412
    matrix_coturn_turn_udp_max_port: 65431

    И еще про саморегистрацию по пригласительному токену - если вы сгенерировали токены с помощью curl, как сказано в статье, то вы эти токены в админке не увидите, что-то с ними сделать можно только в базе или с помощью curl. Имена пригласительных токенов генерируются по словарю из трех слов :)
    1. Enoot
      Enoot20 июля 2022 14:15
      Здравствуйте. Как понял у вас есть опыт в установке, настройке Matrix? Можете отписать мне в ТГ @vipacs
      1. Гость sergey
        Гость sergey22 июля 2022 01:13
        Написал вам в телеге, мой ник @questarrow
  4. Гость Angel
    Гость Angel31 января 2023 20:01
    Здравствуйте, ставил руками, ставил через док, и в том числе по этой инструкции. Всегда пр запуске получаю вот это. Так как я реально излазил все те ссылке что написаны, и не фига не понял, вы сталкивались с таким? Спасибо


    ERROR! the role 'galaxy/com.devture.ansible.role.playbook_help' was not found in /home/angel/matrix-docker-ansible-deploy/roles:/home/angel/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/angel/matrix-docker-ansible-deploy

    The error appears to be in '/home/angel/matrix-docker-ansible-deploy/setup.yml': line 8, column 7, but may
    be elsewhere in the file depending on the exact syntax problem.

    The offending line appears to be:

    # Most of the roles below are not distributed with the playbook, but downloaded separately using `ansible-galaxy` via the `just roles` command (see `justfile`).
    - role: galaxy/com.devture.ansible.role.playbook_help
    ^ here
    1. Гость Sergey
      Гость Sergey22 марта 2023 21:53
      где то у вас файлик есть role.yml и он подпорчен. Снесите полностью и установите заново asible-playbook
      1. Гость Sergey
        Гость Sergey25 марта 2023 16:51
        А еще поможет команда make roles в каталоге matrix-docker-ansible-deploy, но после нее надо будет править vars.yml, конкретно что и как - видно будет в сообщениях об ошибках при запуске ansible-playbook на установку
  5. Ален
    Ален5 октября 2023 13:57
    Здравствуйте. Столкнулся с проблемой в подвязывании сервера идентификации(своего). Сам сервер на основе Sydent. Документации по этому поводу "кот наплакал". Ставил все без докера и пипа- напрямую в систему(на виртуальную). Строка "Введите другой сервер идентификации" через 5-10 сек становится красная- нет конекта. Порты 8090 и 4434 (требуемые для сервера идентификации) открыты. Если есть какие соображения на этот счет,- подскажите пожалуйста. Ubuntu 22.04