Полное руководство по развёртыванию приватного Matrix-сервера с Google-аутентификацией, видеозвонками, Telegram и WhatsApp мостами.

Matrix — это не просто очередной мессенджер, а открытый децентрализованный протокол. Это ваш собственный «Дом», где вы контролируете данные, а не Google или Meta. В этом руководстве я пошагово расскажу, как собрать из готовых компонентов свой идеальный чат-сервер: с авторизацией через Google, видеозвонками высокого качества, двусторонними мостами в Telegram и WhatsApp, а также с веб-интерфейсом. Инструкция рассчитана на новичков, но будет полезна и опытным администраторам
Никогда не писал статьи, особенно здесь, но попытавшись найти нормальную инструкцию для разворачивания сервера Matrix с Google-аутентификацией, видеозвонками мостом Telegram и WhatsApp понял, что они либо не подходят, либо не учитывают нюансы Google-аутентификации (например не все админские сайты подходят и клиенты), часть инструкций, даже на официальном сайте, указаны не верно. В данной статье я постарался максимально точно расписать очерёдность настройки различных модулей. Надеюсь данная инструкция будем вам полезна. Если будут вопросы пишите, чем смогу помогу.
Так же отвечу на возможный вопрос, для чего всё это нужно. Не для кого не секрет, что работа telegram в данный момент не отличается стабильностью. А данный сервер с мостом в telegram позволяет оставаться на связи даже во время работы белых списков (зависит от города).
В этом гайде мы соберём из готовых Docker-контейнеров полнофункциональный Matrix-сервер для семьи или небольшой компании, который включает:
Вход через Google (а также поддержку обычных логинов/паролей);
Видеозвонки на базе LiveKit (я их ещё тестирую, качество среднее, но работает);
Двусторонние мосты в Telegram и WhatsApp (читайте и отвечайте на сообщения прямо из Matrix);
Красивый веб-клиент Element Web на вашем домене;
Удобную админ-панель Ketesa для управления пользователями и комнатами.
Инструкция писалась для Debian 13, но подойдёт для любого дистрибутива Linux с Docker.
? Оглавление
1. Требования к серверу и подготовка
Минимальные требования:
Параметр |
Значение |
|---|---|
ОС |
Debian 13 |
CPU |
2–4 ядра |
RAM |
4–8 ГБ (рекомендуется 6+) |
Диск |
30–40 ГБ (если будете активно общаться лучше сразу выделить 100 ГБ) |
Домен 1 |
|
Домен 2 |
|
1.1 Подготовка системы
Подключаемся к серверу по SSH и выполняем базовые команды:
sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget git ufw pwgen
1.2 Установка Docker и Docker Compose
Устанавливаем Docker по официальному скрипту (это проще всего):
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER newgrp docker
Устанавливаем плагин Docker Compose V2:
sudo apt install -y docker-compose-plugin
1.3 Настройка фаервола (UFW)
Открываем необходимые порты (можно сделать позже):
sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 3478/tcp sudo ufw allow 3478/udp sudo ufw allow 5349/tcp sudo ufw allow 5349/udp sudo ufw allow 7880/tcp sudo ufw allow 7881/tcp sudo ufw allow 50000:50200/udp sudo ufw enable
1.4 Создание структуры папок
Все наши файлы будут лежать в /opt/matrix-synapse:
sudo mkdir -p /opt/matrix-synapse/{data,element-web,mautrix-telegram,mautrix-whatsapp,livekit,mas-config} sudo chown -R $USER:$USER /opt/matrix-synapse cd /opt/matrix-synapse
2. Структура проекта и переменные окружения
Чтобы не «засорять» конфиги паролями, создадим файл .env. Сгенерируйте значения командой pwgen -s 32 1.
nano .env
# Основные секреты Synapse SYNAPSE_POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD_HERE1 SYNAPSE_REGISTRATION_SHARED_SECRET=YOUR_REGISTRATION_SHARED_SECRET_HERE2 SYNAPSE_MACAROON_SECRET_KEY=YOUR_MACAROON_SECRET_HERE3 SYNAPSE_FORM_SECRET=YOUR_FORM_SECRET_HERE4 SYNAPSE_TURN_SHARED_SECRET=YOUR_TURN_SHARED_SECRET_HERE5 # MAS MAS_POSTGRES_PASSWORD=YOUR_MAS_POSTGRES_PASSWORD_HERE6 MAS_SHARED_SECRET=YOUR_MAS_SHARED_SECRET_HERE7 # LiveKit LIVEKIT_API_KEY=YOUR_LIVEKIT_API_KEY_HERE8 LIVEKIT_API_SECRET=YOUR_LIVEKIT_API_SECRET_HERE9 # Telegram Bridge TELEGRAM_POSTGRES_PASSWORD=YOUR_TELEGRAM_POSTGRES_PASSWORD_HERE10 # WhatsApp Bridge WHATSAPP_POSTGRES_PASSWORD=YOUR_WHATSAPP_POSTGRES_PASSWORD_HERE11
3. Установка Synapse + PostgreSQL + Element Web
Создаём главный файл оркестрации docker-compose.yml:
nano docker-compose.yml
? Полный docker-compose.yml (нажмите, чтобы развернуть)
services: # ==================== БАЗА ДАННЫХ SYNAPSE ==================== postgres: image: postgres:15-alpine container_name: matrix_postgres restart: unless-stopped volumes: - ./data/postgres:/var/lib/postgresql/data environment: POSTGRES_DB: synapse POSTGRES_USER: synapse POSTGRES_PASSWORD: ${SYNAPSE_POSTGRES_PASSWORD} networks: - matrix_network healthcheck: test: ["CMD-SHELL", "pg_isready -U synapse"] interval: 10s timeout: 5s retries: 5 # ==================== SYNAPSE ==================== synapse: image: matrixdotorg/synapse:v1.151.0rc1 container_name: matrix_synapse restart: unless-stopped volumes: - ./data:/data - ./logs:/var/log/synapse ports: - "8008:8008" - "9000:9000" environment: SYNAPSE_SERVER_NAME: matrix.ваш-домен.ru SYNAPSE_REPORT_STATS: "no" networks: - matrix_network depends_on: - postgres healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8008/health"] interval: 30s timeout: 10s retries: 3 # ==================== БАЗА ДАННЫХ MAS ==================== matrix-auth-db: image: postgres:15-alpine container_name: matrix_auth_db restart: unless-stopped volumes: - ./matrix-auth-db:/var/lib/postgresql/data environment: POSTGRES_DB: matrix_auth POSTGRES_USER: matrix_auth POSTGRES_PASSWORD: ${MAS_POSTGRES_PASSWORD} networks: - matrix_network healthcheck: test: ["CMD-SHELL", "pg_isready -U matrix_auth"] interval: 10s timeout: 5s retries: 5 # ==================== MATRIX AUTHENTICATION SERVICE (MAS) ==================== matrix-auth: image: ghcr.io/element-hq/matrix-authentication-service:latest container_name: matrix_authentication_service restart: unless-stopped depends_on: matrix-auth-db: condition: service_healthy synapse: condition: service_started volumes: - ./mas-config:/config:ro environment: - MAS_CONFIG=/config/config.yaml networks: - matrix_network ports: - "127.0.0.1:8081:8080" # ==================== ELEMENT WEB ==================== element-web: image: vectorim/element-web:latest container_name: element_web restart: unless-stopped volumes: - ./element-web/config.json:/app/config.json:ro ports: - "127.0.0.1:8765:80" networks: - matrix_network depends_on: - synapse # ==================== KETESA (АДМИН-ПАНЕЛЬ) ==================== ketesa: container_name: ketesa hostname: ketesa build: context: https://github.com/etkecc/ketesa.git dockerfile: docker/Dockerfile.build ports: - "8181:8080" restart: unless-stopped networks: - matrix_network # ==================== БАЗА ДАННЫХ TELEGRAM ==================== telegram-db: image: postgres:15-alpine container_name: telegram_db restart: unless-stopped volumes: - ./telegram-db:/var/lib/postgresql/data environment: POSTGRES_DB: telegram POSTGRES_USER: telegram POSTGRES_PASSWORD: ${TELEGRAM_POSTGRES_PASSWORD} networks: - matrix_network healthcheck: test: ["CMD-SHELL", "pg_isready -U telegram"] interval: 10s timeout: 5s retries: 5 # ==================== TELEGRAM BRIDGE ==================== telegram-bridge: image: dock.mau.dev/mautrix/telegram:latest container_name: telegram_bridge restart: unless-stopped volumes: - ./mautrix-telegram:/data environment: - UID=991 - GID=991 networks: - matrix_network ports: - "127.0.0.1:29317:29317" depends_on: telegram-db: condition: service_healthy synapse: condition: service_started # ==================== БАЗА ДАННЫХ WHATSAPP ==================== whatsapp-db: image: postgres:15-alpine container_name: whatsapp_db restart: unless-stopped volumes: - ./whatsapp-db:/var/lib/postgresql/data environment: POSTGRES_DB: whatsapp POSTGRES_USER: whatsapp POSTGRES_PASSWORD: ${WHATSAPP_POSTGRES_PASSWORD} networks: - matrix_network healthcheck: test: ["CMD-SHELL", "pg_isready -U whatsapp"] interval: 10s timeout: 5s retries: 5 # ==================== WHATSAPP BRIDGE ==================== whatsapp-bridge: image: dock.mau.dev/mautrix/whatsapp:latest container_name: mautrix-whatsapp restart: unless-stopped volumes: - ./mautrix-whatsapp:/data environment: - UID=1337 - GID=1337 networks: - matrix_network depends_on: - synapse # ==================== LIVEKIT JWT SERVICE ==================== livekit-jwt: image: ghcr.io/element-hq/lk-jwt-service:latest container_name: livekit-jwt restart: unless-stopped environment: - LIVEKIT_URL=wss://livekit.ваш-домен.ru - LIVEKIT_KEY=${LIVEKIT_API_KEY} - LIVEKIT_SECRET=${LIVEKIT_API_SECRET} - LIVEKIT_JWT_BIND=:8080 ports: - "127.0.0.1:8088:8080" networks: - matrix_network # ==================== LIVEKIT SERVER ==================== livekit: image: livekit/livekit-server:latest container_name: livekit command: --config /etc/livekit.yaml restart: unless-stopped volumes: - ./livekit/livekit.yaml:/etc/livekit.yaml:ro network_mode: host networks: matrix_network: driver: bridge
3.1 Базовый конфиг Synapse (homeserver.yaml)
Генерируем первоначальный конфиг:
docker run -it --rm \ -v /opt/matrix-synapse/data:/data \ -e SYNAPSE_SERVER_NAME=matrix.ваш-домен.ru \ -e SYNAPSE_REPORT_STATS=no \ matrixdotorg/synapse:v1.151.0rc1 generate
Редактируем /opt/matrix-synapse/data/homeserver.yaml:
nano /opt/matrix-synapse/data/homeserver.yaml
? Ключевые изменения в homeserver.yaml
# База данных (указываем PostgreSQL вместо SQLite) database: name: psycopg2 args: user: synapse password: YOUR_SYNAPSE_POSTGRES_PASSWORD database: synapse host: postgres port: 5432 # Отключаем старую регистрацию (всё будет через MAS) enable_registration: false # Включаем поддержку Matrix Authentication Service (MAS) matrix_authentication_service: enabled: true endpoint: http://matrix-auth:8080 secret: "YOUR_MAS_SHARED_SECRET" allow_appservice_registration: true # Настройки TURN/STUN (для звонков) turn_uris: - "turn:matrix.ваш-домен.ru:3478?transport=udp" - "turns:matrix.ваш-домен.ru:5349?transport=tcp" turn_shared_secret: "YOUR_TURN_SHARED_SECRET" # Экспериментальные фичи для видеозвонков (обязательно!) experimental_features: msc3266_enabled: true msc4222_enabled: true msc4140_enabled: true msc4143_enabled: true # Интеграция с LiveKit livekit_jwt_sso: enabled: true livekit_jwt_sso_url: "https://matrix.ваш-домен.ru/livekit/jwt/token" livekit_key: "YOUR_LIVEKIT_API_KEY" livekit_secret: "YOUR_LIVEKIT_API_SECRET" # Подключение мостов (appservices) app_service_config_files: - "/data/telegram-registration.yaml" - "/data/whatsapp-registration.yaml"
3.2 Конфиг веб-клиента Element Web
nano element-web/config.json
{ "default_server_config": { "m.homeserver": { "base_url": "https://matrix.ваш-домен.ru", "server_name": "matrix.ваш-домен.ru" } }, "disable_custom_urls": false, "disable_guests": true, "brand": "Чат ваш-домен.ru", "default_theme": "dark", "room_directory": { "servers": ["matrix.ваш-домен.ru"] }, "livekit_service_url": "wss://matrix.ваш-домен.ru/rtc" }
4. Настройка Matrix Authentication Service (MAS) для входа через Google
MAS — это сервис от Element, который берёт на себя управление пользователями и аутентификацию (в том числе через Google OAuth 2.0).
4.1 Конфигурация MAS
nano mas-config/config.yaml
http: public_base: "https://matrix.ваш-домен.ru" issuer: "https://matrix.ваш-домен.ru" listeners: - name: web resources: - name: discovery - name: human - name: oauth - name: compat - name: graphql - name: assets binds: - address: '0.0.0.0' port: 8080 - name: internal resources: - name: health binds: - host: localhost port: 8081 database: uri: "postgresql://matrix_auth:YOUR_MAS_POSTGRES_PASSWORD@matrix-auth-db/matrix_auth" secrets: encryption: "YOUR_ENCRYPTION_KEY" # openssl rand -hex 32 matrix: kind: synapse homeserver: matrix.ваш-домен.ru secret: "YOUR_MAS_SHARED_SECRET" endpoint: "http://synapse:8008" upstream_oauth2: providers: - id: 01HFS6S2SVAR7Y7QYMZJ53ZAGZ # Уникальный ULID human_name: Google brand_name: "google" issuer: "https://accounts.google.com" token_endpoint_auth_method: "client_secret_post" client_id: "YOUR_GOOGLE_CLIENT_ID" client_secret: "YOUR_GOOGLE_CLIENT_SECRET" scope: "openid profile email" claims_imports: localpart: action: ignore displayname: action: suggest template: "{{ user.name }}" email: action: suggest template: "{{ user.email }}" registration: enabled: true
4.2 Получение ключей Google OAuth 2.0
Перейдите в Google Cloud Console.
Создайте проект и включите People API.
В разделе «Учетные данные» создайте OAuth Client ID типа «Веб-приложение».
В поле «Authorized redirect URIs» добавьте:
https://matrix.ваш-домен.ru/upstream/callback/01HFS6S2SVAR7Y7QYMZJ53ZAGZСкопируйте
Client IDиClient Secretв конфиг выше.
5. Разворачиваем видеозвонки с LiveKit
LiveKit — это современный Selective Forwarding Unit (SFU), обеспечивающий качественные групповые видеозвонки.
5.1 Конфиг LiveKit
nano livekit/livekit.yaml
port: 7880 bind_addresses: - '0.0.0.0' rtc: tcp_port: 7881 port_range_start: 50000 port_range_end: 50200 use_external_ip: true room: auto_create: true turn: enabled: true domain: livekit.ваш-домен.ru udp_port: 3478 tls_port: 5349 external_tls: true keys: "YOUR_LIVEKIT_API_KEY": "YOUR_LIVEKIT_API_SECRET"
5.2 JWT-сервис уже добавлен в docker-compose.yml
Он необходим для выдачи временных токенов доступа к комнатам видеозвонков.
6. Добавляем мосты в Telegram и WhatsApp
Мосты позволяют читать и отправлять сообщения из Matrix в Telegram и WhatsApp.
6.1 Telegram Bridge
Получите API-ключи на my.telegram.org/apps. (там есть нюанс с ошибкой при создании ключей, пишет просто "Ошибка", проблема известная и гуглится, мне помогло вход с мобильного интернета, с телефона)
Создайте бота в Telegram через
@BotFatherи получитеbot_token.
Создайте конфиг:
nano mautrix-telegram/config.yaml
network: api_id: YOUR_TELEGRAM_API_ID api_hash: "YOUR_TELEGRAM_API_HASH" device_info: lang_code: ru system_lang_code: ru homeserver: address: http://synapse:8008 domain: matrix.ваш-домен.ru appservice: address: http://telegram-bridge:29317 hostname: 0.0.0.0 port: 29317 database: postgres://telegram:YOUR_TELEGRAM_POSTGRES_PASSWORD@telegram-db/telegram?sslmode=disable bot: username: telegram_bot displayname: Telegram Bridge Bot bridge: permissions: "matrix.ваш-домен.ru": user "@YOUR_USERNAME:matrix.ваш-домен.ru": admin encryption: allow: true default: true msc4190: true self_sign: true
Генерация регистрации:
docker run --rm -v /opt/matrix-synapse/mautrix-telegram:/data dock.mau.dev/mautrix/telegram:latest cp /opt/matrix-synapse/mautrix-telegram/registration.yaml /opt/matrix-synapse/data/telegram-registration.yaml
6.2 WhatsApp Bridge
Создайте конфиг:
nano mautrix-whatsapp/config.yaml
homeserver: address: http://synapse:8008 domain: matrix.ваш-домен.ru appservice: address: http://whatsapp-bridge:29318 hostname: 0.0.0.0 port: 29318 database: postgres://whatsapp:YOUR_WHATSAPP_POSTGRES_PASSWORD@whatsapp-db/whatsapp?sslmode=disable bot: username: whatsappbot displayname: WhatsApp Bridge Bot bridge: permissions: "matrix.ваш-домен.ru": user "@YOUR_USERNAME:matrix.ваш-домен.ru": admin encryption: allow: true default: true msc4190: true self_sign: true
Генерация регистрации:
docker run --rm -v /opt/matrix-synapse/mautrix-whatsapp:/data dock.mau.dev/mautrix/whatsapp:latest cp /opt/matrix-synapse/mautrix-whatsapp/registration.yaml /opt/matrix-synapse/data/whatsapp-registration.yaml
7. Установка админ-панели Ketesa
Ketesa — современная админ-панель для Matrix. В docker-compose.yml она уже добавлена. Настройка доступа через Nginx будет в следующем разделе.
8. Настройка Nginx и SSL
Устанавливаем Nginx и Certbot:
sudo apt install -y nginx certbot python3-certbot-nginx
Получаем сертификаты:
sudo certbot certonly --nginx -d matrix.ваш-домен.ru -d livekit.ваш-домен.ru
Создаём конфиг Nginx:
sudo nano /etc/nginx/sites-available/matrix
? Полный конфиг Nginx (нажмите, чтобы развернуть)
# Редирект HTTP -> HTTPS server { listen 80; listen [::]:80; server_name matrix.YOUR_DOMAIN.ru; location ^~ /.well-known/acme-challenge/ { root /var/www/html; } location / { return 301 https://$host$request_uri; } } # Основной сервер server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name matrix.YOUR_DOMAIN.ru; ssl_certificate /etc/letsencrypt/live/matrix.YOUR_DOMAIN.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/matrix.YOUR_DOMAIN.ru/privkey.pem; client_max_body_size 50M; proxy_read_timeout 600s; # Element Web location / { proxy_pass http://127.0.0.1:8765/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; add_header X-Frame-Options SAMEORIGIN; } # Well-known для клиентов location = /.well-known/matrix/client { default_type application/json; add_header Access-Control-Allow-Origin * always; return 200 '{ "m.homeserver": {"base_url": "https://matrix.YOUR_DOMAIN.ru"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "https://matrix.YOUR_DOMAIN.ru/livekit/jwt"}] }'; } # Прокси для MAS (авторизация, OAuth2) location ~ ^/(oauth2|authorize|login|callback|account|graphql|upstream) { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Прокси для LiveKit JWT location /livekit/jwt/ { proxy_pass http://127.0.0.1:8088/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # API Synapse location ~ ^(/_matrix|/_synapse/client|/_synapse/admin|/_synapse/mas) { proxy_pass http://127.0.0.1:8008; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } # Сервер для LiveKit server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name livekit.YOUR_DOMAIN.ru; ssl_certificate /etc/letsencrypt/live/livekit.YOUR_DOMAIN.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/livekit.YOUR_DOMAIN.ru/privkey.pem; location / { proxy_pass http://localhost:7880; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Активируем конфиг и перезагружаем Nginx:
sudo ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
9. Запуск, создание администратора и авторизация
Запускаем все сервисы:
cd /opt/matrix-synapse docker compose up -d
Создаём первого пользователя-администратора:
docker exec -it matrix_synapse register_new_matrix_user -c /data/homeserver.yaml -u admin -p YOUR_PASSWORD --admin
Теперь откройте в браузере https://matrix.ваш-домен.ru. Вы увидите страницу входа Element Web. Вы можете войти:
Через Google (кнопка «Continue with Google»);
Как администратор с логином
adminи паролем, который вы задали.
9.1. Настройка Telegram Bridge
В Element найдите бота
@telegram_bot:matrix.YOUR_DOMAIN.ruОтправьте ему команду
login phone (вход через QR код не заработал)Введите код авторизации присланный в Telegram
9.2. Настройка WhatsApp Bridge
Найдите бота
@whatsappbot:matrix.YOUR_DOMAIN.ruОтправьте ему команду
loginОтсканируйте QR-код через WhatsApp на телефоне
10. Частые проблемы и их решения
Ошибка The as_token was not accepted (мост не запускается)
Решение: Перегенерируйте registration.yaml для соответствующего моста и перезапустите Synapse (docker compose restart synapse). Убедитесь, что путь к файлу регистрации прописан в app_service_config_files в homeserver.yaml.
Ошибка M_FORBIDDEN: Application service cannot masquerade as this user
Решение: Пользователь бота (например, @telegram_bot:...) не создан в Synapse. Создайте его вручную через register_new_matrix_user или через SQL.
Ошибка 429 Too Many Requests
Решение: Подождите 30–60 секунд — ограничение снимется автоматически. Если проблема повторяется часто, увеличьте лимиты в homeserver.yaml (параметры rc_message, rc_joins).
Видеозвонки работают только в одну сторону или не работают совсем
Решение:
1. Убедитесь, что порт 7880 и диапазон 50000-50200/udp открыты в UFW.
2. Проверьте, что в livekit.yaml правильно указан external_ip (ваш реальный IP сервера).
3. Убедитесь, что клиент (Element) имеет доступ к wss://livekit.ваш-домен.ru (проверьте через консоль браузера).
Мост Telegram не отвечает на команды
Решение: Проверьте логи моста: docker compose logs telegram-bridge. Убедитесь, что в конфиге указаны верные api_id, api_hash и bot_token. Бот должен быть создан в Telegram и не заблокирован.
Заключение
Поздравляю! Вы стали полноправным хозяином своей коммуникационной инфраструктуры. Ваш сервер поддерживает видеозвонки, удобный вход через Google и интеграцию с популярными мессенджерами. Все компоненты упакованы в Docker, что упрощает резервное копирование перенос и обновление.
Полезные ссылки:
Удачи в настройке!
UPD
По просьбе Tor-Dur-Bar допишу про опыт своего использования данного сервера. На данный момент сервер функцианирует примерно 3-4 недели, там зарагестрирована вся семья и некотороые друзья. Через клиент на телефоне (Element X) можно переписываться как напрямую (писать пользователю @имя на сервере:ваш домен) так и через мост Telegram и WhatsApp. Мост работает следующим образом, после подключения через Matrix своей учётки появляется много "комнат" с пользователями из Telegram и WhatsApp, по сути они выглядят как чаты, где есть ты сам (пользователь matrix), твой собеседник Telegram (на примере телеграма) и ты сам (как пользователь Telegram). Соответственно все сообщения приходят сразу в 3 места к тебе на Element к тебе в Telegram и собеседнику в Telegram. Возможно запутано написал, но по факту это вполне удобно, так как история переписки сохраняется везде.

