[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 мы получим следующую страницу:
Инсталляция сервера 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 имеет простой, но вполне достаточный для работы интерфейс.
Литература:
- Synapse Installation Instructions
- End-to-end encrypted voice and video for self-hosted community users
- Self-Hosting Element Call
- Element Server Suite (ESS)
Links:
Sources:
- Synapse – Matrix homeserver implementation
- Coturn TURN server
- LiveKit SFU
- MatrixRTC Authorization Service
В следующей статье мы продолжим настройку домашнего сервера так, чтобы он стал наконец полноценным узлом для организации аудио и видео звонков.
Enjoy.