8.2.24 Встановлення та налаштування Moodle
Moodle — відкрита LMS (Learning Management System) на PHP, побудована навколо модульності й гнучкої моделі прав. Підійде для корпоративного навчання, університетів, шкіл та комерційних онлайн-курсів — від невеликих встановлень до кластерів з тисячами одночасних слухачів.
Підготовка сервера
Вимоги
- Віртуальний або виділений сервер з встановленою Ubuntu 24.04 LTS.
- root-доступ або sudo-користувач.
- Активне Доменне ім’я
Змінні
SERVER_IP_ADDRESS
— IP-адреса сервераYOUR_DOMAIN
— домен Moodle (наприклад,moodle.example.com
)DB_NAME
— назва БД MoodleDB_USER
— користувач БДDB_PASSWORD
— пароль користувача БДMOODLE_DIR
— шлях встановлення Moodle (наприклад,/var/www/moodle
)MOODLEDATA_DIR
— каталог даних Moodle (наприклад,/var/moodledata
)
Оновлюємо систему та встановлюємо утиліти
Виконайте оновлення пакетів та встановіть базові інструменти.
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git unzip rsync ufw
Увімкнення брандмауера
Дозвольте SSH та HTTP/HTTPS
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw --force enable
sudo ufw status
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Встановлення LEMP (Nginx, MariaDB, PHP-FPM 8.3)
Встановлюємо та запускаємо Nginx
Встановіть веб-сервер і ввімкніть автозапуск.
sudo apt install -y nginx
nginx -v
sudo systemctl enable --now nginx
Встановлюємо MariaDB 10.11
Встановіть сервер БД і виконайте базовий hardening.
sudo apt install -y mariadb-server
mariadb --version
sudo systemctl enable --now mariadb
sudo mysql_secure_installation
Альтернатива: Можна використовувати MySQL, але переконайтеся, що версія підтримується поточною документацією Moodle. Для цієї статті використовується MariaDB 10.11.
Встановлюємо PHP-FPM 8.3 і потрібні розширення
Встановіть PHP-FPM і модулі, необхідні Moodle.
sudo apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml php8.3-zip php8.3-gd php8.3-intl php8.3-curl php8.3-mbstring php8.3-bcmath php8.3-readline php8.3-redis
php -v
php -m | grep -E 'intl|xml|curl|zip|gd|mbstring|bcmath|sodium'
Підготовка бази даних
Створюємо БД, користувача та права
Підключіться до MariaDB і створіть ресурси з кодуванням utf8mb4.
sudo mariadb
CREATE DATABASE DB_NAME DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'DB_USER'@'localhost' IDENTIFIED BY 'DB_PASSWORD';
GRANT ALL PRIVILEGES ON DB_NAME.* TO 'DB_USER'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Зверніть увагу: необхідно замінити наведені змінні — DB_NAME
, DB_USER
, DB_PASSWORD
. Інакше ви створите базу з небезпечними іменами та паролем.
Завантаження та розміщення Moodle
Створимо необхідні каталоги та налаштуємо права доступу
sudo mkdir -p /var/www/moodle /var/moodledata
sudo git clone -b MOODLE_500_STABLE https://github.com/moodle/moodle.git /var/www/moodle
sudo chown -R www-data:www-data /var/www/moodle /var/moodledata
Важливо: не плутайте каталоги!
/var/www/moodle
— код (там знаходиться index.php
),
/var/moodledata
— дані (там не повинно бути публічних PHP-файлів).
Встановлення з Git-репозиторію
Створіть каталоги, клонувати стабільну гілку та виставте права.
sudo mkdir -p /var/www/moodle /var/moodledata
sudo chown -R www-data:www-data /var/moodledata
sudo chmod 770 /var/moodledata
sudo git clone -b MOODLE_500_STABLE https://github.com/moodle/moodle.git /var/www/moodle
sudo chown -R www-data:www-data /var/www/moodle
Налаштування Nginx
Створюємо віртуальний хост для Moodle
Сформуйте конфіг сайту з коректним root
, маршрутизацією та PHP-FPM.
[line_numbers,nginx]
server {
listen 80;
server_name SERVER_IP; # додайте IP або ваше доменне ім'я
root /var/www/moodle;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 300s;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|woff2?)$ {
try_files $uri =404;
access_log off;
expires 7d;
}
location ~ /. { deny all; }
}
Активуємо сайт і вимикаємо «дефолт»
Активуйте конфіг і перезавантажте Nginx.
sudo ln -sf /etc/nginx/sites-available/moodle.conf /etc/nginx/sites-enabled/moodle.conf
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
Налаштування PHP
Налаштовуємо ліміти PHP для Moodle
Відкрийте php.ini
і збільшіть ключові параметри.
memory_limit = 512M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
max_input_vars = 5000
cgi.fix_pathinfo = 0
Застосовуємо зміни PHP-FPM
Перезапустіть PHP-FPM і перевірте статус.
sudo systemctl restart php8.3-fpm
systemctl status php8.3-fpm --no-pager
Веб-інсталяція Moodle
Запускаємо майстер встановлення
Відкрийте http://YOUR_DOMAIN/
або http://SERVER_IP/
і пройдіть майстер:
- Виберіть мову, підтвердіть шляхи
MOODLE_DIR
таMOODLEDATA_DIR
.
- Виберіть драйвер MariaDB (mysqli), вкажіть
DB_NAME
,DB_USER
,DB_PASSWORD
.
- Дочекайтеся перевірки оточення та встановлення таблиць.
- Створіть обліковий запис адміністратора.
- Заповніть останні дані для початку використання:
Після виконання описаних кроків ви потрапите в панель адміністратора:
Додатково
Оптимізуємо OPcache
Впишіть базові налаштування кешування опкоду.
opcache.enable=1
opcache.memory_consumption=192
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=8000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
sudo systemctl restart php8.3-fpm
Перевірка та постінсталяційні дії
Перевірка версій компонентів
Переконайтеся, що версії відповідають очікуванням.
php -v && nginx -v && mariadb --version
Тестування cron
Перевірте, що фонові завдання виконуються.
sudo -u www-data php /var/www/moodle/admin/cli/cron.php
Налаштування резервного копіювання
Заплануйте бекап БД і moodledata
.
sudo mkdir -p /opt/backups
echo '0 3 * * * root mysqldump DB_NAME | gzip > /opt/backups/moodle-$(date +\%F).sql.gz' | sudo tee /etc/cron.d/moodle-db-backup
echo '30 3 * * * root tar -czf /opt/backups/moodledata-$(date +\%F).tgz /var/moodledata' | sudo tee -a /etc/cron.d/moodle-db-backup
Поширені помилки
Помилка / Симптом | Причина | Рішення | Діагностика (логи / команди) |
---|---|---|---|
Перевірка оточення вимагає sodium |
Розширення не завантажено або використовується інший PHP | Переконайтеся, що працює PHP 8.3 з Ubuntu (в ньому sodium вбудований), перезапустіть FPM | php -m , php -v , systemctl status php8.3-fpm |
«Недостатньо max_input_vars » |
Значення < 5000 | Підвищити до ≥ 5000 у php.ini , перезапустити FPM |
grep max_input_vars /etc/php/8.3/fpm/php.ini |
Сторінка без CSS / биті посилання | Неправильна обробка slash arguments в Nginx | Використовувати рекомендований FastCGI-блок з MoodleDocs | Перевірити конфіг сайту і sudo nginx -t |
403/404 при завантаженні файлів | Неправильні права MOODLEDATA_DIR |
Власник/права для www-data , chmod 770 |
sudo -u www-data touch MOODLEDATA_DIR/.test |
Помилка з’єднання з БД | Невірні креденшали / хост | Перевірити користувача/пароль і права | mysql -u DB_USER -p -h localhost DB_NAME |
Корисні посилання
Офіційна документація