diff --git a/Основная установка.md b/Основная установка.md new file mode 100644 index 0000000..af34dcb --- /dev/null +++ b/Основная установка.md @@ -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! + +---