Матрикс сервер с публичной комнатой проекта

Привет! Кажется, что если тема о самохостинге, то напрашивается самособой вариант комнаты в матрице. Сейчас это похоже единственный адекватный вариант чата для самохостинга.

Что думаете?

А отсюда напрашивается еще пачка вопросов =)

  1. Где это и как это развернуть и поддерживать?
  2. Как и кто это администрировать и модерировать?

Просто запустить на дешевом VPS?
Не прокатит.

Нужно организовать отказоустойчивость, а это уже кубер, ресурсы на аренду и поддержку.

Модерировать еще 1 пространство?
У меня, к сожалению - временных ресурсов более нет.

Если кто-то готов поднять, оплачивать и модерировать - пишите, подумаем.
Субдомен matrix направить на ip задача не сложная.

PS
Вопрос “зачем?” я не задаю, но он имеется, как и ЧАТ встроенный в движок форума =)

Форум классный и чат тут прикольный. Матрикс на хоумсервере - это ж не только публичная рума. Когда телегу давят, то для самих себя в этих условиях нужно что-то независящее. В целом матрица сейчас единственная с хорошим клиентом доя всех устройств.

У меня алармы летят всякие и тп в матриксе. Телега без впн - все.

На дешнвом vps для этой цели не получится. Как только федерацию делаешь общедоступной, он начинает кушать ресурсы, а делать регистопуию только в пределах одного сервера, скорее всего, для такой цели нет.

У себя развернул его на Orange Pi 5 Plus для семьи и близких друзей, как резервный канал связи. 30 рользователей тянет без проблем, но федеоация закрытая, т.е. он не взаимодействует с другими серверами матрикс. Так же использую его для нотификаций с камеры, Home Assistant и n8n.

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

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

А есть инструкция подробная, как это все поднять у себя?

А по поводу подключения и настройки ТГ-моста есть инструкция?

Возможно ли 2, 3, 4 акка телеги подклюбчить через 1 мост? Или нужно будет добавлять каким-то макаром 2, 3, 4 моста к матриксу?

Тестирую на vps-ке 1cpu, 2Gb RAM - на нескольких пользователей работает нормально (звонки не тестил, здесь конечно нагрузка сразу будет большой).
Сегодня размышлял, что для семьи и друзей даже такой маленькой VPS-ки хватает по cpu/ram, а вот диска в 10Gb точно не хватит, как только все начнут фотки и видео слать, а брать доп.объем у провайдера дорого.
В качестве решения можно поднять тоннель между homelab и vps, смонтировать на VPS через NFS шару с homelab и настроить запись медиа в неё. Тогда получим “бесплатный диск” ограниченный только вашей лабой. Конечно в таком решении могут быть недостатки, но оно точно работает и даже очень неплохо. У меня так две удаленные друг от друга лабы обмениваются данными и всё ок.

Вот гайд по которому я настраивал: YouTube
Репа: ссылка

Домен для тестов бесплатно можно взять на duckdns, с ним всё работает без проблем.

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

P.s. готов помочь и оплатить на 3-6 месяцев сервер для пилотирования проекта и получения обратной связи от комьюнити.

Я тоже решил поднять свой Matrix-сервер. В качестве движка выбрал Tuwunel.
Все настройки делал через переменные окружения в Docker Compose. Авторизация (SSO) привязана к VoidAuth через OIDC.

Мой Docker Compose файл

