Moodle

Платформа для онлайн обучения. Более подробно напишу после установки на реальное железо. На виртуалке уже малость потестил. Будет краткая инструкция. Многое будет пропущено ибо на железе уже стоят многие нужные элементы. Такие, как апач, пхп, эскуэль, пхпмайадмин, настроены виртуальные хосты, сертификат безопасности, смтп - для отправки почты, почти все что нужно. Поскольку на этом серваке уже жил вордпресс, думаю проблем не будет, но если возникнут опишу. Половина работы уже сделана, осталось установить, настроить и самое главное тестить. Планирую поставить сие добро на нульсовую машину с поддержкой почтового сервака.

Доменное имя

Имя куплено, поэтому у регистратора добавил подзону.

moodle.wildserver.ru

Подключится к серверу

Ебсесно по ssh, ну можно и через webmin. Некоторые вещи делаю параллельно то там то тут.

Создать каталог

Тут будет жить сайт, желательно там, где много места, (кстати база данных то же должна жить на широком дисковом пространстве, это так памятка про SQL ):

sudo mkdir /home/sklad/www/moodle.wildserver.ru

Виртуальный хост

Сразу по шаблону сделать виртуальный хост:

sudo nano /etc/apache2/sites-available/moodle.wildserver.ru.conf
<VirtualHost *:80>
    ServerAdmin admin@wildserver.ru
    ServerName moodle.wildserver.ru
    ServerAlias www.moodle.wildserver.ru
#    DocumentRoot /home/USER/www/moodle.wildserver.ru
	DocumentRoot /home/sklad/www/moodle.wildserver.ru      
    CustomLog ${APACHE_LOG_DIR}/moodle.wildserver.ru.access.log combined
    ErrorLog ${APACHE_LOG_DIR}/moodle.wildserver.ru.error.log
#<Directory "/home/USER/www/moodle.wildserver.ru">
<Directory "/home/sklad/www/moodle.wildserver.ru">
        Options -Includes -Indexes -ExecCGI
        AllowOverride All 
# Добавил что бы читалось из каталога с сайтом иначе форбиден
# Насколько это правильно х.з.
        Require all granted
</Directory>

RewriteEngine on

# склейка зеркал сайта
# Редирект с домена www на домен без www
RewriteCond %{HTTP_HOST} ^www.courses.wildserver\.net$ [NC]
RewriteRule ^(.*)$ https://moodle.wildserver.ru$1 [R=301,L]
    
	RewriteCond %{SERVER_NAME} =moodle.wildserver.ru [OR]
	RewriteCond %{SERVER_NAME} =www.moodle.wildserver.ru
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Протестить конфигурацию Apache

sudo apache2ctl configtest

Включить виртуальный хост

sudo a2ensite moodle.wildserver.ru.conf
Enabling site moodle.wildserver.ru.
To activate the new configuration, you need to run:
  systemctl reload apache2

Перезагрузить настройки Apache

Как подсказывают так и сделаем:

sudo systemctl reload apache2

Посмотреть активные виртуальные сервера

sudo apache2ctl -S

Смотрим список и находим то что только что включили.

Проверка работы виртуального хоста

Тестовая страница

Для проверки и получения сертификата создать страничку html:

sudo nano /home/sklad/www/moodle.wildserver.ru/index.html
<!DOCTYPE html>
<html>
    <head>
        <title>moodle.wildserver.ru</title>
    </head>
    <body>
        <p>Привет ты меня видишь.</p>
    </body>
</html>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Зайти на сайт

Пока только по http скоро будет зашифровано.

moodle.wildserver.ru

А фих там было я туда попал, высветилась моя основная страница, а адрес то что надо. Некогда разбираться. Надо сертификат получить. Думаю после этого все будет отображено. Через пень колоду, сертификат был получен.

Все нашел ошибку, добавил комменты в конфиг. Но это в моем случае, в других можно и без этого разрешения.

Получение сертификата

Проверочный прогон

sudo certbot certonly --dry-run -d moodle.wildserver.ru -d www.moodle.wildserver.ru

Нажать 1 , чтоб получить автонастройки виртуального хоста ssl

Получить сертификат

sudo certbot certonly -d moodle.wildserver.ru -d www.moodle.wildserver.ru