Пользовался в рамках тестирования видеозвонками с телефона на телефон в клиенте Element X, связь стабильная, но под большой нагрузкой не проверял. Ещё стоит упомянуть, что это решение не от хорошей жизни, понятно дело если у кого то и без этого работает Telegram то смысла нет переходить на Matrix так как он уступает в удобстве использования однозначно.
По комментарию Lucky715 понял, что не пояснил как работают мосты в Telegram и WhatsApp на сервере. Сервер Matrix находится в моей домашней локальной сети в которой на уровне маршрутизатора работает VPN на VLESS, соответственно на сервере мосты работают. Если будет такой запрос могу дописать как настроить данное решение на арендованном сервере.
Комментарии (20)

Lucky715
26.04.2026 09:15Сразу вопрос, почему для хранения медиа не использовалось S3 ?
Как реализованы мосты, напрямую с сервера или через proxy ?
А расположение сервера на территории страны где ограничены WhatsApp и TG, если нет, то какова вероятность что сервер попадет под веерные блокировки и element превратиться в тыкву ?
Зачем авторизацию именно Google ?

nvbxak Автор
26.04.2026 09:15Сразу вопрос, почему для хранения медиа не использовалось S3 ?
Возможно это следующий шаг, "проект" живой постоянно его допиливаю, по ходу буду дополнять статью.
Как реализованы мосты, напрямую с сервера или через proxy ?
У меня в домашней сети (где пока расположен сервер) настроена маршрутизация до серверов Telegram и WhatsApp, забыл это в тексте упомянуть.
А расположение сервера на территории страны где ограничены WhatsApp и TG, если нет, то какова вероятность что сервер попадет под веерные блокировки и element превратиться в тыкву ?
Сервер на территории РФ, пока работает, проблемы с блокировкой буду решать по ходу.
Зачем авторизацию именно Google ?
Потому что у всей целевой аудитории (семья, друзья, коллеги) есть гугл аккаунты. Соответственно это проще, чем каждому логин пароль придумывать.

