Сегодня сложно представить учебный процесс без цифровых технологий. Внедрение сервисов вроде Google Класс стало привычным. Среди популярных платформ для дистанционного обучения выделяется Moodle. В качестве базы данных мы выберем PostgreSQL вместо MySQL. Это обеспечит лучшую масштабируемость и надежность. Наш сервер будет работать за Nginx Proxy Server, поэтому нам нужен самоподписанный SSL-сертификат для защищенного соединения.

Moodle (Modular Object-Oriented Dynamic Learning Environment) — это свободная система управления обучением (LMS - Learning Management System), написанная на PHP и распространяемая под лицензией GPL

Содержание:
  1. Подготовка сервера к установке и настройке Moodle
  2. Установка и настройка Moodle
Предварительные требования:
  1. Сервер с Debian 12 уже подготовлен и настроен.
  2. Установлены и настроены все необходимые компоненты, включая sudo.
 
1. Подготовка сервера к установке и настройке Moodle
 
1.1. Обновление системы

Начнем с обновления пакетного менеджера и установки последних обновлений безопасности:

sudo apt update

sudo apt full-upgrade -y
 
1.2. Установка необходимых пакетов

Установим веб-сервер Apache, PHP с необходимыми расширениями и PostgreSQL:

sudo apt install apache2 php libapache2-mod-php php-pgsql postgresql postgresql-contrib php-curl php-gd php-intl php-mbstring php-xml php-zip php-simplexml php-dom php-json php-soap php-ldap php-exif unzip curl wget git -y
 
1.3. Настройка PostgreSQL

Создадим базу данных и пользователя для Moodle. Выполните следующие команды в интерактивной консоли PostgreSQL:

sudo -u postgres psql
CREATE ROLE moodleuser LOGIN PASSWORD 'secure_password_here' VALID UNTIL 'infinity';
CREATE DATABASE moodledb OWNER moodleuser ENCODING 'UTF8' LC_COLLATE='en_US.utf8' LC_CTYPE='en_US.utf8' TEMPLATE=template0;
\q
Важно: Замените 'secure_password_here' на надежный пароль. Рекомендуется использовать комбинацию букв, цифр и специальных символов.
 
1.4. Создание SSL-сертификата

Для безопасного HTTPS-соединения создадим самоподписанный SSL-сертификат:

sudo mkdir -p /etc/ssl/local_certs sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout /etc/ssl/local_certs/moodle.key -x509 -days 365 -out /etc/ssl/local_certs/moodle.crt
 
1.5. Настройка виртуального хоста Apache

Создадим конфигурационный файл для нашего сайта Moodle:

sudo mcedit /etc/apache2/sites-available/moodle.conf

 

Содержимое файла: /etc/apache2/sites-available/moodle.conf


    ServerName moodle.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/moodle

    # Перенаправление всех HTTP запросов на HTTPS
    Redirect permanent / https://moodle.example.com/

    ServerName moodle.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/moodle

    # SSL настройки
    SSLEngine on
    SSLCertificateFile /etc/ssl/local_certs/moodle.crt
    SSLCertificateKeyFile /etc/ssl/local_certs/moodle.key

    # Настройки PHP

        SetHandler application/x-httpd-php

    # Основная директория Moodle

        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted

        # Безопасность - запрет доступа к критическим файлам
        <Files "config.php">
            Require all denied

        <Files "install.php">
            Require all denied

        # Оптимизация для Moodle

            RewriteEngine on
            RewriteBase /
            # Правила для чистых URL

    # Директория с данными Moodle (moodledata)

        Options -Indexes
        AllowOverride None
        Require all granted
        # Запрет выполнения PHP в директории с данными

            Require all denied

    # Логирование
    ErrorLog ${APACHE_LOG_DIR}/moodle_error.log
    CustomLog ${APACHE_LOG_DIR}/moodle_access.log combined

    # Настройки производительности

        AddOutputFilterByType DEFLATE text/plain
        AddOutputFilterByType DEFLATE text/html
        AddOutputFilterByType DEFLATE text/xml
        AddOutputFilterByType DEFLATE text/css
        AddOutputFilterByType DEFLATE application/xml
        AddOutputFilterByType DEFLATE application/xhtml+xml
        AddOutputFilterByType DEFLATE application/rss+xml
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE application/x-javascript

    # Заголовки безопасности
    Header always set X-Content-Type-Options nosniff
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

    # Настройки PHP через Apache (дополнительно)
    php_value upload_max_filesize 128M
    php_value post_max_size 128M
    php_value max_execution_time 300
    php_value memory_limit 256M

 
1.7. Активируем необходимые модули и наш сайт:

sudo a2enmod ssl rewrite
sudo a2ensite moodle.conf
sudo systemctl restart apache2
 
1.8. Загрузка и настройка Moodle

Скачаем последнюю стабильную версию Moodle и распакуем ее в нужную директорию:

cd /tmp
wget https://download.moodle.org/stable403/moodle-latest-403.tgz (ссылка на дистрибутив moodle)
tar xfz moodle-latest-403.tgz
sudo mv moodle /var/www/html/moodle
sudo mkdir /var/www/moodledata
sudo chown -R www-data:www-data /var/www/html/moodle
sudo chown -R www-data:www-data /var/www/moodledata
sudo chmod -R 755 /var/www/html/moodle
sudo chmod -R 755 /var/www/moodledata
 
1.9. Настраиваем доступ к серверу 

Так как в своей работы мы используем Nginx Proxy Server, то производим необходимую настройку:

 
2. Установка и настройка Moodle

Дальнейшая установка и настройка Moodle производится через веб-интерфейс

2.1. Откройте браузер и перейдите по адресу https://moodle.example.com:

2.2. Указываем и подтверждаем пути для каталогов Moodle:

2.3. В качестве сервера баз данных указываем PostgreSQL:

2.4. Указываем параметры базы данных, созданные на шаге 1.3:

2.5. Соглашаемся с лицензионным соглашением:

2.6. Убеждаемся что система удовлетворяет всем требованиям, необходимым для установки Moodle:

2.7. Следим за ходом установки:

 

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

 

 

2.9. После всех произведенных действий мы получим чистую систему дистанционного обучения на базе Moodle:

2.10. Осталось выбрать тему оформления, зарегистрировать пользователей, создать пользователей и начать использовать в образовательном процессе: