Moodle LMS Instaleation and Configuration
Moodle is the world's most popular open-source learning management system, enabling educational institutions to create online courses and virtual learning environments. With features for course management, student assessment, collaboration tools, and gradebook functionality, Moodle serves millions of learners globally. This guide covers PHP setup, MySQL configuration, Nginx installation, cron job setup, and performance optimization.
Tabla de contenidos
- Prerequisites
- System Requirements
- Web Server Instaleation
- PHP Configuration
- Database Setup
- Moodle Instaleation
- Web Server Configuration
- SSL Configuration
- Cron Job Setup
- Performance Optimization
- Plugin Instaleation
- Backup Strategy
- Conclusion
Requisitos previos
Ensure you have:
- Ubuntu 20.04 LTS or later
- Root or sudo access
- A registered domain name
- Minimum 4GB RAM (8GB+ recommended)
- 30GB available disk space
- Basic Linux administration knowledge
Actualice los paquetes del sistema:
sudo apt update && sudo apt upgrade -y
Requisitos del sistema
Verifique las especificaciones del sistema:
Check OS version:
cat /etc/os-release
uname -m
Check available resources:
free -h
df -h
Instalación del servidor web
Instale Nginx:
sudo apt install -y nginx
Inicie y habilite Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
Verifique Nginx:
sudo systemctl status nginx
Configuración de PHP
Instale PHP 8.0 or later with required extensions:
sudo apt install -y php-fpm php-cli php-common php-mysql php-xml php-mbstring php-json php-curl php-gd php-intl php-imap php-ldap php-opcache php-pspell php-zip php-soap
Check PHP version:
php --version
Verifique extensions:
php -m
Configure PHP for Moodle:
sudo nano /etc/php/8.0/fpm/php.ini
Update critical settings:
memory_limit = 512M
max_execution_time = 600
upload_max_filesize = 200M
post_max_size = 200M
max_input_vars = 5000
max_input_time = 300
date.timezone = UTC
Configure PHP-FPM pool:
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Update:
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.process_idle_timeout = 10s
Reinicie PHP-FPM:
sudo systemctl restart php8.0-fpm
Configuración de la base de datos
Instale MySQL Server:
sudo apt install -y mysql-server
Start and secure MySQL:
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation
Cree Moodle database:
sudo mysql -u root -p << EOF
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'moodle'@'localhost' IDENTIFIED BY 'SecurePassword123!';
GRANT ALL PRIVILEGES ON moodle.* TO 'moodle'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF
Test connection:
mysql -u moodle -p -h localhost moodle
EXIT;
Moodle Instaleation
Cree web root directory:
sudo mkdir -p /var/www/moodle
sudo chown -R www-data:www-data /var/www/moodle
cd /var/www/moodle
Cree data directory outside web root:
sudo mkdir -p /var/www/moodledata
sudo chown -R www-data:www-data /var/www/moodledata
sudo chmod 700 /var/www/moodledata
Descargue Moodle:
cd /tmp
wget https://download.moodle.org/download.php/direct/stable402/moodle-latest-402.tgz
tar -xzf moodle-latest-402.tgz
sudo cp -r moodle/* /var/www/moodle/
Establezca los permisos correctos:
sudo chown -R www-data:www-data /var/www/moodle
sudo find /var/www/moodle -type f -exec chmod 644 {} \;
sudo find /var/www/moodle -type d -exec chmod 755 {} \;
Web Server Configuration
Cree Nginx configuration:
sudo nano /etc/nginx/sites-available/moodle
Add configuration:
upstream moodle {
server unix:/var/run/php/php8.0-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name moodle.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name moodle.example.com;
ssl_certificate /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/moodle;
index index.php;
client_max_body_size 200M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /\. {
deny all;
}
}
Enable site:
sudo ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
SSL Configuration
Instale Certbot:
sudo apt install -y certbot python3-certbot-nginx
Obtain SSL certificate:
sudo certbot certonly --nginx -d moodle.example.com
Verifique certificate:
sudo openssl x509 -in /etc/letsencrypt/live/moodle.example.com/fullchain.pem -noout -dates
Configure auto-renewal:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Cron Job Setup
Configure Moodle cron:
sudo nano /usr/local/bin/moodle-cron.sh
Add:
#!/bin/bash
cd /var/www/moodle
sudo -u www-data /usr/bin/php admin/cli/cron.php
Make executable:
sudo chmod +x /usr/local/bin/moodle-cron.sh
Schedule cron job:
sudo crontab -e
Add:
*/5 * * * * /usr/local/bin/moodle-cron.sh >> /var/log/moodle-cron.log 2>&1
Verifique cron is working:
cd /var/www/moodle
sudo -u www-data php admin/cli/cron.php
Optimización del rendimiento
Enable caching:
- Navigate to Site Administration → Plugins → Caching → Configuration
- Enable alternative cache stores
- Configure Redis or Memcached (if available)
Configure Redis for caching (optional):
sudo apt install -y redis-server
sudo systemctl start redis-server
sudo systemctl enable redis-server
Configure in Moodle config.php:
sudo nano /var/www/moodle/config.php
Add:
$CFG->cache_stores = array(
'default_application' => array(
'mode' => 'application',
'class' => 'cachestore_redis',
'server' => 'localhost:6379',
),
);
Configure session handler:
$CFG->session_handler_class = '\core\session\redis';
$CFG->session_redis_host = 'localhost';
$CFG->session_redis_port = 6379;
Plugin Instaleation
Descargue useful plugins:
- Login as administrator
- Navigate to Site Administration → Plugins → Instale Plugins
- Search for and install plugins
Popular plugins:
- BigBlueButtonBN (video conferencing)
- Attendance (attendance tracking)
- Turnitin (plagiarism detection)
- Restrict Courses (course restrictions)
Backup Strategy
Cree backup script:
sudo nano /usr/local/bin/moodle-backup.sh
Add:
#!/bin/bash
BACKUP_DIR="/backups/moodle"
MOODLE_DIR="/var/www/moodle"
DATA_DIR="/var/www/moodledata"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Database backup
mysqldump -u moodle -p'SecurePassword123!' moodle | gzip > "$BACKUP_DIR/moodle-db-$DATE.sql.gz"
# Files backup
tar -czf "$BACKUP_DIR/moodle-data-$DATE.tar.gz" "$DATA_DIR"
# Keep only 30 days
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $DATE"
Make executable:
sudo chmod +x /usr/local/bin/moodle-backup.sh
Schedule daily backups:
sudo crontab -e
Add:
0 3 * * * /usr/local/bin/moodle-backup.sh >> /var/log/moodle-backup.log 2>&1
Complete Moodle setup:
Navigate to https://moodle.example.com and complete the Moodle installation wizard:
- Database configuration
- Admin account creation
- Site configuration
Conclusión
Moodle is now fully installed and configured as a comprehensive learning management system. With MySQL database, Nginx web server, SSL encryption, and cron job automation, you have a robust platform for online education. Configure courses, enroll students, and leverage Moodle's extensive features for effective learning outcomes. Regular backups and maintenance ensure platform reliability and data integrity.


