Полная установка Moodle 5.1.3+ на Ubuntu Server 24.04 LTS

Apache2 + PHP-FPM 8.2 + MariaDB 10.11.x

Исполнительное резюме

В этом подробном руководстве показаны все шаги установки Moodle 5.1.3+ на чистом сервере Ubuntu 24.04 LTS. Описаны команды от обновления системы до настройки рабочего Moodle-сайта.

Предполагается Ubuntu 24.04 LTS, пользователь с sudo, интернет-соединение, и домен moodle.local (можно заменить на реальный). DocumentRoot веб-сервера будет установлен на /var/www/html/moodle/public.

Основные решения

  • ОС: Ubuntu Server 24.04 LTS (актуальный LTS на 2026 год).
  • СУБД: MariaDB 10.11.x (пакет mariadb-server доступен в Ubuntu 24.04).
  • PHP: PHP 8.2, установлен через ppa:ondrej/php (PPA сторонний, см. предупреждения).
  • Веб-стек: Apache2 с PHP-FPM (не mod_php).
  • Moodle: Код в /var/www/html/moodle, каталог данных /var/moodledata (владелец www-data).
  • Cron: запуск каждую минуту от www-data через admin/cli/cron.php.
  • SSL: самоподписанный сертификат (для локальной установки).

Сравнение СУБД

СУБДМин. версия для Moodle 5.1Ubuntu 24.04 LTSКомментарий
MariaDB10.11.0Доступна 10.11.x (ubuntu репо)Выбрана (соответствует треб.)
MySQL8.4В Ubuntu 24.04 по умолчанию 8.0 (8.4 нужен доп. репо)Не используем
PostgreSQL15В Ubuntu может быть доступна нужная версияВозможная альтернатива
MSSQL2017Отдельная установкаНе рассматривается

Требуемые расширения PHP

КатегорияТребование MoodleПакеты Ubuntu для PHP 8.2
Базовыеcurl, gd, intl, mbstring, xml, zip (и встроенные iconv, ctype, json, pcre, spl, dom, simplexml) php8.2-curl, php8.2-gd, php8.2-intl, php8.2-mbstring, php8.2-xml, php8.2-zip
БДmysqli (для MariaDB/MySQL)php8.2-mysql
Дополнительноsodium (обязательно для Moodle 5.1)php8.2-sodium

Сервисная схема

mermaid flowchart LR U[Браузер] -->|HTTP/HTTPS| Apache[Apache2] Apache -->|FastCGI| PHP[PHP-FPM 8.2] PHP -->|SQL (3306)| DB[MariaDB 10.11] PHP -->|FS| Data[(/var/moodledata)] Cron[Cron (каждую мин)] -->|php| PHP

Пошаговая установка

1. Обновление системы и базовые пакеты

Обновляем списки пакетов и систему:

sudo apt update sudo apt -y full-upgrade sudo apt -y autoremove --purge sudo apt -y autoclean

2. Утилиты и репозиторий Universe

sudo apt -y install software-properties-common ca-certificates curl wget unzip nano sudo add-apt-repository -y universe sudo apt update

3. Установка Apache2

sudo apt -y install apache2 sudo systemctl enable --now apache2

4. Настройка UFW (фаервол)

Разрешаем SSH, HTTP/HTTPS и включаем фаервол:

sudo apt -y install ufw sudo ufw allow OpenSSH sudo ufw allow "Apache Full" sudo ufw --force enable sudo ufw status

5. Установка MariaDB 10.11

sudo apt -y install mariadb-server mariadb-client sudo systemctl enable --now mariadb

Проверка версии MariaDB:

mariadb --version sudo mariadb -e "SELECT VERSION();"

Создание БД Moodle

sudo mariadb -e "CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" sudo mariadb -e "CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'CHANGE_ME';" sudo mariadb -e "GRANT ALL PRIVILEGES ON moodle.* TO 'moodleuser'@'localhost';" sudo mariadb -e "FLUSH PRIVILEGES;"

6. Установка PHP 8.2

sudo apt -y install software-properties-common sudo add-apt-repository -y ppa:ondrej/php sudo apt update sudo apt -y install php8.2-fpm php8.2-cli sudo apt -y install php8.2-curl php8.2-gd php8.2-intl php8.2-mbstring php8.2-xml php8.2-zip php8.2-soap php8.2-mysql php8.2-sodium

PPA ondrej/php — сторонний репозиторий (неофициальный). Используйте осознанно.

7. Настройка php.ini

Редактируем PHP настройки для FPM и CLI:

sudo sed -i 's/^\smax_input_vars\s=./max_input_vars = 10000/' /etc/php/8.2/fpm/php.ini sudo sed -i 's/^\smemory_limit\s=./memory_limit = 256M/' /etc/php/8.2/fpm/php.ini sudo sed -i 's/^\supload_max_filesize\s=./upload_max_filesize = 128M/' /etc/php/8.2/fpm/php.ini sudo sed -i 's/^\spost_max_size\s=./post_max_size = 128M/' /etc/php/8.2/fpm/php.ini sudo sed -i 's/^\smax_execution_time\s=.*/max_execution_time = 300/' /etc/php/8.2/fpm/php.ini
sudo sed -i 's/^\smax_input_vars\s=./max_input_vars = 10000/' /etc/php/8.2/cli/php.ini sudo sed -i 's/^\smemory_limit\s=./memory_limit = 256M/' /etc/php/8.2/cli/php.ini sudo sed -i 's/^\supload_max_filesize\s=./upload_max_filesize = 128M/' /etc/php/8.2/cli/php.ini sudo sed -i 's/^\spost_max_size\s=./post_max_size = 128M/' /etc/php/8.2/cli/php.ini sudo sed -i 's/^\smax_execution_time\s=.*/max_execution_time = 300/' /etc/php/8.2/cli/php.ini
sudo systemctl reload php8.2-fpm

8. Скачать и проверить Moodle

cd /tmp wget -O moodle.tgz https://download.moodle.org/download.php/direct/stable501/moodle-latest-501.tgz wget -O moodle.tgz.sha256 https://download.moodle.org/download.php/direct/stable501/moodle-latest-501.tgz.sha256 wget -O moodle.tgz.md5 https://download.moodle.org/download.php/direct/stable501/moodle-latest-501.tgz.md5
Проверка контрольной суммы (пример для sha256)
sed 's/^SHA256(.*)= //' moodle.tgz.sha256 | awk '{print $1" moodle.tgz"}' > check.sha256 sha256sum -c check.sha256

9. Распаковать Moodle и создать moodledata

sudo rm -rf /var/www/html/moodle sudo tar -xzf /tmp/moodle.tgz -C /var/www/html
sudo mkdir -p /var/moodledata sudo chown -R www-data:www-data /var/moodledata sudo chmod -R 2770 /var/moodledata

10. Права на код Moodle

sudo chown -R root:www-data /var/www/html/moodle sudo find /var/www/html/moodle -type d -exec chmod 0750 {} \; sudo find /var/www/html/moodle -type f -exec chmod 0640 {} \;

Moodle рекомендует, чтобы код был записываем только root’ом, а не веб-сервером.

11. Конфигурация Apache (без SSL)

sudo a2enmod rewrite headers sudo systemctl restart apache2
  ServerName moodle.local
DocumentRoot /var/www/html/moodle/public

ErrorLog ${APACHE_LOG_DIR}/moodle_error.log
CustomLog ${APACHE_LOG_DIR}/moodle_access.log combined

<Directory /var/www/html/moodle/public>
    AllowOverride None
    Require all granted
    DirectoryIndex index.php
    FallbackResource /r.php
    AcceptPathInfo On
</Directory>

<FilesMatch \\.php$>
    SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>
 
sudo tee /etc/apache2/sites-available/moodle.conf >/dev/null <

12. Самоподписанный SSL (сертификат)

sudo mkdir -p /etc/ssl/localcerts sudo openssl req -x509 -nodes -newkey rsa:2048 -days 825 \ -keyout /etc/ssl/localcerts/moodle-selfsigned.key \ -out /etc/ssl/localcerts/moodle-selfsigned.crt \ -subj "/C=RU/ST=Local/L=Local/O=MoodleLocal/OU=IT/CN=moodle.local" 
  ServerName moodle.local
DocumentRoot /var/www/html/moodle/public

ErrorLog ${APACHE_LOG_DIR}/moodle_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/moodle_ssl_access.log combined

SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/moodle-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/localcerts/moodle-selfsigned.key

<Directory /var/www/html/moodle/public>
    AllowOverride None
    Require all granted
    DirectoryIndex index.php
    FallbackResource /r.php
    AcceptPathInfo On
</Directory>

<FilesMatch \\.php$>
    SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
</FilesMatch>

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
 
sudo tee /etc/apache2/sites-available/moodle-ssl.conf >/dev/null <

13. Создание config.php

Шаблон config.php (в корне Moodle):

 dbtype = 'mysqli'; $CFG->dbhost = 'localhost'; $CFG->dbname = 'MOODLE_DB_NAME'; $CFG->dbuser = 'MOODLE_DB_USER'; $CFG->dbpass = 'MOODLE_DB_PASS'; $CFG->prefix = 'mdl_'; $CFG->wwwroot = 'MOODLE_WWWROOT'; $CFG->dataroot = 'MOODLE_DATAROOT'; $CFG->admin = 'admin'; $CFG->directorypermissions = 02770; require_once(DIR . '/lib/setup.php'); 
