Поднимаем собственный сервер Matrix
Недавно мы познакомились с системой обмена мгновенными сообщениями Matrix, а также рассмотрели ее сильные и слабые стороны. При этом был использован один из серверов с открытой регистрацией. Альтернативное решение заключается в том, чтобы поднять собственный сервер.
Собственный сервер дает следующие преимущества:
- Сервер обслуживает только вас и ваших друзей. Это означает максимальную скорость работы и отзывчивость пользовательского интерфейса;
- Вы не зависите от графика технических работ на открытом сервере. Сервер доступен тогда, когда это нужно вам;
- Можно настроить любые мосты. На открытых серверах мосты часто ограничены или отсутствуют, для экономии ресурсов;
- Вы не получите бан из-за того, что админ ошибочно принял вас за бота, или за нарушение ToS, которые были переписаны вчера. Вы и есть админ;
- Свое доменное имя – это красиво;
Существуют специализированные хостеры / провайдеры серверов Matrix. Хорошие хостеры берут на себя установку обновлений и резервное копирование. Ищите в описании «fully managed». Минусы у таких провайдеров тоже есть. В частности, сменить выбранного однажды провайдера может быть непросто. Поэтому далее мы рассмотрим поднятие сервера Matrix на произвольном VDS.
Серверов Matrix существует больше одного. На открытых серверах обычно стоит Synapse. Это надежное, проверенное решение. Под капотом Synapse использует Python и PostgreSQL. Это означает лишние накладные расходы, как минимум на парсинг и планирование SQL-запросов. В силу названных обстоятельств Synapse довольно требователен к ресурсам.
Из альтернативных вариантов мое внимание привлек Continuwuity (читается «континюити»). Сервер представляет собой дальнейшее развитие Conduwuit, который в свою очередь был форком Conduit. Написан на Rust и использует в качестве хранилища RocksDB. Было решено сделать ставку на Continuwuity и посмотреть, что из этого выйдет.
Описанные далее шаги производились на VDS с 1 ядром CPU, 512 Мб памяти и 20 Гб места на диске. Забегая вперед, Continuwuity этого более чем достаточно.
Первым делом нам предстоит настроить веб-сервер с Let's Encrypt. Разработчики Continuwuity рекомендуют Caddy. Это открытый веб-сервер, написанный на языке Go и со встроенной поддержкой Let's Encrypt. С тем же успехом подойдет Nginx с настроенным certbot, но Caddy удобнее.
Что ж, давайте попробуем этот ваш Caddy:
$ sudo apt install -y debian-keyring debian-archive-keyring ⏎
apt-transport-https curl
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | ⏎
sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
$ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | ⏎
sudo tee /etc/apt/sources.list.d/caddy-stable.list
$ sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
$ sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list
$ sudo apt update
$ sudo apt install caddy
Редактируем файл /etc/caddy/Caddyfile:
matrix.eax.me {
root * /usr/share/caddy
file_server
}
Здесь и далее на месте matrix.eax.me следует использовать доменное имя, присвоенное вашему VDS.
Перезапускаем веб-сервер:
$ sudo systemctl restart caddy
Если все сделано правильно, то на https://matrix.eax.me появится симпатичная приветственная страница. Заботу о TLS-сертификате и его обновлении Caddy берет на себя.
Переходим к Continuwuity. Устанавливаем по инструкции:
$ sudo curl "https://forgejo.ellis.link/api/packages/continuwuation/"\ ⏎
"debian/repository.key" -o /etc/apt/keyrings/forgejo-continuwuation.asc
$ echo "deb [signed-by=/etc/apt/keyrings/forgejo-continuwuation.asc] "\ ⏎
"https://forgejo.ellis.link/api/packages/continuwuation/debian "\ ⏎
"$(lsb_release -sc) stable" | ⏎
sudo tee /etc/apt/sources.list.d/continuwuation.list
$ sudo apt update
$ sudo apt install continuwuity
Далее в /etc/conduwuit/conduwuit.toml прописываем:
server_name = "matrix.eax.me"
Рекомендуется изучить файл целиком. Помимо прочего, в нем рассказано, например, как осуществляется резервное копирование.
Перезапускаем Continuwuity и убеждаемся, что после правки конфига все работает:
$ sudo systemctl restart conduwuit
$ sudo systemctl status conduwuit
Наконец, правим /etc/caddy/Caddyfile таким образом:
matrix.eax.me, matrix.eax.me:8448 {
reverse_proxy 127.0.0.1:8008
}
... и говорим:
$ sudo systemctl restart caddy
Настройка Continuwuity завершена, но нам еще предстоит создать первый аккаунт. Согласно выводу:
$ sudo journalctl -u conduwuit -n 50 --no-pager
... предусмотрено два способа это сделать. Первый заключается в использовании registration token, который указан в логах. К сожалению, используемый мной клиент FluffyChat данный способ не поддерживает. Второй способ заключается в запуске сервера в интерактивном режиме. Для этого нужно запустить Continuwuity из консоли и нажать Ctr+C. Воспользуемся данным методом.
Чтобы все получилось, нужно временно дать нашему пользователю права доступа к RocksDB, а также явно указать параметр database_path:
$ sudo systemctl stop conduwuit
$ sudo chmod a+r /etc/conduwuit/conduwuit.toml
$ sudo chmod o+x /var/lib/private/
$ sudo chmod o+x /var/lib/private/conduwuit
$ sudo chmod -R o+w /var/lib/private/conduwuit
$ /usr/bin/conduwuit --config /etc/conduwuit/conduwuit.toml ⏎
--option 'database_path="/var/lib/private/conduwuit"'
(... логи пропущены ...)
^C
"help" for help, ^D to exit the console, ^\ to stop the server
uwu> users create-user afiskon
(... пропущено ...)
Created user with user_id: @afiskon:matrix.eax.me and password: (...пароль...)
$ sudo chmod -R o-w /var/lib/private/conduwuit
$ sudo chmod o-x /var/lib/private/conduwuit
$ sudo chmod o-x /var/lib/private/
$ sudo chmod go-r /etc/conduwuit/conduwuit.toml
$ sudo systemctl start conduwuit
Открываем FluffyChat, логинимся. Первый пользователь попадает в Admin Room, откуда сервером можно управлять при помощи специальных команд. В сущности, это тот же интерактивный режим, обернутый в протокол Matrix. Менять права доступа к RocksDB больше не придется.
Проверяем, все ли работает. Сообщения отправляются, групповые чаты открываются, картинки загружаются. Дефектов в работе Continuwuity мне выявить не удалось.
Больше информации о Continuwuity вы найдете на официальном сайте. Также предусмотрен чат поддержки #continuwuity:continuwuity.org. Людей в нем много, на вопросы отвечают быстро.