Blogoslov
26.04.2026 09:15Не знаю ответит ли автор или нет, но вопрос про упомянутые белые списки - каким боком это решение поможет их обойти?

nvbxak Автор
26.04.2026 09:15Скажем так, это чисто результат эксперимента, на данный момент когда включают белые списки, данное решение работает с мобильного интернета (возможно это только в моём городе так)

Blogoslov
26.04.2026 09:15Ну это значит ваш сервер на котором вы запустили Matrix находится в белых списках, больше эту магию никак нельзя объяснить

nvbxak Автор
26.04.2026 09:15Тоже страннно, это простой IP домашнего интернета, при этом к дому по VPN я подключиться не могу (блочат) а Matrix работает. Честно не вникал как это работает, но чисто из любопытства, могу попробовать провести более детальный анализ.

tarielx
26.04.2026 09:154–8 ГБ (рекомендуется 6+)
Такие требования всегда отпугивали меня от установки Synapse для маленького круга общения.
Если цель в уютном чате для друзей и семьи, то можно попробовать установить Tuwunel (или форки форков) и уместить всё в 1 Гб ОЗУ. При этом федерация, LiveKit, все клиенты будут работать.
Ещё если ограничиться Element Desktop / Element Classic (который больше не обновляется) то вместо LiveKit можно использовать легковесный coturn для звонков 1-1.
Miller777
26.04.2026 09:15А есть инструкция для установки этого варианта?
Точнее, есть ли пошаговая инструкция, которую вы можете посоветовать?

