Загрузить файлы в «/»

This commit is contained in:
2026-04-09 20:54:48 +03:00
parent 312a9cb8e0
commit 18b567a65c
+268
View File
@@ -0,0 +1,268 @@
# Свой 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. Обязательно ставим галочку **FUSE**`Nesting`).
4. Перезагружаем контейнер.
---
CREATE USER synapse WITH PASSWORD 'SyperParol';
### 🗄 ШАГ 1: Подготовка Базы Данных (Выполняется на NAS)
Matrix ОЧЕНЬ требователен к кодировкам. Если создать базу по умолчанию, она упадет с ошибкой сортировки текстов.
Заходим по SSH на сервер с базами данных (NAS) и выполняем:
```bash
sudo -u postgres psql
```
```sql
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. Устанавливаем зависимости:**
```bash
apt update && apt upgrade -y
apt install -y curl rclone fuse3
```
**2. Разрешаем FUSE работать для всех пользователей:**
```bash
echo "user_allow_other" >> /etc/fuse.conf
```
**3. Создаем конфиг Rclone:**
```bash
mkdir -p /root/.config/rclone
nano /root/.config/rclone/rclone.conf
```
*Вставляем:*
```ini
[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. Настраиваем системную службу монтирования:**
```bash
mkdir -p /opt/synapse/data/media_store
mkdir -p /var/cache/rclone
nano /etc/systemd/system/rclone-matrix.service
```
*Вставляем:*
```ini
[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
```
*Запускаем и проверяем:*
```bash
systemctl daemon-reload
systemctl enable --now rclone-matrix
systemctl status rclone-matrix # Должно быть active (running)
```
---
### 🧠 ШАГ 3: Установка ядра Matrix Synapse
Ставим всё в единое, чистое виртуальное окружение.
**1. Системные пакеты:**
```bash
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. Создание системного пользователя:**
```bash
adduser --system --group --no-create-home synapse
chown -R synapse:synapse /opt/synapse
```
**3. Установка в VENV:**
```bash
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. Генерация базового конфига:**
```bash
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`
```bash
nano /opt/synapse/data/homeserver.yaml
```
**Что нужно изменить:**
1. Разрешаем слушать сеть (а не только localhost):
```yaml
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
bind_addresses: ['0.0.0.0']
cors_allowed_origins:
- "*"
```
2. Подключаем нашу базу Postgres (удаляем sqlite3):
```yaml
database:
name: psycopg2
args:
user: "synapse"
password: "ТвойСуперПароль"
database: "synapse"
host: "172.20.50.10"
port: 5432
cp_min: 5
cp_max: 10
```
3. Подключаем redis для кеша
```yaml
redis:
enabled: true
host: "172.20.50.12"
port: 6379
password: "ТвойСуперПароль"
```
4. Убеждаемся, что путь к файлам указывает на наш Rclone:
```yaml
media_store_path: "/opt/synapse/data/media_store"
```
5. Отключаем свободную регистрацию (безопасность):
```yaml
enable_registration: false
```
6. включам пуши:
```
push:
# Включаем саму систему пушей
enabled: true
# Список серверов, которым мы доверяем пересылать уведомления в Apple/Google
trusted_proxies:
- "https://matrix.org"
- "https://vector.im"
- "https://element.io"
# Показывать ли текст сообщения в уведомлении (на заблокированном экране)
include_content: true
```
---
### 🚀 ШАГ 5: Финальный запуск и создание Админа
**1. Создаем службу для Synapse:**
```bash
nano /etc/systemd/system/matrix-synapse.service
```
*Вставляем:*
```ini
[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. Запускаем сервер:**
```bash
# Выходим из VENV
deactivate
systemctl daemon-reload
systemctl enable --now matrix-synapse
systemctl status matrix-synapse # Должен быть зеленым!
```
**3. Создаем учетную запись Администратора:**
```bash
/opt/synapse/env/bin/register_new_matrix_user -c /opt/synapse/data/homeserver.yaml http://localhost:8008
```
*Отвечаем на вопросы (логин, пароль, Make admin: **yes**).*
**ГОТОВО!** Ваш сервер работает, файлы надежно кэшируются и улетают в S3, а база данных защищена ZFS. Можно заходить через клиент Element!
---