Установка Moodle на Ubuntu 16.04 с Nginx, PHP-FPM и MySQL
В этой пошаговой инструкции показано, как развернуть Moodle на Ubuntu 16.04 (Xenial) с использованием стека LEMP: Nginx, PHP-FPM 7.0 и MySQL 5.7. Вы научитесь устанавливать пакеты, настраивать PHP, создавать базу данных, настраивать виртуальный хост с SSL, завершать веб‑инсталляцию и проверять работоспособность. В конце — рекомендации по безопасности, отладке и альтернативные подходы.
Важно: эта инструкция рассчитана на сервер с правами root или пользователя с sudo. Если используете другой дистрибутив или версии пакетов, подстройте команды и пути соответственно.
О чём статья
Эта инструкция объясняет, как установить и настроить Moodle — свободную систему управления обучением (LMS), написанную на PHP и распространяемую по лицензии GNU GPL. Moodle позволяет создавать интерактивные онлайн‑курсы и поддерживает совместную работу преподавателей и студентов.
Короткое определение: Moodle — Modular Object Oriented Dynamic Learning Environment — модульная объектно‑ориентированная динамическая среда обучения.
Ключевые шаги статьи
- Установка Nginx.
- Установка и настройка PHP‑FPM 7.0 и необходимых расширений.
- Установка и настройка MySQL 5.7.
- Загрузка и подготовка файлов Moodle.
- Настройка виртуального хоста Nginx и SSL.
- Веб‑установка Moodle и тестирование.
Основные требования
- Сервер Ubuntu 16.04 (Xenial).
- Доступ root или sudo.
- Доступ в интернет для загрузки пакетов и репозитория Moodle.
Важно: версии ПО (PHP‑FPM 7.0 и Moodle 3.2 в оригинальной инструкции) совместимы между собой, но для новых развертываний рассмотрите актуальные версии Moodle и PHP. Инструкции по миграции приведены в разделе «Совместимость и миграция».
Шаг 1 — Установка Nginx
Nginx будет использоваться как фронтенд‑веб‑сервер. На Ubuntu Nginx доступен в официальном репозитории.
apt-get install -y nginxПосле установки запустите сервис и включите автозапуск при загрузке:
systemctl start nginx
systemctl enable nginxПроверьте, что Nginx слушает порт 80:
netstat -plntu
Описание изображения: Стандартная страница приветствия Nginx, показывающая успешную установку на Ubuntu 16.04.
Шаг 2 — Установка и настройка PHP-FPM 7.0
Moodle написан на PHP; при использовании Nginx рекомендуем PHP‑FPM. В оригинале используется PHP‑FPM 7.0, совместимый с Moodle 3.2.
Установите PHP‑FPM и необходимые расширения:
sudo apt-get install -y graphviz aspell php7.0-fpm php7.0-cli php7.0-pspell php7.0-curl php7.0-gd php7.0-intl php7.0-mysql php7.0-xml php7.0-xmlrpc php7.0-ldap php7.0-zip php7.0-json php7.0-opcache php7.0-readline php7.0-mbstring php7.0-soapНастройка PHP:
cd /etc/php/7.0/Отредактируйте фаил fpm/php.ini (например, через vim) и установите:
cgi.fix_pathinfo=0То же значение установите в cli/php.ini.
Отредактируйте конфигурацию пула PHP‑FPM:
vim fpm/pool.d/www.confУбедитесь, что есть безопасное ограничение расширений:
security.limit_extensions = .phpЗапустите и включите автозапуск PHP‑FPM:
systemctl enable php7.0-fpm
systemctl start php7.0-fpmПроверьте наличие сокета PHP‑FPM:
netstat -lx
Описание изображения: Вывод команды, показывающий Unix‑сокет, по которому PHP‑FPM принимает соединения от Nginx.
Советы по производительности
- В production‑среде настройте параметры pm.max_children, pm.start_servers и pm.max_spare_servers под доступную память.
- Включите opcache и настройте opcache.memory_consumption.
Шаг 3 — Установка и настройка MySQL 5.7
Moodle поддерживает MySQL и PostgreSQL. В этой инструкции используется MySQL 5.7.
Установите сервер и клиент MySQL:
apt-get install -y mysql-server mysql-clientВо время установки вас попросят задать пароль root для MySQL — используйте сложный пароль.

Далее добавим оптимизации в конфигурацию MySQL. Откройте файл конфигурации:
cd /etc/mysql/mysql.conf.d/
vim mysqld.confПод секцией [mysqld] добавьте:
default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = BarracudaПерезапустите MySQL и включите автозапуск:
systemctl restart mysql
systemctl enable mysqlПроверьте, что MySQL слушает порт 3306:
netstat -plntu
Создание базы данных и пользователя для Moodle
Войдите в MySQL как root:
mysql -u root -pВыполните SQL‑запросы (замените пароль на свой безопасный):
CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
FLUSH PRIVILEGES;Примечание: в продакшене используйте более сложный пароль и ограничивайте доступ по хостам, если нужно.

