—
Обсуждение тут
—
Ставим пакеты и зависимости
sudo apt update
sudo apt install -y lsb-release wget curl gnupg apt-transport-https python3-venv python3-dev build-essential libffi-dev libssl-dev python3-pip python3-setuptools postgresql postgresql-contrib libpq-dev libjpeg-dev libxslt1-dev zlib1g-dev libyaml-dev coturn
Создаём пользователя и директории для работы
udo adduser --system --home /var/lib/matrix-synapse --group synapse
sudo mkdir -p /etc/matrix-synapse /var/lib/matrix-synapse /var/log/matrix-synapse
sudo chown -R synapse:synapse /etc/matrix-synapse /var/lib/matrix-synapse /var/log/matrix-synapse
Создаем базу
sudo -u postgres psql <<EOF
CREATE USER synapse WITH PASSWORD 'StrongPassHere';
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;
\q
EOF
Питоновое окружение
sudo -u synapse -i
cd /var/lib/matrix-synapse
python3 -m venv env
source env/bin/activate
pip install --upgrade pip setuptools wheel
pip install matrix-synapse[all]
deactivate
exit
Конфиг синапс в /etc/matrix-synapse/homeserver.yaml
---
server_name: "mysite.ru"
pid_file: /var/run/matrix-synapse.pid
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['127.0.0.1', '::1', 'ip-matrix.server']
resources:
- names: [client, federation]
compress: false
database:
name: psycopg2
args:
user: synapse
password: StrongPassHere
database: synapse
host: localhost
cp_min: 5
cp_max: 10
log_config: "/etc/matrix-synapse/log.config"
media_store_path: "/var/lib/matrix-synapse/media"
macaroon_secret_key: "RANDOM_SECRET_STRING"
form_secret: "RANDOM_FORM_SECRET"
signing_key_path: "/etc/matrix-synapse/my-handbook.ru.signing.key"
trusted_key_servers:
- server_name: "matrix.org"
turn_uris:
- "turn:mysite.ru:3478?transport=udp"
- "turn:mysite.ru:3478?transport=tcp"
turn_shared_secret: "CHANGE_THIS_SECRET"
enable_registration: true
enable_registration_without_verification: true
report_stats: true
Systemd unit Synapse /etc/systemd/system/matrix-synapse.service
[Unit]
Description=Matrix Synapse homeserver
After=network.target postgresql.service
[Service]
Type=simple
User=synapse
Group=synapse
WorkingDirectory=/var/lib/matrix-synapse
ExecStart=/var/lib/matrix-synapse/env/bin/python -m synapse.app.homeserver --config-path /etc/matrix-synapse/homeserver.yaml
Restart=on-failure
SyslogIdentifier=matrix-synapse
[Install]
WantedBy=multi-user.target
Настройка coturn /etc/turnserver.conf
no-rfc5780
no-stun-backward-compatibility
response-origin-only-with-rfc5780
total-quota=100
bps-capacity=0
listening-port=3478
tls-listening-port=5349
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
fingerprint
use-auth-secret
static-auth-secret=CHANGE_THIS_SECRET
realm=matrix.domain.name
stale-nonce
no-loopback-peers
no-multicast-peers
Включаем и стартуем юниты
sudo systemctl daemon-reload
sudo systemctl enable --now coturn matrix-synapse
Проверяем синапс локально с самого сервера
curl http://127.0.0.1:8008/_matrix/client/versions
Как оборачивать nginx вспоминай сам)
скрипт для управления пользователями и очисткой медиа директории
#!/bin/bash
# matrix-admin.sh — утилита для управления пользователями Synapse Matrix
MATRIX_URL="http://ip_matrix:8008"
ADMIN_TOKEN="admin token" # вставь сюда токен суперадмина
# === функции ===
create_user() {
local USERNAME=$1
local PASSWORD=$2
curl -s -X POST "$MATRIX_URL/_synapse/admin/v2/users/@${USERNAME}:my-handbook.ru" \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"password\": \"${PASSWORD}\",
\"admin\": false,
\"deactivated\": false
}" | jq
}
delete_user() {
local USERNAME=$1
curl -s -X POST "$MATRIX_URL/_synapse/admin/v1/deactivate/@${USERNAME}:my-handbook.ru" \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"erase": true}' | jq
}
make_admin() {
local USERNAME=$1
curl -s -X PUT "$MATRIX_URL/_synapse/admin/v2/users/@${USERNAME}:my-handbook.ru/admin" \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"admin": true}' | jq
}
list_users() {
curl -s -X GET "$MATRIX_URL/_synapse/admin/v2/users?from=0&limit=50" \
-H "Authorization: Bearer $ADMIN_TOKEN" | jq
}
cleanup() {
local DAYS=${1:-90} # по умолчанию 90 дней, можно передать первым аргументом
local BEFORE_TS=$(date -d "$DAYS days ago" +%s000)
curl -s -X POST "$MATRIX_URL/_synapse/admin/v1/purge_media_cache?before_ts=$BEFORE_TS" \
-H "Authorization: Bearer $ADMIN_TOKEN" | jq
}
# === запуск ===
case "$1" in
create) create_user "$2" "$3" ;; # ./matrix-admin.sh create username password
delete) delete_user "$2" ;; # ./matrix-admin.sh delete username
admin) make_admin "$2" ;; # ./matrix-admin.sh admin username
list) list_users ;; # ./matrix-admin.sh list
cleanup) cleanup "$2" ;; # ./matrix-admin.sh cleanup [days]
*)
echo "Использование: $0 {create username password|delete username|admin username|list|cleanup [days]}"
;;
esac
Токен суперадмина получаешь так(если учетка суперадмин)
curl -X POST "http://ip_matrix:8008/_matrix/client/v3/login" \
-H "Content-Type: application/json" \
-d '{
"type": "m.login.password",
"user": "admin_user",
"password": "SuperSecurePassword"
}'
Чтобы стать суперадмином
Способ 1. Через базу PostgreSQL
Подключись к БД (у тебя она называется synapse):
sudo -u postgres psql synapse
Посмотри, как называется твой пользователь (например @youre_name:my-handbook.ru):
SELECT name, admin FROM users;
Сделай его админом:
UPDATE users SET admin = 1 WHERE name = '@youre_name:my-handbook.ru';
Проверь:
SELECT name, admin FROM users WHERE name = '@youre_name:my-handbook.ru';
Если admin = t (true) или 1, значит учётка теперь суперпользователь.
Выход из psql:
\q
🔑 Способ 2. Через встроенный скрипт Synapse
(если у тебя свежая версия ≥ 1.50)
sudo -u synapse /opt/synapse/env/bin/python -m synapse.app.homeserver \
--config-path /etc/matrix-synapse/homeserver.yaml \
promote_user --user-id @youre_name:my-handbook.ru