Изменение лимита размера загружаемых файлов в 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 и измените его значение:
- homeserver.yaml
max_upload_size: "200M" # Было: "20M"
<note tip> Рекомендуемые значения:
- Для обычного использования: 100M - 200M
- Для обмена большими файлами: 500M - 1G
- Не рекомендуется ставить больше 2G
</note>
Шаг 2: Изменить лимит в Element Web
Откройте конфигурацию Element Web:
nano ./data/element/config.json
Добавьте параметр max_upload_size в конец файла (перед закрывающей скобкой):
- config.json
{ "default_server_config": { ... }, "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx", "max_upload_size": 209715200 }
<note important> Важно! Не забудьте добавить запятую после предыдущего параметра!
Значение указывается в байтах:
- 100 MB = 104857600
- 200 MB = 209715200
- 500 MB = 524288000
- 1 GB = 1073741824
</note>
Шаг 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: Очистить кеш браузера
<note warning> Обязательный шаг! Браузер кэширует настройки клиента. </note>
Выберите один из вариантов:
- Нажмите 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_sizeconfig.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
Дополнительные рекомендации
<note tip> Автоматическая очистка старых медиа
Добавьте в 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 дней. </note>
Ручная очистка медиа
Для ручной очистки файлов старше 30 дней:
docker compose exec synapse_app curl -X POST \ -H "Authorization: Bearer <admin_token>" \ "http://localhost:8008/_synapse/admin/v1/media/syna.digitizepro.tech/delete?before_ts=$(date -d '30 days ago' +%s)000"
<note>Замените <admin_token> на ваш токен администратора</note>