Описание изображения: Скриншот, показывающий успешное создание базы данных и пользователя в MySQL.
Шаг 4 — Загрузка и подготовка файлов Moodle
Установим git и клонируем репозиторий Moodle в /var/www:
apt-get install -y git
cd /var/www/
git clone https://github.com/moodle/moodle.gitПереключимся на стабильную ветку (в оригинале — MOODLE_32_STABLE):
cd moodle/
git branch -a
git branch --track MOODLE_32_STABLE origin/MOODLE_32_STABLE
git checkout MOODLE_32_STABLEПроверьте статус:
git status
Описание изображения: Дерево веток git и подтверждение, что вы на ветке MOODLE_32_STABLE.
Создайте директорию для данных Moodle и установите права:
mkdir /var/moodledata
chown -R www-data:www-data /var/moodledata
chmod 777 /var/moodledata
chown -R www-data:www-data /var/www/moodle
chmod 755 /var/www/moodleПримечание по безопасности: chmod 777 на /var/moodledata прост для тестовой среды; в продакшене установите более строгие права (например, 770) и убедитесь, что владелец — процесс веб‑сервера.
Шаг 5 — Настройка SSL и виртуального хоста Nginx
Запустим Moodle по HTTPS. Для тестовой среды сгенерируем самоподписанный сертификат. На боевом сервере используйте сертификат от Let’s Encrypt или коммерческий CA.
mkdir -p /etc/nginx/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key
chmod 600 /etc/nginx/ssl/moodle.key
Описание изображения: Процесс генерации self-signed SSL сертификата с помощью openssl.
Создайте файл виртуального хоста в /etc/nginx/sites-available:
cd /etc/nginx/
vim sites-available/moodle-hakaselabsВставьте конфигурацию (ориентирована на unix-сокет PHP‑FPM):
# PHP Upstream Handler
upstream php-handler {
server unix:/run/php/php7.0-fpm.sock;
}
# Nginx redirect HTTP to HTTPS - moodle.hakase-labs.com
server {
listen 80;
server_name moodle.hakase-labs.com;
# enforce https
return 301 https://$server_name$request_uri;
}
# HTTPS Configuration
server {
server_name moodle.hakase-labs.com;
listen *:443 ssl http2;
listen [::]:443 ssl http2;
# SSL Configuration
ssl on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_session_tickets off;
#ssl_stapling on;
#ssl_stapling_verify on;
resolver_timeout 5s;
ssl_certificate /etc/nginx/ssl/moodle.crt;
ssl_certificate_key /etc/nginx/ssl/moodle.key;
# Root Moodle Data Directory
root /var/www/moodle;
rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;
location ^~ / {
try_files $uri $uri/ /index.php?q=$request_uri;
index index.php index.html index.htm;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php-handler;
}
}
}Активируйте сайт и проверьте конфигурацию Nginx:
ln -s /etc/nginx/sites-available/moodle-hakaselabs /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginxSSL установлен и виртуальный хост настроен.
Шаг 6 — Веб‑установка Moodle
Откройте браузер и перейдите по адресу вашего сервера, например https://moodle.hakase-labs.com. Пройдите процедуру установки в веб‑интерфейсе:
- Выберите язык и нажмите Далее.
- Укажите путь веб‑корня (/var/www/moodle) и директорию данных (/var/moodledata).
- Выберите драйвер базы данных (MySQL) и введите параметры, созданные ранее.
Параметры БД в примере:
- host: localhost
- dbname: moodledb
- user: moodleuser
- password: hakaselabs123
- prefix: moodle_
- port: 3306
- unix socket: /var/run/mysql/mysqld.sock
Во время установки проверьте системные проверки — все требуемые расширения PHP должны быть отмечены как OK. Дальше установка автоматически загрузит и настроит модули Moodle.




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


После завершения вы попадёте на административную панель.

Шаг 7 — Тестирование
Проверьте доступность главной страницы, страницы входа и панели администратора:
- https://moodle.hakase-labs.com — главная
- https://moodle.hakase-labs.com/login — страница входа




