Перейти к содержанию

Обзор развертывания 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)

Для нативного развертывания выполняются следующие шаги:

  1. Подготовка системы: Обновление пакетов APT и установка базовых зависимостей, включая curl, unzip, tar и acl.

  2. Установка ПО:

    • Установка 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.

  3. Конфигурация:

    • Настройка параметров PHP: установка memory_limit в 256M, upload_max_filesize в 100M и max_execution_time в 300.

    • Настройка MariaDB: использование набора символов utf8mb4 и колляции utf8mb4_unicode_ci.

  4. Настройка Moodle:

    • Загрузка версии Moodle 5.1.1 из официального репозитория.

    • Распаковка архива в /var/www/moodle.

    • Создание базы данных moodle и пользователя moodle с полными правами.

    • Запуск скрипта установки Moodle через командную строку с помощью admin/cli/install.php с флагами для безинтерактивного режима. Это действие генерирует файл config.php.

  5. Активация служб:

    • Включение конфигурации сайта 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:

    systemctl start apache2
    

  • Остановка Apache:

    systemctl stop apache2
    

  • Перезапуск Apache:

    systemctl restart apache2
    

  • Включение автозапуска Apache:

    systemctl enable apache2
    

  • Запуск MariaDB:

    systemctl start mariadb
    

  • Перезапуск MariaDB:

    systemctl restart mariadb
    

Развертывание в контейнерах (Docker Compose)

Для контейнеризованных экземпляров используйте команды docker-compose в каталоге конфигурации /root/nginx.

  • Запуск служб:

    docker-compose up -d
    

  • Остановка служб:

    docker-compose stop
    

  • Перезапуск служб:

    docker-compose restart
    

  • Просмотр логов:

    docker-compose logs -f
    

Поддержка 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.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×