В последнее время все острее встает вопрос об обучении онлайн, во время пандемии, так и в связи с переходом в онлайн всего и вся. На сайте Хабр есть материалы по установке базовой системы на основе 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
В мудле, в административной панели, можно задать пути для системных приложений(таких как du). При выполнении сценариев они могут быть использованы - это значительно увеличит скорость выполнения сценариев в системе. Подробнее в https://docs.moodle.org/310/en/System_paths
8. Обслуживание системы
Работа системы в стеке LAMP должна быть гармоничной :) потому не нужно забывать следить за тем как выполняется скрипт планировщика(без ошибок). Проблемы могут быть с правами на файловой системе или в модулях - в этом случае крон может не выполниться полностью, и системе не выполнятся задачи по рассылке писем, удалению старых данных (логов, конвертаций документов и тд.).
Так же можно выполнять оптимизацию таблиц БД. В официальной документации про это много написано.
Если такого рода опыт полезен, то готов поделиться еще по смежным темам в области разработки - сопровождения порталов moodle или дистанционного обучения.
Всем успехов в работе!
Ведущий инженер Центра открытого образования СПбПУ.
crcrussia
Спасибо, очень интересно и полезно! Хотелось бы продолжения…