Обзор развертывания Moodle на сервере¶
Предварительные требования и базовые условия¶
Для развертывания Moodle требуется Linux-сервер с операционной системой на базе Debian (например, Ubuntu Jammy). Должны быть доступны следующие компоненты:
-
Операционная система: Дистрибутив Linux на базе Debian (например, Ubuntu 22.04 "Jammy").
-
Привилегии: Для установки пакетов и настройки служб требуется доступ к серверу с правами
rootилиsudo. -
Порты:
-
Порт
80для HTTP-трафика и валидации Let's Encrypt. -
Порт
443для HTTPS-трафика. -
Порт
8080для внутренней коммуникации (сценарии развертывания в контейнерах). -
Домен: Для выдачи SSL-сертификата требуется действительное доменное имя или пользовательский FQDN, назначенный в зоне
hostkey.in. -
Память и хранилище: Достаточное дисковое пространство для приложения, базы данных и каталога данных (лимит памяти по умолчанию установлен на 256 МБ, с настраиваемыми лимитами загрузки до 100 МБ).
FQDN конечной панели¶
Приложение доступно через следующий формат Полного Квалифицированного Доменного Имени (FQDN) в домене hostkey.in:
moodle<Server ID>.hostkey.in
Стандартный порт для внешнего трафика — 443 (HTTPS). При развертывании в контейнерах за прокси используется внутренний порт 8080.
Структура файлов и каталогов¶
Приложение и связанные с ним данные организованы в следующих расположениях:
-
Каталог приложения:
/var/www/moodle -
Содержит исходный код ядра Moodle.
-
Общедоступный веб-корневой каталог (public web root) расположен в
/var/www/moodle/public. -
Файл конфигурации
config.phpгенерируется в/var/www/moodle/config.php. -
Каталог данных:
/var/moodledata -
Хранит загруженные пользователями файлы, кэш и другие постоянные данные Moodle.
-
Файлы конфигурации:
-
Виртуальный хост Apache:
/etc/apache2/sites-available/moodle.conf -
Настройки PHP:
/etc/php/8.2/apache2/conf.d/99-moodle.iniи/etc/php/8.2/cli/conf.d/99-moodle.ini -
Настройки MariaDB:
/etc/mysql/mariadb.conf.d/99-moodle.cnf -
Cron-задача:
/etc/cron.d/moodle -
SSL-сертификаты: Управляются через Certbot и хранятся в
/etc/letsencrypt/live/moodle<Server ID>.hostkey.in/.
Процесс установки приложения¶
Развертывание осуществляется либо путем прямой установки на операционную систему хоста, либо с использованием контейнеризации.
Установка на хосте (Host-Based Installation)¶
Для нативного развертывания выполняются следующие шаги:
-
Подготовка системы: Обновление пакетов APT и установка базовых зависимостей, включая
curl,unzip,tarиacl. -
Установка ПО:
-
Установка Apache2 с модулями
rewrite,headers,sslиsocache_shmcb. -
Установка PHP 8.2 с необходимыми расширениями:
common,cli,mysql,xml,curl,zip,gd,intl,mbstring,soap,bcmathиopcache. -
Установка сервера и клиента MariaDB 10.11.
-
Установка Certbot и
python3-certbot-apacheдля управления SSL.
-
-
Конфигурация:
-
Настройка параметров PHP: установка
memory_limitв256M,upload_max_filesizeв100Mиmax_execution_timeв300. -
Настройка MariaDB: использование набора символов
utf8mb4и колляцииutf8mb4_unicode_ci.
-
-
Настройка Moodle:
-
Загрузка версии Moodle
5.1.1из официального репозитория. -
Распаковка архива в
/var/www/moodle. -
Создание базы данных
moodleи пользователяmoodleс полными правами. -
Запуск скрипта установки Moodle через командную строку с помощью
admin/cli/install.phpс флагами для безинтерактивного режима. Это действие генерирует файлconfig.php.
-
-
Активация служб:
-
Включение конфигурации сайта Moodle в Apache.
-
Отключение сайта Apache по умолчанию.
-
Получение и установка SSL-сертификата через Certbot.
-
Перезапуск служб Apache.
-
Установка на основе контейнеров (Container-Based Installation)¶
В качестве альтернативы приложение может быть развернуто с использованием Docker-контейнеров, управляемых через docker-compose.
-
Служба базы данных: Использует образ
bitnami/mariadb.-
Имя базы данных:
bitnami_moodle -
Пользователь базы данных:
bn_moodle
-
-
Служба приложения: Использует образ
moodlehq/moodle-php-apache:8.4-bullseye.-
Настроена для работы с обратным прокси.
-
Внутренний порт прослушивания:
8080.
-
Права доступа и безопасность¶
Применяются меры безопасности для ограничения доступа к файлам и соблюдения сетевых протоколов:
-
Права на файлы:
-
Каталог приложения Moodle (
/var/www/moodle) принадлежит пользователюrootс группойwww-data. -
Права для каталогов внутри приложения установлены как
0750. -
Права для файлов внутри приложения установлены как
0640. -
Каталог данных (
/var/moodledata) принадлежит пользователюwww-dataс правами0770. -
Файл
config.phpдоступен для чтения Apache (0640), но принадлежит пользователюroot.
-
-
Сетевая безопасность:
-
Apache настроен на принудительное перенаправление на HTTPS через Certbot.
-
Модуль
rewriteвключен для обработки переписывания URL. -
Сайт Apache по умолчанию отключен, чтобы гарантировать активность только виртуального хоста Moodle.
-
Базы данных¶
Приложение использует MariaDB в качестве системы управления базами данных.
-
Имя базы данных:
moodle(нативный) илиbitnami_moodle(контейнерный). -
Пользователь базы данных:
moodle(нативный) илиbn_moodle(контейнерный). -
Метод подключения:
-
Нативный: Подключение к
localhostчерез TCP/IP или Unix-сокет. -
Контейнерный: Подключение к внутреннему хосту службы
mariadbна порту3306.
-
-
Параметры конфигурации:
-
Набор символов:
utf8mb4 -
Колляция:
utf8mb4_unicode_ci -
Максимальный размер пакета:
64M
-
Docker-контейнеры и их развертывание¶
В сценарии развертывания в контейнерах службы оркестрируются с использованием docker-compose. Конфигурация находится в /root/nginx/compose.yml или в конкретном файле службы.
-
Сеть: Службы взаимодействуют через внешнюю мостовую сеть (bridge network) с именем
moodle_net. -
Тома (Volumes):
-
mariadb_data: Постоянное хранилище для базы данных. -
moodle_data: Постоянное хранилище для файлов приложения Moodle. -
moodledata_data: Постоянное хранилище для файлов данных Moodle. -
nginx_secrets: Хранит SSL-сертификаты Let's Encrypt.
-
-
Определения служб:
-
Nginx: Работает как обратный прокси и SSL-терминатор, используя образ
jonasal/nginx-certbot. Открывает порты80и443. -
Moodle: Работает с использованием образа
moodlehq/moodle-php-apache, прослушивая внутренний порт8080. -
MariaDB: Работает с использованием образа
bitnami/mariadb.
-
Прокси-серверы¶
Трафик управляется через обратный прокси Nginx в контейнеризованных развертываниях или через Apache в нативных развертываниях.
Nginx (развертывание в контейнерах)¶
-
Роль: Выступает в качестве фронтенд-прокси-сервера.
-
Обработка SSL: Использует образ
nginx-certbotдля автоматического получения и обновления SSL-сертификатов через протокол ACME. -
Конфигурация прокси:
-
Перенаправляет трафик на службу контейнера Moodle по адресу
http://moodle:8080. -
Устанавливает заголовок
Hostв значение$host. -
Устанавливает заголовок
X-Forwarded-Protoв значение$scheme, чтобы Moodle распознавал HTTPS-трафик.
-
-
Email для сертификата: Управляется под адресом
hkadm@hostkey.com.
Apache (нативное развертывание)¶
-
Роль: Прямой веб-сервер и SSL-терминатор.
-
Обработка SSL: Использует Certbot, интегрированный с Apache, для управления сертификатами для
moodle<Server ID>.hostkey.in. -
Конфигурация:
-
DocumentRoot:
/var/www/moodle/public. -
Разрешены все переопределения (
AllowOverride All) для поддержки правил.htaccess, требуемых Moodle. -
Логи записываются в
/var/log/apache2/moodle_error.logи/var/log/apache2/moodle_access.log.
-
Настройки прав доступа¶
Строгие настройки прав доступа применяются для обеспечения безопасности установки Moodle:
| Путь | Владелец | Группа | Режим | Описание |
|---|---|---|---|---|
/var/www/moodle | root | www-data | 0750 | Корневой каталог приложения |
/var/www/moodle/public | root | www-data | 0750 | Общедоступный каталог, доступный через веб |
/var/www/moodle/config.php | root | www-data | 0640 | Файл конфигурации |
/var/moodledata | www-data | www-data | 0770 | Каталог данных для загрузок и кэша |
/etc/php/8.2/.../99-moodle.ini | root | root | 0644 | Файлы конфигурации PHP |
/etc/apache2/sites-available/moodle.conf | root | root | 0644 | Конфигурация виртуального хоста Apache |
Расположение файлов конфигурации и данных¶
Ключевые файлы конфигурации и данных находятся по следующим путям:
-
Конфигурация Moodle:
/var/www/moodle/config.php -
Конфигурация PHP CLI/Apache:
/etc/php/8.2/apache2/conf.d/99-moodle.iniи/etc/php/8.2/cli/conf.d/99-moodle.ini -
Конфигурация базы данных:
/etc/mysql/mariadb.conf.d/99-moodle.cnf -
Конфигурация сайта Apache:
/etc/apache2/sites-available/moodle.conf -
Cron-задача:
/etc/cron.d/moodle -
Docker Compose (контейнер):
/root/nginx/compose.yml -
Конфигурация Nginx Proxy (контейнер):
/data/nginx/user_conf.d/moodle<Server ID>.hostkey.in.conf
Доступные порты для подключения¶
Система использует и открывает следующие порты:
-
Порт 80: HTTP (перенаправляет на HTTPS, используется для проверки Let's Encrypt).
-
Порт 443: HTTPS (основной доступ к веб-интерфейсу Moodle).
-
Порт 8080: Внутренний HTTP (используется Docker-контейнером Moodle для внутренней коммуникации).
-
Порт 3306: MariaDB (внутренний доступ к базе данных внутри Docker-сетей или localhost).
Запуск, остановка и обновление¶
Команды управления службами различаются в зависимости от метода развертывания.
Нативное развертывание (Systemd)¶
Приложение зависит от служб Apache и MariaDB, управляемых через systemd.
-
Запуск Apache:
-
Остановка Apache:
-
Перезапуск Apache:
-
Включение автозапуска Apache:
-
Запуск MariaDB:
-
Перезапуск MariaDB:
Развертывание в контейнерах (Docker Compose)¶
Для контейнеризованных экземпляров используйте команды docker-compose в каталоге конфигурации /root/nginx.
-
Запуск служб:
-
Остановка служб:
-
Перезапуск служб:
-
Просмотр логов:
Поддержка Moodle Cron¶
Cron-задача Moodle настроена на запуск каждую минуту через системный cron:
-
Запись Cron:
*/1 * * * * www-data /usr/bin/php /var/www/moodle/admin/cli/cron.php >/dev/null 2>&1 -
Проверка статуса: Убедитесь, что cron-задача работает, проверив наличие файла
/etc/cron.d/moodle.