====== Установка на Debian сервера Synapse + админка ======
===== Немного теории =====
Сентябрь 2025 года. Разговорились с коллегой. Он сетовал на то, что видео и аудио-звонки в whatsapp и telegram перестали работать, а viber давно заблокирован. Эти события очень затрудняют общение с родственниками, находящимися заграницей. У него остался один вариант - FiceTime от Apple, но у родственника Google Pixel. Я предложил попробовать поискать альтернативы. Выбор пал на [[https://matrix.org/|Matrix]]. Открытый протокол мгновенного обмена сообщениями. Поддерживает голосовое и видео-общение. В качестве сервера я выбрал [[https://github.com/matrix-org/synapse|Synapse]]. Легко разворачивается, активно поддерживается. Клиентским приложением будет мультиплатформенный [[https://element.io/|Element]].
===== Практика =====
Для начала я создал виртуальную машину (пример создания ВМ можно найти [[..:..:..:win:s16:hyper_v:hyper_v|здесь]]), на которую [[..:install_os:install_os|установил Debian Linux]]. Все стандартно.
Прежде всего нужно определиться, по каким адресам будут сервер synapse и админка. Я выбрал для первого [[https://mtx.nikkutuzov.ru|]] и [[https://mtx-adm.nikkutuzov.ru|]] - для второго.
Теперь нужно создать соответствующие ресурсные записи DNS. Делаю две А записи для сервера и админки. Там все просто. Приступаю к установке.
==== Установка synapse ====
Для начала обновим список пакетов и установим обновления, если таковые имеются.
sudo apt update && sudo apt upgrade
Скачиваем и импортируем GPG-ключ.
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
Добавляем официальный репозиторий Matrix.
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list
Устанавливаем synapse.
sudo apt update && sudo apt install matrix-synapse-py3
{{:sw:lin:deb:synapse-matrix:matrix_coturn_3_apt_update.jpg?600|PGP и APT}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_4_install_matrixsynapse.jpg?600|Установка synapse}}
Во время установки будет задано два вопроса:
- Имя сервера - я установил mtx.nikkutuzov.ru (позже можно изменить в /etc/matrix-synapse/conf.d/server_name.yalm)
- Отправлять статистику разработчикам - нет (по умолчанию)
{{:sw:lin:deb:synapse-matrix:matrix_coturn_5_install_matrixsynapse_host.jpg?600|Имя хоста}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_6_install_matrixsynapse_stat.jpg?600|Статистика}}
Теперь приступаем к настройке matrix-synapse. Для начала сохраним оригинальный файл конфигурации.
sudo cp /etc/matrix-synapse/homeserver.yaml /etc/matrix-synapse/homeserver.yaml.orig
И начинаем редактировать файл homeserver.yaml
sudo nano /etc/matrix-synapse/homeserver.yaml
Для базового функционала достаточно следующего содержания:
pid_file: "/var/run/matrix-synapse.pid"
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['127.0.0.1', '192.168.11.16'] #edit
resources:
- names: [client] #edit
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: "mtx.nikkutuzov.ru" #edit
suppress_key_server_warning: true #add
max_upload_size: 500M #add
enable_registration: false #add
search_all_users: true #add
prefer_local_users: true #add
### federation
matrix_synapse_federation_enabled: false #add
matrix_synapse_federation_port_enabled: false #add
### secrets
:!: 192.168.11.16 - в Вашем случае будет адрес Вашего сервера
{{:sw:lin:deb:synapse-matrix:matrix_coturn_8_conf_syn_nano_homeserver_yalm.jpg?600|Отредактированный файл homeserver.yaml}}
Это почти все для того, чтобы начать использовать сервер и приступить к общению. Но! По умолчанию в качестве базы данных используется SQLite. Этого вполне достаточно для тестовых целей. Если Вы хотите просто протестировать synapse, то можете оставить SQLite и пропустить следующий раздел. Если же Вы намерены использовать этот сервер как альтернативный способ коммуникации в семье или на предприятии, то лучше перейти на использование [[wp>ru:PostgreSQL|PostgreSQL]].
==== Установка и настройка PostgreSQL (опционально) ====
Установим PostgreSQL командой:
sudo apt install postgresql
{{:sw:lin:deb:synapse-matrix:matrix_coturn_32_opt_postgre_install.jpg?600|Установка PostgreSQL}}
После установки нужно немного поправить конфигурацию. Отредактируем (раскомментируем одну строчку) файл postgresql.conf - listen_addresses = 'localhost'
sudo nano /etc/postgresql/17/main/postgresql.conf
{{:sw:lin:deb:synapse-matrix:matrix_coturn_33_opt_postgre_edit.jpg?600|Правка postgresql.conf}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_34_opt_postgre_listen.jpg?600|Раскомментируем listen_addresses = 'localhost'}}
Теперь перейдем к созданию базы данных (БД). Для этого последовательно вводим несколько команд:
sudo -su postgres psql
CREATE ROLE synapse_user LOGIN PASSWORD 'YOUR-SYNAPSE-DB-USER-PASSWORD';
CREATE DATABASE synapse OWNER synapse_user LOCALE 'C' ENCODING 'UTF-8' TEMPLATE template0;
exit
:!: Вместо YOUR-SYNAPSE-DB-USER-PASSWORD установите свой пароль.
{{:sw:lin:deb:synapse-matrix:matrix_coturn_35_opt_postgre_createdb.jpg?600|Создание БД}}
Все, база данных создана. Теперь нужно в matrix-synapse настроить использование использование этой базы данных. Для этого нужно полностью переписать блок database в homeserver.yaml
sudo nano /etc/matrix-synapse/homeserver.yaml
Было:
database:
name: sqlite3
args:
database: /var/lib/matrix-synapse/homeserver.db
Изменяем на:
database:
name: psycopg2
txn_limit: 10000
args:
user: synapse_user
password: YOUR-SYNAPSE-DB-USER-PASSWORD
database: synapse
host: localhost
port: 5432
cp_min: 5
cp_max: 10
:!: Вместо YOUR-SYNAPSE-DB-USER-PASSWORD ставим пароль, который Вы указали при создании БД.
{{:sw:lin:deb:synapse-matrix:matrix_coturn_37_opt_postgre_edit_homeserver.jpg?600|Изменение блока database в homeserver.yaml}}
После внесения изменений в конфигурацию matrix-synapse сервис нужно перезагрузить!
sudo systemctl restart matrix-synapse
==== Создание уникального ключа ====
Вне зависимости от используемой БД, для начала использования matrix-synapse нам не хватает две вещи (за исключением настройки NAT - там все просто, нужно только пробросить до машины с сервером matrix-synapse порт 8448):
- Сгенерировать уникальный ключ
- Добавить пользователя.
Для генерации ключа и внесения его в конфигурационный файл воспользуемся командой:
echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee -a /etc/matrix-synapse/homeserver.yaml
{{:sw:lin:deb:synapse-matrix:matrix_coturn_9_conf_syn_add_reg_sh_sec.jpg?600|Registration Shared Secret}}
Теперь перезапустим matrix-synapse и создадим первого пользователя.
sudo systemctl restart matrix-synapse.service
sudo systemctl status matrix-synapse.service
{{:sw:lin:deb:synapse-matrix:matrix_coturn_20_synapse_restart.jpg?600|Перезапуск matrix-synapse}}
Проверим, что сервер работоспособен. Для этого переходим в браузере по ссылке http://192.168.11.16:8008
:!: 192.168.11.16 - в Вашем случае будет адрес Вашего сервера
{{:sw:lin:deb:synapse-matrix:matrix_coturn_23_synapse_test_in_browser.jpg?600|Тест работоспособности в браузере}}
==== Создание пользователя synapse-matrix ====
Для того, чтобы создать пользователя, нужно ввести команду:
sudo register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml http://localhost:8008
И внести следующие данные:
New user localpart [root]: admin - имя пользователя
Password: - пароль
Confirm password: - повторение пароля
Make admin [no]: yes - дать права администратора? (да/нет)
Sending registration request... - информирует Вас, что запрос отправлен
Success! - информирует Вас, что все успешно!
==== Настройка админки ====
Для удобства создания учетных записей (а ведь только нам, как владельцам такого сервера, это доступно) скачаем админку. Для этого нужно перейти по [[https://github.com/Awesome-Technologies/synapse-admin/releases/latest
|ссылке]], скопировать адрес ссылки на админку.
{{:sw:lin:deb:synapse-matrix:matrix_coturn_38_synapse_admin_link.jpg?600|Админка для synapse}}
Переходим на наш сервер synapse и в командной строке вводим команду wget [вставляем ссылку на скачивание архива (в буфере обмена у нас сслыка на архив, помните?)]
wget https://github.com/Awesome-Technologies/synapse-admin/releases/download/0.11.1/synapse-admin-0.11.1.tar.gz
После того, как скачали архив его нужно распаковать.
tar xzvf synapse-admin-0.11.1.tar.gz
{{:sw:lin:deb:synapse-matrix:matrix_coturn_24_synapse_download_admin.jpg?600|Скачиваем архив}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_26_synapse_unarchive_admin.jpg?600|Распаковка архива}}
Теперь установим apache2
sudo apt install apache2
{{:sw:lin:deb:synapse-matrix:matrix_coturn_25_synapse_install_apache2.jpg?600|Установка Apache2}}
После установки apache2 нужно переместить в директорию /var/www/html содержимое распакованного архива с админкой и изменить владельца файлов и директорий админки.
sudo mv synapse-admin-0.11.1/* /var/www/html/
sudo chown -R www-data:www-data /var/www/html
Затем перезапустить службу apache2.
sudo systemctl restart apache2
sudo systemctl status apache2
{{:sw:lin:deb:synapse-matrix:matrix_coturn_29_synapse_move_and_chown_admin_rst_apache2.jpg?600|Перезапуск apache2}}
==== Настройка nginx ====
Теперь нужно перейти на сервер с nginx и настроить его.
:!: У меня [[..:nginx_certbot:nginx_certbot|установлен nginx]] на отдельной виртуальной машине.
Создаем файл mtx.nikkutuzov.ru
sudo nano /etc/nginx/sites-available/mtx.nikkutuzov.ru
со следующим содержанием
server {
listen 80;
listen [::]:80;
server_name mtx.nikkutuzov.ru;
return 301 https://$host$request_uri;
}
server {
listen 8448 ssl http2 default_server;
listen [::]:8448 ssl http2 default_server;
server_name mtx.nikkutuzov.ru;
ssl_certificate /etc/letsencrypt/live/mtx.nikkutuzov.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mtx.nikkutuzov.ru/privkey.pem;
location ~ ^(/|/_matrix|/_synapse/client) {
proxy_pass http://192.168.11.16:8008;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 500M;
}
}
Проверяем синтаксис
sudo nginx -t
Создаем ссылку
sudo ln -s /etc/nginx/sites-available/mtx.nikkutuzov.ru /etc/nginx/sites-enabled/
Получаем сертификат let's encrypt
sudo certbot --nginx -d mtx.nikkutuzov.ru
{{:sw:lin:deb:synapse-matrix:cert_for_mtx.nikkutuzov.ru.jpg?600|Получение сертификата}}
Перезапустим сервис nginx
sudo systemctl restart nginx.service
Проверим, что мы можем перейти по адресу https://mtx.nikkutuzov.ru:8448
{{:sw:lin:deb:synapse-matrix:matrix_coturn_30_synapse_test_https_matrix.jpg?600|Matix httpS}}
Теперь проделаем аналогичную операцию для админки. Она у нас будет по адресу https://mtx-adm.nikkutuzov.ru
Создаем файл для mtx-adm.nikkutuzov.ru
sudo nano /etc/nginx/sites-available/mtx-adm.nikkutuzov.ru
со следующими параметрами:
server {
listen 80;
listen [::]:80;
server_name mtx-adm.nikkutuzov.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mtx-adm.nikkutuzov.ru;
ssl_certificate /etc/letsencrypt/live/mtx-adm.nikkutuzov.ru/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mtx-adm.nikkutuzov.ru/privkey.pem; # managed by Certbot
location / {
proxy_pass http://192.168.11.16;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Создаем ссылку.
sudo ln -s /etc/nginx/sites-available/mtx-adm.nikkutuzov.ru /etc/nginx/sites-enabled/
Получаем сертификат.
sudo certbot --nginx -d mtx-adm.nikkutuzov.ru
Перезапускаем сервис nginx
sudo systemctl restart nginx.service
Переходим по ссылке https://mtx-adm.nikkutuzov.ru
{{:sw:lin:deb:synapse-matrix:matrix_coturn_31_synapse_test_https_admin.jpg?600|Админка httpS}}
Внутри админки видим, созданную нами ранее, учетную запись admin.
{{:sw:lin:deb:synapse-matrix:matrix_coturn_32_synapse_inside_admin.jpg?600|Внутри админки}}
Настройка завершена! Можно создавать учетные записи и начинать общение.
{{:sw:lin:deb:synapse-matrix:matrix_coturn_39_synapse_admin_create_user.jpg?600|Создаем пользователя (в темной теме)}}
==== Установка COTURN (опционально) ====
У меня Matrix (проверял приложением Element) замечательно работал. Пробовал с провайдерами Мегафон - Мегафон и Мегафон - Ростелеком. Но когда я попробовал Мегафон - Т2, то оказалось, что сообщения передаются без проблем, а аудио- и видео-звонки не работают. Немного изучив тему, стало ясно, что необходим [[wp>ru:Traversal_Using_Relay_NAT|TURN]]. Приступил к его установке.
Открываем конфигурационный файл matrix-synapse
sudo nano /etc/matrix-synapse/homeserver.yaml
и добавляем следующий блок:
### TURN settings
turn_uris: ["turn:mtx.nikkutuzov.ru?transport=udp", "turn:mtx.nikkutuzov.ru?transport=tcp"]
turn_user_lifetime: 86400000
turn_allow_guests: true
Теперь сгенерируем и запишем в тот же файл ключ для TURN
echo "turn_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee -a /etc/matrix-synapse/homeserver.yaml
{{:sw:lin:deb:synapse-matrix:matrix_coturn_10_conf_syn_add_turn_sh_sec.jpg?600|COTURN Генерация ключа}}
Установим [[https://github.com/coturn/coturn|coTURN]]
sudo apt install coturn
{{:sw:lin:deb:synapse-matrix:matrix_coturn_11_install_coturn.jpg?600|COTURN Установка}}
После установки, прежде всего, нужно в файле /etc/default/coturn раскомментировать строчку TURNSERVER_ENABLED=1, иначе наш TURN-сервер не запустится.
sudo nano /etc/default/coturn
{{:sw:lin:deb:synapse-matrix:matrix_coturn_18_conf_coturn_editing_turn_enable.jpg?600|COTURN}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_19_conf_coturn_editing_turn_enable_in_conf.jpg?600|COTURN}}
Теперь сохраним оригинальный файл конфигурации coTURN
sudo cp /etc/turnserver.conf /etc/turnserver.conf.orig
{{:sw:lin:deb:synapse-matrix:matrix_coturn_12_conf_coturn_backup.jpg?600|COTURN Срохранение оригинального конфига}}
Скопируем ранее сгенерированный ключ в файл конфигурации.
sudo sed -n '/turn_shared/p' /etc/matrix-synapse/homeserver.yaml | sudo tee /etc/turnserver.conf
Теперь нужно файл конфигурации поправить.
sudo nano /etc/turnserver.conf
:!: Вот тут очень внимательно нужно 'turn_shared_secret:' заменить на 'static-auth-secret=' и удалить одинарные кавычки ['] до и после длинного ключа
После добавляем несколько строк.
listening-port=3478
fingerprint
use-auth-secret
realm=mtx.nikkutuzov.ru
user-quota=100
total-quota=1200
no-tcp-relay
no-multicast-peers
{{:sw:lin:deb:synapse-matrix:matrix_coturn_16_conf_coturn_add_key_from_homeserver.jpg?600|COTURN Скопированный ключ...}} {{:sw:lin:deb:synapse-matrix:matrix_coturn_17_conf_coturn_editing_turnserver_done.jpg?600|COTURN ... меняем и добавляем текст}}
Теперь нужно перезапустить сервис matrix-synapse - напомню, мы там добавили несколько новых строк.
sudo systemctl restart matrix-synapse.service
sudo systemctl status matrix-synapse.service
{{:sw:lin:deb:synapse-matrix:matrix_coturn_20_synapse_restart.jpg?600|Matrix-Synapse restart}}
А теперь перезапустим coTURN
sudo systemctl restart coturn.service
sudo systemctl status coturn.service
{{:sw:lin:deb:synapse-matrix:matrix_coturn_21_coturn_restart.jpg?600|COTURN restart}}
После настройки TURN-сервера звонки в случае Мегафон - Т2 заработали.
==== Киенты ====
Ранее я упоминал [[wp>ru:Element.io|Element]] в кавчестве клиентского приложения.
Вот пример клиента на iOS
{{:sw:lin:deb:synapse-matrix:element_ios_servername.png?200|Element iOS выбор сервера}} {{:sw:lin:deb:synapse-matrix:element_ios_login.png?200|Element iOS Вход}} {{:sw:lin:deb:synapse-matrix:element_ios_welcome.png?200|Element iOS Приветствие}} {{:sw:lin:deb:synapse-matrix:element_ios_search.png?200|Поиск пользователя}} {{:sw:lin:deb:synapse-matrix:element_ios_invite.png?200|Element iOS Приглашение}}
Element для Windows
{{:sw:lin:deb:synapse-matrix:element_win_start.png?600|Element Win Стартовая страница}} {{:sw:lin:deb:synapse-matrix:element_win_servername.png?600|Element Win Выбор сервера}} {{:sw:lin:deb:synapse-matrix:element_win_login.png?600|Element Win Login}} {{:sw:lin:deb:synapse-matrix:element_win_welcome.png?600|Element Win Приветствие}} {{:sw:lin:deb:synapse-matrix:element_win_search.png?600|Element Win Поиск}} {{:sw:lin:deb:synapse-matrix:element_win_invite.png?600|Element Win Приглашение}} {{:sw:lin:deb:synapse-matrix:element_win_video.png?600|Element Win Видео-звонок}} {{:sw:lin:deb:synapse-matrix:element_win_video_1.png?600|Element Win Видео-звонок}} {{:sw:lin:deb:synapse-matrix:element_win_file_sending.png?600|Element Win Отправка файлов}}
==== Немного про NAT ====
Напомню, что у меня сервер находится за NAT'ом. Осталось только пробросить несколько портов. 80ый и 443ий у меня уже проброшены на ВМ с nginx (192.168.11.12), остается пробросить 8448 для matrix-synapse и 3478 для TURN. Порт 8448 нужно пробросить на ВМ с nginx (192.168.11.12 в моем случае), а 3478 непосредственно на ВМ с TURN - у меня 192.168.11.16.