Короткий ответ: что поставить и сколько это стоит
Moodle 5.3 ставится на VPS с Ubuntu 24.04, но не обычным порядком: версия требует PostgreSQL 17, а система предлагает 16, и установщик останавливается. Берите PostgreSQL 17 из репозитория самого проекта PostgreSQL, а корень сайта в Nginx указывайте на папку public.
Для начала хватит сервера с 2 ядрами и 4 ГБ памяти: AdminVPS Micro стоит 899 ₽/мес, Timeweb Cloud MSK 50 с той же памятью — 3 840 ₽/мес, обе цены при оплате за месяц. В нашей проверке Moodle упёрся в процессор, а не в память. Все команды ниже мы выполнили на чистом сервере, а ошибки, на которые наткнулись, описаны там, где они случаются.
Как мы проверяли
Наш замер 03.11.2026: мы арендовали чистый сервер Timeweb Cloud MSK Ultra 40 (2 ядра 3,3 ГГц, 2 ГБ памяти, 40 ГБ NVMe, Ubuntu 24.04.5) и выполнили на нём все команды из этой статьи слово в слово. Потом создали генератором Moodle маленький пробный курс, записали на него 20 учеников и посмотрели, как сервер отвечает, когда они открывают курс одновременно. Запросы шли с самого сервера, поэтому скорость сети в числа не входит. Установку библиотек через Composer (шаг 6) мы проверяли отдельно, на чистой Ubuntu 24.04 на своём компьютере. После проверки сервер мы удалили.
Чего такая проверка не показывает: как сервер выдержит живых учеников, тесты с большим числом участников, видео и загрузку больших файлов, работу через HTTPS на настоящем домене — домена у нас не было. Команды ниже — ровно те, что мы выполняли; адрес сервера и пароли подставьте свои.
Что требует Moodle 5.3 и почему система не подходит
Минимальные версии названы в примечаниях к выпуску Moodle 5.3. Рядом — что предлагает Ubuntu 24.04 из своего репозитория на 3 ноября 2026 года:
| Компонент | Нужно Moodle 5.3 | Есть в Ubuntu 24.04 | Подходит |
|---|---|---|---|
| PHP | 8.3 или 8.4, 64 бита | 8.3.6 | да |
| PostgreSQL | 17 | 16 | нет |
| MariaDB | 11.4 | 10.11 | нет |
| MySQL | 8.4 | 8.0 | нет |
Ни одна база из репозитория системы не подходит. Вот что напечатал установщик с PostgreSQL 16:
!! database postgres (16.15 (Ubuntu 16.15-0ubuntu0.24.04.1)) !!
[Система] требуется версия 17, у Вас используется версия 16.15Переход на новую систему не поможет: инструкция Moodle для Ubuntu предупреждает, что в Ubuntu 26.04 стоит PHP 8.5, а Moodle 5.3 поддерживает только 8.3 и 8.4. Поэтому оставляем 24.04 и ставим PostgreSQL 17 из репозитория самого проекта.
Какой сервер взять
Документация Moodle называет минимум 512 МБ памяти и 1 ГГц, рекомендует от 1 ГБ и двух ядер по 2 ГГц. Диска под программу нужно 200 МБ, но распакованный архив у нас занял 630 МБ, а реалистичным минимумом с материалами там названо 5 ГБ.
Вот что показал наш сервер с 2 ядрами и 2 ГБ. Каждый ученик со своей сессией открывал страницу курса 10 раз подряд, без пауз:
| Одновременно | Ответов с ошибкой | Обычный ответ | Худший ответ | Доступно памяти из 1 900 МБ |
|---|---|---|---|---|
| 1 | 0 | 0,22 с | 0,26 с | 1 273 МБ |
| 5 | 0 | 0,61 с | 0,93 с | 1 220 МБ |
| 10 | 0 | 1,20 с | 1,51 с | 1 196 МБ |
| 20 | 0 | 2,40 с | 3,08 с | 1 183 МБ |
Память не кончилась: даже при 20 учениках оставалось больше 1,1 ГБ, а подкачки на сервере не было вовсе. Упёрлись мы в процессор. Сервер отдавал примерно 8 страниц в секунду при любом числе учеников, поэтому ответ рос вместе с очередью. Обычный совет добавить процессов PHP не помог: при pm.max_children = 12 вместо 5 время при 20 учениках осталось тем же, 2,34 с вместо 2,40 с.
Живой ученик не жмёт без пауз, поэтому 20 в этой таблице — не то же самое, что 20 человек в курсе. Документация Moodle даёт осторожную оценку: в худшем случае 10–20 одновременно активных пользователей на 1 ГБ и там же советует сперва проверить свой сайт. Сколько занятий выдержит ваш сервер, наша таблица не отвечает: тестов и файлов в нашем курсе не было.
| Сервер | Состав | Цена при помесячной оплате |
|---|---|---|
| AdminVPS Promo | 1 ядро 3,6 ГГц, 2 ГБ, 30 ГБ NVMe | 499 ₽/мес |
| AdminVPS Micro | 2 ядра 3,6 ГГц, 4 ГБ, 60 ГБ NVMe | 899 ₽/мес |
| Timeweb Cloud MSK 40 | 2 ядра 3,3 ГГц, 2 ГБ, 40 ГБ NVMe | 2 800 ₽/мес |
| Timeweb Cloud MSK 50 | 2 ядра 3,3 ГГц, 4 ГБ, 50 ГБ NVMe | 3 840 ₽/мес |
Цены сверены с сайтами провайдеров 6 ноября 2026 года. Мы арендовали сервер линейки Ultra, а в таблице — линейка Premium с теми же ядрами, памятью и диском; на других процессорах и у другого провайдера числа будут другими. Promo с одним ядром мы не проверяли: для пробы его хватит, а на занятие группой мы бы его не брали, раз упор в процессор. Учтите и условие Timeweb Cloud: списание почасовое, но по его документации при заказе на балансе должна быть сумма на 30 дней работы сервера. Иначе сервер не запустится: у нас он остался в статусе no_paid.
Реклама · ООО «Админвпс»
AdminVPS
Micro за 899 ₽/мес при оплате за месяц: 2 ядра 3,6 ГГц, 4 ГБ RAM, 60 ГБ NVMe — Moodle 5.3 и PostgreSQL 17 на одной машине.
Промокод EASYLINK — скидка 60 % на первый месяц при оплате за 1 месяц, кроме тарифов Lite.
Реклама · АО «ТаймВэб»
Timeweb Cloud
Cloud MSK 40: 2 ядра 3,3 ГГц, 2 ГБ, 40 ГБ NVMe — 2 800 ₽/мес при оплате за месяц, списание почасовое.
У AdminVPS есть и хостинг под Moodle, но его страница называет старые требования (PHP 5.2.8, MySQL 5.0.25) и не говорит, какая версия базы стоит на тарифах. Moodle 5.3 нужна MySQL 8.4 или MariaDB 11.4, поэтому до заказа спросите версию у поддержки.
Шаг 1. Пакеты и PostgreSQL 17
Все команды выполняются от root. Сначала PHP и Nginx из системы, затем репозиторий PostgreSQL и сам сервер базы. Пакет postgresql без номера не ставьте: он привезёт 16-ю версию.
apt update
apt install -y nginx php8.3-fpm php8.3-cli php8.3-pgsql php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring php8.3-xml php8.3-zip php8.3-soap php8.3-opcache postgresql-common
/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y
apt install -y postgresql-17У нас это заняло 71 секунду. Проверка: sudo -u postgres psql -c "show server_version;" должна показать 17. Расширение sodium, которое Moodle требует, входит в пакеты PHP для Ubuntu, отдельно его ставить не нужно.
Шаг 2. База и пользователь
Придумайте свой пароль и подставьте вместо ПАРОЛЬ_БАЗЫ:
sudo -u postgres psql -c "CREATE USER moodleuser WITH PASSWORD 'ПАРОЛЬ_БАЗЫ';"
sudo -u postgres psql -c "CREATE DATABASE moodle OWNER moodleuser ENCODING 'UTF8';"Шаг 3. Файлы Moodle и папка данных
Архив весит около 98 МБ. Рядом лежит файл с контрольной суммой: сравните её с той, что посчитает ваш сервер.
cd /tmp
wget https://download.moodle.org/download.php/direct/stable503/moodle-latest-503.tgz
wget https://download.moodle.org/download.php/direct/stable503/moodle-latest-503.tgz.sha256
cat moodle-latest-503.tgz.sha256
sha256sum moodle-latest-503.tgz
tar -xzf moodle-latest-503.tgz -C /var/www/
mkdir /var/moodledata
chown www-data:www-data /var/moodledata
chmod 750 /var/moodledata
chown www-data /var/www/moodleПапка данных лежит вне /var/www намеренно: туда попадают загруженные файлы, кэш и сессии, и снаружи к ней доступа быть не должно. Права www-data на папку программы нужны только на время установки, чтобы установщик записал config.php; на шаге 5 мы их снимем.
Шаг 4. Настройка PHP
Moodle требует max_input_vars не меньше 5000, а в Ubuntu по умолчанию стоит 1000. Лимиты загрузки подняты до 100 МБ, как и в конфиге Nginx ниже.
printf 'max_input_vars = 5000\nupload_max_filesize = 100M\npost_max_size = 100M\nmemory_limit = 256M\n' > /etc/php/8.3/mods-available/moodle.ini
phpenmod moodle
systemctl restart php8.3-fpmШаг 5. Установка из командной строки
Подставьте адрес сервера и пароли. Пароль администратора задайте с цифрой, буквами разного регистра и знаком. Адрес --wwwroot попадает в config.php, поэтому если сайт будет на домене, сразу пишите домен.
sudo -u www-data php /var/www/moodle/admin/cli/install.php --non-interactive --lang=ru --wwwroot='http://АДРЕС_СЕРВЕРА' --dataroot=/var/moodledata --dbtype=pgsql --dbhost=localhost --dbname=moodle --dbuser=moodleuser --dbpass='ПАРОЛЬ_БАЗЫ' --fullname='Обучение' --shortname='LMS' --adminuser=admin --adminpass='ПАРОЛЬ_АДМИНА' --adminemail=admin@example.com --agree-license
chown -R root:root /var/www/moodle
chgrp www-data /var/www/moodle/config.php
chmod 640 /var/www/moodle/config.phpУ нас установка заняла 148 секунд и создала 499 таблиц. В конце должно быть «Установка успешно завершена». Последние три команды снимают с веб-сервера право менять код Moodle и закрывают config.php, где лежит пароль базы.
Шаг 6. Nginx: корень на public
С версии 5.1 всё, что должно быть доступно снаружи, лежит в папке public. Конфиг для Nginx ниже взят из документации Moodle и проверен у нас, путь к PHP указан под Ubuntu:
rm -f /etc/nginx/sites-enabled/default
cat > /etc/nginx/sites-available/moodle <<'EOF'
server {
listen 80 default_server;
server_name _;
root /var/www/moodle/public;
index index.php;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /r.php$is_args$args;
}
location ~ \.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name $fastcgi_script_name/ /r.php$is_args$args;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
location ~ /\.(?!well-known).* {
return 404;
}
location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|/UPGRADING\.md|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
deny all;
return 404;
}
}
EOF
ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/moodle
nginx -t && systemctl reload nginxОткройте http://АДРЕС_СЕРВЕРА/: главная у нас без входа увела на страницу входа. Страница входа отдала 200, стили темы — 200 и 1,3 МБ, а composer.json, README.md и lib/db/install.xml снаружи ответили 404. Адрес /config.php отвечает 200 с пустым телом: PHP выполняет файл и ничего не выводит. Для рабочего сайта подключите HTTPS: порядок для домена есть в статье про сертификат, а $CFG->wwwroot в config.php смените на адрес с https://. Домена у нас не было, поэтому HTTPS мы не проверяли.
Сайт уже открывается, но установка ещё не закончена. Собственная проверка Moodle (admin/cli/checks.php) выдала CRITICAL: «Маршрутизатор не настроен». Строка $CFG->routerconfigured в config.php снимает только первую часть: дальше Moodle сам опрашивает пять адресов, и маршрут /api/rest/v2/openapi.json отвечал 500. В журнале Nginx причина: Trait "League\OAuth2\Server\Entities\Traits\ScopeTrait" not found. В архиве нет папки vendor с библиотеками, их ставит Composer:
apt install -y composer
cd /var/www/moodle
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --classmap-authoritative --no-interaction
sed -i "/^require_once.*lib\/setup.php/i \$CFG->routerconfigured = true;" /var/www/moodle/config.php
cd /var/www/moodle/admin/cli
sudo -u www-data php checks.phpПосле этого Moodle ответил «Пройдены все проверки», openapi.json отдал 200. Папка vendor заняла 74 МБ и лежит вне public, снаружи её не видно: /vendor/autoload.php отвечает 404. Документация Moodle просит повторять composer install при каждом обновлении. Этот шаг мы проверяли на отдельной чистой Ubuntu 24.04 на своём компьютере, а не на арендованном сервере.
Шаг 7. Фоновые задачи
Без cron не уходят письма форумов и не выполняются другие фоновые задачи. Moodle ждёт запуск раз в минуту:
echo '* * * * * /usr/bin/php /var/www/moodle/admin/cli/cron.php >/dev/null 2>&1' | crontab -u www-data -
sudo -u www-data php /var/www/moodle/admin/cli/cron.phpПервый запуск вручную занял у нас 181 секунду, не прерывайте его. После перезагрузки cron продолжил работать сам, как и Nginx, PHP и база.
Шаг 8. Первый вход и настройка Moodle
При первом входе администратора Moodle открывает страницу регистрации сайта. Регистрация необязательна: у нас прямой переход на http://АДРЕС_СЕРВЕРА/my/ открыл личный кабинет, и больше страница не появлялась. Если ученики будут заходить через приложение Moodle, включите мобильный доступ: на нашей установке он был выключен. Страница документации о регистрации просит для приложения и зарегистрировать сайт, а руководство для администраторов этого условием не называет.
Дальше работа идёт в браузере. Вот что стояло у нас на чистой установке и где это меняется, все пути начинаются с раздела «Администрирование»:
| Настройка | После установки | Где менять |
|---|---|---|
| Часовой пояс и страна | Europe/London, страна не задана | Местонахождение → Настройки местонахождения |
| Исходящая почта | SMTP пуст | Сервер → Электронная почта → Настройка исходящей почты |
| Самостоятельная регистрация | выключена | Плагины → Аутентификация → Настройки аутентификации |
| Вход и пароли | вход обязателен, пароль от 8 знаков по политике | Безопасность → Параметры безопасности сайта |
| Список учеников файлом | — | Пользователи → Учетные записи → Загрузить пользователей |
Часовой пояс поправьте первым: по нему ученики видят время сроков заданий. Почту мы не отправляли, но без SMTP письма о восстановлении пароля до людей не дойдут. Регистрацию для внутреннего обучения оставьте выключенной. Закончив, откройте Отчеты → Сведения о безопасности и Отчеты → Состояние системы: там Moodle сам перечисляет, что считает недоделанным. У нас состояние системы было чистым, а в безопасности остались три предупреждения: пути к исполняемым файлам, Secure cookies и резервное копирование пользовательских данных.
Для кластера из нескольких серверов документация Moodle настоятельно рекомендует кэш в Redis. У нас был один сервер, и Redis мы не ставили.
Сам сервер тоже нужно закрыть: порядок есть в чек-листе безопасности VPS.
Шаг 9. Резервная копия, которая разворачивается
Копия Moodle — это три вещи: база, папка данных и config.php. Без любой из них сайт не вернуть. Кэш, сессии и временные файлы из копии исключаем: Moodle создаст их заново.
mkdir -p /root/kopii
cd /root/kopii
sudo -u postgres pg_dump moodle | gzip > moodle-$(date +%F).sql.gz
tar -czf moodledata-$(date +%F).tgz --exclude=moodledata/cache --exclude=moodledata/localcache --exclude=moodledata/sessions --exclude=moodledata/temp --exclude=moodledata/trashdir -C /var moodledata
cp /var/www/moodle/config.php config-$(date +%F).php
chmod 600 config-$(date +%F).phpПорядок важен: с --exclude после имени папки tar у нас вернул код 2, а в таком порядке — 0, и записей кэша в архиве не осталось. Мы развернули дамп во временную базу: 499 таблиц, столько же, сколько в рабочей. Копию на том же сервере считайте черновиком и уносите её на другую машину: порядок есть в статье про копии.
Что ломается
Всё это случилось у нас во время проверки. Первые две ошибки мы сделали нарочно, чтобы показать, как они выглядят.
Корень Nginx на /var/www/moodle, а не на public. Moodle показывает ошибку: «Корневой каталог Moodle не должен быть общедоступным». Но до исправления composer.json и UPGRADING.md отдаются всем, так что проверяйте это сразу.
Страница есть, а стилей нет. Корень верный, но в Nginx простой location ~ \.php$ без разбора пути. Страница входа отдаёт 200, а стили и скрипты — 404, и сайт выглядит голым. Причина в том, что Moodle передаёт часть адреса после .php. Лечится конфигом из шага 6.
Установщик упал, а повторный запуск не идёт. Отказав из-за версии базы, установщик уже оставил config.php. При повторе удалите файл: rm /var/www/moodle/config.php.
Снос PostgreSQL 16 оставил систему без базы. Если 16-я уже стоит и вы её удалили, новая 17-я у нас не создала кластер, psql не подключался. Лечится командой pg_createcluster 17 main --start. Если ставить 17-ю сразу, как в шаге 1, кластер создаётся сам.
Готовый образ вместо ручной установки
В маркетплейсе Timeweb Cloud есть образ Moodle. Мы заказали и его: сервер включился за 2 минуты, но образ поставил Moodle 5.1.3 на Apache и MariaDB 10.11, а не 5.3. Страница выпуска 5.1 говорит, что общие исправления для него закончились, а обновиться до 5.3 помешает версия MariaDB: нужна 11.4. Адрес сервера сразу открывал страницу установки без всякого входа, поэтому пройдите её в первые же минуты. HTTPS в образе не было. Для пробы образ годится, для рабочего сайта на 5.3 ставьте вручную.
Сколько стоит в месяц
| Что | Цена при оплате за месяц |
|---|---|
| Сервер AdminVPS Micro: 2 ядра, 4 ГБ, 60 ГБ NVMe | 899 ₽/мес |
| Moodle, PostgreSQL, Nginx | ничего: открытые программы |
| Домен и хранение копий на другой машине | считайте отдельно: в нашей проверке их не было |
Диск кончится раньше памяти, если в курсах видео: кладите ролики на отдельный сервис и давайте в курсе ссылку. Расчёт для школы с записями вебинаров есть в статье про онлайн-школу.
Данные учеников
Если в Moodle учатся сотрудники или клиенты, на сервере лежат их имена, почта и результаты. Требования к такой обработке задаёт 152-ФЗ. Что именно нужно сделать вам, стоит оценить с юристом до запуска.
Коротко
- Moodle 5.3 не встаёт на базы из репозитория Ubuntu 24.04: ставьте PostgreSQL 17 от проекта.
- Корень Nginx — папка
public, в конфиге нужен разбор пути, иначе не будет стилей. - На 2 ядрах и 2 ГБ при 20 учениках без пауз память не кончилась, упёрлись в процессор; курс был маленький, без тестов и файлов.
- Начинать разумно с 2 ядер и 4 ГБ: AdminVPS Micro, 899 ₽/мес при оплате за месяц.
- Копия — это база, папка данных и
config.php; проверяйте её разворотом.
Плюсы и минусы
Преимущества
- Сервер, база и данные учеников находятся под вашим управлением.
- Платите только за сервер: Moodle и PostgreSQL открытые.
- Все команды проверены на чистом сервере, ошибки названы заранее.
Недостатки
- Обновления, копии и защита сервера остаются вашей работой.
- Базы из репозитория Ubuntu 24.04 не подходят, нужен репозиторий проекта PostgreSQL.
- HTTPS, почту и нагрузку с настоящими тестами придётся проверить самим: в нашей проверке их не было.
Реклама · ООО «Админвпс»
AdminVPS
Micro за 899 ₽/мес при оплате за месяц: 2 ядра 3,6 ГГц, 4 ГБ RAM, 60 ГБ NVMe — Moodle 5.3 и PostgreSQL 17 на одной машине.
Промокод EASYLINK — скидка 60 % на первый месяц при оплате за 1 месяц, кроме тарифов Lite.
Реклама · АО «ТаймВэб»
Timeweb Cloud
Cloud MSK 40: 2 ядра 3,3 ГГц, 2 ГБ, 40 ГБ NVMe — 2 800 ₽/мес при оплате за месяц, списание почасовое.
Частые вопросы
Почему Moodle 5.3 не ставится на Ubuntu 24.04 с PostgreSQL из репозитория?
Moodle 5.3 требует PostgreSQL 17, а Ubuntu 24.04 предлагает 16. Установщик останавливается с сообщением «требуется версия 17». То же с MariaDB 10.11 и MySQL 8.0: нужны 11.4 и 8.4. Решение — поставить PostgreSQL 17 из репозитория самого проекта, как в шаге 1 этой статьи.
Сколько памяти нужно Moodle?
Документация называет минимум 512 МБ и рекомендует от 1 ГБ. На нашем сервере с 2 ГБ при 20 учениках, открывавших курс одновременно и без пауз, оставалось больше 1,1 ГБ: упор оказался в процессор, а не в память. Тестов и файлов в нашем курсе не было, поэтому для рабочего сайта мы бы взяли 4 ГБ.
Сколько учеников выдержит сервер на 2 ядрах?
Точного числа у нас нет. Страницу курса сервер отдавал примерно 8 раз в секунду, при 20 учениках без пауз ответ занимал 2,4 секунды, ошибок не было. Живые ученики нажимают реже, зато тесты и файлы тяжелее простой страницы, а их мы не проверяли. Перед запуском проведите пробное занятие.
Почему сайт Moodle открывается без оформления?
Обычно страница отдаётся, а файлы стилей дают 404, потому что Nginx не разбирает часть адреса после «.php». Нужны fastcgi_split_path_info и PATH_INFO, как в конфиге из шага 6. У нас на простом конфиге стили отвечали 404, на рабочем — 200. Проверьте и то, что корень указывает на папку «public».
Куда указывать корень сайта в Moodle 5.3?
На папку «public» внутри программы: «/var/www/moodle/public». Так устроено с Moodle 5.1. Если указать саму папку «moodle», сайт покажет ошибку «Корневой каталог Moodle не должен быть общедоступным», а служебные файлы вроде composer.json будут видны снаружи. У нас они отвечали 200, пока корень не поменяли.
Что настроить в Moodle сразу после установки?
Первым — часовой пояс: на чистой установке стоял Europe/London, а по нему ученики видят время сроков заданий. Затем исходящую почту, иначе письма о восстановлении пароля не дойдут, и HTTPS. Самостоятельная регистрация у нас была выключена, вход обязателен. После этого откройте отчёты «Сведения о безопасности» и «Состояние системы».
Можно ли поставить Moodle на обычный хостинг?
Только если тариф даёт PHP 8.3 или 8.4 и MySQL 8.4 или MariaDB 11.4: это минимум Moodle 5.3. Эти версии есть не на каждом хостинге, поэтому уточните их до заказа. На VPS вы ставите нужные версии сами, как в этой статье. Хостинг мы не проверяли.
Подобрать сервер под задачу
Смотреть тарифыРеклама · ООО «Админвпс»
Ссылки на провайдеров в этом материале партнёрские: если вы оформите услугу, мы получим комиссию. На цену для вас это не влияет. Подробнее