Создайте свой домашний сервер Matrix с помощью Docker и Ansible

Мгновенный переход от ничего к федерации с помощью этого учебника Ansible с открытым исходным кодом.

Matrix — это современный открытый стандарт для децентрализованных коммуникаций. Он может похвастаться готовой к производству спецификацией, поддерживаемой The Matrix.org Foundation, и его используют все, от небольших коллективов любителей до национальных правительств. По сути, это служба обмена мгновенными сообщениями, но она может находиться под вашим полным контролем: ваши данные не будут отслеживаться крупными технологическими организациями, и она не перестанет существовать, если одна компания решит закрыть ее.

В основе Matrix лежат домашние серверы, отдельные серверы, на которых запущено определенное программное обеспечение, которое подключается к сети Matrix через федерацию. Возможно, вы слышали и используете другую федеративную платформу: электронную почту. Подобно тому, как электронная почта позволяет пользователям gmail.com, hotmail.com или ваш-собственный-домен.com отправлять друг другу электронные письма, вы можете использовать Matrix, подписавшись на крупный сервис, такой как matrix.org, или запустить его самостоятельно. Вы можете отправлять сообщения любому пользователю Matrix независимо от того, на каком домашнем сервере размещены ваш пользователь и ваши данные.

Что вам понадобится

Все, что вам нужно для начала, — это сервер под управлением Debian 9 или новее, Ubuntu 16.04 или новее, Arch Linux или CentOS 7 (в CentOS 8 есть некоторые нерешенные проблемы с этим скриптом на момент написания статьи). Для однопользовательских экземпляров Synapse довольно легкий, и вы можете запустить его всего за 5 долларов в месяц у любого крупного поставщика VPS.

Вам также понадобится доменное имя, для которого вы сможете изменить записи DNS. Вам нужно создать две записи A (субдомены): matrix и element, обе указывающие на IP-адрес вашего VPS.

Получение учебника

Вы можете выполнить эти шаги на своем компьютере или на самом сервере. Мы собираемся загрузить набор сценариев с открытым исходным кодом (Playbook) с GitHub, которые автоматически установят Synapse (эталонное программное обеспечение для домашнего сервера Matrix) на ваш VPS. Используя Git, загрузите репозиторий скриптов с GitHub:

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

Это создаст папку с именем matrix-docker-ansible-deploy , а остальные команды будут выполняться из этой папки, поэтому вы можете переключиться на нее сейчас:

cd matrix-docker-ansible-deploy

Настройка Playbook

Сначала вам нужно создать папку для хранения конфигурации вашего сервера, которую мы настроим через секунду. Замените <your-domain> в этих командах на ваше собственное доменное имя, конечно же:

mkdir inventory/host_vars/matrix.<your-domain>

Далее мы хотим скопировать образец конфигурации в эту новую папку:

cp examples/vars.yml inventory/host_vars/matrix.<your-domain>/vars.yml

Мы создали файл vars.yml в созданной вами папке, в который уже включены некоторые базовые настройки. Откройте этот файл в своем любимом текстовом редакторе, чтобы настроить сервер, для этого потребуется всего несколько простых изменений.

  • matrix_domain должно быть вашим доменным именем, без субдомена matrix . Этот домен будет частью вашего имени пользователя, которое будет выглядеть как @jane:example.com. Вы не хотели бы включать сюда поддомен matrix по той же причине, по которой это выглядело бы немного глупо, если бы ваш адрес электронной почты был [email protected].
  • matrix_ssl_lets_encrypt_support_email должен указывать на любой ваш адрес электронной почты. Вы, вероятно, не будете получать никаких электронных писем, это необходимо только для получения SSL-сертификата для вашего домашнего сервера, но в случае сбоя этого процесса вы получите уведомление по этому адресу.
  • matrix_coturn_turn_static_auth_secret, matrix_synapse_macaroon_secret_key и matrix_postgres_connection_password должны быть установлены в длинные случайные строки.

Вы можете использовать pwgen для генерации этих длинных случайных строк. Им вообще не нужно запоминаться, поэтому давайте сгенерируем некоторые случайные данные:

❯ pwgen -s 64 1
hkSUhZg2GIllKXdDkPSNLGytbcwx3H4v5KaITCvFKwJkvzktNZu0lp9PkBmNfDjD

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

