Установка Moodle на Rocky Linux 8

Moodle — бесплатная и открытая система управления обучением (LMS) для создания образовательных сайтов и онлайн‑курсов. Приложение написано на PHP и поддерживает функции: вики, выставление оценок, отправку заданий, онлайн‑тесты, форумы и многое другое.
Это руководство объясняет, как установить Moodle на сервер Rocky Linux 8, настроив PHP 8.0, Nginx, MySQL, SSL и SELinux.
Кому это руководство полезно
- Системным администраторам, которые разворачивают Moodle для учебного заведения или компании.
- DevOps‑инженерам, отвечающим за поддержание LAMP/LEMP‑стека.
- Техническим педагогам, желающим понимать инфраструктуру платформы.
Что вы получите после выполнения шагов
- Рабочий сайт Moodle по HTTPS на домене moodle.example.com.
- Автоматическое обновление сертификатов Let’s Encrypt.
- Безопасные права доступа и базовая настройка SELinux.
- Чек‑листы для повседневного обслуживания и отката.
Предварительные требования
- Сервер с Rocky Linux 8 и доступом по SSH.
- Домен, указывающий на сервер (в примерах — moodle.example.com).
- Нерoot‑пользователь с sudo‑привилегиями.
- Базовое знакомство с системным администрированием Linux.
Важно: перед началом убедитесь, что у вас есть резервные копии важных данных и доступ к консоли сервера (локальный или через панель хостинга) на случай проблем с сетью/SELinux/пакетами.
Быстрая проверка окружения
Выполните эти команды, чтобы убедиться, что система готова:
$ sudo dnf update$ sudo dnf install wget curl nano unzip yum-utils -yЕсли команды прошли без ошибок — можно продолжать.
Шаг 1 — Настройка брандмауэра
Rocky Linux использует firewalld. Проверьте статус:
$ sudo firewall-cmd --state
runningПроверьте активные сервисы в зоне public:
$ sudo firewall-cmd --permanent --list-servicesОткройте HTTP и HTTPS:
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent
$ sudo firewall-cmd --reloadВажно: если у вас используется нестандартная зона или провайдер блокирует порты, скорректируйте правила для соответствующей зоны.
Шаг 2 — Установка Git
Git нужен для клонирования исходников Moodle:
$ sudo dnf install gitШаг 3 — Установка и настройка PHP
Для Moodle в этом руководстве используется PHP 8.0. Сначала подключим EPEL и репозиторий Remi:
$ sudo dnf install epel-release$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpmПроверьте доступные потоки PHP:
$ dnf module list php -yСбросьте текущий модуль и включите поток remi‑8.0:
$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0Установите PHP и необходимые расширения для Moodle (включая инструменты для генерации PDF/печати и проверки орфографии):
$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcacheПроверьте версию PHP:
$ php --version
PHP 8.0.21 (cli) (built: Jul 6 2022 10:13:53) ( NTS gcc x86_64 )Откройте конфигурационный файл php.ini:
$ sudo nano /etc/php.iniИзмените параметры для обеспечения возможности загрузки вложений размером до 25 МБ:
upload_max_filesize = 25M
post_max_size = 25MУвеличьте max_input_vars до 5000 (уберите ведущую точку с запятой, если она есть):
max_input_vars = 5000Сохраните файл.
Откройте конфиг php-fpm для пула www:
$ sudo nano /etc/php-fpm.d/www.confИзмените пользователя и группу на nginx (если выбрали Nginx):
user = nginx
group = nginxНастройте владельца сокета и права:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660Закомментируйте listen.acl_users, если необходимо:
;listen.acl_users = apache,nginxДайте права на директорию с сессиями PHP:
$ chown -R nginx:nginx /var/lib/php/session/Включите и запустите php-fpm:
$ sudo systemctl enable php-fpm --nowСоветы по отладки PHP:
- Используйте journalctl -u php-fpm для просмотра логов.
- Если PHP‑FPM не стартует — проверьте синтаксис www.conf и владельца сокета.
Шаг 4 — Установка и настройка MySQL
Установим сервер MySQL (или MariaDB, если предпочитаете):
$ sudo dnf install mysql-serverПроверьте версию:
$ mysql --version
mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)Запустите и включите службу:
$ sudo systemctl enable mysqld --nowЗапустите скрипт безопасной установки:
$ sudo mysql_secure_installationПри запросе установки Validate Password Plugin нажмите Y и выберите уровень 2 (STRONG), затем задайте надежный пароль для root. Ответьте утвердительно на остальные вопросы для повышения безопасности (удаление анонимных пользователей, запрет удаленного входа root, удаление тестовой БД и перезагрузка привилегий).
Создайте базу данных и пользователя для Moodle:
$ sudo mysql
mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';
mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';
mysql > FLUSH PRIVILEGES;
mysql > exitВажно: замените ‘YourPassword23!’ на сложный пароль и храните его в надёжном хранилище паролей.
Шаг 5 — Установка Nginx
По умолчанию Rocky Linux может поставляться со старой версией Nginx. Подключим официальный репозиторий Nginx и установим сервер:
$ sudo nano /etc/yum.repos.d/nginx.repoВставьте содержимое репозитория, сохраните и установите Nginx:
$ sudo dnf install nginx
$ nginx -v
nginx version: nginx/1.22.0Шаг 6 — Установка Moodle
Создайте публичную директорию и установите права:
$ sudo mkdir /var/www/html/moodle
$ sudo chown -R $USER:$USER /var/www/html/moodle
$ cd /var/www/html/moodle
$ git clone https://github.com/moodle/moodle.git .Проверьте доступные ветки и переключитесь на стабильную версию (пример MOODLE_400_STABLE):
$ git branch -a
$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE
$ git checkout MOODLE_400_STABLEСоздайте директорию данных Moodle и настройте права:
$ sudo mkdir /var/moodledata
$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata
$ sudo chmod -R 755 /var/www/html/moodleВажно: moodledata не должен быть доступен через веб (оно должно лежать вне документрут).
Шаг 7 — Конфигурация Moodle
Скопируйте пример конфига и отредактируйте:
$ cd /var/www/html/moodle
$ cp config-dist.php config.php
$ nano config.phpНайдите секцию конфигурации базы данных и укажите параметры вашей БД:
$CFG->dbtype = 'mysqli';
$CFG->dblibrary = 'native';
$CFG->dbhost = 'localhost';
$CFG->dbname = 'moodledb';
$CFG->dbuser = 'moodleuser';
$CFG->dbpass = 'YourPassword23!';
$CFG->prefix = 'mdl_';Укажите URL и путь к данным:
$CFG->wwwroot = 'https://moodle.example.com';
$CFG->dataroot = '/var/moodledata';Сохраните файл.
Шаг 8 — Установка SSL с Certbot
Установите Certbot:
$ sudo dnf install certbotПолучите сертификат (пример):
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m admin@example.com -d moodle.example.comСертификаты будут в /etc/letsencrypt/live/moodle.example.com.
Сгенерируйте Diffie‑Hellman параметры:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096Создайте веб‑корень для challenge и задачу cron для автоматического обновления:
$ sudo mkdir -p /var/lib/letsencrypt
$ sudo nano /etc/cron.daily/certbot-renewВставьте:
#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"$ sudo chmod +x /etc/cron.daily/certbot-renewПримечание: cron.daily запускается ежедневно; certbot renew сам проверяет необходимость обновления и обновляет только при необходимости.
Шаг 9 — Конфигурация Nginx для Moodle
Создайте конфигурацию сайта:
$ sudo nano /etc/nginx/conf.d/moodle.confВставьте следующий блок (сохраняем как есть):
# Redirect all non-encrypted to encrypted
server {
listen 80;
listen [::]:80;
server_name moodle.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name moodle.example.com;
root /var/www/html/moodle;
index index.php;
ssl_certificate /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
access_log /var/log/nginx/moodle.access.log main;
error_log /var/log/nginx/moodle.error.log;
client_max_body_size 25M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^(.+\.php)(.*)$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/www.sock;
include /etc/nginx/mime.types;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# Hide all dot files but allow "Well-Known URIs" as per RFC 5785
location ~ /\.(?!well-known).* {
return 404;
}
# This should be after the php fpm rule and very close to the last nginx ruleset.
# Don't allow direct access to various internal files. See MDL-69333
location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
deny all;
return 404;
}
}Добавьте в /etc/nginx/nginx.conf следующую строку перед include /etc/nginx/conf.d/*.conf;:
server_names_hash_bucket_size 64;Проверьте конфигурацию и перезапустите Nginx:
$ sudo nginx -t
$ sudo systemctl enable nginx --nowЕсли возникает ошибка доступа из‑за SELinux, примените временное решение с audit2allow (см. раздел по SELinux ниже).
Шаг 10 — Настройка SELinux
Установите контексты безопасности для веб‑файлов и каталога данных Moodle:
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'Разрешите Moodle устанавливать исходящие сетевые соединения (для веб‑сервисов и плагинов):
$ sudo setsebool -P httpd_can_network_connect onЕсли при старте Nginx вы видите ошибок типа Permission denied, соберите запись аудита и создайте модуль SELinux:
$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.ppВажно: audit2allow генерирует разрешения на основе текущих сообщений аудита. Всегда проверяйте сгенерированный модуль перед применением.
Шаг 11 — Окончательная установка через веб‑мастер
Откройте в браузере https://moodle.example.com. Инсталлятор проведёт проверку требований и пошагово настроит файловую структуру и базу данных. Заполните данные администратора и настройки сайта при первом запуске.







После успешной установки вы получите доступ к панели администратора и сможете создавать курсы, пользователей и плагины.
Рекомендации по безопасности и настройке производительности
- Регулярно обновляйте систему и пакеты: sudo dnf update.
- Ограничьте доступ по SSH (используйте ключи, не открывайте root‑вход).
- Настройте резервное копирование базы данных и каталога /var/moodledata.
- Включите HTTPS‑перенаправление и жесткие заголовки безопасности (HSTS, X-Frame-Options).
- Рассмотрите использование Redis/Memcached для кеширования сессий и Moodle‑кеша.
- Мониторьте логи: /var/log/nginx/.log и /var/log/php-fpm/.
Чек‑лист перед запуском в продакшен
- Сертификаты SSL корректны и обновляются автоматически.
- Разрешения на каталог /var/moodledata установлены правильно и недоступны через веб.
- SELinux контексты настроены.
- Резервные копии базы и данных настроены и протестированы.
- Параметры PHP (upload_max_filesize, post_max_size, memory_limit) соответствуют требованиям курса.
- Настроены логирование и мониторинг.
Планы обслуживания, откат и обновление
Мини‑план обновления Moodle и отката:
- Сделайте полную резервную копию базы и /var/moodledata.
- Остановите cron‑задачи Moodle и выключите сайт в режиме обслуживания.
- Обновите исходники из Git: сохраните текущую ветку, создайте тег/снимок.
- Запустите обновление через web или CLI (php admin/cli/upgrade.php).
- Проверяйте логи и выполняйте тесты ядра.
- При ошибке откатите к предыдущему тегу и восстановите резервную копию БД.
Критерии приёмки: сайт успешно загружается без ошибок, пользователи могут зайти, запустить тест и загрузить файл размером до 25 МБ.
Частые ошибки и как их решать
- Ошибка 500 при доступе к PHP: проверьте права на сокет php-fpm и логи systemd.
- Nginx не стартует: проверьте синтаксис конфигурации nginx -t и SELinux (ausearch + audit2allow).
- Ошибки подключения к БД: убедитесь, что credentials в config.php совпадают с mysql create user.
- Проблемы с SSL: проверьте пути /etc/letsencrypt/live/… и права доступа к файлам.
Альтернативные подходы
- Использовать Apache вместо Nginx (стандартная связка LAMP). В этом случае оставьте владельца apache и настройте php-fpm/Apache accordingly.
- Использовать MariaDB вместо MySQL — совместимость высокая, команды схожи.
- Разворачивать Moodle в Docker-контейнерах (упрощает изоляцию и миграцию).
Роли и задачи: кто за что отвечает
- Системный администратор:
- Установка ОС, настройка сети, брандмауэра, SSL, резервное копирование.
- DevOps/Инфраструктура:
- CI/CD обновлений, мониторинг, масштабирование, настройка кешей (Redis).
- Администратор Moodle:
- Управление пользователями, курсами, плагинами, резервное восстановление данных.
- Преподаватель:
- Создание и поддержка учебных материалов.
Шаблон быстрого плана отката (rollback)
- Перевести сайт в режим обслуживания.
- Остановить web‑сервер и php-fpm.
- Восстановить файлы из архива (исходники + /var/moodledata).
- Восстановить дамп базы данных из bzip2/SQL.
- Перезапустить сервисы и проверить работоспособность.
Небольшая методология тестирования после установки
- Тест 1: загрузка главной страницы и вход администратора.
- Тест 2: создание тестового курса и приглашение студента.
- Тест 3: прохождение теста и проверка журналов записей.
- Тест 4: загрузка файла объемом 20–25 МБ.
Краткая галерея крайних случаев
- Если провайдер блокирует порты 80/443 — используйте DNS challenge для Certbot.
- При ограниченных ресурсах сервера — уменьшите PHP‑workers и включите swap, но лучше масштабировать вертикально.
- Если нужно масштабировать — вынесите базу на отдельный сервер и используйте NFS/S3 для moodledata.
1‑строчный глоссарий
- Moodle: система управления обучением; PHP‑FPM: обработчик PHP; Nginx: веб‑сервер; SELinux: механизм контроля доступа на уровне ОС.
Финальная проверка и запуск
После завершения всех шагов убедитесь, что сайт доступен по HTTPS, сертификат корректен, cron Moodle работает (php admin/cli/cron.php) и выполните тестировку функционала курсов.
Заключение
Это подробное руководство поможет развернуть Moodle на Rocky Linux 8 с современной связкой PHP 8.0 + Nginx + MySQL и защитой через SELinux и HTTPS. Включён набор практических чек‑листов, план отката и рекомендации по безопасности — используйте их для стабильной эксплуатации платформы.
Если у вас остались вопросы или требуются дополнительные инструкции (Docker‑вариант, распределённая архитектура, интеграция с LDAP/SSO) — опишите вашу задачу, и мы поможем.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента