Pull to refresh

Разгоняем портал ДО на основе Moodle (решение проблем узких мест)

Reading time3 min
Views8.7K

В последнее время все острее встает вопрос об обучении онлайн, во время пандемии, так и в связи с переходом в онлайн всего и вся. На сайте Хабр есть материалы по установке базовой системы на основе moodle. В данной заметке хотелось бы поделиться некоторым опытом настройки сервера для продакшен использования (речь пойдет о настройке ПО, без кластеризации и изменения железной конфигурации), для случая когда портал работает уже с некоторой нагрузкой. Примеры приведены для разрешения проблем узких мест из-за которых портал может работать с невысокой производительностью.

1. Apache mod XSEND Files

Описание приводится на страничке документации, нужно это т.к. moodle выдает статические файлы, в соответствии с правами доступа к ним, динамически. Такого рода дополнения могут прилично увеличить производительность. Почитать подробнее про X-Sendfile можно в статье.

Включается эта опция в конфиге Apache2 - указываем каталог с moodle data

XSendFile On

XSendFilePath /data/localcache/ 

XSendFilePath /data/filedir/

2. Использование php-fpm

Данная рекомендация подходит для всех более-менее значимых проектов под LAMP.

Увеличивать можно из базовых параметров: количество подключений, максимальное число процессов запущенных и простаивающих для сервера и т.д.

Например, для конфига службы fpm/pool.d/www.conf

pm.max_children = 20

pm.start_servers = 10

3. Изменение базовых значений php.ini

Здесь важным параметром является max_input_vars (должен быть увеличен). Система не сможет делать архивы для больших курсов и разворачивать их, так же сторонние модули с большим числом параметров не смогут правильно работать. Аналогично следует увеличить размеры лимитов для работы с файлами, например, МАХ размер загрузки файла на курс, максимального числа загружаемых файлов в систему одновременно.

max_input_vars = 1000000

upload_max_filesize = 512M 

max_execution_time = 600

memorylimit = 512M

post_max_size = 512M

max_input_time = 300

В официальной документации moodle рекомендуется для продакшен использовать под Linux , а в ней меньше проблем с оптимизацией и кешированием у php. Настоятельно рекомендуется использовать модули по типу opcache в системе. Memcached нужно осторожно использовать (или отказаться вовсе) т.к. в системе могут происходить значительные изменения контента преподавателями и они не сразу могут отображаться корректно как для слушателей, так и для преподавателей.

5. Использование внутреннего почтовика

Для работы moodle необходимо настроить работу с почтовой системой. Часто из-за того что почтовый сервер внешний, то письма к нему могут приходить не сразу, просто теряться(из-за таймаутов). Так же скрипты которые выполняют рассылку могут подвесить систему. Решением такой проблемы может быть развертывание почтового сервера с пересылкой писем на внешний сервер.

Документации о работе почтового сервера в режиме пересылки(Relay) много официальной, например, для Postfix.

Простой пример настройки опции - файл transport

* smtp:my.pochta.ru

6. Mysql тюнинг

Может быть полезен, если для установки мудла использовался сервер MYSQL. Многие пишут что MYSQL из коробки идет с минимальными настройками, но информации по оптимизации БД много в сети. Могу посоветовать использовать утилиту mysqltunner.

Из базовых проблем без настройки гибкой БД - могут не выполняться запросы с выводом большого числа строк для отчетов, страницы со списками пользователей.

query_cache_size = 16M

innodb_buffer_pool_size = 3500M 

tmp_table_size = 68M

max_heap_table_size = 68M 

join_buffer_size = 256K 

table_open_cache =400

7. Использование системных утилит

В мудле, в административной панели, можно задать пути для системных приложений(таких как du). При выполнении сценариев они могут быть использованы - это значительно увеличит скорость выполнения сценариев в системе. Подробнее в https://docs.moodle.org/310/en/System_paths

8. Обслуживание системы

Работа системы в стеке LAMP должна быть гармоничной :) потому не нужно забывать следить за тем как выполняется скрипт планировщика(без ошибок). Проблемы могут быть с правами на файловой системе или в модулях - в этом случае крон может не выполниться полностью, и системе не выполнятся задачи по рассылке писем, удалению старых данных (логов, конвертаций документов и тд.).

Так же можно выполнять оптимизацию таблиц БД. В официальной документации про это много написано.

Если такого рода опыт полезен, то готов поделиться еще по смежным темам в области разработки - сопровождения порталов moodle или дистанционного обучения.

Всем успехов в работе!

Ведущий инженер Центра открытого образования СПбПУ.

Tags:
Hubs:
+6
Comments5

Articles