Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

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

Linux и DevOps

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 сервера (если нужен отдельный домен для веб-клиента)

Федерация по умолчанию ожидает доступ по адресу 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.

Краткий чек-лист запуска

  1. DNS → IP сервера.
  2. Сгенерировать homeserver.yaml.
  3. Настроить PostgreSQL, TURN, email.
  4. Подключить TLS через Caddy или Nginx.
  5. docker compose up -d.
  6. Создать администратора.
  7. Проверить федерацию и звонки.

Как начать пользоваться

1) Войти в Element под админом

Открой: https://element.example.com (или http://<IP>:8080 без прокси).

  • Сервер: https://matrix.example.com
  • Логин: @admin:matrix.example.com
  • Пароль: твой пароль

2) Создать комнату и отправить первое сообщение

  1. Нажми «Создать комнату» → «Публичная/Приватная».
  2. Отправь тестовое сообщение и файл — проверишь медиа-хранилище.

3) Проверить звонки (TURN)

  1. Создай второго пользователя через register_new_matrix_user.
  2. Сделай голосовой/видеозвонок в общей комнате.

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

Готово — сервер работает, клиенты подключены, федерация проверена. Дальше — политика модерации, автоматизация бэкапов и тонкая настройка безопасности.

Оцените статью
ctrllife.ru
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x