====== Изменение лимита размера загружаемых файлов в Matrix Synapse ======
===== Описание проблемы =====
По умолчанию Matrix Synapse устанавливает лимит загрузки файлов в 20 MB. При попытке загрузить файл большего размера появляется ошибка: **"Этот файл слишком большой для загрузки. Лимит размера файла составляет 20 MB"**.
===== Требования =====
* Docker и Docker Compose
* Доступ к конфигурационным файлам Matrix Synapse
* Права на редактирование файлов и перезапуск контейнеров
* Nginx Proxy Manager (если используется)
===== Пошаговая инструкция =====
==== Шаг 1: Изменить лимит в homeserver.yaml ====
Откройте файл конфигурации Synapse:
nano ./data/synapse/homeserver.yaml
Найдите параметр ''max_upload_size'' и измените его значение:
max_upload_size: "200M" # Было: "20M"
**Рекомендуемые значения:**
* Для обычного использования: 100M - 200M
* Для обмена большими файлами: 500M - 1G
* Не рекомендуется ставить больше 2G
==== Шаг 2: Изменить лимит в Element Web ====
Откройте конфигурацию Element Web:
nano ./data/element/config.json
Добавьте параметр ''max_upload_size'' в конец файла (перед закрывающей скобкой):
{
"default_server_config": {
...
},
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx",
"max_upload_size": 209715200
}
**Важно!** Не забудьте добавить запятую после предыдущего параметра!
Значение указывается в **байтах**:
* 100 MB = 104857600
* 200 MB = 209715200
* 500 MB = 524288000
* 1 GB = 1073741824
==== Шаг 3: Настроить Nginx Proxy Manager ====
Если вы используете Nginx Proxy Manager:
- Откройте **Nginx Proxy Manager** в браузере
- Перейдите в **Proxy Hosts**
- Найдите хост для вашего Matrix сервера (например, ''syna.digitizepro.tech'')
- Перейдите на вкладку **Advanced**
- Добавьте в **Custom Nginx Configuration**:
client_max_body_size 200M;
proxy_request_buffering off;
- Нажмите **Save**
==== Шаг 4: Перезапустить контейнеры ====
Выполните перезапуск всех контейнеров:
cd /path/to/matrix/
docker compose down
docker compose up -d
Проверьте статус контейнеров:
docker compose ps
==== Шаг 5: Очистить кеш браузера ====
**Обязательный шаг!** Браузер кэширует настройки клиента.
Выберите один из вариантов:
* Нажмите **Ctrl+Shift+R** (жёсткая перезагрузка)
* Откройте DevTools (F12) → правой кнопкой на кнопку обновления → **Очистить кэш и жёсткая перезагрузка**
* Откройте сайт в **приватном окне** браузера
* Очистите весь кеш браузера: **Ctrl+Shift+Delete**
===== Проверка настроек =====
==== Проверить конфигурацию Synapse ====
docker compose exec synapse_app cat /data/homeserver.yaml | grep max_upload_size
Должно вывести:
max_upload_size: "200M"
==== Проверить логи ====
docker compose logs synapse_app | grep -i upload
docker compose logs element_web | tail -20
===== Таблица лимитов =====
^ Размер ^ Байты ^ Применение ^
| 50 MB | 52428800 | Минимальный комфортный лимит |
| 100 MB | 104857600 | Рекомендуется для повседневного использования |
| 200 MB | 209715200 | Оптимальный вариант для большинства случаев |
| 500 MB | 524288000 | Для обмена большими файлами |
| 1 GB | 1073741824 | Максимальный рекомендуемый лимит |
===== Возможные проблемы =====
==== Ошибка всё ещё появляется ====
Проверьте все три места где установлен лимит:
- ''homeserver.yaml'' → параметр ''max_upload_size''
- ''config.json'' (Element Web) → параметр ''max_upload_size''
- Nginx Proxy Manager → ''client_max_body_size''
==== Недостаточно места на диске ====
Большие файлы занимают много места в ''/data/media_store''. Проверьте свободное место:
df -h
du -sh ./data/synapse/media_store
==== Медленная загрузка файлов ====
Проверьте:
* Скорость интернет-соединения
* Нагрузку на сервер
* Настройки таймаутов в Nginx
===== Дополнительные рекомендации =====
**Автоматическая очистка старых медиа**
Добавьте в ''homeserver.yaml'':
retention:
enabled: true
default_policy:
min_lifetime: 1d
max_lifetime: 30d
retention_purge_jobs:
- shortest_max_lifetime: 1d
longest_max_lifetime: 30d
interval: 12h
Это автоматически удалит файлы старше 30 дней.
===== Ручная очистка медиа =====
Для ручной очистки файлов старше 30 дней:
docker compose exec synapse_app curl -X POST \
-H "Authorization: Bearer " \
"http://localhost:8008/_synapse/admin/v1/media/syna.digitizepro.tech/delete?before_ts=$(date -d '30 days ago' +%s)000"
Замените '''' на ваш токен администратора
===== Ссылки =====
* [[https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html|Официальная документация Synapse]]
* [[https://github.com/vector-im/element-web/blob/develop/docs/config.md|Документация Element Web]]
----
**Дата создания:** 2024-12-13