Пост этот будет редактироваться. Я некоторые вещи подзабыл и в ответ на ворчание пользователей постараюсь поправить ошибки.
Собственно установка состоит из нескольких частей -
0. первым делом наладить скачивание с гита и автобан для всех ботов роскомкозлов
1. на выбранном сервере надо установить сам демон, это достаточно просто. Поскольку задача ставилась развернуть сервер "далеко" и на этом сервере крутятся другие серверы, то надо было им не помешать. Ресурсов много не требуется. Поскольку со времен CentOS (закидают меня за офтопик, потому скажу, что на Arch я тоже запускал, аналогично) ценю их надежность, то ... запустил два своих сервера, на Arch + AlmaLinux. Дело в том, что ставилась задача наладить связь с родной с родственной страной, в которой не открывается все ru, потому второй сервер поднимался "вдали". В итоге все ставится из репозиториев. Основное направление задано здесь - AlmaLinux
https://matrix-org.github.io/synapse/la ... ation.html
gcc python3-devel libffi-devel openssl-devel coturn
pacman -S matrix-synapse
vi /usr/lib/systemd/system/synapse.service -там если что надо, поправить. Обычно не надо (имя конфига не трогаем и все Ок)
systemctl enable synapse
mkdir /opt/synapse
useradd -r -m -d /opt/synapse -s /bin/bash synapse
chown -R synapse:synapse /var/lib/synapse /etc/synapse /opt/synapse
sudo su synapse -s /bin/bash
cd /opt/synapse
python3 -m venv env
source env/bin/activate
pip install --upgrade pip virtualenv
pip install matrix-synapse
python -m synapse.app.homeserver --server-name ДОМЕН --config-path homeserver.yaml --generate-config --report-stats=no
sudo su synapse
/opt/synapse/env/usr/bin/python3 -m synapse.app.homeserver --config-path=/opt/synapse/homeserver.yaml --daemonize
По идее скрипт-установщик может запустить скрипт-конфигуратор для создания конфига, но можно это сделать и вручную -
generate_config --server-name ДОМЕН --config-dir /etc/synapse --data-dir /var/lib/synapse --report-stats yes --generate-secrets --output-file /etc/synapse/homeserver.yaml
Может потребоваться создать ключик в директории synapse (где бы он ни был), сменить владельца
generate_signing_key --output_file /etc/synapse/ДОМЕН.signing.key
chown -R synapse:synapse /etc/synapse /var/log/synapse
Менять имя synapse.app.homeserver на что-то иное не следует, примерно как и с именем sshd_config - см. выше. Где бы ни лиежал конфиг, есть следует посмотреть, поправить, как-то так -
#https://element-hq.github.io/synapse/latest/setup/installation.html#client-well-known-uri
#https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
#https://wiki.archlinux.org/title/Matrix
#адрес turn сервера
#https://element-hq.github.io/synapse/latest/turn-howto.html
turn_uris:
- turn:ДОМЕННЫЙ_ip_адрес:443?transport=udp
turn_shared_secret: "ключикeWlws1c6yfMzvaaooYChx2VN"
turn_user_lifetime: 86400000
turn_allow_guests: false
server_name: "ДОМЕН"
pid_file: /var/lib/synapse/matrix.pid
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['::1', '127.0.0.1', '192.168.1.21']
resources:
- names: [client, federation]
compress: true
#для хранения сообщений и пр на сервере используется база данных. Либо sqlite,
#либо постгресс, третьего не дано и не будет дано
#https://github.com/element-hq/synapse/blob/develop/docs/postgres.md - это по теме постгресса
#вариант для Постгресс, требует pacman -S python-psycopg2
#предусмотрена возможность миграции. Отмечено, что при передаче базы из SQLite=>PSQL она разбухнет в 2 раза
#https://matrix-org.github.io/synapse/latest/postgres.html#using-the-port-script
database:
# allow_unsafe_locale: true
# name: "psycopg2"
# args:
# user: "mx"
# password: "Vao6Nais"
# database: "matrix"
# host: "localhost"
# port: 5432
# cp_min: 5
# cp_max: 10
#вариант для SQLite
name: sqlite3
args:
database: /var/lib/synapse/matrix.db
#для снижения потребления памяти установлен пакет jemalloc, соотв конфиг в
#/etc/default/synapse
#LD_PRELOAD=/usr/lib/libjemalloc.so
caches:
cache_autotuning:
max_cache_memory_usage: 1024M
target_cache_memory_usage: 758M
min_cache_ttl: 5m
#глобальные настройки срока хранения сообщений на сервере
retention:
enabled: true
default_policy:
min_lifetime: 3d
max_lifetime: 70d
event_cache_size: "10K"
max_upload_size: "50M"
max_image_pixels: "32M"
#для отправки писем пользователям.
#Для синапса желательно иметь возможность отправлять электронную почту.
#Это позволяет Synapsse отправлять электронные письма с сбросом пароля,
#отправлять проверки при добавлении адреса электронной почты в учетную
#запись пользователя, и отправлять
#уведомления по электронной почте о получении новых сообщений
#email:
# smtp_host: mail.example.org
# smtp_port: 587
# smtp_user: "matrix@example.org"
# smtp_pass: "napoJIb_oT_9LLLuKA"
# notif_from: "matrix@example.org
log_config: "/etc/synapse/ДОМЕН.log.config"
media_store_path: /var/lib/synapse/media_store
registration_shared_secret: "ключB1zvRnCed1"
report_stats: false
macaroon_secret_key: "ключ*Wn"
form_secret: "ключmx7:w"
signing_key_path: "/etc/synapse/ДОМЕН.signing.key"
#tls_certificate_path: "/etc/synapse/wmatrix.csr"
#tls_private_key_path: "/etc/synapse/wmatrix.key"
#tls_certificate_path: "/etc/synapse/matrix.crt"
#tls_private_key_path: "/etc/synapse/matrix.key"
#tls_certificate_path: "/etc/letsencrypt/live/ДОМЕН/fullchain.pem"
#tls_private_key_path: "/etc/letsencrypt/live/ДОМЕН/privkey.pem"
trusted_key_servers:
# - server_name: "matrix.org"
- server_name: "ДОМЕН"
# - server_name: "ДОМЕН-2"
enable_registration: false
matrix_synapse_federation_enabled: true
matrix_synapse_federation_port_enabled: true
search_all_users: true
prefer_local_users: true
Домен-2 - это Ваш дублирующий сервер, проверено - юзер ДОМЕН спокойно "войдет" через Домен-2. С ключиками - есть ключики, которые по 443 порту отдает nginx, а есть используемые самим synspse, и это разные ключики. Для nginx конфиг примерно такой -
server {
listen 80;
server_name ДОМЕН;
server_tokens off;
include acme.conf;
location / {return 301 https://$host$request_uri;}
}
server {
server_name ДОМЕН;
location / {
proxy_pass http://127.0.0.1:8008;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
client_max_body_size 50M;
#proxy_http_version 1.1;
}
#этот блок возвращает в формате JOSN нужный телефонным клиентам ответ
location /.well-known/matrix/client {
return 200 '{"m.homeserver": {"base_url": "https://ДОМЕН"}}';
default_type application/json;
add_header Access-Control-Allow-Origin *;
}
listen 443 ssl ;
add_header Strict-Transport-Security max-age=15768000;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_certificate /etc/letsencrypt/live/ДОМЕН/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ДОМЕН/privkey.pem;
#ssl_certificate /etc/synapse/matrix.crt;
#ssl_certificate_key /etc/synapse/matrix.key;
ssl_prefer_server_ciphers on;
keepalive_timeout 70;
access_log /var/log/nginx/matrix.log;
error_log /var/log/nginx/matrix_error.log;
}
Запустить в ручном режиме. Настроить фронтирующий веб-сервер, скорее всего nginx. При обращении как к сайту по выбранному доменному имени - nginx принимает на порту 443 обращение и передает дальше. Самое пикантное в этих настройках - проброс TURN, который нужен для обеспечения голоса и видео абонетнов ВНЕ локалки. С попытками "прокинуть" через nginx сам TURN я замаялся, всякие там ключи и пр., в итоге плюнул и завернул иначе. Запустил coturn на выбранном мною порту, поскольку я был твердо намерен ограничиваться одним вненим портом 443, то поступил так - через iptable запустил проброс входящих UDP пакетов с 443 порта на порт, слушаемый coturn на 127.0.0.1. Точка., никакого доменного имени даже прописывать не надо, просто по ip. И прописал это в конфиге synapse, см. выше - каждому подключаемому клиенту synapse сообщает, где и как искать TURN и все работает.
TURN изображается демоном coturn, он просто скачивается и запускается, даже правок конфига не требовал -
systemctl status coturn
● coturn.service - coturn
Loaded: loaded (/usr/lib/systemd/system/coturn.service; disabled; preset: disabled)
Active: active (running) since Mon 2025-11-24 19:48:53 CET; 6s ago
Docs: man:coturn(1)
man:turnadmin(1)
man:turnserver(1)
Main PID: 102954 (turnserver)
Tasks: 7 (limit: 10856)
Memory: 5.6M
CPU: 65ms
CGroup: /system.slice/coturn.service
└─102954 /usr/bin/turnserver -c /etc/coturn/turnserver.conf --pidfile /run/coturn/turnserver.pid --no-stdout-log
Ну как-то так. Андроидный клиент - с черепахой, SchildiChat - их вроде несколько вариантов, следует брать который next или что-то в этом духе, он дает полный функционал и не прожорливее ТЛГ, десткопный он же SchildiChat - он мне не нравится. Тот, что нравится, дает (или давал?) видео и звук только в один конец