Новости и статьи

Среда разработки встроенных систем или дистрибутивов на основе GNU/Linux. Здесь вы можете найти новости проекта, статьи и заметки, касающиеся разработки дистрибутива Radix cross Linux.

[matrix] на собственном сервере

16 сентября 2025 г.

В данной статье рассматривается процесс установки [matrix] на собственном сервере так, чтобы имелась возможность обмениваться текстовыми и голосовыми сообщениями. Организации аудио и видео звонков будет посвящена отдельная статья.

Matrix

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

Мы прошли этот путь и по горячим следам составили полную инструкцию для тех, кто хочет установить [matrix] на собственном сервере.

tags

Тренд на создание национальных мессенджеров действительно набирает силу по всему миру, в основном из соображений цифрового суверенитета, защиты данных пользователей и национальной безопасности.

Вот список стран, которые разработали или активно продвигают свои национальные мессенджеры в качестве альтернативы WhatsApp и Telegram:

  • Россия: Сферум, VK Мессенджер, MAX.
  • Иран: Bale, Rubika, Soroush, Gap.
  • Китай: WeChat (微信).
  • Северная Корея: Wolmyong.
  • Индия: JioChat.
  • Франция: Olvid.
  • Германия: Matrix.
  • Южная Корея: KakaoTalk.
  • Узбекистан: ICQ (тот самый).
  • Эфиопия: Habesha Messenger.

Такое изобилие мессенжеров для конечного пользователя, в принципе, не плохо.

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

Главной проблемой для пользователей, разумеется, является финансовая составляющая. Если люди, имея подключение к широкополосной сети (Ethernet, Wi-Fi), могли не использовать мобильную связь для звонков друг другу. То в случае блокировки звонков в WhatsApp, Telegram, Zoom и т. д., люди вынуждены использовать сотовую связь там, где они привыкли экономить трафик сотовой сети.

Возникает вопрос: как обеспечить свободу не нарушая закон?

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

Мы вибираем [matrix] по тому, что это простое в использовании программное обеспечение, основанное на открытом протоколе обеспечивающем децентрализацию. Кроме того, [matrix] рекомендован в Германии, где, пожалуй, самые строгие законы обеспечения сетевой безопасности.

Рассматривать мы будем установку на системе Slackware и без использования Docker-контейнеров, так как это позволяет более детально понять суть происходящего.

Установка Matrix Synapse

Допустим у нас есть зарегистрированное доменное имя home.ru и наш сервер будет доступен на субдомене matrix.home.ru.

На данный момент существует два стабильных home-сервера [matrix]. Сервер Tuwunel написан на языек Rust. Сервер Synapse написан на языке Python. Мы выбрали последний, поскольку о нем мы нашли большее количество материалов в сети.

Сервер Synapse будет работать от имени системного пользователя matrix с домашним каталогом /var/lib/matrix‑synapse.

Создать пользователя можно с помошью следующих команд:

 groupadd -g 321 matrix
 useradd -u 321 -g 321 -d /var/lib/matrix-synapse/ -s /bin/bash -m -k /etc/skel -c  "Matrix Synapse System User" matrix

Здесь и далее мы будем работать от имени пользователя root (если не оговорено иное) и, поэтому, опустим использование команды sudo.

Также нам понадобятся каталоги:

 mkdir -p /etc/matrix-synapse/conf.d/
 mkdir -p /var/log/matrix-synapse/
 mkdir -p /var/run/matrix-synapse/

права на которые необходимо передать пользователю matrix:

 chown -R matrix:matrix /etc/matrix-synapse/
 chown -R matrix:matrix /var/log/matrix-synapse/
 chown -R matrix:matrix /var/run/matrix-synapse/

База данных PostgreSQL

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

 # psql -U postgres
 Password:
 postgres=#

