8.3 KiB
Свой Matrix-сервер (Synapse) + PostgreSQL + S3 (Rclone)
Архитектура:
- Среда: Proxmox LXC (Debian 12/13).
- БД: Выделенный PostgreSQL (на NAS).
- Файлы: S3-совместимое хранилище (RustFS/MinIO) примонтированное через
rclone.
⚠️ ШАГ 0: Настройка Proxmox (Критически важно!)
Перед созданием контейнера убедитесь, что гипервизор разрешает ему монтировать файловые системы:
- В веб-интерфейсе Proxmox выберите ваш LXC-контейнер.
- Идем в Options -> Features.
- Обязательно ставим галочку FUSE (и
Nesting). - Перезагружаем контейнер.
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
Что нужно изменить:
- Разрешаем слушать сеть (а не только localhost):
listeners: - port: 8008 tls: false type: http x_forwarded: true bind_addresses: ['0.0.0.0'] cors_allowed_origins: - "*" - Подключаем нашу базу Postgres (удаляем sqlite3):
database: name: psycopg2 args: user: "synapse" password: "ТвойСуперПароль" database: "synapse" host: "172.20.50.10" port: 5432 cp_min: 5 cp_max: 10 - Подключаем redis для кеша
redis:
enabled: true
host: "172.20.50.12"
port: 6379
password: "ТвойСуперПароль"
- Убеждаемся, что путь к файлам указывает на наш Rclone:
media_store_path: "/opt/synapse/data/media_store" - Отключаем свободную регистрацию (безопасность):
enable_registration: false - включам пуши:
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!