Поиск по сайту:

Как установить платформу электронного обучения Moodle на Rocky Linux 8


На этой странице

  1. Предпосылки
  2. Шаг 1. Настройка брандмауэра
  3. Шаг 2. Установите Git
  4. Шаг 3. Установите и настройте PHP
  5. Шаг 4. Установка и настройка MySQL
  6. Шаг 5. Установите Nginx
  7. Шаг 6. Установите Moodle
  8. Шаг 7. Настройка Moodle
  9. Шаг 8. Установите SSL
  10. Шаг 9. Настройка Nginx
  11. Шаг 10. Настройка SELinux
  12. Шаг 11. Завершение установки Moodle
  13. Заключение

Moodle — это бесплатная онлайн-система управления обучением (LMS) с открытым исходным кодом. Это позволяет преподавателям создавать полнофункциональный веб-сайт для образовательных курсов с онлайн-классом. Он написан на PHP. Он предоставляет богатый набор функций, включая вики, оценивание, отправку заданий, онлайн-викторины, доски обсуждений и многое другое.

В этом руководстве объясняется, как установить Moodle на сервер Rocky Linux 8.

Предпосылки

  • A server running Rocky Linux 8.

  • A domain name pointing to the server. For our tutorial, we will use the moodle.example.com domain.

  • A non-root user with sudo privileges.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Шаг 1. Настройте брандмауэр

Первым шагом является настройка брандмауэра. Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.

$ sudo firewall-cmd --state
running

Брандмауэр работает с разными зонами, и мы будем использовать публичную зону по умолчанию. Перечислите все службы и порты, активные на брандмауэре.

$ sudo firewall-cmd --permanent --list-services

Он должен показать следующий вывод.

cockpit dhcpv6-client ssh

Для работы Moodle необходимы порты HTTP и HTTPS. Откройте их.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Перезагрузите брандмауэр, чтобы применить изменения.

$ sudo firewall-cmd --reload

Шаг 2 — Установите Git

Git требуется Moodle для захвата файлов приложения. Установите Гит.

$ sudo dnf install git

Шаг 3 — Установите и настройте PHP

Нам нужно установить PHP 8.0, чтобы Moodle работал в нашем туториале. Первый шаг — захватить репозиторий Epel.

$ sudo dnf install epel-release

Затем установите репозиторий Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Проверьте доступные потоки PHP.

$ dnf module list php -y
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language
php                 8.0                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Версия по умолчанию 7.2. Включить репозиторий Remis PHP 8.0.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Установите PHP и необходимые расширения, требуемые Moodle.

$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcache

Проверьте установку.

$ php --version
PHP 8.0.21 (cli) (built: Jul  6 2022 10:13:53) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.21, Copyright (c), by Zend Technologies

Откройте файл php.ini для редактирования.

$ sudo nano /etc/php.ini

Измените значения следующих переменных, чтобы установить размер почтового вложения равным 25 МБ.

upload_max_filesize = 25M
post_max_size = 25M

Затем раскомментируйте переменную max_input_vars, удалив перед ней точку с запятой и изменив ее значение на 5000.

max_input_vars = 5000

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Откройте файл /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Найдите в файле строки user=apache и group=apache и измените их следующим образом.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Затем раскомментируйте владельца файла сокета, группу и строку разрешений по умолчанию и измените их, как показано ниже.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Затем закомментируйте следующую строку, как показано, поставив перед ней точку с запятой.

;listen.acl_users = apache,nginx

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Дайте правильные разрешения для каталога сеанса PHP.

$ chown -R nginx:nginx /var/lib/php/session/

Включите и запустите службу PHP-FPM.

$ sudo systemctl enable php-fpm --now

Шаг 4 — Установите и настройте MySQL

Установите сервер MySQL.

$ sudo dnf install mysql-server

Подтвердите установку, проверив версию.

$ mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Включите и запустите службу MySQL.

$ sudo systemctl enable mysqld --now

Запустите сценарий безопасной установки.

$ sudo mysql_secure_installation

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

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: (Press Y)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: (Type 2)

Далее вам будет предложено создать надежный пароль root. Убедитесь, что ваш пароль соответствует требованиям плагина Validate.

Please set the password for root here.

New password:

Re-enter new password:

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

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : (Press Y)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : (Press Y)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : (Press Y)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (Press Y)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : (Press Y)
Success.

All done!

Войдите в оболочку MariaDB.

$ sudo mysql

Создайте базу данных для Moodle.

mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Создайте пользователя SQL для доступа к базе данных. Замените YourPassword23! паролем по вашему выбору.

mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Предоставьте moodleuser доступ к базе данных.

mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';

Перезагрузите таблицу привилегий.

mysql > FLUSH PRIVILEGES;

Выйдите из оболочки.

mysql > exit

Шаг 5 — Установите Nginx

Rocky Linux поставляется со старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.

Создайте и откройте файл /etc/yum.repos.d/nginx.repo для создания официального репозитория Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Вставьте в него следующий код.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Установите сервер Nginx.

$ sudo dnf install nginx