Создать базу данных можно с помощью следующих команд:

 postgres=# CREATE USER matrix WITH PASSWORD 'секретный пароль';
 postgres=# CREATE DATABASE synapse_db TEMPLATE template0 ENCODING 'UTF8' LOCALE 'C';
 postgres=# ALTER DATABASE synapse_db OWNER TO matrix;
 postgres=# GRANT ALL PRIVILEGES ON DATABASE synapse_db TO matrix;
 postgres=# \q

Здесь, matrix – имя PostgreSQL‑пользователя (не путать с системным пользователем) которому принадлежит база данных synapse_db, а фразу 'секретный пароль' необходимо заменить на выбранный вами действительный пароль PostgreSQL‑пользователя matrix.

Убедиться в правильности наших действий можно следующим образом:

 $ psql -h localhost synapse_db matrix
 Password for user matrix:
 psql (15.2)
 Type "help" for help.

 synapse_db=> 

 synapse_db=> \q

Python Virtual Env

Напомним, что каталог /var/lib/matrix‑synapce является домашним для системного пользователя matrix и условимся, что web‑сервер будет работать с каталогом /u9/matrix.

Вы можете выбрать любой каталог для размешения, главное, чтобы сервер Nginx знал, где находятся файлы:

 server {
    . . .

    root /u9/matrix;

    . . .
 }

Создадим каталог /u9/matrix/ и отдадим права на него системному пользователю matrix:

 mkdir -p /u9/matrix/
 chown -R matrix:matrix /u9/matrix/

Мы специально не задали пароль пользователю matrix, так как привилегированный пользователь root может начать работу от имени пользователя matrix, выполнив команду:

 # su - matrix
 matrix@home.ru:~$

и, при этом, не использовать пароль.

Сервер Synapse написан на языке Python и его установку советуют осуществлять в виртуальном окружении. Поскольку мы выбрали для работы сервера каталог /u9/matrix/, виртуальное окружение мы создадим в каталоге /u9/matrix/synapse/:

 matrix@home.ru:~$ python3 -m venv /u9/matrix/synapse
 matrix@home.ru:~$ source /u9/matrix/synapse/bin/activate
 (synapse) matrix@home.ru:~$

Инсталляция сервера Synapse выполняется легко:

 (synapse) matrix@home.ru:~$ pip install --upgrade pip
 (synapse) matrix@home.ru:~$ pip install --upgrade setuptools
 (synapse) matrix@home.ru:~$ pip install "matrix-synapse[postgres]"

Здесь, мы выбрали версию для работы с базой данных PostgreSQL.

Далее необходимо создать конфигурационные файлы и ключи:

 (synapse) matrix@home.ru:~$ python -m synapse.app.homeserver \
                                    --server-name matrix.home.ru \
                                    --config-path /etc/matrix-synapse/matrix.home.ru.yaml \
                                    --generate-config \
                                    --report-stats=yes

В результате будут созданы следующие файлы:

  • /etc/matrix-synapse/matrix.home.ru.signing.key – ключ
  • /etc/matrix-synapse/matrix.home.ru.yaml – основной конфигурационный файл
  • /etc/matrix-synapse/matrix.home.ru.log.config – конфигурационный файл управления log‑файлом

Разумеется, все файлы будут принадлежать пользователю matrix.

Созданные конфигурационные файлы необходимо отредактировать так, что бы использовалась база данных PostgreSQL и все настройки были актуальными.

Приведем содержимое этих файлов целиком (естественно, изменив значения ключей):

/etc/matrix-synapse/matrix.home.ru.signing.key:

 ed25519 a_xiCh ZYJASEMf0d/Da53ycG9xiqsS73+0yNxqvan43XyI6Jo

