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

Установка Moodle на Ubuntu 20.04 с Nginx и Let's Encrypt

6 min read Инфраструктура Обновлено 28 Nov 2025
Moodle на Ubuntu 20.04 с Nginx и Let's Encrypt
Moodle на Ubuntu 20.04 с Nginx и Let's Encrypt

О чём эта статья

В материале описан полный путь установки Moodle — открытой системы управления обучением (LMS) на сервере Ubuntu 20.04. Подход рассчитан на небольшие и средние инсталляции: настраиваем Nginx, MariaDB, PHP‑FPM, директории данных, SSL с Certbot и приводим чек‑листы для оператора и администратора.

Кому подойдёт этот материал

  • Системным администраторам и DevOps-инженерам, разворачивающим LMS.
  • Преподавателям / IT‑координаторам, которые планируют запускать Moodle на собственном сервере.

Что такое Moodle (одной строкой)

Moodle — бесплатная и открытая LMS на PHP, позволяющая создавать курсы, задания, тесты и форумы для учащихся.


Предварительные требования

  • Сервер с Ubuntu 20.04 LTS.
  • Домен, указывающий на IP сервера (A‑запись).
  • Доступ root или пользователь с sudo.
  • Базовое умение работать в терминале.

Важно: замените в примерах moodle.example.com и пароли на ваши реальные значения.

Начало — обновление пакетов

Перед установкой обновите пакеты:

apt-get update -y

После обновления продолжайте к установке стека.

Установка стека LEMP (Nginx + MariaDB + PHP)

Установим Nginx, MariaDB, PHP‑FPM и необходимые расширения PHP:

apt-get install nginx mariadb-server php-fpm php-common php-mysql php-gmp php-curl php-intl php-mbstring php-soap php-xmlrpc php-gd php-xml php-cli php-zip unzip git curl -y

Примечание: в исходном тексте была опечатка про Apache — в этом руководстве используется Nginx.

Изменим настройки PHP‑FPM. Откройте конфигурационный файл:

nano /etc/php/7.4/fpm/php.ini

Найдите и измените (или убедитесь, что значения соответствуют):

memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360
date.timezone = America/Chicago

Совет: замените date.timezone на вашу часовой пояс, например Europe/Moscow.

Перезапустите PHP‑FPM:

systemctl restart php7.4-fpm

Создание базы данных для Moodle

Подключитесь к MariaDB:

mysql

Внутри MySQL создайте базу и пользователя (замените password на надёжный пароль):

CREATE DATABASE moodledb;
CREATE USER 'moodle'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON moodledb.* TO 'moodle'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Далее отредактируйте конфигурацию MariaDB, чтобы включить оптимальные параметры для InnoDB:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Добавьте внутри секции [mysqld]:

