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

Что же такое Matrix Synapse и Element WEB. Давайте немного разберёмся.

Matrix Synapse - это серверная реализация протокола Matrix. Он представляет собой программный сервер, который обеспечивает коммуникацию и синхронизацию данных в сети Matrix.

Matrix Synapse используется для следующих задач:

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

  2. Голосовые и видеозвонки: Matrix Synapse поддерживает голосовые и видеозвонки, что позволяет пользователям общаться в режиме реального времени, используя аудио и видео связь.

  3. Синхронизация данных: Сервер Matrix Synapse синхронизирует данные между пользователями и их устройствами. Это позволяет пользователям получать свои сообщения и данные на всех устройствах, которые они используют для доступа к Matrix.

  4. Децентрализация: Matrix Synapse поддерживает децентрализованную архитектуру, что означает, что каждый пользователь может иметь свой собственный сервер Matrix Synapse. Это дает пользователям контроль над своими данными и коммуникациями, так как они не зависят от централизованного сервера.

  5. Защита и приватность: Matrix Synapse обеспечивает шифрование end-to-end для обмена сообщениями, что гарантирует безопасность и приватность коммуникаций. Это означает, что только отправитель и получатель могут прочитать содержимое сообщения.

В целом, Matrix Synapse предоставляет инфраструктуру для создания собственной сети обмена сообщениями и синхронизации данных, которая может быть использована для различных коммуникационных задач и обеспечения защиты данных.

Matrix Synapse - это программный сервер, который позволяет людям общаться друг с другом через сеть Matrix. Он отправляет и получает сообщения, позволяет проводить голосовые и видеозвонки, а также синхронизирует данные между устройствами пользователей. Matrix Synapse дает возможность людям контролировать свои данные и общение, а также обеспечивает защиту и приватность сообщений.

По сути Matrix Synapse является вашим собственным WhatsAPP / Telegramm / и т.д. мессенджером, где все данные передаются исключительно через Ваш собственный сервер и абсолютно всё шифруется.

Element Web (ранее известный как Riot.im) - это веб-интерфейс или клиент для сети Matrix. Он предоставляет пользователю возможность взаимодействовать с сетью Matrix через веб-браузер без необходимости установки дополнительного программного обеспечения.

Element Web предлагает следующие возможности:

  1. Чаты: Пользователи могут создавать личные чаты с другими пользователями или присоединяться к групповым чатам. Они могут отправлять текстовые сообщения, обмениваться файлами и ссылками, использовать эмодзи и другие элементы форматирования.

  2. Голосовые и видеозвонки: Element Web поддерживает голосовые и видеозвонки между пользователями в сети Matrix. Это позволяет пользователям общаться в режиме реального времени с помощью аудио и видео связи.

  3. Интеграция с другими сервисами: Element Web позволяет интегрировать другие сервисы, такие как уведомления, календари и файловые хранилища, чтобы пользователи могли удобно управлять своими коммуникациями и задачами в одном месте.

  4. Защита и приватность: Element Web поддерживает шифрование end-to-end для обмена сообщениями. Это означает, что только отправитель и получатель могут прочитать содержимое сообщения, обеспечивая высокий уровень приватности.

    Element Web предлагает удобный и интуитивно понятный интерфейс, который позволяет пользователям получать доступ к сети Matrix и взаимодействовать с другими пользователями независимо от устройства и операционной системы.

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

Установка

Прежде всего обновим нашу систему:

apt update
apt upgrade

Установим дополнительные зависимости

apt install net-tools python3-dev python3-pip libpq-dev mc aptitude htop apache2-utils lsb-release wget apt-transport-https
pip install psycopg2

Подключим matrix.org репозитории для Ubuntu/Debian x64 архитектуры доступные по адресу https://packages.matrix.org/debian/.

wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
apt update

Установим Matrix Synapse

apt install matrix-synapse-py3

В процессе установки не забываем установить имя нашего сервера.

Файлы конфигурации Matrix находятся в /etc/matrix-synapse
Предлагаю его сразу отредактировать под наши нужды.

