Matrix — это децентрализованный протокол обмена сообщениями с поддержкой федерации, шифрования и звонков. В этой инструкции — полный разбор установки собственного Matrix-сервера Synapse в Docker, с базой данных PostgreSQL, TURN-сервером для голосовых вызовов и веб-клиентом Element Web. Всё адаптировано под современную среду и сопровождается готовым docker-compose.yml.
- 1. Что потребуется
- 2. Настройка DNS
- 3. Подготовка структуры и compose-файла
- 4. Генерация конфигурации Synapse
- 5. Настройка homeserver.yaml
- TURN / STUN
- Почта
- 6. TLS и реверс-прокси
- 7. Запуск стека
- 8. Создание администратора
- ✅ Интерактивный вариант
- ✅ Однострочная команда
- ✅ Безопасный вариант через файл-пароль
- 9. Доступ к веб-интерфейсам
- 10. Фаерволл
- 11. Проверка звонков (TURN)
- 12. Бэкапы и обновления
- 13. Безопасность
- 14. Настройка Element Web
- 15. Частые проблемы
- Краткий чек-лист запуска
- Как начать пользоваться
- 1) Войти в Element под админом
- 2) Создать комнату и отправить первое сообщение
- 3) Проверить звонки (TURN)
- 4) Подключить другие клиенты
- 5) Создавать пользователей
- 6) Проверить федерацию
- 7) Администрирование
- 8) Бэкапы и обновления (первичные)
1. Что потребуется
- Домен:
matrix.example.com - Сервер: от 2 GB RAM, 2 vCPU, диск 20 GB+
- ОС: Ubuntu 22.04 / Debian 12 или новее
- Порты: 80, 443 (TLS), 8448 (федерация), 3478 и 49152–49999 (TURN/STUN)
- Установленные: Docker + Docker Compose
2. Настройка DNS
matrix.example.com→ IP сервераelement.example.com→ IP сервера (если нужен отдельный домен для веб-клиента)
Федерация по умолчанию ожидает доступ по адресу matrix.example.com:8448 с корректным TLS-сертификатом.
3. Подготовка структуры и compose-файла
sudo mkdir -p /var/synapse/{data,postgresql/data,turn}
Пример docker-compose.yml:
version: "3.9"
services:
synapse:
image: matrixdotorg/synapse:latest
container_name: synapse
restart: unless-stopped
environment:
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
volumes:
- /var/synapse/data:/data
depends_on:
- db
ports:
- "8008:8008"
- "8448:8448"
networks:
- synapse_network
db:
image: postgres:16-alpine
environment:
- POSTGRES_USER=synapse
- POSTGRES_PASSWORD=passwd
- POSTGRES_DB=synapse
volumes:
- /var/synapse/postgresql/data:/var/lib/postgresql/data
networks:
- synapse_network
synapse-admin:
image: awesometechnologies/synapse-admin:latest
ports:
- "8010:80"
networks:
- synapse_network
turnserver:
image: instrumentisto/coturn
environment:
- TURNSERVER_REALM=matrix.example.com
- TURNSERVER_STATIC_AUTH_SECRET=supersecret123
- TURNSERVER_NO_TLS=true
- TURNSERVER_NO_DTLS=true
ports:
- "3478:3478/udp"
- "3478:3478/tcp"
- "49152-49999:49152-49999/udp"
volumes:
- /var/synapse/turn:/etc/coturn
networks:
- synapse_network
element-web:
image: vectorim/element-web
ports:
- "8080:80"
networks:
- synapse_network
networks:
synapse_network:
4. Генерация конфигурации Synapse
docker run -it --rm \
-v /var/synapse/data:/data \
-e SYNAPSE_SERVER_NAME=matrix.example.com \
-e SYNAPSE_REPORT_STATS=yes \
matrixdotorg/synapse:latest generate
5. Настройка homeserver.yaml
server_name: "matrix.example.com"
public_baseurl: "https://matrix.example.com/"
enable_registration: false
database:
name: psycopg2
args:
user: synapse
password: passwd
host: db
database: synapse
TURN / STUN
turn_uris:
- "turn:matrix.example.com:3478?transport=udp"
- "turn:matrix.example.com:3478?transport=tcp"
turn_shared_secret: "supersecret123"
Почта
email:
smtp_host: smtp.example.com
smtp_port: 587
smtp_user: "noreply@example.com"
smtp_pass: "your-smtp-password"
notif_from: "Synapse <noreply@example.com>"
6. TLS и реверс-прокси
matrix.example.com {
encode zstd gzip
reverse_proxy synapse:8008
}
element.example.com {
reverse_proxy element-web:80
}
:8448 {
reverse_proxy synapse:8008
}
7. Запуск стека
cd /opt/synapse
docker compose up -d
docker compose ps
8. Создание администратора
Скрипт register_new_matrix_user требует указать конфиг Synapse. Варианты:
✅ Интерактивный вариант
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml http://localhost:8008
При вводе данных укажи:
New user localpart— логин (напримерadminилиroot_admin; не только цифры!)Make admin [no]— введиyes
✅ Однострочная команда
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml \
-u admin -a -p 'СЛОЖНЫЙ_ПАРОЛЬ' \
http://localhost:8008
✅ Безопасный вариант через файл-пароль
echo 'СЛОЖНЫЙ_ПАРОЛЬ' | sudo tee /root/mx_admin.pass >/dev/null
sudo chmod 600 /root/mx_admin.pass
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml \
-u admin -a --password-file /root/mx_admin.pass \
http://localhost:8008
После успешной регистрации аккаунт будет доступен как @admin:matrix.example.com. Им можно войти в Element и Synapse Admin.
9. Доступ к веб-интерфейсам
- Element Web:
https://element.example.com - Synapse Admin:
http://IP_сервера:8010
10. Фаерволл
sudo ufw allow 80,443,8448,8080,8010/tcp
sudo ufw allow 3478/tcp
sudo ufw allow 3478/udp
sudo ufw allow 49152:49999/udp
sudo ufw enable
11. Проверка звонков (TURN)
Создай комнату в Element и проверь голосовой звонок. Если не соединяется — проверь UDP 49152–49999 и совпадение turn_shared_secret с coturn.
12. Бэкапы и обновления
docker compose pull
docker compose up -d
docker exec -t postgres pg_dump -U synapse synapse > /var/synapse/backup/pg_backup.sql
13. Безопасность
- Измени все пароли и токены.
- Отключи регистрацию пользователей (
enable_registration: false). - Настрой лимиты запросов (
rc_config). - Регулярно обновляй образы Synapse, coturn, Element.
14. Настройка Element Web
{
"default_server_config": {
"m.homeserver": {
"base_url": "https://matrix.example.com",
"server_name": "matrix.example.com"
}
},
"disable_custom_urls": true,
"disable_guests": true,
"brand": "Element"
}
15. Частые проблемы
- Федерация не работает — проверь
https://matrix.example.com:8448/_matrix/federation/v1/version. - Звонки не идут — проверь порты TURN и общий секрет.
- Почта не уходит — проверь SMTP-логи Synapse.
Краткий чек-лист запуска
- DNS → IP сервера.
- Сгенерировать
homeserver.yaml. - Настроить PostgreSQL, TURN, email.
- Подключить TLS через Caddy или Nginx.
docker compose up -d.- Создать администратора.
- Проверить федерацию и звонки.
Как начать пользоваться
1) Войти в Element под админом
Открой: https://element.example.com (или http://<IP>:8080 без прокси).
- Сервер:
https://matrix.example.com - Логин:
@admin:matrix.example.com - Пароль: твой пароль
2) Создать комнату и отправить первое сообщение
- Нажми «Создать комнату» → «Публичная/Приватная».
- Отправь тестовое сообщение и файл — проверишь медиа-хранилище.
3) Проверить звонки (TURN)
- Создай второго пользователя через
register_new_matrix_user. - Сделай голосовой/видеозвонок в общей комнате.
4) Подключить другие клиенты
- Element Desktop (Win/Linux/macOS) — element.io/download
- Element Android/iOS — магазины приложений
- Альтернативы: SchildiChat, FluffyChat, Nheko, Cinny
Везде указывай Homeserver URL: https://matrix.example.com.
5) Создавать пользователей
docker exec -it synapse register_new_matrix_user \
-c /data/homeserver.yaml \
-u user1 -p 'пароль' \
http://localhost:8008
6) Проверить федерацию
Открой https://federationtester.matrix.org/ и введи домен matrix.example.com. После успешной проверки можно писать пользователям на других серверах: @username:matrix.org.
7) Администрирование
Открой Synapse Admin: http://<IP>:8010 (или свой домен/прокси). Управляй пользователями, комнатами, спамом.
8) Бэкапы и обновления (первичные)
docker exec -t postgres pg_dump -U synapse synapse > /var/synapse/backup/pg_backup.sql
rsync -av /var/synapse/data /var/synapse/backups/
docker compose pull && docker compose up -d
Готово — сервер работает, клиенты подключены, федерация проверена. Дальше — политика модерации, автоматизация бэкапов и тонкая настройка безопасности.