services:
  tuwunel:
    image: jevolk/tuwunel:latest
    container_name: tuwunel
    restart: unless-stopped
    volumes:
      - ./tuwunel-db:/var/lib/tuwunel
    networks:
      - proxy1
    environment:
      # Настройки домена и порта
      TUWUNEL_SERVER_NAME: ${MAIN_DOMAIN}
      TUWUNEL_DATABASE_PATH: /var/lib/tuwunel
      TUWUNEL_PORT: 6167
      TUWUNEL_ADDRESS: 0.0.0.0
      TUWUNEL_MAX_REQUEST_SIZE: 20000000 # Лимит на вложения

      # Федерация
      TUWUNEL_ALLOW_FEDERATION: "true"
      TUWUNEL_TRUSTED_SERVERS: '["matrix.org", "vorsente.com", "unredacted.org", "kde.org", "mozilla.org", "gnome.org", "fedora.im", "tchncs.de", "archlinux.org"]'
      TUWUNEL_FEDERATION_TIMEOUT: 120
      TUWUNEL_REQUEST_TIMEOUT: 120

      # Настройки обнаружения
      TUWUNEL_WELL_KNOWN__CLIENT: https://${MAIN_DOMAIN}
      TUWUNEL_WELL_KNOWN__SERVER: ${MAIN_DOMAIN}:443

      # Интеграция с SSO (VoidAuth)
      TUWUNEL_IDENTITY_PROVIDER__0__BRAND: VoidAuth
      TUWUNEL_IDENTITY_PROVIDER__0__NAME: VoidAuth
      TUWUNEL_IDENTITY_PROVIDER__0__CLIENT_ID: tuwunel-matrix
      TUWUNEL_IDENTITY_PROVIDER__0__CLIENT_SECRET: # Сюда ваш секрет
      TUWUNEL_IDENTITY_PROVIDER__0__ISSUER_URL: https://auth.${MAIN_DOMAIN}/oidc
      TUWUNEL_IDENTITY_PROVIDER__0__CALLBACK_URL: https://${MAIN_DOMAIN}/_matrix/client/unstable/login/sso/callback/tuwunel-matrix
      TUWUNEL_IDENTITY_PROVIDER__0__TRUSTED: true
      TUWUNEL_IDENTITY_PROVIDER__0__REGISTRATION: true

      # Политика входа
      TUWUNEL_SINGLE_SSO: true # Авторедирект на SSO в клиентах вроде Element
      TUWUNEL_ALLOW_REGISTRATION: "false" # Регистрация только через провайдера SSO
      TUWUNEL_LOGIN_WITH_PASSWORD: "false"
      
      # Доп. сервисы и оптимизация
      TUWUNEL_TURN_URIS: '["stun:stun.l.google.com:19302", "stun:stun1.l.google.com:19302"]'
      CONDUIT_ZSTD_COMPRESSION: true
      CONDUIT_GZIP_COMPRESSION: true
      CONDUIT_BROTLI_COMPRESSION: true
      
      # Превью ссылок
      TUWUNEL_URL_PREVIEW_DOMAIN_EXPLICIT_ALLOWLIST: '["google.com", "youtube.com", "youtu.be", "github.com", "gitlab.com", "wikipedia.org", "archlinux.org", "reddit.com", "t.me", "twitter.com", "x.com", "instagram.com", "steampowered.com", "warframe.com", "minecraft.net"]'
      TUWUNEL_URL_PREVIEW_MAX_SPIDER_SIZE: 1048576

      # Разрешение видимости публичных комнат и пользователей сервера в федерации
      CONDUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_OVER_FEDERATION: true
      CONDUIT_ALLOW_PUBLIC_ROOM_DIRECTORY_WITHOUT_AUTH: true
      CONDUIT_ALLOW_PUBLIC_ROOM_SEARCH_BY_ID: true
      CONDUIT_SHOW_ALL_LOCAL_USERS_IN_USER_DIRECTORY: true

networks:
  proxy1:
    external: true

Настройка прокси (Traefik)

Для корректной федерации важно прокинуть пути /_matrix и /.well-known:

http:
  routers:
    matrix:
      entryPoints:
        - https-wan
        - https-lan
      middlewares:
        - secured
      service: matrix
      rule: Host(`${MAIN_DOMAIN}`) && (PathPrefix(`/_matrix`) || PathPrefix(`/.well-known/matrix`))
      priority: 100
      tls:
        certResolver: cloudflare
        
  services:
    matrix:
      loadBalancer:
        servers:
          - url: http://tuwunel:6167
        passHostHeader: true

Нюанс со звонками и Matrix RTC

По поводу связи: для групповых звонков требуется дополнительная настройка Matrix RTC. Я этого делать не стал, так как использую проксирование через Cloudflare, а Matrix RTC через него на бесплатном тарифе не завести. Тем не менее, обычные личные звонки (1 на 1) работают отлично через стандартные TURN-серверы Google, которые я прописал в конфиге.

Итог

На данный момент полет нормальный. Админка (!admin rooms list) показывает 48 комнат. База данных ./tuwunel-db весит всего 1.1 ГиБ.

Где лучше поднять в VM или LXC?
Если LXC, то привилегированный или нет?

у меня живет в непривилегированном lxc

Где сейчас купить домен на долгосрок с учётом грядущих блокировок? Безальтернативно отечественный регистрор?
Временно для теста поднял synapse на duckdns, но нужно что-то более надёжное на длинной дистанции.

Beget себе выбрал. Не жалуюсь. Я не профи в выборе, опыта с другими нет.