Данное пошаговое руководство описывает установку Moodle, в качестве веб-сервера выбран Nginx с поддержкой сертификата Let's Encrypt SSL на Ubuntu 20.04.
Нам потребуется
- Сервер под Ubuntu 20.04
- Доступ по SSH
- Доменное имя
Поехали!
Обновление всей системы является обязательным шагом. Выполним:
apt-get update -y
После обновления может потребоваться перезарузка (если обновилось ядро).
LEMP
Установим веб-окружение (nginx, MariaDB, 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
На Ubuntu установка выполняется неожиданно долго, с аналогичной задачей Centos 7 или 8 справляется в 3-4 раза быстрее на идентичном оборудовании.
Редактируем php.ini:
mcedit /etc/php/7.4/fpm/php.ini
Необходимо выставить правильные значения следующих параметров:
memory_limit = 256M cgi.fix_pathinfo = 0 upload_max_filesize = 90M max_execution_time = 330 date.timezone = Europe/Moscow
Сохраняемся и перезапускаем PHP-FPM:
systemctl restart php7.4-fpm
Надеемся, что ошибок нет. Очень интересно отметить, что специально настраивать файлы конфигурации для виртуального хоста не нужно (это же Ubuntu)!
Создание базы данных
Moodle может работать с несколькими СУБД, в данном руководстве выбрана MariaDB, но стоит заметить, что с точки зрения администрирования разница между MySQL и MariaDB не будет заметна.
Подключение к СУБД из командной строки:
mysql
Создаём пользователя, БД и пароль:
CREATE DATABASE moodledb;
CREATE USER 'moodle'@'localhost' IDENTIFIED BY 'password123';
Наделяем пользователя правами:
GRANT ALL ON moodledb.* TO 'moodle'@'localhost' WITH GRANT OPTION;
Применяем нововведения и выходим:
FLUSH PRIVILEGES;
EXIT;
Редактируем конфигурационный файл MariaDB:
mcedit /etc/mysql/mariadb.conf.d/50-server.cnf
В раздел [mysqld] необходимо добавить несколько строк:
[mysqld] innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix = ON
Сохраняем изменения и перезапускаем СУБД:
systemctl restart mariadb
Установка Moodle
Переходим в директорию веб-сервера и скачиваем последнюю версию:
cd /var/www/html
git clone -b MOODLE_38_STABLE git://git.moodle.org/moodle.git moodle
Скачивается примерно 450 Мб, процесс не быстрый.
Редактируем config.php системы Moodle (может оказаться, что предварительно его надо скопировать с /var/www/html/moodle/config-distr.php):
mcedit /var/www/html/moodle/config.php
Необходимо выставить правильные значения параметров. Находим строку, начинающуюся с
$CFG->dbtype
Заменяем её на:
$CFG->dbtype = 'mariadb';
Тут же где-то рядом проверяем значения параметров:
$CFG->dblibrary = 'native'; // 'native' only at the moment
$CFG->dbhost = 'localhost'; // e.g. 'localhost' or IP
$CFG->dbname = 'moodledb'; // database name, e.g. moodle
$CFG->dbuser = 'moodle'; // your database username
$CFG->dbpass = 'password123'; // your database password
и
$CFG->wwwroot = 'http://moodle.drach.pro';
$CFG->dataroot = '/var/www/html/moodledata';
Сохраняем файл. Создаём необходимые директории и выставляем права:
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
Для файлов PHP можно права и пониже поставить, конечно.
Конфигурация Nginx
Создаём конфиг для нашего поддомена:
mcedit /etc/nginx/conf.d/moodle.conf
Вставляем буквально несколько строк:
server { listen 80; root /var/www/html/moodle; index index.php index.html index.htm; server_name moodle.drach.pro; 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 -t
Если всё сделано правильно, мы увидим оптимистичное сообщение:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапускаем веб-сервер:
systemctl restart nginx
У нас всё готово к взаимодействию с Moodle через веб-интерфейс.
Moodle Web Interface
Запускаем браузер и обращаемся к Moodle. Если есть возможность сделать NS-запись, указываем адрес (URL), например http://moodle.drach.pro. Но можно обращаться и по IP-адресу: тоже будет работать.
Диалог установки-настройки через веб-интерфейс отличается от предыдущих версий. Он стал гораздо проще. Буквально откидываемся на спинку кресла и несколько раз жмём "Далее". На одной из страничек система начнёт разворачивать собственные модули - тут придётся подождать, сходить выпить рюмку чая, а потом догадаться прокрутить страницу вниз, чтобы нажать "Далее". В остальном всё элементарно и понятно сразу.
Установка сертификата Let's Encrypt SSL
Установим Certbot, который поможет нам получить и обновлять бесплатный сертификат безопасности Let's Encrypt SSL.
Установка:
apt-get install python3-certbot-nginx -y
Получаем сертификат SSL и конфигурируем Nginx:
certbot --nginx -d moodle.example.com
Надо будет ответить на несколько очевидных вопросов и предоставить верный email, в процессе все события будут записываться в журнал:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Теперь наш поддомен доступен по безопасному протоколу https://moodle.drach.pro
Cron
Обычно, руководства по установке об этом умалчивают, но напоследок надо добавить файл cron.php в crontab на локальном сервере (ну или дёргать его удалённо по HTTP(S), если это по какой-то причине проще). Это требуется для того, чтобы система Moodle могла выполнять какие-то рутинные операции самостоятельно, без участия человека, например, рассылать оповещения участникам. Разработчик рекомендует вызывать задачу каждую минуту, но оказалось, что свеже-установленная система с тремя пользователями на вполне достойном сервере с 6 ядрами выполняет её 10-20 секунд. Поэтому не рекомендую вызывать задачу чаще, чем раз в 10 минут. А когда количество пользователей увеличиться, надо будет дополнительно изучить, сколько времени требуется серверу на выполнение.
В качестве примера можно предложить такую строку:
30 * * * * root /usr/bin/php /var/www/html/moodle/admin/cli/cron.php
Каждый раз, когда будет наступать половина часа, скрипт будет запущен.
Заключение
У нас всё готово, на Ubuntu 20.04 мы установили Moodle, настроили веб-сервер и обратный прокси Nginx, прикрутили SSL. Можно порадовать студентов дистанционным обучением :)
Дискуссия
Написал Rocky 9
Опубликовано в: Установка nginx c PHP-FPM под CentOS 7.0 in LinuxНаписал Константин
Опубликовано в: Докеризация стека LEMP под Ubuntu c помощью Compose in LinuxНаписал bammbr
Опубликовано в: Шлюз для маленького отдела на Red Hat 9 in LinuxНаписал Федор
Опубликовано в: Установка и конфигурация Samba на CentOS 7 in LinuxНаписал Evgenytrl
Опубликовано в: Загрузка файлов с помощью Wget in Linux