nvbxak Автор
26.04.2026 09:15Ещё если ограничиться Element Desktop / Element Classic (который больше не обновляется) то вместо LiveKit можно использовать легковесный coturn для звонков 1-1.
Тут дело в том, что я хотел изначально всё реализовать с гугл аутентификацией, потому что так мне проще, чем всем генерить логины пароли, а с гугл аутентификацией не Element Classic не работает, только Element X он же в свою очередь не заработал с coturn.
Если цель в уютном чате для друзей и семьи, то можно попробовать установить Tuwunel (или форки форков) и уместить всё в 1 Гб ОЗУ
Возможно, не рассматривал данное решение. На самом деле сейчас на моём сервере по факту используется 2гб ОЗУ, 6+ это рекомендованное значение, которое я примерно посчитал сложив все компоненты.

nebrosarth
26.04.2026 09:15Зачем делать всё вручную, если есть matrix-docker-ansible-deploy?

nvbxak Автор
26.04.2026 09:15Тут две причины в данном случае:
1. Изначально хотел сам всё настроить, что бы понимать как всё будет работать
2. В matrix-docker-ansible-deploy есть не все сервисы которые мне были нужны

perejogin
26.04.2026 09:15для докер компоста уже давно есть на гите более толковая инструкция, кроме того, есть на официальном гите элемента/матрицы чарт для разворачивания сервака хелмом в кубере.
вот если б ты посмотрел статью запили, как это все сделать нативно в системд, то цены б тебе не было.
а так - кг/км.

