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

Установка Moodle на Ubuntu 16.04 с Nginx, PHP-FPM и MySQL

8 min read Инфраструктура Обновлено 28 Nov 2025
Moodle на Ubuntu 16.04: LEMP (Nginx, PHP-FPM, MySQL)
Moodle на Ubuntu 16.04: LEMP (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

Описание изображения: Стандартная страница приветствия 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

Настройка PHP-FPM 7.0 на Ubuntu 16.04

Описание изображения: Вывод команды, показывающий 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 Server на Ubuntu 16.04

Далее добавим оптимизации в конфигурацию 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

Настройка MySQL Server

Создание базы данных и пользователя для 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;

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

Создание БД и пользователя для Moodle

Описание изображения: Скриншот, показывающий успешное создание базы данных и пользователя в 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

Генерация SSL сертификатов openssl

Описание изображения: Процесс генерации 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 nginx

SSL установлен и виртуальный хост настроен.

Шаг 6 — Веб‑установка Moodle

Откройте браузер и перейдите по адресу вашего сервера, например https://moodle.hakase-labs.com. Пройдите процедуру установки в веб‑интерфейсе:

  1. Выберите язык и нажмите Далее.
  2. Укажите путь веб‑корня (/var/www/moodle) и директорию данных (/var/moodledata).
  3. Выберите драйвер базы данных (MySQL) и введите параметры, созданные ранее.

Параметры БД в примере:

  • host: localhost
  • dbname: moodledb
  • user: moodleuser
  • password: hakaselabs123
  • prefix: moodle_
  • port: 3306
  • unix socket: /var/run/mysql/mysqld.sock

Во время установки проверьте системные проверки — все требуемые расширения PHP должны быть отмечены как OK. Дальше установка автоматически загрузит и настроит модули Moodle.

Выбор языка для установки Moodle

Указание URL, web root и директории данных Moodle

Выбор драйвера БД

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

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

Успешная установка Moodle

Настройка профиля администратора

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

Панель администратора Moodle

Шаг 7 — Тестирование

Проверьте доступность главной страницы, страницы входа и панели администратора:

Страница входа Moodle

Панель администратора Moodle

Параметры пользователя Moodle

Страница администрирования сайта Moodle

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

Краткая методология обновления

  1. Сделать полные бэкапы БД и moodledata.
  2. Тестировать обновление на копии окружения.
  3. Обновить код Moodle (git pull и проверка совместимости плагинов).
  4. Запустить web‑обновление через админку Moodle.
  5. Проверить лог ошибок и работоспособность основных функций.

Маленькая таблица совместимости (ориентир)

  • 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: директория, в которой хранятся загруженные пользователями файлы и временные данные.

Решение распространённых инцидентов

Если сайт недоступен после обновления:

  1. Откатите код до предыдущей версии (git checkout) на тестовой копии.
  2. Проверьте логи Nginx и PHP.
  3. Восстановите БД и moodledata из бэкапа при необходимости.

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

Moodle можно надёжно развернуть на Ubuntu 16.04 с Nginx, PHP‑FPM 7.0 и MySQL 5.7, следуя шагам: установка компонентов, настройка PHP и БД, подготовка файлов Moodle, конфигурация виртуального хоста и SSL, веб‑установка и тестирование. Для продакшена обращайте внимание на безопасность, резервные копии и мониторинг.

Ссылки

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

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

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

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

Как скрыть игры и активность в Steam
Приватность

Как скрыть игры и активность в Steam

Defender блокирует антивирус — как исправить
Безопасность

Defender блокирует антивирус — как исправить

Перезагрузка Chromebook — быстро и просто
Руководство

Перезагрузка Chromebook — быстро и просто

Рассылка LinkedIn: рост бренда шаг за шагом
Маркетинг

Рассылка LinkedIn: рост бренда шаг за шагом

Как настроить Windows Sandbox в Windows 10
Windows

Как настроить Windows Sandbox в Windows 10