Параметры конфигурации системы Moodle в config.php
Основные подходы к конфигурации Moodle
Основной и наиболее эффективный способ настройки Moodle - редактирование файла config.php вручную.
Файл config.php расположен в корневой директории установки Moodle и содержит все ключевые параметры: подключение к базе данных, URL сайта, пути к данным, настройки кэширования, сессий, отладки и прочее. После редактирования файл должен быть сохранён с корректными правами доступа (обычно 644 или 640).
<?php
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG->dbtype = 'mysqli';
$CFG->dblibrary = 'native';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'moodleuser';
$CFG->dbpass = 'password';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array(
'dbpersist' => false,
'dbsocket' => false,
);
$CFG->wwwroot = 'http://example.com/moodle';
$CFG->dataroot = '/var/moodledata';
$CFG->directorypermissions = 02777;
$CFG->admin = 'admin';
require_once(__DIR__ . '/lib/setup.php');
Moodle config php (php: конфигурация moodle (config.php))
После установки параметров запускается файл lib/setup.php, который подключает остальные компоненты Moodle. Этот способ позволяет полностью контролировать конфигурацию.
Типичные ошибки:
- Пропущен unset($CFG) - может привести к конфликтам глобальных переменных.
- Неверный dbhost (например, localhost вместо 127.0.0.1) вызывает ошибку подключения к БД.
- Права доступа к dataroot неправильные - при установке или обновлении появляется ошибка записи.
- Отсутствие замыкающего слэша в wwwroot или dataroot - некоторые функции Moodle работают некорректно.
Как создать минимальный config.php для быстрой установки?
При первой установке Moodle можно использовать скрипт install.php, который генерирует config.php интерактивно. Однако если требуется предварительно заполнить параметры, рекомендуется скопировать config-dist.php в config.php и отредактировать его.
cp config-dist.php config.php
nano config.php
Phpmyadmin config inc php (php: конфигурация phpmyadmin (config.inc.php))
В config-dist.php содержатся все возможные настройки с комментариями. После копирования достаточно раскомментировать нужные строки и подставить значения.
Проблемы:
- Если используется веб-интерфейс установки, он может перезаписать config.php - нужно убедиться, что файл не имеет прав на запись после настройки.
- Некоторые настройки (например, $CFG->sslproxy) не описаны в config-dist.php - их нужно добавлять вручную.
Как задать параметры базы данных без жёсткого указания пароля?
Для повышения безопасности пароль базы данных можно хранить вне файла config.php, например в переменной окружения или в файле .env. Moodle поддерживает чтение параметров из getenv().
$CFG->dbpass = getenv('MOODLE_DB_PASSWORD');
Wp admin config php (php: конфигурация wordpress (wp-admin/config.php))
Перед запуском Moodle необходимо установить переменную окружения. Это удобно при использовании Docker или облачных хостингов.
Проблемы:
- Если переменная окружения не установлена, подключение к БД не произойдёт - нужно добавить резервное значение или проверку.
- На некоторых shared-хостингах установка переменных окружения может быть ограничена.
Как настроить режим отладки для разработки?
Для отладки в config.php добавляются параметры, выводящие подробные сообщения об ошибках и производительности.
$CFG->debug = (E_ALL | E_STRICT);
$CFG->debugdisplay = 1;
$CFG->debugsmtp = 1;
$CFG->perfdebug = 15;
$CFG->debugpageinfo = 1;
Config php host (php: настройка host в конфигурационном файле)
В продакшене эти параметры должны быть выключены, чтобы не раскрывать внутреннюю информацию.
Проблемы:
- При включённом debugdisplay могут отображаться уведомления об устаревших функциях, что загромождает интерфейс.
- Должен быть настроен уровень error_reporting в php.ini, иначе некоторые ошибки могут не отображаться.
Как настроить кэширование для ускорения работы?
Moodle поддерживает несколько типов кэша: memcached, redis, файловый. В config.php можно задать глобальный обработчик кэша.
$CFG->cachetype = 'redis';
$CFG->cache = array(
'redis' => array(
'server' => '127.0.0.1:6379',
'prefix' => 'moodle_',
'password' => '',
'serializer' => 1,
),
);
// Альтернатива: файловый кэш
$CFG->cachetype = 'static';
Config ini php (php: настройка php.ini)
Для использования Redis или Memcached необходимо установить соответствующие расширения PHP (redis, memcached).
Проблемы:
- Неверно указанный сервер Redis приводит к ошибкам при выполнении запросов - Moodle падает с исключением кэша.
- При использовании файлового кэша на NFS может снизиться производительность.
Как настроить сессии для высоконагруженного сайта?
Сессии можно хранить в БД, Redis или Memcached. Настройка выполняется в config.php через параметр session_handler.
$CFG->session_handler = 'database';
// или
$CFG->session_handler = 'redis';
$CFG->session_redis_host = '127.0.0.1';
Config config php домен (php: настройка конфигурации для домена)
Рекомендуется использовать Redis для масштабирования, так как он быстрее БД и не блокирует файловую систему.
Проблемы:
- При использовании database в качестве хранилища сессий может возникнуть блокировка таблиц при большом количестве параллельных запросов.
- Настройка Redis для сессий требует наличия расширения redis и корректной конфигурации самого Redis (например, maxmemory, eviction policy).
Как настроить Moodle для работы через прокси-сервер?
Если Moodle находится за обратным прокси (nginx, HAProxy), необходимо указать настройки proxy в config.php.
$CFG->sslproxy = true;
$CFG->reverseproxy = true;
$CFG->proxyhost = '192.168.1.1';
$CFG->proxyport = 8080;
$CFG->proxyuser = '';
$CFG->proxypassword = '';
Php config connect (php: настройка подключения к базе данных в config)
Параметр sslproxy сообщает Moodle, что HTTPS терминируется на прокси, иначе будут некорректные редиректы на HTTP.
Проблемы:
- Без настройки sslproxy могут возникать mixed content warnings.
- Если прокси не передаёт реальный IP пользователя, Moodle неправильно определяет местоположение и может блокировать доступ.
Как использовать мультисайт (Moodle Network) в config.php?
Для подключения Moodle к сети других сайтов в файле конфигурации активируется mnet.
$CFG->mnet_localhost_id = 1;
$CFG->mnet_all_hosts = true;
$CFG->mnet_services = array(
'sso_sp' => true,
'sso_idp' => true,
'roaming' => true,
);
Требуется отдельная настройка cron и сертификатов.
Проблемы:
- Некорректные настройки mnet могут привести к невозможности аутентификации между узлами.
- Без открытых портов (например, 443 для SOAP) соединение не устанавливается.
Расширенные примеры конфигурации config.php
Пример 1: Подключение к внешнему Redis для кэша и сессий
<?php
unset($CFG);
global $CFG;
$CFG = new stdClass();
// Параметры БД
$CFG->dbtype = 'mysqli';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'root';
$CFG->dbpass = getenv('DB_PASS');
$CFG->prefix = 'mdl_';
// URL и данные
$CFG->wwwroot = 'https://moodle.example.com';
$CFG->dataroot = '/var/www/moodledata';
$CFG->directorypermissions = 02777;
// Настройка Redis для кэша
$CFG->cachetype = 'redis';
$CFG->cache = [
'redis' => [
'server' => '10.0.0.5:6379',
'prefix' => 'moodle_',
'password' => 'redis_secret',
'serializer' => 1,
'compress' => 1,
'compressor' => 'gzip',
],
];
// Настройка сессий через Redis
$CFG->session_handler = 'redis';
$CFG->session_redis_host = '10.0.0.5';
$CFG->session_redis_port = 6379;
$CFG->session_redis_prefix = 'PHPREDIS_SESSION:'; // необязательно
// Отладка для разработки
$CFG->debug = (E_ALL | E_STRICT);
$CFG->debugdisplay = 1;
require_once(__DIR__ . '/lib/setup.php');
Результат:
После применения этой конфигурации Moodle будет использовать внешний Redis сервер по адресу 10.0.0.5 для всех типов кэша и хранения сессий. При запуске cron или страницы пользователя скорость возрастает в 2-3 раза за счёт снижения нагрузки на БД.
Пример 2: Настройка нескольких баз данных (шардинг)
<?php
// Основная база данных
$CFG->dbtype = 'mysqli';
$CFG->dbhost = 'db1.example.com';
$CFG->dbname = 'moodle_main';
$CFG->dbuser = 'user_main';
$CFG->dbpass = 'pass_main';
$CFG->prefix = 'mdl_';
// База данных для логов (шард)
$CFG->dboptions = [
'readonly' => [
[
'dbhost' => 'db2.example.com',
'dbname' => 'moodle_logs',
'dbuser' => 'user_logs',
'dbpass' => 'pass_logs',
],
],
'dbpersist' => false,
];
// Для записей логов Moodle использует отдельное соединение
$CFG->dblogtype = 'native';
Результат:
Все операции чтения с таблиц логов направляются на реплику db2, запись остаётся на главной БД. Это снижает нагрузку на основной сервер.
Пример 3: Настройка SMTP для отправки почты
$CFG->smtphosts = 'smtp.gmail.com:587';
$CFG->smtpuser = 'user@gmail.com';
$CFG->smtppass = 'app_password';
$CFG->smtpsecure = 'tls';
$CFG->noreplyaddress = 'noreply@example.com';
Результат:
Все системные письма (подтверждение регистрации, уведомления) отправляются через SMTP сервер Google с шифрованием TLS. Необходимо использовать пароль приложения, а не основной пароль Gmail.
Пример 4: Ограничение доступа по IP через config.php
$CFG->allowedip = '192.168.1.0/24, 10.0.0.1';
Результат:
Доступ к страницам Moodle будет разрешён только с IP-адресов из диапазона 192.168.1.0/24 и адреса 10.0.0.1. Все остальные получат отказ в доступе (403).
Пример 5: Настройка cron в config.php
$CFG->cronclionly = true;
$CFG->cronremotepassword = 'secret';
$CFG->cronremotecallback = '';
Результат:
Запуск cron разрешён только из командной строки (cronclionly=true). Если требуется удалённый вызов, задаётся пароль в cronremotepassword, и cron можно вызвать через веб-запрос с этим паролем.