sudo tee /var/www/html/moodle/config.php >/dev/null <<'EOF' ... (как выше, затем заменяем) EOF
sudo sed -i "s/MOODLE_DB_NAME/moodle/g" /var/www/html/moodle/config.php sudo sed -i "s/MOODLE_DB_USER/moodleuser/g" /var/www/html/moodle/config.php sudo sed -i "s/MOODLE_DB_PASS/CHANGE_ME/g" /var/www/html/moodle/config.php sudo sed -i "s|MOODLE_WWWROOT|https://moodle.local|g" /var/www/html/moodle/config.php sudo sed -i "s|MOODLE_DATAROOT|/var/moodledata|g" /var/www/html/moodle/config.php
sudo chown root:www-data /var/www/html/moodle/config.php sudo chmod 0640 /var/www/html/moodle/config.php

14. Установка Moodle через CLI

Запуск установки от имени www-data:

sudo -u www-data php /var/www/html/moodle/admin/cli/install.php --help
sudo -u www-data php /var/www/html/moodle/admin/cli/install.php \ --lang=ru \ --wwwroot=https://moodle.local \ --dataroot=/var/moodledata \ --dbtype=mysqli \ --dbhost=localhost \ --dbname=moodle \ --dbuser=moodleuser \ --dbpass=CHANGE_ME \ --prefix=mdl_ \ --fullname="Moodle (локальный сервер)" \ --shortname="MoodleLocal" \ --adminuser=admin \ --adminpass="CHANGE_ME_ADMIN" \ --adminemail="admin@example.local" \ --non-interactive \ --agree-license 

Или интерактивно:

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

15. Настройка cron

sudo crontab -u www-data -e
* * * * * /usr/bin/php /var/www/html/moodle/admin/cli/cron.php

Cron рекомендуется запускать каждую минуту.

16. Русский языковой пакет

sudo mkdir -p /var/moodledata/lang sudo chown -R www-data:www-data /var/moodledata/lang cd /tmp wget -O ru.zip https://download.moodle.org/download.php/direct/langpack/5.1/ru.zip sudo -u www-data unzip -o ru.zip -d /var/moodledata/lang/ru

Проверка и отладка

Проверка версий

php -v mariadb --version apache2ctl -v

Модули PHP

php -m | grep -E "sodium|mysqli|intl|xml|zip"

Состояние сервисов

sudo systemctl status apache2 sudo systemctl status php8.2-fpm sudo systemctl status mariadb

Виртуальные хосты Apache

sudo apache2ctl -S

Логи для отладки

sudo tail -n 50 /var/log/apache2/moodle_error.log sudo journalctl -u php8.2-fpm -e sudo journalctl -u mariadb -e

Типовые ошибки

  • 404 или белый экран: Проверьте DocumentRoot и FallbackResource.
  • max_input_vars: Нужен ≥5000 (см. php.ini выше).
  • Отсутствие расширений: Убедитесь, что установлены все php8.2-* перечисленные выше.
  • Cron не работает: Проверьте запись в crontab.

AppArmor и Composer

Ubuntu поставляется с AppArmor. Проверить статус:

sudo aa-status

Для установки Moodle из Git (вместо tgz) потребуется Composer:

sudo apt -y install git composer composer --version
Пример: sudo git clone -b MOODLE_501_STABLE https://github.com/moodle/moodle.git /var/www/html/moodle
cd /var/www/html/moodle
sudo -u www-data composer install --no-dev --prefer-dist --no-interaction

Таймлайн установки (Mermaid)

mermaid timeline title Установка Moodle 5.1.3+ на Ubuntu 24.04 LTS section Система Обновление ОС :a1, 1d Утилиты + Universe :a2, 1d section Веб и БД Apache2: a3, 1d MariaDB 10.11: a4, 1d Создать БД: a5, 0.5d section PHP PPA ondrej/php: a6, 1d PHP 8.2 + расширения: a7, 1d Конфиг php.ini: a8, 0.5d section Moodle Скачать Moodle: a9, 1d Проверка чек-сумм: a10, 0.5d Распаковать + права: a11, 0.5d Apache vhost (80): a12, 0.5d SSL vhost (443): a13, 0.5d config.php: a14, 0.5d CLI install: a15, 0.5d Cron: a16, 0.5d ru lang pack: a17, 0.5d section Проверка Команды status: a18, 0.5d Логи и тесты: a19, 0.5d

Источники

Нужна помощь с Moodle?

Обсудим задачу и подберём рабочее решение

Помогу установить Moodle, настроить учебный портал или разобраться с проблемами действующей системы.

Написать в Telegram
← Вернуться в блог