vim /etc/matrix-synapse/homeserver.yaml

Оригинальный файл
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
#
# This is set in /etc/matrix-synapse/conf.d/server_name.yaml for Debian installations.
# server_name: "SERVERNAME"
pid_file: "/var/run/matrix-synapse.pid"
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['::1', '127.0.0.1']
    resources:
      - names: [client, federation]
        compress: false
database:
  name: sqlite3
  args:
    database: /var/lib/matrix-synapse/homeserver.db
log_config: "/etc/matrix-synapse/log.yaml"
media_store_path: /var/lib/matrix-synapse/media
signing_key_path: "/etc/matrix-synapse/homeserver.signing.key"
trusted_key_servers:
  - server_name: "matrix.org"

Отредактированный файл
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html
#
# This is set in /etc/matrix-synapse/conf.d/server_name.yaml for Debian installations.
# server_name: "SERVERNAME"
pid_file: "/var/run/matrix-synapse.pid"
listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    bind_addresses: ['127.0.0.1']
    resources:
      - names: [client]
        compress: false
database:
  name: psycopg2
  txn_limit: 10000
  args:
    user: matrix
    password: YOUR-MATRIX-DB-USER-PASSWORD
    database: matrix
    host: localhost
    port: 5432
    cp_min: 5
    cp_max: 10
log_config: "/etc/matrix-synapse/log.yaml"
media_store_path: /var/lib/matrix-synapse/media
signing_key_path: "/etc/matrix-synapse/homeserver.signing.key"
trusted_key_servers:
  - server_name: "matrix.YOUR-DOMAIN.COM"
suppress_key_server_warning: true
max_upload_size: 100M
enable_registration: false
matrix_synapse_federation_enabled: false
matrix_synapse_federation_port_enabled: false
registration_shared_secret: "Registration-Shared-Secret"
search_all_users: true
prefer_local_users: true
turn_uris: ["turn:matrix.YOUR-DOMAIN.COM?transport=udp","turn:matrix.YOUR-DOMAIN.COM?transport=tcp"]
turn_shared_secret: "Turn-Shared-Secret"
turn_user_lifetime: 86400000
admin_users:
  - "@admin:matrix.YOUR-DOMAIN.COM"

Давайте немного разберёмся во внесённых изменениях

  1. bind_addresses: ['127.0.0.1'] — оставляем возможность подключиться к Matrix Synapse только по localhost.

  2. names: [client] — используем только локальную аутентификацию для пользователей.

  3. database: — полностью меняем секцию и настраиваем для работы с PostgreSQL.

  4. server_name: «matrix.YOUR‑DOMAIN.COM» — домен вашего Matrix Synapse сервера.

  5. max_upload_size: 100M — ограничиваем максимальный размер загружаемых файлов.

  6. enable_registration: false — отключаем регистрацию из соображений безопасности.

  7. matrix_synapse_federation_enabled: false - отключаем Matrix Federation
    matrix_synapse_federation_port_enabled: false - отключаем Matrix Federation

  8. registration_shared_secret: «Registration‑Shared‑Secret» — прописываем длинное случайное значение, лучше воспользоваться генератором и сгенерировать ключ 32–64 символа.

  9. search_all_users: true — разрешаем поиск пользователей в клиентах.

  10. turn_uris: [«turn:matrix.YOUR‑DOMAIN.COM?transport=udp»,»turn:matrix.YOUR‑DOMAIN.COM?transport=tcp»] — сразу добавляем настройки для turn сервера, сам сервер установим позже.

  11. turn_shared_secret: «Turn‑Shared‑Secret» — прописываем длинное случайное значение, лучше воспользоваться генератором и сгенерировать ключ 32–64 символа.

Установим и настроим PostgreSQL

apt install postgresql

Ограничим PostgreSQL только интерфейсом localhost всё из тех-же соображений безопасности.

В файле /etc/postgresql/’YOU-POSTGRE-VERSION-NUMBER’/main/postgresql.conf устанавливаем параметр listen_addresses = ‘localhost’