После того, как вы заполнили файл конфигурации, мы создадим еще один файл, чтобы сообщить Ansible, какой на самом деле IP-адрес вашего сервера, и тогда все будет готово!

Создайте файл inventory/hosts и отредактируйте его в своем любимом текстовом редакторе. В него следует добавить следующее:

[matrix_servers]
matrix.<your_domain> ansible_host=<your_VPS_EXTERNAL_IP> ansible_ssh_user=root

Если вы настраиваете всю эту конфигурацию на сервере, на котором вы фактически устанавливаете это, а не на своем собственном компьютере, добавьте ansible_connection=local в конец этой последней строки.

Установка синапса

Мы завершили всю необходимую настройку! Чтобы начать установку, нам понадобится Ansible, установленный на компьютере, на котором мы создали эти файлы конфигурации. Вы можете установить Ansible через большинство менеджеров пакетов или вручную. Например, в macOS вы можете установить Ansible с помощью:

brew install ansible

Затем внутри этой папки matrix-docker-ansible-deploy все, что вам нужно запустить, это:

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

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

После завершения все должно быть установлено! Однако еще не все будет запущено, еще один запуск действительно включит все и убедитесь, что все запускается автоматически после перезагрузки:

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

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

Включение Федерации

Мы создали домашний сервер по адресу matrix.ваш-домен.com, но вы хотите, чтобы ваше имя пользователя было просто ваш-домен.com по адресу конец. Для этого нам нужно обслуживать два файла делегирования на вашем основном домене через HTTP. Есть два способа сделать это:

  1. Укажите своим основным доменным именем сервер Matrix, который мы только что создали, или
  2. Создайте эти файлы на своем существующем веб-сервере.

Вариант 1. Выделить весь домен для Matrix

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

Сначала отредактируйте конфигурацию DNS и добавьте запись A в базовый домен, указывающую на IP-адрес вашего сервера Matrix.

Далее мы внесем одну простую модификацию в файлы конфигурации, которые мы создали ранее. Отредактируйте inventory/host_vars/matrix.<your_domain>/vars.yml и добавьте следующую строку в конец файла:

matrix_nginx_proxy_base_domain_serving_enabled: true

Затем повторно запустите эту команду, чтобы добавить эту новую конфигурацию на ваш домашний сервер:

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

Вариант 2. Добавьте два файла на существующий веб-сервер.

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

/.well-known/matrix/server:

{
	"m.server": "matrix.<your_domain>:8448"
}

и /.well-known/matrix/client:

{
	"m.homeserver": {
		"base_url": "https://matrix.<your_domain>"
	}
,
	"m.identity_server": {
		"base_url": "https://matrix.<your_domain>"
	}
	,
	"io.element.e2ee": {
		"default": true,
		"secure_backup_required": false,
		"secure_backup_setup_methods": []
	},
	"im.vector.riot.e2ee": {
		"default": true
	}
}

Создание пользователя

Последним шагом в этом руководстве по началу работы является создание учетной записи пользователя. Вы можете запустить следующую команду, чтобы создать пользователя, просто заполните все между <>s:

ansible-playbook -i inventory/hosts setup.yml --extra-vars='username=<your-username> password=<your-password> admin=<yes|no>' --tags=register-user

Кроме того, вы можете подключиться к своему домашнему серверу через SSH и запустить:

/usr/local/bin/matrix-synapse-register-user <your-username> <your-password>

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

И это все!

После того, как вы установили Matrix и настроили файлы делегирования, чтобы другие домашние серверы могли объединяться с вашими, все готово!

Проект matrix-docker-ansible-deploy на GitHub содержит обширную коллекцию документации, если вам нужны дополнительные функции или обновление ваших сервисов по мере выпуска новых версий.

Если установка и обслуживание домашнего сервера Matrix вам не по плечу, но вы все равно хотите взять под контроль свою платформу обмена мгновенными сообщениями, NABLA HOST предлагает ряд доступных вариантов хостинга домашнего сервера Synapse, начиная с 10 долларов США в месяц, а также в качестве услуг по установке и обслуживанию Matrix, где мы настраиваем все на сервере по вашему выбору, вы даже можете запустить домашний сервер из своего собственного дома! Мы специализируемся на услугах для частных лиц и малого бизнеса, но мы можем работать с группами любого размера, чтобы помочь найти правильное решение Matrix для ваших нужд.