Установка на Debian сервера Synapse + админка
Немного теории
Сентябрь 2025 года. Разговорились с коллегой. Он сетовал на то, что видео и аудио-звонки в whatsapp и telegram перестали работать, а viber давно заблокирован. Эти события очень затрудняют общение с родственниками, находящимися заграницей. У него остался один вариант - FiceTime от Apple, но у родственника Google Pixel. Я предложил попробовать поискать альтернативы. Выбор пал на Matrix. Открытый протокол мгновенного обмена сообщениями. Поддерживает голосовое и видео-общение. В качестве сервера я выбрал Synapse. Легко разворачивается, активно поддерживается. Клиентским приложением будет мультиплатформенный Element.
Практика
Для начала я создал виртуальную машину (пример создания ВМ можно найти здесь), на которую установил 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
Во время установки будет задано два вопроса:
- Имя сервера - я установил mtx.nikkutuzov.ru (позже можно изменить в /etc/matrix-synapse/conf.d/server_name.yalm)
- Отправлять статистику разработчикам - нет (по умолчанию)
Теперь приступаем к настройке 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 - в Вашем случае будет адрес Вашего сервера
Это почти все для того, чтобы начать использовать сервер и приступить к общению. Но! По умолчанию в качестве базы данных используется SQLite. Этого вполне достаточно для тестовых целей. Если Вы хотите просто протестировать synapse, то можете оставить SQLite и пропустить следующий раздел. Если же Вы намерены использовать этот сервер как альтернативный способ коммуникации в семье или на предприятии, то лучше перейти на использование PostgreSQL.
Установка и настройка PostgreSQL (опционально)
Установим PostgreSQL командой:
sudo apt install postgresql
После установки нужно немного поправить конфигурацию. Отредактируем (раскомментируем одну строчку) файл postgresql.conf - listen_addresses = 'localhost'
sudo nano /etc/postgresql/17/main/postgresql.conf
Теперь перейдем к созданию базы данных (БД). Для этого последовательно вводим несколько команд:
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 установите свой пароль.
Все, база данных создана. Теперь нужно в 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 ставим пароль, который Вы указали при создании БД.
После внесения изменений в конфигурацию 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
Теперь перезапустим matrix-synapse и создадим первого пользователя.
sudo systemctl restart matrix-synapse.service
sudo systemctl status matrix-synapse.service
Проверим, что сервер работоспособен. Для этого переходим в браузере по ссылке http://192.168.11.16:8008
192.168.11.16 - в Вашем случае будет адрес Вашего сервера
Создание пользователя 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! - информирует Вас, что все успешно!
Настройка админки
Для удобства создания учетных записей (а ведь только нам, как владельцам такого сервера, это доступно) скачаем админку. Для этого нужно перейти по ссылке, скопировать адрес ссылки на админку.
Переходим на наш сервер 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
Теперь установим apache2
sudo apt install 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
Настройка nginx
Теперь нужно перейти на сервер с nginx и настроить его.
У меня установлен 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
Перезапустим сервис nginx
sudo systemctl restart nginx.service
Проверим, что мы можем перейти по адресу https://mtx.nikkutuzov.ru:8448
Теперь проделаем аналогичную операцию для админки. Она у нас будет по адресу 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
Внутри админки видим, созданную нами ранее, учетную запись admin.
Настройка завершена! Можно создавать учетные записи и начинать общение.
Установка COTURN (опционально)
У меня Matrix (проверял приложением Element) замечательно работал. Пробовал с провайдерами Мегафон - Мегафон и Мегафон - Ростелеком. Но когда я попробовал Мегафон - Т2, то оказалось, что сообщения передаются без проблем, а аудио- и видео-звонки не работают. Немного изучив тему, стало ясно, что необходим 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
Установим coTURN
sudo apt install coturn
После установки, прежде всего, нужно в файле /etc/default/coturn раскомментировать строчку TURNSERVER_ENABLED=1, иначе наш TURN-сервер не запустится.
sudo nano /etc/default/coturn
Теперь сохраним оригинальный файл конфигурации coTURN
sudo cp /etc/turnserver.conf /etc/turnserver.conf.orig
Скопируем ранее сгенерированный ключ в файл конфигурации.
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
Теперь нужно перезапустить сервис matrix-synapse - напомню, мы там добавили несколько новых строк.
sudo systemctl restart matrix-synapse.service
sudo systemctl status matrix-synapse.service
А теперь перезапустим coTURN
sudo systemctl restart coturn.service
sudo systemctl status coturn.service
После настройки TURN-сервера звонки в случае Мегафон - Т2 заработали.
Киенты
Ранее я упоминал Element в кавчестве клиентского приложения.
Вот пример клиента на iOS
Element для Windows
Немного про 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.












