vim /etc/postgresql/12/main/postgresql.conf

Переключимся на пользователя postgres и настроим пользователя и базу данных для Matrix Synapse.

su - postgres

createuser matrix

createdb --encoding=UTF8 --locale=C --template=template0 --owner=matrix matrix

psql

postgres=# ALTER USER matrix with PASSWORD 'YOUR-MATRIX-DB-USER-PASSWORD';

postgres=# \q

exit

Теперь можно включить и запустить сам сервис Matrix Synapse

systemctl enable matrix-synapse

systemctl start matrix-synapse

NGINX proxy и настройка сертификатов

NGINX нам нужен для того, чтобы безопасно спрятать все компоненты нашей установки.
Также нам понадобится certbot для получения сертификата Lets Encrypt.

apt install nginx python3-certbot-nginx

Теперь сгенерируем 3 сертификата которые нам понадобятся в дальнейшем:

certbot --nginx -d element.YOUR-DOMAIN.COM

certbot --nginx -d matrix.YOUR-DOMAIN.COM

certbot --nginx -d matrix-admin.YOUR-DOMAIN.COM

Теперь настроим nginx proxy для того, чтобы все наши сервисы стали доступны из сети.

Закоментируем include /etc/nginx/sites-enabled/*; в фаиле конфигурации nginx

vim /etc/nginx/nginx.conf

Теперь настроим nginx proxy для matrix, matrix-admin и element

vim /etc/nginx/conf.d/matrix.conf

matrix.conf
server {
    listen 80;
        listen [::]:80;
    server_name matrix.YOUR-DOMAIN.COM;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name matrix.YOUR-DOMAIN.COM;

    ssl_certificate /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/privkey.pem;

    location ~ ^(/|/_matrix|/_synapse/client) {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        client_max_body_size 100M;
        proxy_http_version 1.1;
    }
}

server {
    listen 8448 ssl http2 default_server;
    listen [::]:8448 ssl http2 default_server;
    server_name matrix.YOUR-DOMAIN.COM;

    ssl_certificate /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.YOUR-DOMAIN.COM/privkey.pem;
    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

vim /etc/nginx/conf.d/matrix-admin.conf

matrix-admin.conf
server {
    listen 80;
        listen [::]:80;
    server_name matrix-admin.YOUR-DOMAIN.COM;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name matrix-admin.YOUR-DOMAIN.COM;

    ssl_certificate /etc/letsencrypt/live/matrix-admin.YOUR-DOMAIN.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix-admin.YOUR-DOMAIN.COM/privkey.pem;

    location / {
        allow 1.1.1.1; #Allowed IP
        allow 8.8.8.8/24; #Allowed Subnet
        deny all;
        proxy_pass http://localhost:8088/;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

vim /etc/nginx/conf.d/element.conf

element.conf
server {
    listen 80;
        listen [::]:80;
    server_name element.YOUR-DOMAIN.COM;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name element.YOUR-DOMAIN.COM;

    ssl_certificate /etc/letsencrypt/live/element.YOUR-DOMAIN.COM/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/element.YOUR-DOMAIN.COM/privkey.pem;

    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header Content-Security-Policy "frame-ancestors 'self'";

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Проверим конфигурацию nginx на наличие ошибок

nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

systemctl enable nginx

systemctl restart nginx

Теперь наш Matrix Synapse запущен и работоспособен для обмена текстовыми сообщениями и файлами. Создадим первого пользователя из командной строки и сделаем его админом.

systemctl restart matrix-synapse

register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008

Теперь установим и настроим coturn для видео и аудио звонков

apt install coturn

Настроим coturn. Раскоментируем и утановим следующие настройки:

vim /etc/turnserver.conf

turnserver.conf
listening-port=3478
fingerprint
use-auth-secret
static-auth-secret=Turn-Shared-Secret #Мы еге генерировали ранее во время настройки Matrix Synapse
realm=matrix.YOUR-DOMAIN.COM
# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
user-quota=100 # 4 streams per video call, so 100 streams = 25 simultaneous relayed calls per user.
total-quota=1200
no-tcp-relay # VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
syslog
no-multicast-peers

В файле /etc/default/coturn раскомментируем строку #TURNSERVER_ENABLED=1, если строка закомментирована — TURN-сервер не стартует.

vim /etc/default/coturn

systemctl enable coturn

systemctl start coturn

Установим Element web на базе докер контейнера

Для этого нам потребуется докер.

apt install docker.io docker-compose

Теперь подготовим config.json для нашего Element WEB для минимальной кастомизации: сразу пропишем адрес нашего Matrix Synapse сервера и отключим ненужное. Будем использовать только локальную аутентификацию.

mkdir /opt/element-web

cd /opt/element-web

vim /opt/element-web/config.json

config.json
{
    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://matrix.YOUR-DOMAIN.COM",
            "server_name": "matrix.YOUR-DOMAIN.COM"
        },
        "m.identity_server": {
            "base_url": "https://vector.im"
        }
    },
    "disable_custom_urls": true,
    "disable_guests": true,
    "disable_login_language_selector": false,
    "disable_3pid_login": true,
    "brand": "Element",
    "integrations_ui_url": "https://scalar.vector.im/",
    "integrations_rest_url": "https://scalar.vector.im/api",
    "integrations_widgets_urls": [
        "https://scalar.vector.im/_matrix/integrations/v1",
        "https://scalar.vector.im/api",
        "https://scalar-staging.vector.im/_matrix/integrations/v1",
        "https://scalar-staging.vector.im/api",
        "https://scalar-staging.riot.im/scalar/api"
    ],
    "bug_report_endpoint_url": "https://element.io/bugreports/submit",
    "uisi_autorageshake_app": "element-auto-uisi",
    "default_country_code": "GB",
    "show_labs_settings": false,
    "features": {},
    "default_federate": false,
    "default_theme": "light",
    "room_directory": {
        "servers": ["YOUR-DOMAIN.COM"]
    },
    "enable_presence_by_hs_url": {
        "https://matrix.YOUR-DOMAIN.COM": true
    },
    "terms_and_conditions_links": [
        {
            "url": "https://element.io/privacy",
            "text": "Privacy Policy"
        },
        {
            "url": "https://element.io/cookie-policy",
            "text": "Cookie Policy"
        }
    ],
    "privacy_policy_url": "https://element.io/cookie-policy"
}

Пришло время создать и запустить Element WEB docker контейнер.

docker run -d --name element-web --restart always -p 127.0.0.1:8080:80 -v /opt/element-web/config.json:/app/config.json vectorim/element-web:latest

Установка админки synapse-admin

Для начала нам надо зайти в папку /opt и с клонировать git репозиторий. Будем собирать контейнер самостоятельно для всё той-же минимальной кастомизации.

cd /opt

git clone https://github.com/Awesome-Technologies/synapse-admin.git

Теперь внесём необходимые настройки в docker-compose.yml

vim /opt/synapse-admin/docker-compose.yml

docker-compose
version: "3"

services:
  synapse-admin:
    container_name: synapse-admin
    hostname: synapse-admin
    #image: awesometechnologies/synapse-admin:latest
    build:
     context: .

    # to use the docker-compose as standalone without a local repo clone,
    # replace the context definition with this:
    # context: https://github.com/Awesome-Technologies/synapse-admin.git

     args:
    # if you're building on an architecture other than amd64, make sure
    # to define a maximum ram for node. otherwise the build will fail.
    #   - NODE_OPTIONS="--max_old_space_size=1024"
    # default is .
    #   - PUBLIC_URL=/synapse-admin
    # You can use a fixed homeserver, so that the user can no longer
    # define it himself
       - REACT_APP_SERVER=https://matrix.YOUR-DOMAIN.COM
    ports:
      - "127.0.0.1:8088:80"
    restart: unless-stopped

Теперь соберём наш контейнер.

cd /opt/synapse-admin/

docker-compose up -d

Если вас будут пугать warning сообщение не обращайте внимание, в моём случае это никоим образом не повлияло на работоспособность админки.

Проверим что у нас получилось

https://matrix.YOUR-DOMAIN.COM

https://matrix-admin.YOUR-DOMAIN.COM

https://element.YOUR-DOMAIN.COM

Заключение

Данный гайд тестировался на работоспособность на Ubuntu 20 LTS и Ubuntu 22 LTS.

Это мой дебют на хабре по этому прошу не судить строго.

Надеюсь данный гайд кому-то поможет с экономить время и окажется полезным.

Комментарии (33)


  1. erley
    03.06.2023 13:33
    +2

    Полезная статья, я у себя поднимал матрикс какое-то время назад (скорее из любопытства) и практически сразу понял что нужно его перецеплять на Postgres, но так руки и не дошли всё привести в порядок.
    А тут всё расписано, да ещё и с админкой и TURN сервером.
    Некоторые вещи я бы сделал по-другому, но это не принципиально, скорее дело вкуса.
    Похоже большинство людей разворачивают матрикс просто в виде докера, но это наверное не совсем правильно, ведь если сам матрикс про privacy etc, то желательно знать что там внутри докер образа и как оно настроено/работает. Поэтому я в данном случае врукопашную предпочитаю всё сделать.


  1. mracoid
    03.06.2023 13:33

    Спасибо за статью. Скажите, вот вы сделали кучу A записей: element..., matrix..., matrix-admin.YOUR-DOMAIN.COM. а не безопаснее ли YOUR-DOMAIN.COM/blabla1 т.д.? Что бы всякие боты непрерывно не ломали сервер.


    1. Chiudik Автор
      03.06.2023 13:33

      Добрый.

      У меня так и не получилось запустить админку под общим YOUR-DOMAIN.COM. Она наотрез отказывалась работать.
      Поэтому для меня оказалось проще зарегистрировать отдельный субдомен matrix-admin.YOUR-DOMAIN.COM исключительно для админки. Для обеспечения безопасности в конфигурацию nginx proxy был добавлен src IP фильтр. Ботам админка не доступна.

      Вообще Ваш вопрос больше уже про настройку самого nginx proxy.
      Если вы обладаете необходимыми знаниями как можно спрятать все компоненты под одним YOUR-DOMAIN.COM можете поделиться вашей конфигурацией, я её проверю и дополню статью.


      1. mracoid
        03.06.2023 13:33
        +1

        Если вкратце, то nginx proxy manager или вручную, тут ключевой момент - nginx proxy_pass. В моих намерениях применить Ваши знания, только на Debian. По срокам ничего не скажу, но постараюсь дать фидбек)


      1. MrWulf
        03.06.2023 13:33
        +1

        Добрый день.

        Пытаюсь развернуть Matrix на Ubuntu из коробки в ВМ. Всё нормально идёт аккурат до получения сертификатов. При вводе certbot --nginx -d *** выдаёт ошибку DNS Problem: NXDOMAIN looking A for *** - check that a DNS record exists for this domain. Необходимо ли было как то дополнительно регистрировать днс, либо же это проблема настроек nginx\чего то ещё?


        1. Chiudik Автор
          03.06.2023 13:33

          Добрый.

          Да, вам необходимо иметь уже зарегистрированные DNS записи и ваша машина должна быть доступна из сети по 80/443 порту для автоматической выдачи Let's Encrypt сертификата.

          Если у вас машина за NAT, то вам необходимо на роутере настроить проброс портов и убедиться, что на самой машине firewall не блокирует входящие ссоединения.


  1. redmanmale
    03.06.2023 13:33
    +2

    по-хорошему надо все компоненты ставить в докер
    и на выходе будет один композ, который ставится одной командой


    1. Chiudik Автор
      03.06.2023 13:33

      Ничего не имею против!

      Мне для моих задач так было реализовать проще и быстрее.

      Нет никаких проблем загнать PostgreSQL и Matrix Synapse в докер.

      Благодарю за коментарий.


  1. erley
    03.06.2023 13:33
    +2

    Полезная статья, я у себя поднимал матрикс какое-то время назад (скорее из любопытства) и практически сразу понял что нужно его перецеплять на Postgres, но так руки и не дошли всё привести в порядок.
    А тут всё расписано, да ещё и с админкой и TURN сервером.
    Некоторые вещи я бы сделал по-другому, но это не принципиально, скорее дело вкуса.
    Похоже большинство людей разворачивают матрикс просто в виде докера, но это наверное не совсем правильно, ведь если сам матрикс про privacy etc, то желательно знать что там внутри докер образа и как оно настроено/работает. Поэтому я в данном случае врукопашную предпочитаю всё сделать.


    1. Chiudik Автор
      03.06.2023 13:33

      Благодарю за фидбэк.

      Да, правда, я не претендую на истину в первой инстанции. OpenSource на то и OpenSource где каждый в праве делать всё так, как ему ближе / понятнее / правильнее / проще.

      В моём случае мне было необходимо минимальными усилиями поднять систему с нуля. Ну а что доробатывать и донастраивать - непаханое поле. Можно SSO прикрутить, можно дополнительные сервера поднять, можно все компоненты развести по разным инстансам. Можно всё!
      И именно отсутствие в сети (не только рунете) годного гайда подтолкнуло меня к написанию такового.
      Всем добра!


    1. AlexanderS
      03.06.2023 13:33
      +1

      Поэтому я в данном случае врукопашную предпочитаю всё сделать.

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


      1. Chiudik Автор
        03.06.2023 13:33

        Пока не планирую.

        Если Вы изложите конструктивные мысли, то с удовольствием проверю и дополню статью.

        С другой стороны нет желания перегружать публикацию информацией и переписывать официальный гайд.

        Изначально писал как шпаргалку для себя любимого. Так и родилась идея опубликовать и поделиться наработками. Не более.


        1. AlexanderS
          03.06.2023 13:33
          +1

          Это я понимаю. Я точно так же лет пять назад расписывал как Nextcloud ставить с нуля. Получился цикл из аж пяти статей. Капитальная такая шпаргалка получилась. На матрикс я уже какой раз смотрю, но руки как-то всё не доходят.


  1. ZSides
    03.06.2023 13:33
    +3

    Статья хорошая, спасибо.
    Однако, перед прочтением мне пришлось погуглить все слова из заголовка кроме ubuntu и PostgreSQL, так вышло, что с остальными технологиями мне работать не приходилось.

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


    1. Chiudik Автор
      03.06.2023 13:33

      Благодарю за фидбэк.

      Соберусь с мыслями и добавлю информацию. Основная идея была в том, что если вы ищите ответы на данные вопросы, то вы уже в теме про Matrix.

      Раз у Вас возник данный вопрос, то вероятнее всего он возник не только у вас.

      Не обещаю, что это будет быстро, но обязательно доработаю данный вопрос.


      1. zjmaster
        03.06.2023 13:33
        +1

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


  1. icCE
    03.06.2023 13:33
    +1

    Дополню, что synapse лучше ставить не из пакета который сделал мантейнер, а через pip. Для этого лучше использовать питоновский venv что бы не засорять систему.

    Если надо на попробовать, то можно и не ставить psql базу данных, а использовать sqlite. После тестов и если все устраивает можно сделать миграцию в psql.

    Когда вы в конфедерации, вы будите делится своим сервером со всеми. Хотите вы этого или нет. Лимиты по месту на сервере вы поставить не можете, но скажу, что особо критично место и не съедается. Другой момент, что вы можете хранить чье то порно.

    Еще один момент, что все в matrix представлено как пространство. Сообщение от пользователя к пользователю, новые сервера, комнаты в комнатах итд. Любой пользователь который попал к вам на сервер, может создать сервер и выкладывать там, что угодно и вы знать об этом не будите. Пока у вас не начнется заканчиваться место. Контролировать этот процесс почти не возможно. Предложение со стороны разработчиков, это блокировать определенные post запросы на создание. Посмотреть какие у вас сервера и комнаты, которые создали не вы, вы так же можете только через определенные запросы. В итоге это все поставили лично для меня жирный крест. Надеюсь кому то будет полезно.


  1. pureacetone
    03.06.2023 13:33
    +1

    Спасибо за хороший гайд.

    По поводу NGINX: в оф.документации есть вариант с Caddy. Лично проверял - сделает этот гайд еще проще (но дело вкуса конечно): https://matrix-org.github.io/synapse/latest/reverse_proxy.html?highlight=caddy#caddy-v2

    В статье дважды упоминается "только локальная авторизация". Значит ли это, что в гайде рассмотрен не федерируемый (изолированный) сервер и если да, почему?


    1. Chiudik Автор
      03.06.2023 13:33

      Благодарю за Ваш вопрос.

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

      Следовательно было запрещено аутентифицироваться пользователям, которые зарегистрированы на вышестоящих Matrix серверах:
      names: [client]

      Благодаря вашему вопросу я обратил внимание на одно упущение, у меня была включена Matrix Federation. Статью уже дополнил и добавил:
      matrix_synapse_federation_enabled: false
      matrix_synapse_federation_port_enabled: false

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

      Немного теории из сети по Matrix Synapse Federation.

      Matrix Synapse Federation (федерация Matrix Synapse) относится к способу взаимодействия различных серверов Matrix Synapse в сети Matrix. Федерация позволяет пользователям, зарегистрированным на одном сервере Matrix Synapse, общаться и отправлять сообщения пользователям, зарегистрированным на других серверах Matrix Synapse.
      Принцип работы федерации Matrix Synapse следующий:

      1. Регистрация на сервере: Пользователи выбирают сервер Matrix Synapse и регистрируются на нем. Каждый сервер имеет свой собственный домен (например, example.com), и пользователи получают идентификаторы вида @username:example.com.

      2. Распространение информации: Когда пользователь отправляет сообщение другому пользователю на другом сервере, его сервер Matrix Synapse устанавливает соединение с сервером получателя и передает сообщение через эту связь. Это позволяет серверам сети Matrix обмениваться информацией о пользователях, комнатах чата и сообщениях.

      3. Синхронизация данных: Когда пользователь получает новые сообщения или изменения в комнате чата, его сервер Matrix Synapse синхронизирует эти данные с его устройствами, чтобы он мог видеть все обновления на всех своих устройствах.

      4. Ключи шифрования: Федерация Matrix Synapse также поддерживает шифрование end-to-end, где сообщения зашифрованы на устройстве отправителя и расшифровываются на устройстве получателя. Ключи шифрования обмениваются между серверами, чтобы обеспечить безопасность и приватность сообщений.

      Федерация Matrix Synapse позволяет пользователям общаться и взаимодействовать с пользователями на разных серверах Matrix Synapse, расширяя сеть и возможности коммуникации. Это позволяет пользователям выбирать сервер по своему выбору, сохраняя при этом возможность общаться с пользователями на других серверах, распределенных по всей сети Matrix.

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

      1. Откройте файл конфигурации Matrix Synapse: Обычно файл называется "homeserver.yaml" и находится в каталоге, где установлен сервер Matrix Synapse.

      2. Найдите раздел "Federation" или "Федерация" в файле конфигурации.

      3. В этом разделе установите параметр "enabled" или "включено" в значение "false" или "ложь". Это отключит возможность федерации на вашем сервере.

      4. Сохраните изменения в файле конфигурации и перезапустите сервер Matrix Synapse, чтобы изменения вступили в силу.

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

      Обратите внимание, что отключение федерации ограничивает возможность общения с пользователями на других серверах и может ограничить функциональность и связность сети Matrix в целом.


      1. icCE
        03.06.2023 13:33
        +1

        у вас еще в конфигах nginx нет переключение на протокол 1.1 Это рекомендуется делать, если не хотим проблем с бекендом и это указанно в примерах https://matrix-org.github.io/synapse/latest/reverse_proxy.html Так же рекомендуется для клиентов в днс сделать записи, для быстрого обнаружения клиентами. Но в итоге все равно рано или поздно придете к тому, что нет возможности управлять и удалять что то старое, если кончается место на диски. Только пересоздовать комнату, а старое удалять. Кстати, можно еще упомянуть о разных версиях комнат (с тз API) так как они дают разный функционал.

        еще не очень понятен смысл

                 allow 1.1.1.1; #Allowed IP
                allow 8.8.8.8/24; #Allowed Subnet
                deny all;

        Так же не очень понятно, почему бы серты nginx не объединить в один конфиг и в целом не использовать location, а не создавать новый domain name. Но тут наверно дело уже вкуса.


        1. Chiudik Автор
          03.06.2023 13:33

          Добрый Вам день.
          По поводу подсказки касательно недостающих настроек в конфигурации nginx - изучу документацию более подробно и дополню.

          По поводу вашего вопроса на счёт Allowed IP и Allowed Subnet это пример того, как можно Admin UI хоть немного прикрыть от сети фильтруя src IP на уровне nginx proxy.


          1. icCE
            03.06.2023 13:33
            +1

            Если вы хотите прикрыть админку, лучше сделать дополнительную бейсик авторизацию


            1. Chiudik Автор
              03.06.2023 13:33
              +1

              Это понятно, но не хотел совсем уж усложнять. IP фильтр тоже вполне себе нормально.

              Как вариант можно было вынести на нестандартный порт и закрыть самим firewall машины или облака, где эта машина запущена.

              Мне достаточно такого способа.


              1. icCE
                03.06.2023 13:33

                Бейсик авторизация 4 строчки вроде как, не очень понятно, что там может быть сложного ?


                1. Chiudik Автор
                  03.06.2023 13:33
                  +1

                  Позвольте мне прикрывать свою админку так, как мне это больше нравится! ;-)


                  1. icCE
                    03.06.2023 13:33
                    -1

                    Да это как угодно, только те кто будет повторять, будут обычно повторять копи пастом не читая документацию и будут беды.


                    1. Chiudik Автор
                      03.06.2023 13:33
                      +1

                      Не совсем понимаю какие именно могут быть беды если прикрыто по src IP.

                      Тупо копи-пастом тут не получится поставить да и человек, который будет поднимать данный сервис подразумевается, что имеет определённую, пускай и минимальную, ИТ базу. Иначе не получится.

                      DNS, Firewall, port forward на рутере (если машина за натом) - в туториале я это не упоминал.


      1. Habr1337
        03.06.2023 13:33

        а почему не какой-нибудь rocket.chat/mattermost и подобные?


        1. Chiudik Автор
          03.06.2023 13:33

          Потому как задача стояла Matrix + Element.


        1. icCE
          03.06.2023 13:33

          Кстати, ,mattermost из всего перепробованного, лучше всего подходит для меня. Одно но, органичнее в бесплатный версии на создание дополнительных групп доступа.


  1. EvgeniyTi
    03.06.2023 13:33
    +1

    В организации у меня 350 чел, возможно сделать так, чтоб народ регистрировался, я подтверждал, и после этого все попадали в общий список контактов, ведь они не знают логинов друг друга


    1. Chiudik Автор
      03.06.2023 13:33
      +1

      Отличный вопрос.

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

      Касательно списка всех сотрудников я так и не решил, как можно обойти ручное добавление каждого сотрудника у каждого в список.
      Нашёл для себя workaround в виде создания общей комнаты, в которую добавлены абсолютно все сотрудники. Таким образом зайдя в комнату видно абсолютно всех её участников.
      Более годного решения пока не было найдено, я сам в процессе изучения матрицы...!!!


    1. icCE
      03.06.2023 13:33

      Уже не помню точно, но вроде как нет. Можно полностью отключить внешнею регистрацию и сделать свою через API с вашим подтверждением. Больше параметров можно глянуть тут - https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html Про общий список, можно настроить общую комнату в которую человек будет попадать после регистрации. Но замечу, что люди смогут сами создавать комнаты и творить любую дичь без вашего ведома.