====== Установка на 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|здесь]]), на которую [[install_os|установил Debian Linux]]. Все стандартно. Прежде всего нужно определиться, по каким адресам будут сервер synapse и админка. Я выбрал для первого [[https://mtx.nikkutuzov.ru|]] и [[https://mtx-adm.nikkutuzov.ru|]] - для второго. Теперь нужно создать соответствующие ресурсные записи DNS. Делаю две А записи для сервера и админки. Там все просто. Приступаю к установке. ==== Установка synapse ==== Для начала обновим список пакетов и установим обновления, если таковые имеются: sudo apt update && sudo apt upgrade -y Скачиваем и импортируем ''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 -y {{:sw:lin:deb:synapse-matrix:matrix_coturn_3_apt_update.jpg?620|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 :!: ''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 -y {{: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'; :!: Вместо ''YOUR-SYNAPSE-DB-USER-PASSWORD'' установите свой пароль. CREATE DATABASE synapse OWNER synapse_user LOCALE 'C' ENCODING 'UTF-8' TEMPLATE template0; exit {{: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 -y {{:sw:lin:deb:synapse-matrix:matrix_coturn_25_synapse_install_apache2.jpg?600|Установка Apache2}} После установки ''apache'' необходимо переместить в директорию ''/var/www/html'' содержимое распакованного архива с админкой и изменить владельца файлов и директорий админки. sudo mv synapse-admin-0.11.1/* /var/www/html/ sudo chown -R www-data:www-data /var/www/html Затем перезапустить службу ''apache'': 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]] на отдельной виртуальной машине. Создаем файл ''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 -y {{: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=''' и удалить одинарные кавычки ['] до и после длинного ключа! {{:sw:lin:deb:synapse-matrix:matrix_coturn_16_conf_coturn_add_key_from_homeserver.jpg?600|COTURN Скопированный ключ...}} После добавляем несколько строк: 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_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''. --- //[[nikkutuzov@nikkutuzov.ru|Николай Кутузов]] 2025/09/27 22:15//