Проверьте установку.

$ nginx -v
nginx version: nginx/1.22.0

Шаг 6 - Установите Moodle

Создайте публичный каталог для Moodle.

$ sudo mkdir /var/www/html/moodle

Разрешить вошедшему в систему пользователю доступ к каталогу.

$ sudo chown -R $USER:$USER /var/www/html/moodle

Перейдите в общедоступный каталог.

$ cd /var/www/html/moodle

Клонируйте репозиторий Moodle Github.

$ git clone https://github.com/moodle/moodle.git .

Проверьте список доступных филиалов.

$ git branch -a

На данный момент MOODLE_400_STABLE является последней доступной версией. Создайте локальную ветку с именем MOODLE_400_STABLE и настройте ее для отслеживания удаленной ветки.

$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE

Переключитесь на только что созданную локальную ветку.

$ git checkout MOODLE_400_STABLE

Создайте каталог данных для Moodle.

$ sudo mkdir /var/moodledata

Дайте соответствующие разрешения каталогу данных Moodle.

$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata

Дайте права на запись в директорию Moodle.

$ sudo chmod -R 755 /var/www/html/moodle

Шаг 7 - Настройте Moodle

Перейдите в каталог Moodle.

$ cd /var/www/html/moodle

Скопируйте образец файла конфигурации, чтобы создать файл конфигурации Moodle.

$ cp config-dist.php config.php

Откройте файл конфигурации для редактирования.

$ nano config.php

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

$CFG->dbtype    = 'mysqli';      // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleuser';   // your database username
$CFG->dbpass    = 'YourPassword23!';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

Также настройте расположение доменного имени Moodle и каталога данных.

$CFG->wwwroot   = 'https://moodle.example.com';
$CFG->dataroot  = '/var/moodledata';

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Шаг 8 — Установите SSL

Инструмент Certbot генерирует SSL-сертификаты с помощью Lets Encrypt API. Для этого требуется репозиторий EPEL, но поскольку он у нас установлен, мы можем продолжить работу напрямую. Введите следующую команду, чтобы установить его.

$ sudo dnf install certbot

Создайте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d moodle.example.com

Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/moodle.example.com на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Создайте корневую веб-директорию для автоматического обновления Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Создайте задание Cron для обновления SSL. Он будет запускаться каждый день, чтобы проверять сертификат и при необходимости обновлять его. Для этого сначала создайте файл /etc/cron.daily/certbot-renew и откройте его для редактирования.

$ sudo nano /etc/cron.daily/certbot-renew

Вставьте следующий код.

#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Измените права доступа к файлу задачи, чтобы сделать его исполняемым.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 9 — Настройте Nginx

Создайте и откройте файл /etc/nginx/conf.d/moodle.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/moodle.conf

Вставьте в него следующий код.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name moodle.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name moodle.example.com;
    root   /var/www/html/moodle;
    index  index.php;

    ssl_certificate     /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/moodle.access.log main;
    error_log  /var/log/nginx/moodle.error.log;
    
    client_max_body_size 25M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include /etc/nginx/mime.types;
        include fastcgi_params;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Hide all dot files but allow "Well-Known URIs" as per RFC 5785
	location ~ /\.(?!well-known).* {
    	return 404;
	}
 
	# This should be after the php fpm rule and very close to the last nginx ruleset.
	# Don't allow direct access to various internal files. See MDL-69333
	location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
     	deny all;
	    return 404;
	}
}

После завершения сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Проверьте синтаксис файла конфигурации Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Включите и запустите службу Nginx, чтобы активировать новую конфигурацию.

$ sudo systemctl enable nginx --now

Если вы получаете следующую ошибку, то, скорее всего, это связано с ограничениями SELinux.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Чтобы исправить ошибку, выполните следующие команды.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Снова запустите службу Nginx.

$ sudo systemctl start nginx

Шаг 10 — Настройте SELinux

Измените контекст безопасности файла для веб-каталога Moodles и каталога данных.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'

Настройте SELinux, чтобы разрешить сетевые подключения из Moodle.

$ sudo setsebool -P httpd_can_network_connect on

Шаг 11 - Завершение установки Moodle

Откройте URL-адрес https://moodle.example.com в своем браузере, и вы увидите следующий экран приветствия.

Нажмите кнопку «Продолжить», чтобы продолжить. Далее установщик проверит системные требования.

Если все в порядке, прокрутите вниз и нажмите кнопку «Продолжить», чтобы продолжить установку файлов и настройку базы данных.

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

После завершения прокрутите страницу вниз и нажмите «Обновить профиль», чтобы продолжить.

Далее вам будет предложено настроить параметры главной страницы Moodles.

Настройте его в соответствии с требованиями и нажмите «Сохранить изменения», чтобы перейти к панели инструментов Moodle. Затем нажмите ссылку «Пропустить» внизу, если вы не хотите регистрировать свой сайт Moodle в компании.

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

Заключение

На этом мы завершаем наше руководство по установке обучающей платформы Moodle на сервер Rocky Linux 8. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.