Matrix является открытым стандартом для децентрализованной и сквозной зашифрованной связи. Он объединяется с помощью домашних серверов, которые общаются друг с другом через Интернет. Домашние серверы хранят данные о своих пользователях и историю чата созданных комнат (включая комнаты, происходящие от других домашних серверов). Из-за природы децентрализации, когда оригинальный домашний сервер, который создал комнату, отключается, другие домашние серверы могут продолжать общение без проблем. Из-за этой конструкции нет ни одной точки отказа.
В этой статье рассмотрим установку и настройку собственного сервера Matrix Synapse ( Home server ) с возможностью осуществления аудио и видео звонков.
Предпосылки#
- Сервер с Ubuntu 24.04 в качестве ОС
- Права пользователя: пользователь root или обычный пользователь с привилегиями sudo.
Конвенции#
1
2
| # - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя.
|
Шаг 1. Обновите систему#
Свежая установка Ubuntu 24.04 требует обновления пакетов до последних доступных версий.
1
| $ sudo apt update -y && sudo apt upgrade -y
|
Шаг 2. Установите Synapse#
Подключаем репозиторий Matrix Synapse и устанавливаем Synapse Home server.
1
2
| $ sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
$ echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list
|
Установите Synapse.
1
2
| $ sudo apt update
$ sudo apt install matrix-synapse-py3
|
Во время установки введите имя сервера, который является частью вашего идентификатора матрицы. Вы можете изменить это позже в /etc/matrix-synapse/conf.d/server_name.yaml
.
Управление сервисом.
1
2
3
| $ sudo systemctl stop matrix-synapse.service — остановка
$ sudo systemctl start matrix-synapse.service — запуск
$ sudo systemctl restart matrix-synapse.service — перезагрузка
|
Шаг 3. Установите PostgreSQL#
Хотя Synapse поддерживает использование SQLite в качестве базы данных, он не рекомендуется в производстве из-за проблем с производительностью.
1
| sudo apt install postgresql
|
После установки PostgreSQL сервис автоматически запустится. Войдите в пользователь PostgreSQL.
Создайте synapse_user
пользователя и synapse_db
базы данных для PostgreSQL.
1
2
3
4
5
6
| $ createuser --pwprompt synapse_user
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse_db
$ psql
postgres=# ALTER USER synapse_user with PASSWORD 'YourStrongPasswordHere';
postgres=# \q
$ exit
|
Шаг 4. Установка и настройка Nginx с помощью TLS#
Synapse поддерживает автономное функционирование без обратного прокси, но в производстве это не рекомендуется.
Установите Nginx и Certbot.
1
| $ sudo apt install nginx certbot python3-certbot-nginx
|
Откройте порты HTTP, HTTPS и Synapse в брандмауэре.
1
2
3
| $ sudo ufw allow http
$ sudo ufw allow https
$ sudo ufw allow 8448
|
Получите сертификат TLS от Let’s Encrypt.
1
| $ sudo certbot certonly --nginx -d matrix.example.org -d example.org
|
Создайте новый файл конфигурации Nginx.
1
| $ sudo nano /etc/nginx/sites-available/synapse.conf
|
Добавьте следующие строки в файл конфигурации.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| server {
server_name matrix.example.org;
# Client port
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
server_name matrix.example.org;
# Client port
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Federation port
listen 8448 ssl;
listen [::]:8448 ssl;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/matrix.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.org/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location ~ ^(/_matrix|/_synapse/client) {
proxy_pass http://localhost:8008;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
# Default Synapse upload size.
# If you change max_upload_size in Synapse config, update it here too.
client_max_body_size 50M;
}
}
|
Замените matrix.example.org
своим доменным именем или поддоменным именем, указывающим на IP-адрес вашего сервера. Затем сохраните файл и выйдите из редактора.
Включите конфигурацию.
1
| $ sudo ln -s /etc/nginx/sites-available/synapse.conf /etc/nginx/sites-enabled/synapse.conf
|
Проверка конфигурации и перезагрузите службу Nginx.
1
2
| $ sudo nginx -t
$ sudo systemctl reload nginx.service
|
Шаг 5. Настройте Synapse#
Вы можете редактировать файл конфигурации на /etc/matrix-synapse/homeserver.yaml
, но вместо этого вы должны размещать изменения в /etc/matrix-synapse/conf.d/
, чтобы apt не просил перезаписывать файл конфигурации после каждого обновления Synapse.
Создайте новый файл конфигурации базы данных.
1
| $ sudo nano /etc/matrix-synapse/conf.d/database.yaml
|
Добавьте следующие строки в файл конфигурации. Замените значение пароля на пароль, установленный ранее для пользователя synapse PostgreSQL.
1
2
3
4
5
6
7
8
9
10
| database:
name: psycopg2
args:
user: synapse_user
password: 'YourStrongPasswordHere'
database: synapse_db
host: localhost
port: 5432
cp_min: 5
cp_max: 10
|
Создайте секретный регистрационный ключ. Держите его в безопасности, потому что любой, у кого есть ключ, может зарегистрировать нового пользователя, даже если регистрация отключена.
1
| $ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'" | sudo tee /etc/matrix-synapse/conf.d/registration_shared_secret.yaml
|
По умолчанию Synapse позволяет использовать индикаторы присутствия, которые показывают, находится ли человек в сети. Это может привести к высокому использованию процессора, и многие домашние серверы отключают их. Для этого создайте новый файл конфигурации.
1
| $ sudo nano /etc/matrix-synapse/conf.d/presence.yaml
|
Добавьте следующие строки в файл конфигурации.
1
2
| presence:
enabled: false
|
Перезагрузите Synapse для применения новой конфигурации.
1
| $ sudo systemctl restart matrix-synapse.service
|
Для тестирования в командной строке создаются пользователи.
1
| $ register_new_matrix_user -c /etc/matrix-synapse/conf.d/registration_shared_secret.yaml http://localhost:8008
|
Чтобы открыть публичную регистрацию, создайте новую конфигурацию.
1
| $ sudo nano /etc/matrix-synapse/conf.d/registration.yaml
|
Добавьте следующие строки в файл конфигурации.
1
| enable_registration: true
|
По умолчанию Synapse не разрешает регистрацию без проверки. Чтобы включить проверку электронной почты, добавьте следующие строки.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| registrations_require_3pid:
- email
email:
smtp_host: mail.example.org
smtp_port: 587
# If mail server has no authentication, skip these 2 lines
smtp_user: 'noreply@example.org'
smtp_pass: 'password'
# Optional, require encryption with STARTTLS
require_transport_security: true
app_name: 'Example Chat' # defines value for %(app)s in notif_from and email subject
notif_from: "%(app)s <noreply@example.org>"
|
Чтобы не иметь какой-либо формы проверки, добавьте следующую строку.
1
| enable_registration_without_verification: true
|
Перезагрузите Synapse для применения новой конфигурации.
1
| $ sudo systemctl restart matrix-synapse.service
|
Чтобы убедиться, что Synapse работает, откройте /_matrix/static/
на вашем домене Matrix в вашем браузере. Например:
1
| https://matrix.example.org/\_matrix/static/
|
Чтобы проверить, работает ли федерация с другими домашними серверами, откройте тестер федерации, введите имя сервера Матрицы и нажмите «Перейти».
Шаг 6. Установите и настроите Coturn#
Для поддержки голосовые и видеозвонки потребуется установка и настройка собственного TURN-сервера.
1
| $ sudo apt install coturn
|
Откройте порты TURN и UDP.
1
2
3
| $ sudo ufw allow 3478
$ sudo ufw allow 5349
$ sudo ufw allow 49152:65535/udp
|
Получите сертификат TLS от Let’s Encrypt.
1
| $ sudo certbot certonly --nginx -d turn.example.org
|
Создайте секрет аутентификации.
1
| $ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)" | sudo tee /etc/turnserver.conf
|
Простейший рабочий файл конфигурации TURN-сервера.
1
| $ sudo nano /etc/turnserver.conf
|
Добавьте следующие строки в файл конфигурации.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| use-auth-secret
realm=turn.example.org
cert=/etc/letsencrypt/live/turn.example.org/fullchain.pem
pkey=/etc/letsencrypt/live/turn.example.org/privkey.pem
# VoIP — это UDP, нет необходимости в TCP
no-tcp-relay
# Не допускайте трафик в частные IP-диапазоны
no-multicast-peers
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
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=100::-100::ffff:ffff:ffff:ffff
denied-peer-ip=2001::-2001:1ff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=2002::-2002:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
# Ограниченное количество сеансов на пользователя
user-quota=12
# Ограничение общего числа сессий
total-quota=1200
|
Перезагрузите Coturn для перезагрузки конфигурации.
1
| $ sudo systemctl restart coturn.service
|
Создайте новый файл конфигурации Synapse.
1
| $ sudo nano /etc/matrix-synapse/conf.d/turn.yaml
|
Добавьте следующие строки в файл конфигурации. Заменить значение turn_shared_secret
значением static-auth-secret
от /etc/turnserver.conf
.
1
2
3
4
| turn_uris: [ "turn:turn.example.org?transport=udp", "turn:turn.example.org?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True
|
Перезагрузите Synapse для применения новой конфигурации.
1
| $ sudo systemctl restart matrix-synapse.service
|
Шаг 7. Использование Matrix#
Synapse теперь настроен, и вы можете использовать его с любым клиентом Matrix. Element является самым популярным клиентом Matrix, который доступен в качестве размещенного веб-приложения.
Если вы хотите разместить свой собственный экземпляр элемента, ознакомьтесь с инструкциями по его установке и настройке.
Чтобы войти в свой клиент Matrix, введите полный идентификатор Matrix (например, @bob:example.org
) в поле имени пользователя. Большинство клиентов, таких как Element, автоматически получают информацию о домашнем сервере. Если это не работает, проверьте, имеет ли URL-адрес /.well-known/matrix/client/
на вашем сервере Matrix правильную информацию о домашнем сервере. Если это так, ваш клиент не поддерживает обнаружение домашнего сервера, и вам нужно вставить адрес домашнего сервера вручную.
Шаг 8. Установите Element#
Установить jq.
Создайте каталог для Element.
1
| $ sudo mkdir -p /var/www/element
|
Создайте новый файл для получения новейшего выпуска Element.
1
| $ sudo nano /var/www/element/update.sh
|
Добавьте в файл следующие строки.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #!/bin/sh
set -e
install_location="/var/www/element"
latest="$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r .tag_name)"
cd "$install_location"
[ ! -d "archive" ] && mkdir -p "archive"
[ -d "archive/element-${latest}" ] && rm -r "archive/element-${latest}"
[ -f "archive/element-${latest}.tar.gz" ] && rm "archive/element-${latest}.tar.gz"
wget "https://github.com/vector-im/element-web/releases/download/${latest}/element-${latest}.tar.gz" -P "archive"
tar xf "archive/element-${latest}.tar.gz" -C "archive"
[ -L "${install_location}/current" ] && rm "${install_location}/current"
ln -sf "${install_location}/archive/element-${latest}" "${install_location}/current"
ln -sf "${install_location}/config.json" "${install_location}/current/config.json"
|
Сделайте файл как исполняемый.
1
| $ sudo chmod +x /var/www/element/update.sh
|
Выполните файл для загрузки элемента.
1
| $ sudo /var/www/element/update.sh
|
Чтобы обновить Element в будущем, перезапустите команду.
Шаг 9. Настройте Element#
Скопируйте конфигурацию Element образца.
1
| $ sudo cp /var/www/element/current/config.sample.json /var/www/element/config.json
|
Отредактируйте файл конфигурации.
1
| $ sudo nano /var/www/element/config.json
|
Измените адрес домашней службы matrix.org по умолчанию на свой домашний сервер.
1
2
3
4
| "m.homeserver": {
"base_url": "https://matrix.example.org",
"server_name": "example.org"
},
|
Если вы хотите использовать свое имя вместо Element в названии сайта и других местах, измените название бренда.
1
| "brand": "My Example Chat",
|
Получите сертификат TLS от Let’s Encrypt.
1
| $ sudo certbot certonly --nginx -d element.example.org
|
Создайте новый файл конфигурации Nginx.
1
| $ sudo nano /etc/nginx/sites-available/element.conf
|
Добавьте следующие строки в файл конфигурации.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| server {
listen 80;
listen [::]:80;
server_name element.example.org;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name element.example.org;
root /var/www/element/current;
index index.html;
add_header Referrer-Policy "strict-origin" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/element.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/element.example.org/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
}
|
Включите конфигурацию.
1
| $ sudo ln -s /etc/nginx/sites-available/element.conf /etc/nginx/sites-enabled/element.conf
|
Проверка конфигурации и перезагрузите службу Nginx.
1
2
| $ sudo nginx -t
$ sudo systemctl reload nginx.service
|
Теперь вы можете получить доступ к Элементу из поддомена элемента (например, https://element.example.org
). Чтобы войти в систему, введите свое имя пользователя или полный идентификатор матрицы.
Завершение#
Поздравляю! Вы успешно установили Matrix Synapse и Element на свой сервер Ubuntu 24.04.
Если вам понравился этот пост об установке Matrix Synapse и Element на Ubuntu 24.04, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.