Files
Matrix/Основная установка.md
T

8.3 KiB

Свой Matrix-сервер (Synapse) + PostgreSQL + S3 (Rclone)

Архитектура:

  • Среда: Proxmox LXC (Debian 12/13).
  • БД: Выделенный PostgreSQL (на NAS).
  • Файлы: S3-совместимое хранилище (RustFS/MinIO) примонтированное через rclone.

⚠️ ШАГ 0: Настройка Proxmox (Критически важно!)

Перед созданием контейнера убедитесь, что гипервизор разрешает ему монтировать файловые системы:

  1. В веб-интерфейсе Proxmox выберите ваш LXC-контейнер.
  2. Идем в Options -> Features.
  3. Обязательно ставим галочку FUSENesting).
  4. Перезагружаем контейнер.

CREATE USER synapse WITH PASSWORD 'SyperParol';

🗄 ШАГ 1: Подготовка Базы Данных (Выполняется на NAS)

Matrix ОЧЕНЬ требователен к кодировкам. Если создать базу по умолчанию, она упадет с ошибкой сортировки текстов. Заходим по SSH на сервер с базами данных (NAS) и выполняем:

sudo -u postgres psql
CREATE USER synapse WITH PASSWORD 'ТвойСуперПароль';
-- Обязательно используем локаль 'C' и template0
CREATE DATABASE synapse OWNER synapse ENCODING 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE template0;
\q

☁️ ШАГ 2: Подключение S3-хранилища через Rclone (В LXC-контейнере Matrix)

Мы монтируем бакет на уровне системы с кэшем в RAM/SSD.

0. Создайте бакет в S3:

Имя бакета matrix-media  
Создайте ваш API ключ

1. Устанавливаем зависимости:

apt update && apt upgrade -y
apt install -y curl rclone fuse3

2. Разрешаем FUSE работать для всех пользователей:

echo "user_allow_other" >> /etc/fuse.conf

3. Создаем конфиг Rclone:

mkdir -p /root/.config/rclone
nano /root/.config/rclone/rclone.conf

Вставляем:

[rustfs]
type = s3
provider = Minio
env_auth = false
access_key_id = ТВОЙ_ACCESS_KEY
secret_access_key = ТВОЙ_SECRET_KEY
endpoint = http://172.20.50.13:9000
force_path_style = true
region = us-east-1

4. Настраиваем системную службу монтирования:

mkdir -p /opt/synapse/data/media_store
mkdir -p /var/cache/rclone
nano /etc/systemd/system/rclone-matrix.service

Вставляем:

[Unit]
Description=Rclone mount for Matrix Media
After=network-online.target

[Service]
Type=notify
ExecStartPre=/bin/mkdir -p /opt/synapse/data/media_store
ExecStartPre=/bin/mkdir -p /var/cache/rclone
ExecStart=/usr/bin/rclone mount rustfs:matrix-media /opt/synapse/data/media_store \
  --config=/root/.config/rclone/rclone.conf \
  --allow-other \
  --dir-perms 0770 \
  --file-perms 0660 \
  --vfs-cache-mode full \
  --vfs-cache-max-size 5G \
  --vfs-cache-max-age 24h \
  --vfs-read-chunk-size 16M \
  --buffer-size 32M \
  --umask 007
ExecStop=/bin/fusermount3 -uz /opt/synapse/data/media_store
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Запускаем и проверяем:

systemctl daemon-reload
systemctl enable --now rclone-matrix
systemctl status rclone-matrix  # Должно быть active (running)

🧠 ШАГ 3: Установка ядра Matrix Synapse

Ставим всё в единое, чистое виртуальное окружение.

1. Системные пакеты:

apt install -y build-essential python3 python3-dev python3-venv python3-pip \
               libffi-dev libssl-dev libjpeg-dev libxslt1-dev libpq-dev \
               zlib1g-dev libwebp-dev sudo nano

2. Создание системного пользователя:

adduser --system --group --no-create-home synapse
chown -R synapse:synapse /opt/synapse

3. Установка в VENV:

python3 -m venv /opt/synapse/env
source /opt/synapse/env/bin/activate

# Обновляем базовые утилиты
pip install --upgrade pip setuptools wheel

# Ставим Матрикс и драйвер базы (если качает медленно, добавьте -i https://pypi.tuna.tsinghua.edu.cn/simple)
pip install matrix-synapse[all] psycopg2

4. Генерация базового конфига:

cd /opt/synapse/data
python -m synapse.app.homeserver \
    --server-name ВАШ_ДОМЕН.ru \
    --config-path /opt/synapse/data/homeserver.yaml \
    --generate-config \
    --report-stats=no

# ВАЖНО: Отдаем права на сгенерированные ключи пользователю synapse!
chown -R synapse:synapse /opt/synapse/data

⚙️ ШАГ 4: Тюнинг homeserver.yaml

nano /opt/synapse/data/homeserver.yaml

Что нужно изменить:

  1. Разрешаем слушать сеть (а не только localhost):
    listeners:
      - port: 8008
        tls: false
        type: http 
        x_forwarded: true
        bind_addresses: ['0.0.0.0']
        cors_allowed_origins:
          - "*"
    
  2. Подключаем нашу базу Postgres (удаляем sqlite3):
    database:
      name: psycopg2
      args:
        user: "synapse"
        password: "ТвойСуперПароль"
        database: "synapse"
        host: "172.20.50.10"
        port: 5432
        cp_min: 5
        cp_max: 10
    
  3. Подключаем redis для кеша
redis:
 enabled: true
 host: "172.20.50.12"
 port: 6379
 password: "ТвойСуперПароль"

  1. Убеждаемся, что путь к файлам указывает на наш Rclone:
    media_store_path: "/opt/synapse/data/media_store"
    
  2. Отключаем свободную регистрацию (безопасность):
    enable_registration: false
    
  3. включам пуши:
push:
 # Включаем саму систему пушей
 enabled: true
 
 # Список серверов, которым мы доверяем пересылать уведомления в Apple/Google
 trusted_proxies:
   - "https://matrix.org"
   - "https://vector.im"
   - "https://element.io"
 
 # Показывать ли текст сообщения в уведомлении (на заблокированном экране)
 include_content: true

🚀 ШАГ 5: Финальный запуск и создание Админа

1. Создаем службу для Synapse:

nano /etc/systemd/system/matrix-synapse.service

Вставляем:

[Unit]
Description=Matrix Synapse
After=network.target rclone-matrix.service
Requires=rclone-matrix.service

[Service]
Type=simple
User=synapse
Group=synapse
WorkingDirectory=/opt/synapse/data
ExecStart=/opt/synapse/env/bin/python -m synapse.app.homeserver --config-path /opt/synapse/data/homeserver.yaml
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

2. Запускаем сервер:

# Выходим из VENV
deactivate

systemctl daemon-reload
systemctl enable --now matrix-synapse
systemctl status matrix-synapse  # Должен быть зеленым!

3. Создаем учетную запись Администратора:

/opt/synapse/env/bin/register_new_matrix_user -c /opt/synapse/data/homeserver.yaml http://localhost:8008

Отвечаем на вопросы (логин, пароль, Make admin: yes).

ГОТОВО! Ваш сервер работает, файлы надежно кэшируются и улетают в S3, а база данных защищена ZFS. Можно заходить через клиент Element!