/etc/matrix-synapse/matrix.home.ru.yaml:

 server_name: "matrix.home.ru"
 pid_file: /var/run/matrix-synapse/matrix.home.ru.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: psycopg2
   txn_limit: 10000
   args:
     user: matrix
     password: "секретный пароль"
     database: synapse_db
     host: localhost
     port: 5432
     cp_min: 5
     cp_max: 10

 log_config: "/etc/matrix-synapse/matrix.home.ru.log.config"
 signing_key_path: "/etc/matrix-synapse/matrix.home.ru.signing.key"
 media_store_path: /u9/matrix/media

 registration_shared_secret: "&&z7q*.np9=qq2D=XRAuBEqJGu:ZMbDJ+7Dx&73vxYiQ@_x0mW"
 macaroon_secret_key: "&eQ9wjEd.-a#-:NXCWNJeWTeIrtW+Rz8EQy&q4ie+yqsiNk*jW"
 form_secret: "jaWy@yeMrK.YyqtEE+KzuyZ8;qZYEX_Czqk0N;#v26QIu3QrKN"

 trusted_key_servers:
   - server_name: "matrix.home.ru"

 report_stats: true
 suppress_key_server_warning: true
 max_upload_size: 100M
 enable_registration: false
 matrix_synapse_federation_enabled: false
 matrix_synapse_federation_port_enabled: false
 search_all_users: true
 prefer_local_users: true

 public_baseurl: "https://matrix.home.ru"

 admin_users:
   - "@root:matrix.home.ru"

Здесь следует обратить внимание на пути к файлам и каталог /u9/matrix/media/ для хранения media‑файлов. Кроме того, значение переменной pid_file нам понадобится при составлении скрипта запуска сервера. Пользователя @root:matrix.home.ru мы создадим позднее.

/etc/matrix-synapse/matrix.home.ru.log.config:

 version: 1

 formatters:
     precise:
         format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s'

 handlers:
     file:
         class: logging.handlers.TimedRotatingFileHandler
         formatter: precise
         filename: /var/log/matrix-synapse/matrix.home.ru.log
         when: midnight
         backupCount: 3  # Does not include the current log file.
         encoding: utf8

     # Default to buffering writes to log file for efficiency.
     # WARNING/ERROR logs will still be flushed immediately, but there will be a
     # delay (of up to `period` seconds, or until the buffer is full with
     # `capacity` messages) before INFO/DEBUG logs get written.
     buffer:
         class: synapse.logging.handlers.PeriodicallyFlushingMemoryHandler
         target: file

         # The capacity is the maximum number of log lines that are buffered
         # before being written to disk. Increasing this will lead to better
         # performance, at the expensive of it taking longer for log lines to
         # be written to disk.
         # This parameter is required.
         capacity: 10

         # Logs with a level at or above the flush level will cause the buffer to
         # be flushed immediately.
         # Default value: 40 (ERROR)
         # Other values: 50 (CRITICAL), 30 (WARNING), 20 (INFO), 10 (DEBUG)
         flushLevel: 30  # Flush immediately for WARNING logs and higher

         # The period of time, in seconds, between forced flushes.
         # Messages will not be delayed for longer than this time.
         # Default value: 5 seconds
         period: 5

     # A handler that writes logs to stderr. Unused by default, but can be used
     # instead of "buffer" and "file" in the logger handlers.
     console:
         class: logging.StreamHandler
         formatter: precise

 loggers:
     synapse.storage.SQL:
         # beware: increasing this to DEBUG will make synapse log sensitive
         # information such as access tokens.
         level: INFO

 root:
     level: INFO

     # Write logs to the `buffer` handler, which will buffer them together in memory,
     # then write them to a file.
     #
     # Replace "buffer" with "console" to log to stderr instead.
     #
     handlers: [buffer]

 disable_existing_loggers: false

Здесь следует обратить внимание на имя log‑файла.

Start/Stop Script

Займемся теперь скриптом запуска сервера Matrix Synapse.

Непосредственно, запуск сервера можно осуществить с помощью следующей команды:

 # /usr/bin/sudo \
     -u matrix -g matrix \
     /u9/matrix/synapse/bin/python -m synapse.app.homeserver \
       --config-path=/etc/matrix-synapse/matrix.home.ru.yaml \
       --config-path=/etc/matrix-synapse/conf.d/

Здесь, запуск происходит от имени системного пользователя matrix, в виртуальном окружении Python, а аргументы --config-path указывают на конфигурационный файл и каталог дополнительных конфигураций.

Целиком скрипт запуска для OS Slackware может выглядеть следующим образом:

 #!/bin/sh

 NAME="matrix-synapse"
 USER=matrix
 GROUP=matrix
 PID_DIR=/var/run/matrix-synapse
 PID_FILE=${PID_DIR}/matrix.home.ru.pid
 LOG_DIR=/var/log/matrix-synapse
 CONFIG_FILE=/etc/matrix-synapse/matrix.home.ru.yaml
 CONFIG_ADD_PATH=/etc/matrix-synapse/conf.d/
 WORKDIR=/var/lib/matrix-synapse
 PYTHON_VENV_PATH=/u9/matrix/synapse

 case "$1" in
   start)
     # create $PIDDIR with correct access rights
     if [ ! -d ${PID_DIR} ] ; then
       rm -rf ${PID_DIR}
       mkdir -p ${PID_DIR}
     fi
     chown -R ${USER}:${GROUP} ${PID_DIR}
     chmod 0755 ${PID_DIR}

     # create $LOGDIR with correct access rights
     if [ ! -d ${LOG_DIR} ] ; then
       rm -rf ${LOG_DIR}
       mkdir -p ${LOG_DIR}
     fi
     chown -R ${USER}:${GROUP} ${LOG_DIR}
     chmod 0755 ${LOG_DIR}

     echo "Starting $NAME..."
     if [ -f "${PID_FILE}" ]; then
       echo "${NAME} is already running (PID: $(cat "${PID_FILE}"))."
       exit 1
     fi
     cd "${WORKDIR}" || exit 1
     #
     # Start daemon:
     #
     /usr/bin/sudo -u ${USER} -g ${GROUP} ${PYTHON_VENV_PATH}/bin/python -m synapse.app.homeserver --daemonize --config-path=${CONFIG_FILE} --config-path=${CONFIG_ADD_PATH}  2>/dev/null 1>/dev/null
     ;;
   stop)
     echo "Stopping ${NAME}..."
     if [ ! -f "${PID_FILE}" ]; then
       echo "${NAME} is not running."
       exit 1
     fi
     /bin/kill -9 $(cat "${PID_FILE}")  1> /dev/null 2>/dev/null
     rm -f "${PID_FILE}"
     ;;
   reload)
     echo "Reload Configuration of ${NAME}..."
     if [ ! -f "${PID_FILE}" ]; then
       echo "${NAME} is not running."
       exit 1
     fi
     /bin/kill -HUP $(cat "${PID_FILE}")  1> /dev/null 2>/dev/null
     ;;
   restart)
     echo "Restarting ${NAME}..."
     $0 stop
     sleep 5
     $0 start
     ;;
   status)
     if [ -f "${PID_FILE}" ]; then
       echo "${NAME} is running (PID: $(cat "${PID_FILE}"))."
     else
       echo "${NAME} is not running."
     fi
     ;;
   *)
     echo "Usage: $0 {start|stop|reload|restart|status}"
     exit 1
     ;;
 esac

 exit 0

Здесь мы позаботились о каталогe хранения log‑файла и каталоге содержащем идентификатор процесса, который нам понадобится для управления.

Заботиться о /etc/logrotate.d/ нет необходимости, так как сервер Synapse сам занимается дефрагментацией log‑файла по датам. Однако, в принципе, можно обеспечить автоматическое удаление устаревших log‑файлов.

Nginx сервер

Для того, чтобы по адресу https://matrix.home.ru мы могли видеть состояние сервера, необходимо составить следующий конфигурационный файл виртуального web‑сервера:

/etc/nginx/vhosts/matrix.home.ru.conf:

