Гид по технологиям

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

• 8 min read • Linux • Обновлено 17 Nov 2025
Установка Moodle на Rocky Linux 8
Установка Moodle на Rocky Linux 8

Логотип Moodle и окружение сервера

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. Инсталлятор проведёт проверку требований и пошагово настроит файловую структуру и базу данных. Заполните данные администратора и настройки сайта при первом запуске.

Экран приветствия установки Moodle

Проверка системных требований Moodle

Процесс установки Moodle

Создание учётной записи администратора Moodle

Обновление профиля администратора Moodle

Настройки главной страницы Moodle

Панель управления Moodle после установки

После успешной установки вы получите доступ к панели администратора и сможете создавать курсы, пользователей и плагины.

Рекомендации по безопасности и настройке производительности

  • Регулярно обновляйте систему и пакеты: 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 и отката:

  1. Сделайте полную резервную копию базы и /var/moodledata.
  2. Остановите cron‑задачи Moodle и выключите сайт в режиме обслуживания.
  3. Обновите исходники из Git: сохраните текущую ветку, создайте тег/снимок.
  4. Запустите обновление через web или CLI (php admin/cli/upgrade.php).
  5. Проверяйте логи и выполняйте тесты ядра.
  6. При ошибке откатите к предыдущему тегу и восстановите резервную копию БД.

Критерии приёмки: сайт успешно загружается без ошибок, пользователи могут зайти, запустить тест и загрузить файл размером до 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)

  1. Перевести сайт в режим обслуживания.
  2. Остановить web‑сервер и php-fpm.
  3. Восстановить файлы из архива (исходники + /var/moodledata).
  4. Восстановить дамп базы данных из bzip2/SQL.
  5. Перезапустить сервисы и проверить работоспособность.

Небольшая методология тестирования после установки

  • Тест 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) — опишите вашу задачу, и мы поможем.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро