====== Установка на 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.