Moodle успешно развернут на Ubuntu 16.04 с Nginx, PHP‑FPM 7 и MySQL 5.7 — классический LEMP‑стек.
Рекомендации по безопасности
- Используйте сертификаты от доверенных центров (Let’s Encrypt) в продакшене.
- Ограничьте права на /var/moodledata: вместо 777 используйте 770/750 и проверьте владельца (www-data).
- Регулярно применяйте обновления системы и безопасности для Ubuntu, PHP, MySQL и Moodle.
- Настройте бэкапы базы данных и директории moodledata (включая регулярную проверку восстановления).
- Включите HSTS и заголовки безопасности (X-Frame-Options, X-Content-Type-Options) — в примере конфигурации Nginx уже есть базовые заголовки.
- Отключите отображение ошибок PHP в браузере в production (display_errors = Off).
Отладка и типичные ошибки
- 502 Bad Gateway: убедитесь, что php7.0-fpm запущен и сокет /run/php/php7.0-fpm.sock доступен.
- Ошибки прав доступа к moodledata: проверьте владельца и права (chown/chmod).
- Отсутствующие расширения PHP: проверьте вывод системной проверки в веб‑установщике и установите недостающие пакеты.
- Проблемы с SSL: для тестовых самоподписанных сертификатов браузеры будут показывать предупреждение. Для публичного сервера используйте Let’s Encrypt.
Короткий чеклист отладки
- Проверить логи Nginx: /var/log/nginx/error.log
- Проверить логи PHP‑FPM: /var/log/php7.0-fpm.log или systemd journal
- Проверить логи MySQL: /var/log/mysql/error.log
- Проверить права на /var/moodledata и /var/www/moodle
Альтернативные подходы и когда их выбирать
- Apache вместо Nginx: используйте, если вам нужны модули Apache (mod_rewrite, .htaccess) или вы уже знакомы с Apache. Для Apache используйте mod_php или PHP‑FPM подключение.
- PostgreSQL вместо MySQL: рекомендуется для крупных проектов; PostgreSQL часто лучше масштабируется и имеет гибкие возможности по резервированию и репликации.
- Docker/Kubernetes: контейнеризация упрощает переносимость и управление зависимостями; используйте официальные образы Moodle и готовые compose/Helm‑шаблоны.
- Managed LMS: если хотите снизить операционную нагрузку, рассмотрите облачные хостинги Moodle или SaaS‑решения.
Модель принятия решения (кратко)
- Нужна простая установка и небольшой трафик → LEMP на одном сервере.
- Ожидается рост и нагрузка → разделение компонентов (DB на отдельном сервере), настройка репликации и кешей.
- Требуется простота управления → Docker/Kubernetes или управляемый хостинг.
Совместимость и миграция
- Оригинальная инструкция ориентирована на Moodle 3.2 и PHP 7.0. Если вы планируете использовать более новые версии Moodle, проверьте системные требования: современные версии требуют более свежие версии PHP (7.2+ или 7.4+ в зависимости от релиза).
- При миграции с более старой версии: выполните тестовую миграцию на копии БД и данных, проверьте совместимость плагинов.
Роль‑ориентированные чеклисты
Администратор сервера:
- Установить Nginx, PHP‑FPM, MySQL.
- Настроить виртуальный хост и SSL.
- Настроить бэкапы (DB и moodledata).
- Контролировать права доступа и обновления.
Системный администратор Moodle:
- Проверить системные требования Moodle.
- Установить плагины и темы.
- Создать роли, курсы и политики безопасности.
Преподаватель:
- Создать курс и настраивать формат курса.
- Добавлять материалы и задания.
- Управлять пользователями и ролями в рамках курса.
Тесты приёмки (Acceptance criteria)
- Сайт доступен по HTTPS без критических ошибок.
- Пользователь‑администратор может войти и попасть в Dashboard.
- Можно создать курс, добавить ресурс и отправить тестовое задание.
- Резервное копирование данных проходит успешно и данные восстанавливаются.
Шаблоны и команды для повседневных задач
Резервное копирование MySQL:
mysqldump -u root -p --single-transaction --quick --lock-tables=false moodledb > /backups/moodledb-$(date +%F).sqlРезервное копирование moodledata:
tar -czf /backups/moodledata-$(date +%F).tar.gz /var/moodledataПроверка статуса сервисов:
systemctl status nginx
systemctl status php7.0-fpm
systemctl status mysqlКраткая методология обновления
- Сделать полные бэкапы БД и moodledata.
- Тестировать обновление на копии окружения.
- Обновить код Moodle (git pull и проверка совместимости плагинов).
- Запустить web‑обновление через админку Moodle.
- Проверить лог ошибок и работоспособность основных функций.
Маленькая таблица совместимости (ориентир)
- Moodle 3.2 — PHP 7.0
- Moodle 3.5+ — PHP 7.1–7.2 (проверьте документацию)
- Современные версии Moodle — PHP 7.2 и выше (точные требования зависят от релиза)
(Для точных данных всегда смотрите официальную документацию Moodle для конкретной версии.)
Короткий глоссарий
- LEMP: Linux + Nginx (Engine‑X) + MySQL/MariaDB + PHP‑FPM.
- PHP‑FPM: FastCGI Process Manager для PHP.
- moodledata: директория, в которой хранятся загруженные пользователями файлы и временные данные.
Решение распространённых инцидентов
Если сайт недоступен после обновления:
- Откатите код до предыдущей версии (git checkout) на тестовой копии.
- Проверьте логи Nginx и PHP.
- Восстановите БД и moodledata из бэкапа при необходимости.
Краткое резюме
Moodle можно надёжно развернуть на Ubuntu 16.04 с Nginx, PHP‑FPM 7.0 и MySQL 5.7, следуя шагам: установка компонентов, настройка PHP и БД, подготовка файлов Moodle, конфигурация виртуального хоста и SSL, веб‑установка и тестирование. Для продакшена обращайте внимание на безопасность, резервные копии и мониторинг.
Ссылки
Похожие материалы
Как совмещать фриланс и полную занятость
Как скрыть игры и активность в Steam
Defender блокирует антивирус — как исправить
Перезагрузка Chromebook — быстро и просто
Рассылка LinkedIn: рост бренда шаг за шагом