Установка 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. Приведённые ниже скриншоты демонстрируют последовательность действий.

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

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

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

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

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

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


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


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

После успешной установки вы попадёте в панель администратора 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) при неудачной настройке
- Отключите перенаправление HTTPS в конфигурации Nginx и перезапустите Nginx.
- Восстановите резервную копию /var/www/html/moodle и moodledata.
- Восстановите дамп базы в MariaDB из резервной копии.
- Проверьте права файлов и владельцев (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 для автоматической установки.
Похожие материалы
Удаление bloatware и ускорение Windows 11
Теги в GIMP: организуйте кисти и ресурсы
Неисправности ЖК‑монитора: диагностика и решения
Как установить защитное стекло на смартфон
Открыть редактор групповой политики в Windows