Как установить и создать чат-сервер с помощью Matrix Synapse и Element в Rocky Linux 9
На этой странице
- Предварительные условия
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите и настройте PostgreSQL
- Шаг 3 — Установите Matrix Synapse
- Шаг 4. Установите Nginx.
- Шаг 5 — Установите SSL
- Шаг 6 — Настройте SELinux
- Шаг 7. Создайте службу Matrix Systemd
- Шаг 8 — Настройка Matrix Synapse
- Шаг 9 — Настройка Nginx
- Шаг 10 — Установите Котурн
- Шаг 11 – Матрица доступа
- Шаг 12 — Установите элемент
- Шаг 13 — Настройка элемента
- Заключение
Matrix — это открытый стандарт для децентрализованной связи со сквозным шифрованием. Это набор серверов и сервисов, которые взаимодействуют друг с другом с помощью стандартизированного API, синхронизирующегося в режиме реального времени. Он использует домашние серверы для хранения информации об учетной записи и истории чата. Если один домашний сервер выйдет из строя, другие серверы смогут продолжить связь без проблем из-за характера децентрализации. Вы можете использовать домашний сервер Matrix, размещенный кем-то другим, или разместить свой собственный, чтобы сохранять контроль над своими данными.
В этом руководстве вы узнаете, как установить и создать чат-сервер с помощью Synapse, реализации Matrix для домашнего сервера. Element — это веб-клиент Matrix, созданный с использованием Matrix React SDK. Это позволит вам предлагать чат Matrix в Интернете. Вы также можете использовать сервер с любым другим клиентом Matrix. Мы также установим сервер Coturn для включения голосовых и видеозвонков. Услуга Coturn является необязательной, если вы не заинтересованы в ее использовании.
Предварительные условия
Сервер под управлением Debian 12.
Пользователь, не являющийся пользователем sudo, с привилегиями root.
Несложный межсетевой экран (UFW) включен и работает.
Полные доменные имена (FQDN) для Matrix, Element и Coturn, указывающие на ваш сервер. Мы будем использовать matrix.example.com
, element.example.com
и coturn.example.com
соответственно для трех сервисов.
Убедитесь, что все обновлено.
$ sudo dnf update
Несколько пакетов, которые нужны вашей системе.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
Некоторые из этих пакетов могут уже быть установлены в вашей системе.
Шаг 1. Настройка брандмауэра
Прежде чем устанавливать какие-либо пакеты, первым делом необходимо настроить брандмауэр на открытие портов для HTTP, HTTPS и Synapse. Rocky Linux использует брандмауэр Firewalld. Проверьте состояние брандмауэра.
$ sudo firewall-cmd --state
running
Брандмауэр работает с разными зонами, и общедоступная зона — это зона по умолчанию, которую мы будем использовать. Перечислите все службы и порты, активные на брандмауэре.
$ sudo firewall-cmd --zone=public --list-all
Он должен показать следующий вывод.
public
target: default
icmp-block-inversion: no
interfaces: enp1s0
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Откройте порты HTTP, HTTPS и Synapse в брандмауэре.
$ sudo firewall-cmd --zone=public --add-port=8448/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https
Еще раз проверьте состояние брандмауэра.
$ sudo firewall-cmd --zone=public --list-all
Вы должны увидеть аналогичный результат.
public
target: default
icmp-block-inversion: no
interfaces: enp1s0
sources:
services: cockpit dhcpv6-client http https ssh
ports: 8448/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Сделайте все изменения постоянными и перезагрузите брандмауэр, чтобы изменения вступили в силу.
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload
Шаг 2. Установите и настройте PostgreSQL
Rocky Linux 9 по умолчанию поставляется с PostgreSQL 13. Мы будем использовать PostgreSQL 16 из официального репозитория.
Установите репозиторий RPM PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Отключите встроенный модуль PostgreSQL.
$ sudo dnf -qy module disable postgresql
Теперь вы можете установить PostgreSQL с помощью следующей команды.
$ sudo dnf install -y postgresql16-server postgresql16-contrib postgresql16-devel
sudo dnf установить postgresql16-devel
экспортировать PATH=` PATH:/usr/pgsql-16/bin
Пакет postgresql-contrib
содержит несколько дополнительных утилит.
Проверьте версию.
$ psql --version
psql (PostgreSQL) 16.1
Инициализируйте базу данных PostgreSQL.
$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
Initializing database ... OK
Включите службу PostgreSQL.
$ sudo systemctl enable postgresql-16
Запустите службу PostgreSQL.
$ sudo systemctl start postgresql-16
Проверьте состояние службы PostgreSQL.
$ sudo systemctl status postgresql-16
? postgresql-16.service - PostgreSQL 16 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-01-30 11:55:26 UTC; 10s ago
Docs: https://www.postgresql.org/docs/16/static/
Process: 9610 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 9615 (postgres)
Tasks: 7 (limit: 12225)
Memory: 17.4M
CPU: 98ms
CGroup: /system.slice/postgresql-16.service
??9615 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
??9616 "postgres: logger "
??9617 "postgres: checkpointer "
??9618 "postgres: background writer "
??9620 "postgres: walwriter "
??9621 "postgres: autovacuum launcher "
??9622 "postgres: logical replication launcher "
Jan 30 11:55:26 matrix.example.com systemd[1]: Starting PostgreSQL 16 database server...
Jan 30 11:55:26 matrix.example.com postgres[9615]: 2024-01-30 11:55:26.482 UTC [9615] LOG: redirecting log output to logging collector process
Jan 30 11:55:26 matrix.example.com postgres[9615]: 2024-01-30 11:55:26.482 UTC [9615] HINT: Future log output will appear in directory "log".
Jan 30 11:55:26 matrix.example.com systemd[1]: Started PostgreSQL 16 database server.
Вы можете видеть, что служба включена и работает по умолчанию.
Войдите в системную учетную запись postgres
.
$ sudo -su postgres
Создайте нового пользователя базы данных и базу данных для PostgreSQL. При создании пользователя вам будет предложено ввести пароль.
$ createuser --pwprompt synapse
$ createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse synapsedb
Выйдите из учетной записи postgres
.
$ exit
Шаг 3 — Установите Matrix Synapse
У Matrix Synapse нет готового пакета для дистрибутивов на базе CentOS, таких как Rocky Linux. Поэтому мы установим его как модуль Python из PyPI.
Первым шагом является установка необходимых компонентов, необходимых для работы Synapse. Нам также понадобится репозиторий EPEL, который включает пакет python3-virtualenv
.
$ sudo dnf install epel-release
$ sudo dnf install --enablerepo=crb libtiff-devel libjpeg-devel libzip-devel \
freetype-devel libwebp-devel libxml2-devel libxslt-devel \
libpq-devel python3-virtualenv libffi-devel openssl-devel \
python3-devel libicu-devel
$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install postgresql16-devel
Создайте каталог для Synapse.
$ mkdir -p ~/synapse
Создайте виртуальную среду Python в указанном каталоге.
$ virtualenv -p python3 ~/synapse/env
Активируйте виртуальную среду.
$ source ~/synapse/env/bin/activate
Убедитесь, что у вас установлена последняя версия pip
и setuptools
.
(env) $ pip install --upgrade pip
(env) $ pip install --upgrade setuptools
Установите Матрикс Синапс.
(env) $ pip install "matrix-synapse[postgres]"
Это загрузит Synapse из PyPI и установит его вместе с библиотеками Python, которые он использует, в виртуальную среду в папке ~/synapse/env
. Он также установит библиотеку PostgreSQL Python, необходимую Synapse для подключения к серверу PostgreSQL. Приведенная выше команда представляет собой комбинацию команд pip install Matrix-synapse
и pip install psycopg2
.
Следующим шагом будет создание файла конфигурации с некоторыми основными настройками. Перейдите в каталог Synapse.
(env) $ cd ~/synapse
Выполните следующую команду, чтобы создать файл конфигурации.
(env) $ python -m synapse.app.homeserver \
--server-name matrix.example.com \
--config-path homeserver.yaml \
--generate-config \
--report-stats=[yes|no]
Значение переменной --server-name
является частью вашего Matrix ID. Введите свое доменное имя Matrix в качестве его значения. Это будет адрес вашего домашнего сервера.
Вы можете выбрать, хотите ли вы отправлять анонимную статистику о вашем домашнем сервере обратно в Matrix через переменную --report-stats
. Выберите да
или no
по вашему выбору.
Вы получите следующий результат.
Generating config file homeserver.yaml
Generating log config file /home/navjot/synapse/matrix.example.com.log.config which will log to /home/navjot/synapse/homeserver.log
Generating signing key file /home/navjot/synapse/matrix.example.com.signing.key
A config file has been generated in 'homeserver.yaml' for server name 'matrix.example.com'. Please review this file and customise it to your needs.
Эти настройки можно изменить позже в файле ~/synapse/homeserver.yaml
или /home/
. Ключи, сгенерированные приведенной выше командой, позволят вашему домашнему серверу идентифицировать себя на другом домашнем сервере.
Пришло время запустить сервер Matrix. Убедитесь, что вы находитесь внутри каталога Synapse и виртуальная среда активна.
Запустите домашний сервер.
(env) $ synctl start
Вы должны увидеть аналогичный результат.
This server is configured to use 'matrix.org' as its trusted key server via the
'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
server since it is long-lived, stable and trusted. However, some admins may
wish to use another server for this purpose.
To suppress this warning and continue using 'matrix.org', admins should set
'suppress_key_server_warning' to 'true' in homeserver.yaml.
--------------------------------------------------------------------------------
started synapse.app.homeserver(homeserver.yaml)
Чтобы остановить сервер, выполните следующую команду.
(env) $ synctl stop
Деактивируйте виртуальную среду.
(env) $ deactivate
Шаг 4. Установите Nginx.
В производственной среде рекомендуется запускать сервер Synapse с использованием прокси-сервера Nginx.
Rocky Linux 9 поставляется со старой версией Nginx. Для установки последней версии вам необходимо использовать официальный репозиторий Nginx.
Создайте и откройте файл /etc/yum.repos.d/nginx.repo
для редактирования.
$ sudo nano /etc/yum.repos.d/nginx.repo
Вставьте в него следующий код.
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
Закончив, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Мы будем устанавливать основную ветку Nginx, поэтому включите для нее пакет.
$ sudo dnf config-manager --enable nginx-mainline
Установите Нгинкс.
$ sudo dnf install nginx -y
Проверьте установку.
$ nginx -v
nginx version: nginx/1.25.3
Включите и запустите службу сервера Nginx.
$ sudo systemctl enable nginx --now
Проверьте статус услуги.
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-01-30 12:50:34 UTC; 4s ago
Docs: http://nginx.org/en/docs/
Process: 10810 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 10811 (nginx)
Tasks: 3 (limit: 12225)
Memory: 3.1M
CPU: 24ms
CGroup: /system.slice/nginx.service
??10811 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??10812 "nginx: worker process"
??10813 "nginx: worker process"
Шаг 5 — Установите SSL
Нам нужно установить Certbot для создания SSL-сертификата. Для этого мы будем использовать установщик пакета Snapd. Поскольку Rocky Linux не поставляется с ним, установите установщик Snapd. Для работы требуется репозиторий EPEL (дополнительные пакеты для корпоративного Linux). Но поскольку мы уже установили его на шаге 3, мы можем двигаться дальше.
Установите пакет Snapd.
$ sudo dnf install snapd -y
Включите и запустите службу Snap.
$ sudo systemctl enable snapd --now
Установите основной пакет Snap и убедитесь, что ваша версия Snapd обновлена.
$ sudo snap install core
$ sudo snap refresh core
Создайте необходимые ссылки для работы Snapd.
$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Установите Сертбот.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы гарантировать возможность запуска команды Certbot, создав символическую ссылку на каталог /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверьте версию Certbot.
$ certbot --version
certbot 2.8.0
Выполните следующую команду, чтобы создать сертификат SSL.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d matrix.example.com
Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/matrix.example.com
на вашем сервере.
Создайте сертификат группы Диффи-Хеллмана.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Проверьте службу планировщика обновления Certbot.
$ systemctl list-timers
Вы найдете snap.certbot.renew.service
как одну из запланированных к запуску служб.
NEXT LEFT LAST PASSED UNIT ACTIVATES ----------------------------------------------------------------------------------------------------------------------------------
Tue 2024-01-30 14:37:50 UTC 29min left Tue 2024-01-30 13:05:13 UTC 1h 3min ago dnf-makecache.timer dnf-makecache.service
Tue 2024-01-30 15:13:00 UTC 1h 4min left - - snap.certbot.renew.timer snap.certbot.renew.service
Wed 2024-01-31 00:00:00 UTC 9h left Tue 2024-01-30 06:35:44 UTC 7h ago logrotate.timer logrotate.service
Выполните пробный запуск процесса, чтобы проверить, работает ли продление SSL нормально.
$ sudo certbot renew --dry-run
Если вы не видите ошибок, все готово. Ваш сертификат будет продлен автоматически.
Шаг 6 — Настройте SELinux
SELinux не позволяет запускать системную службу, если двоичный файл находится в домашнем каталоге пользователя. По этой причине, если мы создадим служебный файл для Synapse, он будет заблокирован SELinux. Чтобы обойти эту проблему, нам нужно запустить следующую команду, чтобы разрешить запуск двоичного файла Python в качестве системной службы.
$ sudo chcon -R -t bin_t /home/username/synapse/env/bin/python
Примените политику, чтобы разрешить подключение к внешним хостам.
$ sudo setsebool -P httpd_can_network_connect 1
Примените политику, чтобы разрешить Nginx предоставлять доступ к PostgreSQL.
$ sudo setsebool -P httpd_can_network_connect_db 1
Шаг 7. Создайте службу Matrix Systemd
Статус службы Synapse не сохраняется при перезагрузке, а это означает, что если вы перезапустите сервер, вам придется запустить его вручную. Чтобы обойти эту проблему, нам нужно создать для нее файл Systemd.
Прежде чем продолжить, убедитесь, что служба Synapse остановлена.
$ cd ~/synapse
$ source env/bin/activate
(env) $ synctl stop
(env) $ deactivate
Создайте и откройте файл matrix-synapse.service
в каталоге /etc/systemd/system/
для редактирования.
$ sudo nano /etc/systemd/system/matrix-synapse.service
Вставьте в него следующий код. Замените переменную username
на пользователя вашей системы Linux, под которым вы установили Synapse.
# This assumes that Synapse has been installed by a user named username.
# This assumes that Synapse has been installed in a virtualenv in
# the user's home directory: `/home/username/synapse/env`.
[Unit]
Description=Synapse Matrix homeserver
After=postgresql-16.service
[Service]
Type=notify
NotifyAccess=main
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-abort
WorkingDirectory=/home/username/synapse
ExecStart=/home/username/synapse/env/bin/python -m synapse.app.homeserver --config-path=/home/username/synapse/homeserver.yaml
SyslogIdentifier=matrix-synapse
# adjust the cache factor if necessary
# Environment=SYNAPSE_CACHE_FACTOR=2.0
[Install]
WantedBy=multi-user.target
После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезагрузите сервисный демон.
$ sudo systemctl daemon-reload
Включите службу Matrix Synapse.
$ sudo systemctl enable matrix-synapse
Запустите службу Matrix Synapse.
$ sudo systemctl start matrix-synapse
Проверьте статус услуги.
$ sudo systemctl status matrix-synapse
Вы должны увидеть следующий вывод.
? matrix-synapse.service - Synapse Matrix homeserver
Loaded: loaded (/etc/systemd/system/matrix-synapse.service; enabled; preset: disabled)
Active: active (running) since Tue 2024-01-30 14:20:20 UTC; 5s ago
Main PID: 14687 (python)
Tasks: 8 (limit: 12225)
Memory: 77.6M
CPU: 3.527s
CGroup: /system.slice/matrix-synapse.service
??14687 /home/navjot/synapse/env/bin/python -m synapse.app.homeserver --config-path=/home/navjot/synapse/homeserver.yaml
Jan 30 14:20:16 matrix.example.com systemd[1]: Starting Synapse Matrix homeserver...
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: This server is configured to use 'matrix.org' as its trusted key server via the
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: 'trusted_key_servers' config option. 'matrix.org' is a good choice for a key
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: server since it is long-lived, stable and trusted. However, some admins may
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: wish to use another server for this purpose.
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: To suppress this warning and continue using 'matrix.org', admins should set
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: 'suppress_key_server_warning' to 'true' in homeserver.yaml.
Jan 30 14:20:19 matrix.example.com matrix-synapse[14687]: --------------------------------------------------------------------------------
Jan 30 14:20:20 matrix.example.com systemd[1]: Started Synapse Matrix homeserver.
Шаг 8 — Настройка Matrix Synapse
Прежде чем продолжить, сначала создайте секретный регистрационный ключ. Ключ должен быть защищен, поскольку он позволит любому зарегистрировать нового пользователя, даже если регистрация отключена.
$ echo "registration_shared_secret: '$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)'"
registration_shared_secret: '1y75ja0RUxvbWcS6SdZhakenukUwHHEjOXWC9Mu3FpO0QenOnpKRsc6NBZSxuzPcHYsOEuIQziwVjSZcP87dlWK4ZkIGYniurMqNsCYL4xg5xXs4bJDuTJH2CUXab4U9liv399lmkIZFaMpJCLxV9lVWB9mKHILYsjeLgGY5wAARv1SiK07bFsQOwKJGFqIvsUXmxymx5QCNDzTHw8R4ShqZ7elnnZrbdYk4r2f7qogERNHvQaRV7IEYUIOtMhVP'
Скопируйте вывод из приведенной выше строки и сохраните его.
Вы можете настроить сервер Matrix через файл /home/username/synapse/homeserver.yaml
. Откройте его для редактирования.
$ nano ~/synapse/homeserver.yaml
Вставьте вывод команды регистрационного ключа в конец файла.
По умолчанию Synapse настроен на использование базы данных SQLite. Нам нужно отредактировать его, чтобы добавить учетные данные PostgreSQL.
Найдите следующий раздел в файле и закомментируйте его, как показано.
#database:
# name: sqlite3
# args:
# database: /home/navjot/synapse/homeserver.db
Добавьте следующий раздел под ним. Замените поле your-password
паролем пользователя PostgreSQL, который вы создали на шаге 3. Замените localhost
IP-адресом вашего сервера, если вы размещаете базу данных в другом месте.
database:
name: psycopg2
args:
user: synapse
password: 'your-password'
database: synapsedb
host: localhost
cp_min: 5
cp_max: 10
По умолчанию Synapse включает индикаторы присутствия, которые показывают, находится ли человек в сети. Это может вызвать высокую загрузку процессора, поэтому вы можете отключить его. Вставьте следующую строку внизу.
presence:
enabled: false
После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Создайте нового пользователя матрицы. Вам будет предложено ввести имя пользователя и пароль. Поскольку это первый пользователь, которого мы создаем, введите yes
, когда вас спросят, сделать ли этого пользователя администратором. Вам нужно будет активировать виртуальную среду для создания пользователя.
$ cd ~/synapse
$ source env/bin/activate
(env) $ register_new_matrix_user -c homeserver.yaml http://localhost:8008
New user localpart [navjot]: navjot
Password:
Confirm password:
Make admin [no]: yes
Sending registration request...
Success!
(env) $ deactivate
Вы можете видеть, что в приведенной выше команде мы использовали порт 8008. Это связано с тем, что это порт по умолчанию, который прослушивает Matrix Synapse.
По умолчанию регистрация новых пользователей отключена, что означает, что вам необходимо регистрировать каждого пользователя вручную, как указано выше. Если вы хотите открыть общедоступную регистрацию, вы можете сделать это, отредактировав файл homeserver.yaml
.
Откройте его для редактирования еще раз.
$ nano ~/synapse/homeserver.yaml
Вставьте следующую строку внизу.
enable_registration: true
По умолчанию Synapse не разрешает регистрацию без проверки электронной почты. Чтобы включить проверку электронной почты, вставьте следующие строки.
registrations_require_3pid:
- email
email:
smtp_host: mail.example.com
smtp_port: 587
# If mail server has no authentication, skip these 2 lines
smtp_user: '[email '
smtp_pass: 'password'
# Optional, require encryption with STARTTLS
require_transport_security: true
app_name: 'HowtoForge Example Chat' # defines value for %(app)s in notif_from and email subject
notif_from: "%(app)s <[email >"
Чтобы отключить проверку электронной почты, вставьте вместо этого следующую строку.
enable_registration_without_verification: true
После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите Synapse, чтобы применить конфигурацию.
$ sudo systemctl restart matrix-synapse
Шаг 9 — Настройка Nginx
Откройте файл /etc/nginx/nginx.conf
для редактирования.
$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Создайте и откройте файл /etc/nginx/conf.d/synapse.conf
для редактирования.
$ sudo nano /etc/nginx/conf.d/synapse.conf
Вставьте в него следующий код.
# enforce HTTPS
server {
# Client port
listen 80;
listen [::]:80;
server_name matrix.example.com;
return 301 https://$host$request_uri;
}
server {
server_name matrix.example.com;
# Client port
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
# Federation port
listen 8448 ssl default_server;
listen [::]:8448 ssl default_server;
access_log /var/log/nginx/synapse.access.log;
error_log /var/log/nginx/synapse.error.log;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
tcp_nopush on;
gzip 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;
# Nginx by default only allows file uploads up to 1M in size
# Increase client_max_body_size to match max_upload_size defined in homeserver.yaml
client_max_body_size 50M;
}
}
Сохраните файл, нажав Ctrl + X и введя Y при появлении соответствующего запроса после завершения. Приведенная выше конфигурация работает при условии, что IP-адреса доменов example.com
и matrix.example.com
указывают на один и тот же сервер. Если это не так, используйте следующий файл конфигурации для сервера example.com
.
server {
server_name example.com;
listen 443 ssl http2;
listen [::]:443 ssl http2;
# TLS configuration
ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/matrix.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# Redirect
location ~ ^(/_matrix|/_synapse/client) {
return 301 "https://matrix.example.com$request_uri";
}
# Client homeserver autodiscovery
location /.well-known/matrix/client {
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '{ "m.homeserver": { "base_url": "https://matrix.example.com" } }';
}
# Domain delegation
location /.well-known/matrix/server {
default_type application/json;
add_header Access-Control-Allow-Origin *;
return 200 '{ "m.server": "matrix.example.com" }';
}
}
Проверьте синтаксис файла конфигурации Nginx.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите службу Nginx.
$ sudo systemctl restart nginx
Шаг 10 — Установите Котурн
Вам потребуется установить обход с использованием реле вокруг сервера NAT (TURN), чтобы обеспечить возможность голосовых и видеовызовов. Для этого установим пакет Coturn. Если вам не нужна эта функция, вы можете пропустить этот шаг.
Установите Котурн.
$ sudo dnf install coturn
Откройте порты TURN и UDP.
$ sudo firewall-cmd --zone=public --add-port=3478/{tcp,udp}
$ sudo firewall-cmd --zone=public --add-port=5349/{tcp,udp}
$ sudo firewall-cmd --zone=public --add-port=49152-65535/udp
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload
Создайте сертификат SSL для Turn (coturn.example.com
).
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d coturn.example.com
Создайте секрет аутентификации для Coturn.
$ echo "static-auth-secret=$(cat /dev/urandom | tr -cd '[:alnum:]' | fold -w 256 | head -n 1)"
static-auth-secret=u3ksgJ9X876sFMO00A8KabXwZvzVwCmV30wWvZ7DzGiepRwNRYSCTYzf2E8olNzdDHu7oO3XpT3l5bv5mVdhXEQ3pnoTWBquSVPFFBJtyD6y9gBxiMaD2TYTD2WohQLE9s7OKJVpkDeKTnZQnkmjrFadE3M9DRxPL1W5Lgdg6XLLKABgb5XGkutRgkJOV0JRH4sBYsot63fWq9mcGTm6nAMdIycvDVDOs7vhoeqRzcTbMF0wsfAHVJNhXpGGFDyZ
Откройте файл конфигурации для редактирования.
$ sudo nano /etc/coturn/turnserver.conf
Пройдемся по файлу и включим те настройки, которые нам нужны. Сначала включите метод аутентификации, раскомментировав строку use-auth-secret
.
# Be aware that use-auth-secret overrides some parts of lt-cred-mech.
# The use-auth-secret feature depends internally on lt-cred-mech, so if you set
# this option then it automatically enables lt-cred-mech internally
# as if you had enabled both.
#
# Note that you can use only one auth mechanism at the same time! This is because,
# both mechanisms conduct username and password validation in different ways.
#
# Use either lt-cred-mech or use-auth-secret in the conf
# to avoid any confusion.
#
use-auth-secret
Далее мы настроим переменную static-auth-secret
со значением, которое мы создали выше. Этот секрет нам также понадобится для дальнейшей настройки Synapse.
# 'Static' authentication secret value (a string) for TURN REST API only.
# If not set, then the turn server
# will try to use the 'dynamic' value in the turn_secret table
# in the user database (if present). The database-stored value can be changed on-the-fly
# by a separate program, so this is why that mode is considered 'dynamic'.
#
static-auth-secret=u3ksgJ9X876sFMO00A8KabXwZvzVwCmV30wWvZ7DzGiepRwNRYSCTYzf2E8olNzdDHu7oO3XpT3l5bv5mVdhXEQ3pnoTWBquSVPFFBJtyD6y9gBxiMaD2TYTD2WohQLE9s7OKJVpkDeKTnZQnkmjrFadE3M9DRxPL1W5Lgdg6XLLKABgb5XGkutRgkJOV0JRH4sBYsot63fWq9mcGTm6nAMdIycvDVDOs7vhoeqRzcTbMF0wsfAHVJNhXpGGFDyZ
Следующее значение, которое нам нужно изменить, — это область
. Это относится к домену, который мы выбрали для Coturn.
# The default realm to be used for the users when no explicit
# origin/realm relationship is found in the database, or if the TURN
# server is not using any database (just the commands-line settings
# and the userdb file). Must be used with long-term credentials
# mechanism or with TURN REST API.
#
# Note: If the default realm is not specified, then realm falls back to the host domain name.
# If the domain name string is empty, or set to '(None)', then it is initialized as an empty string.
#
realm=coturn.example.com
Далее определите количество сеансов и сеансов на одного пользователя. Выберите значение, которое подходит для вашего сервера.
# Per-user allocation quota.
# default value is 0 (no quota, unlimited number of sessions per user).
# This option can also be set through the database, for a particular realm.
#
user-quota=12
# Total allocation quota.
# default value is 0 (no quota).
# This option can also be set through the database, for a particular realm.
#
total-quota=1200
Далее нам нужно отключить TCP, поскольку VOIP — это UDP.
# Uncomment if no TCP relay endpoints are allowed.
# By default TCP relay endpoints are enabled (like in RFC 6062).
#
no-tcp-relay
Нам также необходимо настроить расположение сертификатов, которые мы создали для Coturn.
# Certificate file.
# Use an absolute path or path relative to the
# configuration file.
# Use PEM file format.
#
cert=/etc/letsencrypt/live/coturn.example.com/fullchain.pem
# Private key file.
# Use an absolute path or path relative to the
# configuration file.
# Use PEM file format.
#
pkey=/etc/letsencrypt/live/coturn.example.com/privkey.pem
Далее нам нужно отключить трафик к частным диапазонам IP-адресов и запретить одноранговые узлы на многоадресных адресах для повышения безопасности.
# Flag that can be used to disallow peers on well-known broadcast addresses (224.0.0.0 and above, and FFXX:*).
# This is an extra security measure.
#
no-multicast-peers
...............
# Option to allow or ban specific ip addresses or ranges of ip addresses.
# If an ip address is specified as both allowed and denied, then the ip address is
# considered to be allowed. This is useful when you wish to ban a range of ip
# addresses, except for a few specific ips within that range.
#
# This can be used when you do not want users of the turn server to be able to access
# machines reachable by the turn server, but would otherwise be unreachable from the
# internet (e.g. when the turn server is sitting behind a NAT)
#
# Examples:
# denied-peer-ip=83.166.64.0-83.166.95.255
# allowed-peer-ip=83.166.68.45
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
После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите Coturn, чтобы применить конфигурацию.
$ sudo systemctl restart coturn
Откройте файл конфигурации Synapse (homeserver.yaml
) для добавления настроек Coturn.
$ nano ~/synapse/homeserver.yaml
Вставьте в него следующие строки. Замените значение turn_shared_secret
значением static-auth-secret
из файла \etc\coturn\turnserver.conf
.
turn_uris: [ "turn:coturn.example.com?transport=udp", "turn:coturn.example.com?transport=tcp" ]
turn_shared_secret: 'static-auth-secret'
turn_user_lifetime: 86400000
turn_allow_guests: True
# vim:ft=yaml
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите Synapse, чтобы применить изменения.
$ sudo systemctl restart matrix-synapse
Шаг 11 – Матрица доступа
Вы можете получить доступ к Matrix Chat с помощью веб-клиента Element по адресу https://app.element.io
. Нажмите кнопку Войти, чтобы продолжить.
Нажмите ссылку Изменить в разделе Домашний сервер. Введите matrix.example.com
в качестве домашнего сервера.
Если клиент правильно определяет ваш домашний сервер, граница и текст станут зелеными, иначе они будут показаны красным. Нажмите Продолжить, чтобы продолжить.
Введите имя пользователя и пароль, которые вы создали на шаге 8 при настройке Synapse. Нажмите кнопку Войти, чтобы войти в систему. Вам будет предложено создать безопасную и зашифрованную резервную копию.
Выберите параметр Ввести защитную фразу, чтобы создать защитную фразу, которая будет требоваться каждый раз при входе в систему. Нажмите Продолжить, чтобы продолжить.
Введите защитную фразу и нажмите кнопку Продолжить, чтобы продолжить. Вам будет предложено подтвердить это еще раз на следующем экране.
Введите фразу еще раз и нажмите Продолжить, чтобы продолжить.
Вам будет предоставлен набор ключей безопасности, которые вы сможете использовать, если забудете свою защитную фразу. Нажмите кнопку Загрузить, чтобы сохранить их.
Нажмите кнопку Продолжить, чтобы продолжить.
Вам будет предложено ввести пароль вашей учетной записи. Введите пароль и нажмите кнопку Продолжить, чтобы завершить настройку зашифрованной резервной копии.
Мы создали групповой чат под названием HowtoForge с помощью кнопки Создать групповой чат на главной странице. При нажатии кнопки вы получите следующее всплывающее окно.
Вы можете ограничить участников доменом, развернув расширенное меню и выбрав соответствующий параметр. Завершите создание комнаты, нажав кнопку Создать комнату.
Шаг 12 — Установите элемент
Создайте каталог для Element.
$ sudo mkdir -p /var/www/html/element
Создайте новый файл для получения последней версии Element.
$ sudo nano /var/www/html/element/update.sh
Добавьте в него следующие строки.
#!/bin/sh
set -e
install_location="/var/www/html/element"
latest="$(curl -I https://github.com/element-hq/element-web/releases/latest | awk -F '/' '/^location/ {print substr($NF, 1, length($NF)-1)}')"
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/element-hq/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"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Сделайте файл исполняемым.
$ sudo chmod +x /var/www/html/element/update.sh
Запустите скрипт, чтобы загрузить Element.
$ sudo /var/www/html/element/update.sh
Шаг 13 — Настройка элемента
Скопируйте тот же файл конфигурации элемента.
$ sudo cp /var/www/html/element/current/config.sample.json /var/www/html/element/config.json
Откройте файл конфигурации для редактирования.
$ sudo nano /var/www/html/element/config.json
Найдите следующие строки.
"m.homeserver": {
"base_url": "https://matrix-client.matrix.org",
"server_name": "matrix.org"
},
Измените адрес домашнего сервера Matrix по умолчанию на свой домашний сервер и удалите переменную server_name
.
"m.homeserver": {
"base_url": "https://matrix.example.com",
"server_name": "example.com"
},
Если вы хотите использовать свое имя вместо «Элемент» в названии сайта, измените название бренда.
"brand": "HowtoForge Example Chat",
Установите для переменной disable_guests
значение true, чтобы запретить гостям использовать Element.
"disable_guests": true,
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Создайте сертификат SSL для клиента Element.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email -d element.example.com
Создайте и откройте файл /etc/nginx/conf.d/element.conf
для редактирования.
$ sudo nano /etc/nginx/conf.d/element.conf
Вставьте в него следующие строки.
server {
listen 80;
listen [::]:80;
server_name element.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name element.example.com;
root /var/www/html/element/current;
index index.html;
access_log /var/log/nginx/element.access.log;
error_log /var/log/nginx/element.error.log;
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.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/element.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/element.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
}
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте синтаксис файла конфигурации Nginx.
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите службу Nginx.
$ sudo systemctl restart nginx
Нам необходимо настроить параметры SELinux перед доступом к Element. Выполните следующие команды, чтобы разрешить запуск Element.
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/element(/.*)?"
$ sudo restorecon -Rv /var/www/html/element/
Вы можете получить доступ к клиенту Element по URL-адресу https://element.example.com
в своем браузере. Авторизуйтесь, и вы попадете в панель управления приложением. Сначала вам будет предложено подтвердить приложение с помощью https://app.element.io
. Убедитесь, что вы вошли в исходное приложение Element, и вам будет предложено сопоставить символы эмодзи. После проверки вы получите следующую панель управления.
Заключение
На этом завершается наше руководство по установке сервера Matrix Synapse Chat вместе с веб-клиентом Coturn и Element с использованием Nginx в качестве прокси-сервера на компьютере с Debian 12. Если у вас есть вопросы, задавайте их в комментариях ниже.