[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix = ON

Сохраните и перезапустите MariaDB:

systemctl restart mariadb

Почему это важно: Moodle может создавать большие индексы и длинные поля; параметры InnoDB повышают совместимость с форматом Barracuda.

Скачивание и подготовка Moodle

Перейдите в корень веб‑директории и клонируйте стабильную ветку Moodle (пример — MOODLE_38_STABLE):

cd /var/www/html
git clone -b MOODLE_38_STABLE git://git.moodle.org/moodle.git moodle

После скачивания откройте конфигурационный файл и укажите тип СУБД (если файл создан автоматически, проверьте соответствие):

nano /var/www/html/moodle/config.php

Найдите строку и замените, если требуется:

$CFG->dbtype    = 'mysqli';

Замените на:

$CFG->dbtype    = 'mariadb';

Создайте директорию данных и установите права:

mkdir -p /var/www/html/moodledata
chown -R www-data:www-data /var/www/html/moodle
chmod -R 755 /var/www/html/*
chown www-data:www-data /var/www/html/moodledata

Объяснение: веб‑сервер (www‑data) должен иметь права на чтение/запись в moodledata, но исходный код сайта лучше держать с правами на чтение.

Конфигурация Nginx для Moodle

Создайте файл виртуального хоста:

nano /etc/nginx/conf.d/moodle.conf

Вставьте следующую конфигурацию (замените server_name на ваш домен):

server {
    listen 80;
    root /var/www/html/moodle;
    index  index.php index.html index.htm;
    server_name  moodle.example.com;

    client_max_body_size 100M;
    autoindex off;
    location / {
        try_files $uri $uri/ =404;
    }

    location /dataroot/ {
      internal;
      alias /var/www/html/moodledata/;
    }

    location ~ [^/].php(/|$) {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Проверьте конфигурацию Nginx и перезапустите сервис:

nginx -t
systemctl restart nginx

Если тест nginx -t возвращает OK, переходим к веб‑установке.

Веб‑инсталляция Moodle — шаги в браузере

Откройте браузер и перейдите по адресу http://moodle.example.com. Вы увидите мастера установки Moodle. Приведённые ниже скриншоты демонстрируют последовательность действий.

Логотип Moodle и домашняя страница мастера установки

  1. Выберите язык и нажмите Next.

Выбор языка интерфейса установки Moodle

  1. Укажите веб‑адрес, путь к коду и путь к директории данных (moodledata), затем Next.

Ввод веб‑адреса и путей к директории кода и данных Moodle

  1. Выберите драйвер базы данных (MariaDB/MySQL) и далее.

Выбор драйвера базы данных в мастере Moodle

  1. Введите параметры подключения к БД (host, имя БД, пользователь, пароль).

Ввод параметров для подключения к базе данных MySQL/MariaDB

  1. Подтвердите лицензионные условия и продолжите.

Подтверждение лицензионных условий Moodle перед установкой

  1. Мастер проверит системные требования — убедитесь, что все PHP‑расширения установлены.

Проверка системных требований и установленных PHP-расширений

Список обязательных PHP-расширений для Moodle

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

Создание администратора Moodle: имя пользователя и пароль

Настройка локали и часового пояса на этапе установки Moodle

  1. Настройте параметры главной страницы курса и сохраните изменения.

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

После успешной установки вы попадёте в панель администратора Moodle.

Защищаем сайт через Let’s Encrypt (Certbot)

Установим Certbot и получим бесплатный SSL‑сертификат, а также настроим автоматическое проброс HTTPS в Nginx:

apt-get install python3-certbot-nginx -y
certbot --nginx -d moodle.example.com

Во время получения сертификата введите корректный e‑mail и согласитесь с условиями. Certbot предложит вариант перенаправления трафика HTTP→HTTPS — рекомендуется выбрать Redirect (номер 2).

Пример вывода Certbot указывает, где хранятся файлы сертификата:

/etc/letsencrypt/live/moodle.example.com/fullchain.pem
/etc/letsencrypt/live/moodle.example.com/privkey.pem

Совет: Add автоматическое обновление сертификата в cron / systemd‑timer:

systemctl enable certbot.timer
systemctl start certbot.timer

Или добавить в cron ежемесячную проверку:

0 3 1 * * /usr/bin/certbot renew --quiet

Критерии приёмки

  • Сайт доступен по HTTPS: https://moodle.example.com
  • Установлен и работает PHP 7.4‑FPM, MariaDB и Nginx.
  • Директория moodledata доступна для www-data и недоступна из веба.
  • Настроен автоматический renew для Certbot.

Роли и чек‑листы (кто за что отвечает)

  • DevOps / Сисадмин:
    • Развернуть сервер и настроить Nginx, PHP‑FPM и MariaDB.
    • Создать и настроить директорию moodledata, права.
    • Установить Certbot и настроить автоматическое обновление.
  • Администратор Moodle (LMS‑админ):
    • Завести учётную запись admin, настроить локали, темы и плагины.
    • Создать первые курсы и назначить роли преподавателей.
  • Преподаватель:
    • Загружать материалы, задания и проводить тесты.

Безопасность и рекомендации по жёсткой конфигурации

  • Отключите в Nginx прямой доступ к /var/www/html/moodledata через алиасы; moodledata должен быть вне webroot либо помечен internal.
  • Регулярно обновляйте PHP и Moodle до поддерживаемых версий.
  • Включите автоматическое обновление Certbot (certbot renew).
  • Настройте бэкапы: дамп базы (mysqldump) + резерв копий директории moodledata и /var/www/html/moodle.
  • Ограничьте доступ к панели администратора по IP или через двухфакторную аутентификацию (плагин Moodle).

Тесты и приёмочные сценарии

  • Откройте главную страницу сайта по HTTPS: должна загружаться без ошибок сертификата.
  • Попробуйте зарегистрировать тестового пользователя и пройти простой курс.
  • Загрузите файл объёмом, близким к upload_max_filesize, и проверьте, что загрузка успешна.
  • Проверьте логи Nginx и PHP при ошибках: /var/log/nginx/error.log и /var/log/php7.4-fpm.log.

Быстрый план отката (rollback) при неудачной настройке

  1. Отключите перенаправление HTTPS в конфигурации Nginx и перезапустите Nginx.
  2. Восстановите резервную копию /var/www/html/moodle и moodledata.
  3. Восстановите дамп базы в MariaDB из резервной копии.
  4. Проверьте права файлов и владельцев (www‑data).

Частые ошибки и их решения

  • Ошибка подключения к базе: проверьте имя хоста, логин и пароль, а также привилегии пользователя.
  • Проблемы с правами moodledata: веб‑сервер должен иметь rw‑права; команда chown www-data решает проблему.
  • Отсутствие PHP‑модулей: проверьте требуемые расширения (mbstring, xml, curl, gd и т. п.).

Mini‑чеклист перед запуском в прод

  • SSL валиден и настроен авто‑renew.
  • Настроены регулярные бэкапы (база + moodledata).
  • Права файлов минимально необходимые.
  • Мониторинг диска и нагрузки (использовать Prometheus/Netdata/Cloud‑метрики).

Короткая схема принятия решения (Mermaid)

flowchart TD
  A[Есть сервер Ubuntu?] -->|Да| B{Есть домен?}
  B -->|Да| C[Установить Nginx/MariaDB/PHP]
  B -->|Нет| D[Сделать DNS запись]
  D --> C
  C --> E[Скачать Moodle и настроить moodledata]
  E --> F[Запустить веб‑мастер установки]
  F --> G[Установить Certbot и включить HTTPS]
  G --> H[Готово]

Локальная совместимость и примечания

  • Руководство ориентировано на Ubuntu 20.04 и PHP 7.4. Для более новых версий PHP/Moodle проверьте совместимость плагинов.
  • Если вы используете управляемый хостинг, часть шагов (Nginx/SSL) может быть недоступна.

Краткое резюме

Moodle можно надёжно запустить на Ubuntu 20.04 с Nginx, MariaDB и PHP‑FPM. Важные шаги — корректные права на директории, оптимизация InnoDB для больших индексов, установка необходимых PHP‑расширений и настройка HTTPS через Certbot.


Часто задаваемые вопросы

Нужно ли ставить Moodle вне /var/www/html?

Рекомендуется держать moodledata вне веб‑доступного каталога. Код приложения может располагаться в /var/www/html, но moodledata лучше разместить, например, в /srv/moodledata или /var/moodledata и защитить доступ.

Как часто продлевать сертификат Let’s Encrypt?

Certbot автоматически продлевает сертификаты. По умолчанию сертификат действителен 90 дней; рекомендуется проверять автоматическое продление и бэкап конфигурации /etc/letsencrypt.

Как делать бэкапы Moodle?

Бэкап = дамп базы (mysqldump) + архивы moodledata + архив кода /var/www/html/moodle. Делайте ежедневные бэкапы в зависимости от активности.

Какие расширения PHP обязательны?

Минимально: mbstring, xml, curl, gd, intl, xmlrpc (в зависимости от используемых плагинов) и mysql/mysqli (или mariadb).


Если нужно, могу подготовить шаблон systemd timer для certbot, пример cron для бэкапов или готовый playbook Ansible для автоматической установки.

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

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

Удаление bloatware и ускорение Windows 11
Windows

Удаление bloatware и ускорение Windows 11

Теги в GIMP: организуйте кисти и ресурсы
GIMP

Теги в GIMP: организуйте кисти и ресурсы

Неисправности ЖК‑монитора: диагностика и решения
Аппаратные проблемы

Неисправности ЖК‑монитора: диагностика и решения

Как установить защитное стекло на смартфон
Смартфоны

Как установить защитное стекло на смартфон

Открыть редактор групповой политики в Windows
Windows

Открыть редактор групповой политики в Windows

Открытое ПО для Windows — где искать и зачем
Программное обеспечение

Открытое ПО для Windows — где искать и зачем