Создать виртуальный хост с сертификатом

sudo nano /etc/apache2/sites-available/moodle.wildserver.ru-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName moodle.wildserver.ru
    ServerAdmin admin@wildserver.ru
    ServerAlias www.moodle.wildserver.ru
    DocumentRoot /home/sklad/www/moodle.wildserver.ru
    CustomLog ${APACHE_LOG_DIR}/moodle.wildserver.ru.access.log combined
    ErrorLog ${APACHE_LOG_DIR}/moodle.wildserver.ru.error.log

<Directory "/home/sklad/www/moodle.wildserver.ru">
        Options -Includes -Indexes -ExecCGI
        AllowOverride All 
# Добавил что бы читалось из каталога с сайтом иначе форбиден
# Насколько это правильно х.з.
        Require all granted
</Directory>

RewriteEngine on
# склейка зеркал сайта
# Редирект с домена www на домен без www
RewriteCond %{HTTP_HOST} ^www.courses.wildserver\.net$ [NC]
RewriteRule ^(.*)$ https://moodle.wildserver.ru$1 [R=301,L]

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/moodle.wildserver.ru/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/moodle.wildserver.ru/privkey.pem
</VirtualHost>
</IfModule>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Повторить действия по активации хоста только с конфигом moodle.wildserver.ru-le-ssl.conf

Подготовка к установке

Теперь можно приступить к установке обучающей платформы.

Идем сюда https://download.moodle.org/releases/latest/ берем нужную версию. Разархивировать, разместить содержимое полученного каталога в нужное место. Нужное место это /home/sklad/www/moodle.wildserver.ru

Для терминала делаем следующие телодвижения:

Скачиваем дистрибутив

Ссылку на архив брать выше по адресу.

wget https://download.moodle.org/download.php/direct/stable403/moodle-4.3.2.tgz

Разархивировать

tar -xvf moodle-4.3.2.tgz

Перенести в нужный каталог файлы

Есть скрытые фалы относящиеся к гитхаб, то же перекину мало ли через репу релизы можно будет получать.

sudo cp -prT ~/moodle/ /home/sklad/www/moodle.wildserver.ru/

Удалить не нужное

rm moodle-4.3.2.tgz
rm -r moodle

Дать права на каталоги и файлы Apache

sudo chown -R www-data:www-data /home/sklad/www/moodle.wildserver.ru

Создать пользователя базы данны SQL

Вспомнить что стоит

sudo mysqld --version

Создать пользователя Moodle и базу данных

Зайти в phpmyadmin надо будет установить Adminer, для почтового сервера ставил уже

Сделать нового юзверя moodle имя и пароль на свое усмотрение, поставить галку - Создать базу данных с таким же именем и предоставить на неё все привилегии.

Установка Moodle

А , о, удалить или переименовать тестовый индекс файл.

sudo rm /home/sklad/www/moodle.wildserver.ru/index.html

Перейти на сайт и начать отвечать на вопросы.

Ошибка on line 4392

Но нет так все просто давненько не обновлялась система. При обращении по адресу вылетела ошибка.

Parse error: syntax error, unexpected ':', expecting ')' in /home/sklad/www/moodle.wildserver.ru/lib/outputrenderers.php on line 4392

Входе выяснения причин ответ оказался прост - версия php-fpm не устраивает данный продукт. Будем апгрейдиться.

Установка FPM

sudo apt install php8.3-fpm

Выключить старую версию FPM

Посмотрев содержимое каталога /etc/apache2/conf-enabled понял, что установлена аж php7.4-fpm

sudo a2disconf php7.4-fpm

Включить FPM 8.3

sudo a2enconf php8.3-fpm

Перезагрузить Apache

sudo systemctl reload apache2

Удалить старую версию FPM

Если есть желание.

sudo apt purge php7.4-fpm

Но лучше не удалять,потому что некоторые приложения работающие только на более старых версиях могут выдать ошибку. Например Piwigo взбрыкнул.

Продолжаем установку

Теперь то все хорошо, зашел, можно начать отвечать на вопросы.

  1. Выбрать язык

Выбор языка

  1. Осечка проверка не пройдена

Тест не пройден

Добавить расширение PHP cURL и Zip

sudo apt install php8.3-{curl,zip}

