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

The Host Banner

Moodle — открытая LMS (Learning Management System) на PHP, построенная вокруг модульности и гибкой модели прав. Подходит для корпоративного обучения, университетов, школ и коммерческих онлайн-курсов — от небольших установок до кластеров с тысячами одновременных слушателей.

Подготовка сервера

Требования

Переменные

  • SERVER_IP_ADDRESS — IP адрес сервера
  • YOUR_DOMAIN — домен Moodle (например, moodle.example.com)
  • DB_NAME — имя БД Moodle
  • DB_USER — пользователь БД
  • DB_PASSWORD — пароль пользователя БД
  • MOODLE_DIR — путь установки Moodle (например, /var/www/moodle)
  • MOODLEDATA_DIR — каталог данных Moodle (например, /var/moodledata)

Обновляем систему и ставим утилиты

Выполните обновление пакетов и установите базовые инструменты.

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git unzip rsync ufw

Включаем брандмауэр

Разрешите SSH и HTTP/HTTPS

UFW -- разрешаем нужные порты
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw --force enable
sudo ufw status
iptables -- разрешаем нужные порты
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Установка LEMP (Nginx, MariaDB, PHP-FPM 8.3)

Устанавливаем и запускаем Nginx

Поставьте веб-сервер и включите автозапуск.

sudo apt install -y nginx
nginx -v
sudo systemctl enable --now nginx

Устанавливаем MariaDB 10.11

Установите сервер БД и выполните базовую защиту.

sudo apt install -y mariadb-server
mariadb --version
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

Альтернатива: Можно использовать MySQL, но убедитесь, что версия поддерживается текущей документацией Moodle. Для этой статьи используем MariaDB 10.11.

Ставим PHP-FPM 8.3 и нужные расширения

Установите PHP-FPM и модули, требуемые Moodle.

sudo apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml php8.3-zip php8.3-gd php8.3-intl php8.3-curl php8.3-mbstring php8.3-bcmath php8.3-readline php8.3-redis
php -v
php -m | grep -E 'intl|xml|curl|zip|gd|mbstring|bcmath|sodium'

Подготовка базы данных

Создаём БД, пользователя и права

Подключитесь к MariaDB и создайте ресурсы с кодировкой utf8mb4.

sudo mariadb
CREATE DATABASE DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'DB_USER'@'localhost' IDENTIFIED BY 'DB_PASSWORD';
GRANT ALL PRIVILEGES ON DB_NAME.* TO 'DB_USER'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Обратите внимание: вам необходимо заменить указанные переменные – DB_NAME, DB_USER, DB_PASSWORD. В противном случае Вы создадите базу с небезопасными названиями и паролем.

Загрузка и размещение Moodle

Создадим необходимые каталоги и настроим права доступа

sudo mkdir -p /var/www/moodle /var/moodledata
sudo git clone -b MOODLE_500_STABLE https://github.com/moodle/moodle.git  /var/www/moodle
sudo chown -R www-data:www-data  /var/www/moodle /var/moodledata

Важно: не путайте каталоги! /var/www/moodle — код (там лежит index.php), /var/moodledata — данные (там не должно быть публичных PHP-файлов).

Устанавливаем из Git репозитория

Создайте каталоги, клонируйте стабильную ветку и выставьте права.

sudo mkdir -p /var/www/moodle /var/moodledata
sudo chown -R www-data:www-data /var/moodledata
sudo chmod 770 /var/moodledata

sudo git clone -b MOODLE_500_STABLE https://github.com/moodle/moodle.git /var/www/moodle
sudo chown -R www-data:www-data /var/www/moodle

Настройка Nginx

Создаём виртуальный хост для Moodle

Сформируйте конфиг сайта с корректным root, маршрутизацией и PHP-FPM.

/etc/nginx/sites-available/moodle.conf
[line_numbers,nginx]
server {
    listen 80;
    server_name SERVER_IP;   # добавьте IP либо Ваше доменное имя
    root /var/www/moodle;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;

        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 300s;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }

    location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|woff2?)$ {
        try_files $uri =404;
        access_log off;
        expires 7d;
    }

    location ~ /. { deny all; }
}

Включаем сайт и выключаем «дефолт»

Активируйте конфиг и перезагрузите Nginx.

sudo ln -sf /etc/nginx/sites-available/moodle.conf /etc/nginx/sites-enabled/moodle.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx

Настройка PHP

Правим лимиты PHP под Moodle

Откройте php.ini и увеличьте ключевые параметры.

/etc/php/8.3/fpm/php.ini
memory_limit = 512M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
max_input_vars = 5000
cgi.fix_pathinfo = 0

Применяем изменения PHP-FPM

Перезапустите PHP-FPM и проверьте статус.

sudo systemctl restart php8.3-fpm
systemctl status php8.3-fpm --no-pager

Веб-установка Moodle

Запускаем мастер установки

Откройте http://YOUR_DOMAIN/ или http://SERVER_IP/ и пройдите мастер:

  1. Выберите язык, подтвердите пути MOODLE_DIR и MOODLEDATA_DIR.

  1. Выберите драйвер MariaDB (mysqli), укажите DB_NAME, DB_USER, DB_PASSWORD.

  1. Дождитесь проверки окружения и установки таблиц.
  2. Создайте учётную запись администратора.

  1. Заполните последние данные для начала использования:

После выполнения описанных выше шагов Вы попадёте в административную панель:

Дополнительно

Оптимизируем OPcache

Пропишите базовые настройки кэширования опкода.

/etc/php/8.3/fpm/php.ini
opcache.enable=1
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=8000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
sudo systemctl restart php8.3-fpm

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

Сверка версии компонентов

Убедитесь, что версии соответствуют ожиданиям.

php -v && nginx -v && mariadb --version

Тестирование cron

Проверьте, что фоновые задания запускаются.

sudo -u www-data php /var/www/moodle/admin/cli/cron.php

Настройка резервных копий

Запланируйте бэкап БД и moodledata.

sudo mkdir -p /opt/backups
echo '0 3 * * * root mysqldump DB_NAME | gzip > /opt/backups/moodle-$(date +\%F).sql.gz' | sudo tee /etc/cron.d/moodle-db-backup
echo '30 3 * * * root tar -czf /opt/backups/moodledata-$(date +\%F).tgz /var/moodledata' | sudo tee -a /etc/cron.d/moodle-db-backup

Распространённые ошибки

Ошибка / Симптом Причина Решение Диагностика (логи / команды)
Проверка окружения ругается на sodium Расширение не загружено или используется другой PHP Убедитесь, что работает PHP 8.3 из Ubuntu (в нём sodium встроен), перезапустите FPM php -m, php -v, systemctl status php8.3-fpm
«Недостаточно max_input_vars» Значение < 5000 Повысить до ≥ 5000 в php.ini, перезапустить FPM grep max_input_vars /etc/php/8.3/fpm/php.ini
Страница без CSS/битые ссылки Неверная обработка slash arguments в Nginx Использовать рекомендованный FastCGI-блок из MoodleDocs Проверить конфиг сайта и sudo nginx -t
403/404 на загрузке файлов Неверные права MOODLEDATA_DIR Владелец/права для www-data, chmod 770 sudo -u www-data touch MOODLEDATA_DIR/.test
Ошибка соединения с БД Неверные креденшлы/хост Проверить пользователя/пароль и права mysql -u DB_USER -p -h localhost DB_NAME

Полезные ссылки