#
# matrix.home.ru server:
#

    server {
        listen 80;
        listen [::]:80;

        server_name matrix.home.ru;
        return 301 https://matrix.home.ru$request_uri;
    }

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        # For the federation port
        listen 8448 ssl default_server;
        listen [::]:8448 ssl default_server;

        server_name matrix.home.ru;

        error_log /var/log/nginx/matrix.home.ru.log;
        access_log /var/log/nginx/matrix.home.ru-access.log;

        #
        # Comment before getting first Certificates:
        #
        ssl_certificate          /etc/letsencrypt/live/matrix.home.ru/fullchain.pem;
        ssl_certificate_key      /etc/letsencrypt/live/matrix.home.ru/privkey.pem;
        ssl_trusted_certificate  /etc/letsencrypt/live/matrix.home.ru/chain.pem;

        location ~ ^(/|/_matrix|/_synapse/client) {
            # note: do not add a path (even a single /) after the port in `proxy_pass`,
            # otherwise nginx will canonicalise the URI and cause signature verification
            # errors.
            proxy_pass http://127.0.0.1:8008;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host:$server_port;

            # Nginx by default only allows file uploads up to 1M in size
            # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
            client_max_body_size 100M;

            # Synapse responses may be chunked, which is an HTTP/1.1 feature.
            proxy_http_version 1.1;
        }

        location = /.well-known/matrix/server {
            return 200 '{"m.server": "matrix.home.ru:443"}';
            default_type application/json;
            add_header Access-Control-Allow-Origin *;
        }

        location = /.well-known/matrix/client {
            return 200 '{"m.homeserver": {"base_url": "https://matrix.home.ru"}}';
            default_type application/json;
            add_header Access-Control-Allow-Origin *;
        }
    }

Здесь важно корректно составить json‑настройки в файлах:

https://matrix.home.ru/.well-known/matrix/server:

 {
   "m.server": "matrix.home.ru:443"
 }

и https://matrix.home.ru/.well-known/matrix/client:

 {
   "m.homeserver": {
     "base_url": "https://matrix.home.ru"
   }
 }

Проверить корректность конфигурации можно с помощью команды:

 nginx -t

и в случае отсутствия ошибок, перечитать конфирурацию:

 /etc/rc.d/rc.nginx reload

Если все выполнено успешно, то по адресу https://matrix.home.ru мы получим следующую страницу:

Fig.1. It works! Synapse is running.

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

Turn server

В случае OS Slackware, скрипт сборки Coturn можно найти на сервере slackbuilds.org.

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

 # tar xJvf coturn-4.6.3.tar.xz
 # cd coturn-4.6.3
 # ./configure --prefix=/usr \
               --libdir=/usr/lib64 \
               --sysconfdir=/etc \
               --localstatedir=/var \
               --docdir=/usr/doc/$PRGNAM-$VERSION \
               --examplesdir=/usr/share/turnserver/examples \
               --disable-rpath
 # make
 # make install

Turn‑сервер необходимо запускать от имени непривилегированного пользователя. Создадим его:

 groupadd -g 366 turnserver
 useradd -u 366 -g turnserver -r -d /var/lib/turn -s /bin/bash turnserver

Поскольку в системе может работать несколько turn‑серверов, для работы [matrix] мы будем запускать отдельный процесс с собственным конфигурационным файлом /etc/matrix‑turnserver.conf.

Непосредственно запуск сервера можно осуществить с помощью следующей команды:

 su -l -c "/usr/bin/turnserver -o -c /etc/matrix-turnserver.conf --pidfile /var/rub/matrix-turnserver.pid" turnserver

Но прежде чем запускать сервер, необходимо скопировать шаблон из каталога examples/etc:

 cp coturn-4.6.3/examples/etc/turnserver.conf /etc/matrix-turnserver.conf

и отредактировать его.

Поскольку мы не собираемся использовать базы данных для работы turn‑сервера, а хотим лишь обеспечить работу нашего узла [matrix] на простом уровне, для нас будут важны только следующие строки конфигурационного файла /etc/matrix‑turnserver.conf:

 listening-port=3478
 tls-listening-port=5349

 external-ip=

 use-auth-secret
 static-auth-secret=секретный_ключ

 realm=matrix.home.ru

 cert=/etc/letsencrypt/live/matrix.home.ru/fullchain.pem
 pkey=/etc/letsencrypt/live/matrix.home.ru/privkey.pem

 log-file=/var/log/turnserver/matrix-turnserver.log

 cli-password=$5$9ec4b27daedc4b6e$ff9b3bd7e18c393f9b3bd7e18c37368418079a6e0e7442747f42309345781a5e
Значение cli‑password можно получить из текствового пароля с помошью команды:
 # turnadmin -P -p your-text-password
 $5$9ec4b27daedc4b6e$ff9b3bd7e18c393f9b3bd7e18c37368418079a6e0e7442747f42309345781a5e

Значением переменной static‑auth‑secret может быть, придуманный вами, текстовый пароль. Он нам понадобится для конфигурирования сервера Matrix Synapse.

Как и в случае сервера Synapse, следует приготовить start/stop скрипт для запуска сервера:

/etc/dafaults/turnserver:

 TURN_USER=turnserver
 TURN_GROUP=turnserver
 TURN_PID_PATH=/var/run/turnserver
 TURN_LOG_PATH=/var/log/turnserver

/etc/rc.d/rc.matrix‑turnserver:

 #! /bin/sh

 CONFIG="/etc/matrix-turnserver.conf"

 . /etc/default/turnserver

 coturn_start() {
     if [ ! -d $TURN_PID_PATH ]; then
       mkdir -p $TURN_PID_PATH
       chown $TURN_USER:$TURN_GROUP $TURN_PID_PATH
     fi
     if [ ! -d $TURN_LOG_PATH ]; then
       mkdir -p $TURN_LOG_PATH
       chown $TURN_USER:$TURN_GROUP $TURN_LOG_PATH
     fi
     if [ -x /usr/bin/turnserver ]; then
       echo "Starting matrix-turnserver daemon:  /usr/bin/turnserver"
       su -l -c "/usr/bin/turnserver -o -c $CONFIG --pidfile $TURN_PID_PATH/matrix-turnserver.pid" $TURN_USER
     fi
 }

 coturn_stop() {
     echo "Stopping matrix-turnserver daemon:  /usr/bin/turnserver"
     kill $(cat $TURN_PID_PATH/matrix-turnserver.pid)
     rm -f $TURN_PID_PATH/matrix-turnserver.pid
 }

 coturn_restart() {
     coturn_stop
     sleep 1
     coturn_start
 }

 case "$1" in
 'start')
     coturn_start
     ;;
 'stop')
     coturn_stop
     ;;
 'restart')
     coturn_restart
     ;;
 *)
     echo "usage $0 start|stop|restart"
 esac

 exit 0

Если мы все сделали правильно и turn‑server работает, нам остается добавить в конфирурационный файл сервера Synapse /etc/matrix‑synapse/matrix.home.ru.yaml следующие строки:

 turn_uris: ["turn:matrix.home.ru?transport=udp","turn:matrix.home.ru?transport=tcp"]
 turn_shared_secret: "секретный_ключ"
 turn_user_lifetime: 86400000
 turn_allow_guests: true

 media_retention:
   local_media_lifetime: 90d
   remote_media_lifetime: 14d

Где, значение переменной turn_shared_secret должно быть равно значению переменной static‑auth‑secret конфигурационного файла /etc/matrix‑turnserver.conf (взятому в кавычки).

Теперь необходимо перезапустить Synapse‑сервер:

 /etc/rc.d/rc.matrix-synapse restart

На этом этапе наш домашний сервер [matrix] готов к работе и может передавать текстовые и аудио‑сообщения. Однако аудио и видео вызовы нам не доступны.

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

Пользовательские аккаунты можно создавать в командной строке виртуального окружения Python. Для начала надо создать привилегированного пользователя @root:matrix.home.ru, поскольку именно его мы указали в качестве администратора в файле /etc/matrix‑synapse/matrix.home.ru.yaml:

 # su - matrix
 matrix@home.ru:~$ source /u9/matrix/synapse/bin/activate
 (synapse) matrix@home.ru:~$ register_new_matrix_user \
                             --user root \
                             --password "самый секретный пароль" \
                             --admin \
                             --config /etc/matrix-synapse/matrix.home.ru.yaml \
                             http://localhost:8008