жмем обновить и… проверка пройдена

  1. Подтверждение пути установки

Подтвердить путь

Судя по рекомендациям надо куда запихать, чтоб враг не нашел. Например сюда:

/home/sklad/moodle/moodledata

Что не получилось? Поэтому создать каталог /home/sklad/moodle/ и назначить хозяином Апач:

sudo mkdir /home/sklad/moodle
sudo chown www-data:www-data /home/sklad/moodle
  1. Выбрать базу данных.

Но мы та уже знаем, тута смотрели

  1. Настройки базы данных

Заполнить поля.

Если нет ошибок прыгаем далее

Очередная ошибка

Ошибка: обнаружены проблемы с драйвером базы данных.

Администратору сайта следует проверить конфигурацию сервера

Расширение MySQLi для PHP сконфигурировано неверно, в результате чего невозможно установить связь с сервером MySQL. Проверьте настройки в файле php.ini или перекомпилируйте PHP.

Скорее всего связана с переходом на новы php8.3

Потому что пробуя зайти на phpmyadmin получаю такую ошибку:

Расширение mysqli не найдено. Пожалуйста, проверьте ваши настройки PHP. Смотрите [a@doc/html/faq.html#faqmysql@documentation]our documentation для дополнительной информации.

Посмотреть используемый php.ini

Скорее всего, что то с настройками php.ini раньше то он был настроен для 7.4 версии, а теперь дефолтный.

Проверить какой конфиг используется:

php --ini еще вариант php -i | grep 'php.ini' и дело верняк для того чтобы точно посмотреть что на самом деле читается это создать страничку с кодом и обратиться к нему, в будущем все равно пригодится.

sudo nano /home/sklad/www/moodle.wildserver.ru/test.php
<?php phpinfo(); ?>

Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Сравнить старый и новый конфиг

Не придумав ничего лучше решил сравнить два конфига /etc/php/7.4/apache2/php.ini /etc/php/8.3/fpm/php.ini

Попутно найдя различия читать мануал по php

Сравнение двух конфигов

Добавил или изменил в /etc/php/8.3/fpm/php.ini :

; Было пусто после знака равно добавил из старова конфига
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,

; Было 30 после знака равно добавил из старова конфига
max_execution_time = 1500

; Было 128 после знака равно добавил из старова конфига
memory_limit = 512M

; Было 8M после знака равно добавил из старова конфига. ДЛЯ ТОГО ЧТОБЫ ЗАГУЖАТЬ БОЛЬШИЕ ФАЙЛЫ
post_max_size = 700M

; Было 2M после знака равно добавил из старова конфига. ДЛЯ ТОГО ЧТОБЫ ЗАГУЖАТЬ БОЛЬШИЕ ФАЙЛЫ
; ЭТО ЗНАЧЕНИЕ ДОЛЖНО БЫТЬ МЕНЬШЕ post_max_size
upload_max_filesize = 650M

; Было пустым после знака равно добавил из старова конфига. ДЛЯ ОТПРАВКИ ПОЧТЫ
sendmail_path = /usr/bin/msmtp -t

; Раскомментировал
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

; Из сарого конфига дописано не помню зачем
;Добавлено для ioncube_loader
zend_extension=/usr/lib/php/20190902/ioncube_loader_lin_7.4.so
extension=/usr/lib/php/20190902/mcrypt.so

После изменений перезагрузить Apache:

sudo systemctl reload apache2

Не помогло, роем дальше.

Решение

Ларчик открывался просто. Надо установить модуль mysqli. Впринципе логично 😆

sudo apt install php8.3-mysqli

На всяк случай перезагрузить Apache

sudo systemctl reload apache2

Хорошо еще, что в дебри не полез, ша бы наворотил.

Ошибки в phpmyadmin

После установки php 8.3 и нужных модулей вывалила целая куча ошибок. Снести бы этот phpmyadmin да поставить Adminer, чтоб избавиться от головной боли. Так ведь нет, пойду до конца и решу данную проблему. Попробую для начала обновить phpmyadmin

Обновление версии phpmyadmin

По сути это установка phpmyadmin

Вспомнить, где он живет.

find / -iname "phpmyadmin*" -type d
/var/lib/mysql/phpmyadmin
/var/lib/phpmyadmin
/usr/share/phpmyadmin
/usr/share/phpmyadmin/vendor/phpmyadmin

Просмотрев каталоги понял, что тут /usr/share/phpmyadmin

Скачать с сайта последнюю версию с поддержкой всех языков:

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip

Распаковать:

unzip phpMyAdmin-5.2.1-all-languages.zip

Схранить старую версию:

sudo mv /usr/share/phpmyadmin /usr/share/phpmyadmin.old

Перенести новую версию на то же место, где жила старая версия:

sudo mv phpMyAdmin-5.2.1-all-languages /usr/share/phpmyadmin

Поменять владельца каталога и файлов:

sudo chown -R www-data:www-data /usr/share/phpmyadmin

В отличии от установки добавить файл конфига из старой версии:

sudo cp /usr/share/phpmyadmin.old/config.inc.php /usr/share/phpmyadmin

phpmyadmin обновился но хочет вот что:

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

Дадим ему это:

sudo apt install php8.3-mbstring

И по традиции презапустить веб сервер:

sudo systemctl reload apache2

Все замечательно многое обновил, теперь надо вернуться к основной цели установки Moodle

Продолжение установки

Что интересно на виртуальной машине с новой версией Debian 12 никаких побочных эффектов не было, но оно и понятно, давно не обновлял , но что приятно все совместимо и может работать дальше. Это вам не виндавс какой-то 😜

Вылетела очередная ошибка:

Moodle requires the xml PHP extension. Please install or enable the xml extension.

Похоже опять какого то модуля не хватает, вот не мог он раньше про это сказать?

sudo apt install php8.3-xml
sudo systemctl reload apache2

Вроде запустилось, но не уверен, что будут еще сюрпризы.

  1. Авторские права и пользовательское соглашение

Наблюдаю следующую картинку, соглашаюсь, тут без вариантов.

Авторские права и пользовательское соглашение

  1. Проверка сервера

Наконец то дошел до этого пункта, а вот раньше нельзя было всеэто проверить и написать или мануал всетаки надо читать внимательнее? 😆

Лист для исправлений, если они нужны

С эти листом требований все просто нажать на ссылку над замечанием и прочитать, что нужно сделать. Все довольно просто. Но не все команды современные они устарели, поэтому тута то что ннадо. 😜

Не хватает очередных модулей php

The GD extension is now required by Moodle for image conversion.

sudo apt install php8.3-gd

Intl extension is required to improve internationalization support, such as locale aware sorting and international domain names.

sudo apt install php8.3-intl
sudo apt install php8.3-soap

PHP setting max_input_vars must be at least 5000.

sudo nano /etc/php/8.3/fpm/php.ini

Найти строку Ctrl+W max_input_vars рскомментировать и исправить значение на 5000. Сохранить файл Ctrl+O Enter, закрыть Ctrl+X

Перезапустить службы после обновления конфигов:

sudo systemctl reload apache2
sudo service php8.3-fpm restart 

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

sudo apt install php-soap

И наконец то все пункты требований выполнены:

Долгожданная картинка

Нажать продолжить. Довольно продолжительная процедура, но все зависит от мощности железа. На мой взгляд с 8 версией мускула стало все медленнее. На виртуалке все было быстрее.

Пропадала даже картинка типа защищенная связь прервалась, после нажатия кнопки обновить страницу в браузере появилась надпись, что сайт обновляется обратитесь поздже.

  1. Проверка плагинов

Длиннущий спосок с плагинами в самом низу нажать кнопку Обновить Moodle

И покурить ещё немного

Список плагинов Moodle

  1. Обновление

Не знаю почему, но на виртуалке список обновлялся и рос, на серваке опять произошла ошибка соединения и после обновления страницы получился длинный список. В конце нажать кнопку Продолжить.

Список обновлений

  1. Данные пользователя Админ

Заполнить поля и нажать кнопку Обновить профиль

Профиль админа

  1. Настройки главной страницы

Настройки главной страницы

  1. Заполнить регистрационную форму

Заполнить поля и нажать кнопку зарегистрировать сайт

Впринципе можно было и пропустить данный раздел. Придет письмо с благодарностью и тому подобное.

Далее надо тестить и заполнять контент.

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

sudo certbot certonly –dry-run -d moodle.wildserver.ru -d www.moodle.wildserver.ru