nvbxak Автор
26.04.2026 09:15для докер компоста уже давно есть на гите более толковая инструкция
Скажем та инструкция частично устарела, не всё по ней работает. В данной статье моя реализация, моего домашнего сервера, с моим виденьем как лучше это сделать. Причём изложена максимально простым языком. Специально не стал расписывать значение параметров и уходить в тонкости, что бы не перегружать инструкцию.
Tor-Dur-Bar
Очередной продукт жизнедеятельности нейросетки. Чтение полузаброшенных форумов с редкими постами уже стало интереснее, чем как бы живой ресурс с вот этим. Хоть бы потрудился написать в промпте “напиши похоже на человека” или “давай без эмодзи”. Даже если бы этот текст не был сгенерирован, польза такой инструкции нулевая без описания СВОЕГО опыта использования matrix.
akaleks
В 10:15 приглашен, через пол часа статья. Ну надо же как-то минусить"неугодных" и заплюсовывать "правильных". А я вот даже минус поставить не могу (((
igrblkv
Кому-то статья в Песочнице сразу понравилась?
nvbxak Автор
Тут не понял в чём вопрос. Я данную статью написал примерно неделю назад, она лежала в песочнице. Затем статью одобрили и мне выдали приглашение а не наоборот.
nvbxak Автор
Да я не мастер текстов, попросил нейросекту сформировать пошаговую инструкцию на моих готовых конфигах. Она по сути помогла отчистить конфиги и расписать по шагам. Сам пользуюсь matrix уже примерно месяц, при условии постоянно вылетающих впн и не работающих прокси, вполне себе решение для общения (учитывая что мосты так же работают и можно через него переписыватсья в телеграм обходя блокировки). А вот форумы не сильно помогли в этом вопросе, очень много устаревших конфигов которые не работают.