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

Обзор развертывания Moodle на сервере

Предпосылки и предварительные требования

Для успешного развертывания системы необходимо наличие сервера с операционной системой на базе Debian или Ubuntu. Требуется доступ к серверу с правами суперпользователя (root) или возможность использования команды sudo.

Система требует следующих сетевых портов: - Порт 80 для HTTP-трафика и получения сертификатов. - Порт 443 для защищенного HTTPS-трафика.

Необходимо наличие валидного доменного имени, настроенного на IP-адрес сервера, а также действующего адреса электронной почты для администратора, который будет использован для регистрации сертификатов безопасности.

Структура файлов и каталогов

При развертывании в классическом режиме (без контейнеров) файлы приложения размещаются в следующей структуре: - Каталог с кодом приложения: /var/www/moodle (или путь, указанный в переменной moodle_dir). - Публичный веб-корень: /var/www/moodle/public. - Каталог для хранения данных пользователей и файлов: /var/moodledata (или путь, указанный в переменной moodle_data_dir). - Конфигурация веб-сервера: /etc/apache2/sites-available/moodle.conf. - Настройки PHP: /etc/php/{version}/apache2/conf.d/99-moodle.ini и /etc/php/{version}/cli/conf.d/99-moodle.ini. - Настройки базы данных: /etc/mysql/mariadb.conf.d/99-moodle.cnf.

При развертывании в контейнерах Docker используются следующие пути на хосте: - Конфигурация прокси-сервера: /root/nginx/compose.yml. - Конфигурация доменов для Nginx: /data/nginx/user_conf.d/. - Переменные окружения для Nginx: /data/nginx/nginx-certbot.env.

Процесс установки приложения

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

Классическая установка

Процесс включает установку необходимых пакетов через менеджер пакетов apt: - Веб-сервер apache2. - Интерпретатор php с модулями: common, cli, mysql, xml, curl, zip, gd, intl, mbstring, soap, bcmath, opcache. - База данных mariadb-server и mariadb-client. - Утилита certbot и плагин python3-certbot-apache для получения сертификатов.

Затем скачивается архив с исходным кодом Moodle, распаковывается в директорию /var/www, и выполняется скрипт установки через командную строку PHP:

php /var/www/moodle/admin/cli/install.php --non-interactive --agree-license --lang=en --wwwroot=https://example.com --dataroot=/var/moodledata --dbtype=mariadb --dbhost=localhost --dbname=moodle_db --dbuser=moodle_user --dbpass=moodle_pass --fullname="My Site" --shortname="mysite" --adminuser=admin --adminpass=admin_pass --adminemail=admin@example.com

Установка через Docker

При использовании контейнеров развертывание осуществляется с помощью файла docker-compose.yml. Запускаются два основных сервиса: - Сервис moodle на основе образа moodlehq/moodle-php-apache:8.4-bullseye. - Сервис mariadb на основе образа bitnami/mariadb:latest.

Контейнеры связываются через сеть moodle_net. Данные сохраняются в именованные тома moodle_data, moodledata_data и mariadb_data.

Базы данных

В классической конфигурации используется сервер баз данных MariaDB. - База данных создается с именем, указанным в переменной moodle_db_name. - Кодировка базы данных установлена как utf8mb4 с сортировкой utf8mb4_unicode_ci. - Создается пользователь базы данных с именем moodle_db_user и паролем moodle_db_password, которому предоставляются полные права на созданную базу данных. - Конфигурационный файл базы данных размещается в /etc/mysql/mariadb.conf.d/99-moodle.cnf с параметром max_allowed_packet = 64M.

В конфигурации Docker база данных работает внутри контейнера mariadb. Параметры подключения передаются через переменные окружения: - MARIADB_USER=bn_moodle - MARIADB_DATABASE=bitnami_moodle - MARIADB_CHARACTER_SET=utf8mb4 - MARIADB_COLLATE=utf8mb4_unicode_ci

Прокси серверы

Классическая конфигурация (Apache)

Веб-сервер Apache настроен как прямой обработчик запросов. - Виртуальный хост создан в файле /etc/apache2/sites-available/moodle.conf. - Документальный корень указывает на директорию /var/www/moodle/public. - Включены модули Apache: rewrite, headers, ssl, socache_shmcb. - Для получения и установки SSL-сертификатов используется утилита certbot с плагином для Apache. Сертификаты автоматически обновляются через таймер certbot.timer.

Конфигурация с Docker (Nginx)

При использовании контейнеров перед приложением Moodle ставится прокси-сервер Nginx. - Используется образ jonasal/nginx-certbot:latest. - Контейнер Nginx слушает порты 80 и 443 на хосте. - Трафик перенаправляется на контейнер Moodle по адресу http://moodle:8080. - В конфигурации прокси настроены заголовки Host и X-Forwarded-Proto для корректной работы приложения за прокси. - Сертификаты хранятся в томе nginx_secrets.

Настройки прав

Права на файлы и директории

В классической установке права настроены следующим образом: - Владелец директории с кодом Moodle: root. - Группа владельца: www-data. - Права на директории: 0750. - Права на файлы: 0640. - Директория для данных (moodledata) имеет владельца www-data и группу www-data с правами 0770. - Файл конфигурации config.php имеет права 0640 и доступен для чтения пользователем www-data.

Права в Docker

В контейнерной среде права внутри контейнеров управляются образами. На хосте директории для конфигурации Nginx (/root/nginx) имеют владельца root и права 0755.

Запуск, остановка и обновление

Управление сервисами (Классический режим)

Управление веб-сервером и базой данных осуществляется через systemd: - Перезапуск Apache: systemctl restart apache2. - Перезапуск MariaDB: systemctl restart mariadb. - Включение автозапуска: systemctl enable apache2 и systemctl enable mariadb.

Управление контейнерами (Docker режим)

Управление контейнерами осуществляется через docker-compose в директории /root/nginx (для прокси) или в директории с файлом moodle-compose.yml (для приложения): - Запуск контейнеров в фоновом режиме: docker-compose up -d. - Остановка контейнеров: docker-compose down. - Обновление конфигурации и перезапуск: docker-compose up -d.

Задача планировщика (Cron)

Для выполнения фоновых задач Moodle настроена задача в крон-таблице: - Файл: /etc/cron.d/moodle. - Команда выполняется каждую минуту от имени пользователя www-data:

/usr/bin/php /var/www/moodle/admin/cli/cron.php

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