Полная установка 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.1 | Ubuntu 24.04 LTS | Комментарий |
|---|---|---|---|
| MariaDB | 10.11.0 | Доступна 10.11.x (ubuntu репо) | Выбрана (соответствует треб.) |
| MySQL | 8.4 | В Ubuntu 24.04 по умолчанию 8.0 (8.4 нужен доп. репо) | Не используем |
| PostgreSQL | 15 | В Ubuntu может быть доступна нужная версия | Возможная альтернатива |
| MSSQL | 2017 | Отдельная установка | Не рассматривается |
Требуемые расширения 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