Здесь, параметр --admin предписывает создание пользователя с исключительными правами.

Обычного пользователя можно создать, применив параметр --no-admin:

 # su - matrix
 matrix@home.ru:~$ source /u9/matrix/synapse/bin/activate
 (synapse) matrix@home.ru:~$ register_new_matrix_user \
                             --user test \
                             --password "пароль" \
                             --no-admin \
                             --config /etc/matrix-synapse/matrix.home.ru.yaml \
                             http://localhost:8008

Пароли следует задавать в кавычках.

Если вы создаете домашний сервер [matrix] для небольшой группы людей, то вам достаточно командной строки для создания пользователей. Если же вы предполагаете большое количество пользователей, то вы можете инсталлировать сервер Synapse Admin.

Synapse Admin

Исходный код сервера вы можете найти на github.com.

Сборку Synapse Admin можно выполнить с помощью следующих команд:

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

 cd synapse-admin
 git checkout -b release-0.11.1 0.11.1

 yarn install
 yarn build

После сборки, в каталоге synapse‑admin/dist будет находиться готовый продукт.

Ранее мы договорились о каталоге /u9/matrix/, где распологаются все необходимые артефакты для работы сервера. Виртуальное окружение Python находится в каталоге /u9/matrix/synapse/.

Создадим еще один каталог для сервера Synapse Admin, скопируем в него содержимое каталога synapse‑admin/dist/ и отдадим права пользователю nginx, от имени которого работает web‑сервер Nginx:

 mkdir -p /u9/matrix/admin
 cp -r synapse-admin/dist/* /u9/matrix/admin/
 chown -R nginx:nginx /u9/matrix/admin/

Для корректной работы сервера Synapse Admin необходимо отредактировать файл /u9/matrix/admin/config.json, добавив в него одну строку:

 {
   "restrictBaseUrl": "https://matrix.home.ru"
 }

которая указывает на наш домашний сервер Matrix Synapse.

Настройка виртуального сервера Nginx может быть выполнена следующим образом:

#
# matrix-admin.home.ru server:
#

    server {
        listen 80;
        listen [::]:80;

        server_name matrix-admin.home.ru;
        return 301 https://matrix-admin.home.ru$request_uri;
    }

    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name matrix-admin.home.ru;

        root /u9/matrix/admin;
        index index.html;

        error_log /var/log/nginx/matrix-admin.home.ru.log;
        access_log /var/log/nginx/matrix-admin.home.ru-access.log;

        #
        # Comment before getting first Certificates:
        #
        ssl_certificate          /etc/letsencrypt/live/matrix-admin.home.ru/fullchain.pem;
        ssl_certificate_key      /etc/letsencrypt/live/matrix-admin.home.ru/privkey.pem;
        ssl_trusted_certificate  /etc/letsencrypt/live/matrix-admin.home.ru/chain.pem;

        gzip on;
        gzip_types text/plain application/javascript application/json text/css text/xml application/xml+rss;
        gzip_min_length 1000;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|woff|woff2|ttf|eot|webp)$ {
            expires 30d; # Set caching for static assets
            add_header Cache-Control "public";
        }

    }

Сервер matrix‑admin.home.ru это простой статический сайт. Вы можете разместить в корне каталога /u9/matrix/admin/ собственные файлы favicon.ico и robots.txt, последний из которых можно использовать для запрета сканирования содержимого поисковыми ботами:

 User-agent: *
 Disallow: /

Перейдя в браузере по адресу https://matrix-admin.home.ru и войдя как root с паролем, который вы задали во время создания пользователя, вы получите полный доступ к базе пользователей сервера Synapse.

Сервер Synapse Admin имеет простой, но вполне достаточный для работы интерфейс.

Литература:

Links:

Sources:


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

Enjoy.