Разворачиваем собственный Matrix-сервер Synapse в Docker: федерация, TURN и безопасность

Содержание17 разделов
Matrix — это децентрализованный протокол обмена сообщениями с поддержкой федерации, шифрования и звонков. В этой инструкции — полный разбор установки собственного Matrix-сервера Synapse в Docker, с базой данных PostgreSQL, TURN-сервером для голосовых вызовов и веб-клиентом Element Web. Всё адаптировано под современную среду и сопровождается готовым docker-compose.yml.
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 сервера (если нужен отдельный домен для веб-клиента)
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 generate5. Настройка 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: synapseTURN / 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 ps8. Создание администратора
Скрипт 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:80089. Доступ к веб-интерфейсам
- 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 enable11. Проверка звонков (TURN)
12. Бэкапы и обновления
docker compose pull
docker compose up -d
docker exec -t postgres pg_dump -U synapse synapse > /var/synapse/backup/pg_backup.sql13. Безопасность
- Измени все пароли и токены.
- Отключи регистрацию пользователей (
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:80086) Проверить федерацию
Открой 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