How To Install Moodle on AlmaLinux 10
Installing Moodle on AlmaLinux 10 provides educational institutions with a robust, secure learning management system built on enterprise-grade infrastructure. This comprehensive guide walks through every step of the Moodle installation process, from initial system preparation to final configuration optimization.
AlmaLinux 10 delivers the perfect foundation for Moodle deployment. Its RHEL compatibility ensures long-term stability, while built-in security features protect sensitive educational data. The combination creates an ideal environment for schools, universities, and training organizations seeking reliable e-learning platforms.
This tutorial covers complete Moodle installation procedures, security hardening techniques, performance optimization strategies, and troubleshooting solutions. Whether deploying for small classrooms or large educational networks, these instructions ensure successful Moodle implementation on AlmaLinux 10.
Prerequisites and System Requirements
Hardware Requirements
AlmaLinux 10 Moodle installations require adequate hardware resources to handle concurrent users and course content. Minimum specifications include 2 CPU cores, 4GB RAM, and 20GB storage for small deployments serving fewer than 100 users.
Recommended configurations scale significantly for larger institutions. Medium deployments supporting 500-1000 users benefit from 4-8 CPU cores, 8-16GB RAM, and 100GB+ SSD storage. Large educational networks require 16+ CPU cores, 32GB+ RAM, and enterprise-grade storage arrays with redundancy.
Storage considerations extend beyond initial installation requirements. User data directories grow rapidly with course materials, assignments, and multimedia content. Plan for 1-2GB per active user annually, plus additional space for backups and system logs.
Software Dependencies
AlmaLinux 10 systems require specific software components for successful Moodle deployment. PHP 8.3 or higher serves as the core requirement, with Moodle 5.0+ demanding modern PHP versions for security and performance benefits. Essential PHP extensions include sodium, intl, mbstring, curl, zip, xml, gd, and opcache.
Database server compatibility supports multiple options. MariaDB 10.11.0+ provides excellent performance for most installations, while MySQL 8.4+ offers enterprise-grade scalability. PostgreSQL 14+ delivers advanced features for complex deployments. Each database requires specific PHP extensions: MySQLi for MariaDB/MySQL, pgsql for PostgreSQL.
Web server requirements accommodate Apache 2.4+ or Nginx configurations. Nginx typically delivers superior performance for static content delivery, while Apache provides broader module compatibility. Both servers require SSL/TLS certificate support for secure HTTPS connections.
Network and Security Prerequisites
SSL certificates ensure encrypted communications between users and the Moodle platform. Let’s Encrypt provides free certificates with automated renewal, while commercial certificates offer extended validation options. Prepare certificate files before beginning installation procedures.
Firewall configuration planning identifies required network ports. Standard HTTP (80) and HTTPS (443) ports enable web access, while SSH (22) maintains administrative connectivity. Additional ports may be necessary for database replication, monitoring systems, or content delivery networks.
DNS configuration resolves domain names to server IP addresses. Create appropriate A records pointing to the AlmaLinux 10 server, plus AAAA records for IPv6 environments. Consider CNAME records for www subdomain redirection and mail exchange records for notification services.
System Preparation and Updates
Initial Server Access
Establish SSH connections to the AlmaLinux 10 server using secure authentication methods. Key-based authentication provides superior security compared to password-only access. Verify connection stability before proceeding with installation procedures.
ssh username@your-server-ip
AlmaLinux version confirmation ensures compatibility with installation procedures. Execute system identification commands to verify operating system release information.
cat /etc/almalinux-release
uname -a
User privilege validation confirms administrative access for software installation and configuration changes. Sudo access enables package management and system service control without direct root login.
sudo whoami
id
System Update and Package Management
DNF package manager usage maintains current software versions and security patches. Update all system packages before installing additional components to prevent compatibility conflicts.
sudo dnf update -y
sudo dnf upgrade -y
Essential utility packages support installation procedures and ongoing maintenance tasks. Install fundamental tools required for downloading, extracting, and configuring Moodle components.
sudo dnf install -y wget curl nano unzip git yum-utils epel-release
Repository configuration expands available software sources beyond default AlmaLinux repositories. Enable additional repositories for PHP, database, and web server packages.
sudo dnf config-manager --set-enabled powertools
sudo dnf install -y dnf-plugins-core
Security Hardening Basics
SELinux verification confirms security-enhanced Linux functionality remains active. AlmaLinux 10 enables SELinux by default, providing mandatory access controls for system security.
sestatus
getenforce
Basic firewall configuration restricts network access to essential services. Configure firewalld rules before installing web services to maintain security during installation.
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
LEMP Stack Installation
Nginx Web Server Installation and Configuration
Official Nginx repository setup ensures access to current stable releases. Add Nginx signing keys and repository configuration files to enable package installation.
sudo dnf install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Basic configuration optimization improves performance and security. Edit primary configuration files to adjust worker processes, connection limits, and security headers.
sudo nano /etc/nginx/nginx.conf
Configure worker processes based on CPU cores and adjust client connection settings:
worker_processes auto;
worker_connections 1024;
client_max_body_size 100M;
Virtual host preparation creates dedicated configuration files for Moodle domains. Establish server blocks with proper SSL configuration and PHP processing rules.
sudo mkdir -p /etc/nginx/sites-available
sudo mkdir -p /etc/nginx/sites-enabled
PHP Installation and Extension Setup
PHP 8.2+ installation provides the application runtime environment for Moodle. AlmaLinux 10 repositories include modern PHP versions with essential extensions.
sudo dnf install -y php php-fpm php-cli php-common php-curl php-gd php-intl php-mbstring php-mysqlnd php-opcache php-soap php-xml php-xmlrpc php-zip php-sodium php-bcmath php-json php-openssl
PHP-FPM configuration optimization enhances performance through process management tuning. Adjust pool settings, resource limits, and connection handling parameters.
sudo nano /etc/php-fpm.d/www.conf
Critical PHP-FPM settings for Moodle:
user = nginx
group = nginx
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
PHP configuration adjustments accommodate Moodle requirements for file uploads, memory usage, and execution time limits.
sudo nano /etc/php.ini
Essential PHP settings modifications:
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
max_input_vars = 5000
OPcache configuration accelerates PHP script execution through bytecode caching. Optimize cache settings for Moodle’s extensive codebase.
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
Database Server Setup
MariaDB installation and configuration provides reliable data storage for Moodle content and user information. Install MariaDB server packages and enable automatic startup.
sudo dnf install -y mariadb-server mariadb
sudo systemctl enable mariadb
sudo systemctl start mariadb
Database security hardening removes default accounts and test databases. Execute the secure installation script to improve database security posture.
sudo mysql_secure_installation
Moodle database creation establishes dedicated storage with proper character encoding. Create database, user account, and assign appropriate privileges.
sudo mysql -u root -p
Execute database setup commands:
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'secure_password_here';
GRANT ALL PRIVILEGES ON moodle.* TO 'moodleuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Connection testing verifies database accessibility with created credentials. Test connectivity before proceeding with Moodle installation.
mysql -u moodleuser -p moodle
Firewall and Security Configuration
Firewall Management
Service port configuration enables web traffic while maintaining security. Open necessary ports for HTTP and HTTPS communications.
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Custom port configurations accommodate non-standard service configurations. Add specific port rules for enhanced security through obscurity.
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
SELinux Configuration
Web directory contexts allow proper file access for Nginx and PHP processes. Configure SELinux labels for Moodle installation directories.
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_unified 1
Moodle-specific policies accommodate application requirements for network connections and file operations. Enable necessary boolean settings for full functionality.
sudo setsebool -P httpd_can_network_connect_db 1
sudo setsebool -P httpd_execmem 1
Moodle Download and File Preparation
Git-Based Installation Method
Git repository cloning downloads current Moodle source code directly from official repositories. This method simplifies future updates and maintenance procedures.
cd /tmp
git clone git://git.moodle.org/moodle.git
cd moodle
git branch -a
Stable branch selection ensures production-ready code deployment. Choose appropriate stable releases based on institutional requirements and support timelines.
git checkout MOODLE_500_STABLE
Directory Structure Creation
Application directory setup establishes the primary location for Moodle files. Create web-accessible directories with proper ownership and permissions.
sudo mkdir -p /var/www/html/moodle
sudo cp -R /tmp/moodle/* /var/www/html/moodle/
Data directory preparation creates secure storage for user uploads, course materials, and temporary files. Place data directories outside web-accessible paths for enhanced security.
sudo mkdir -p /var/moodledata
sudo chown -R nginx:nginx /var/www/html/moodle
sudo chown -R nginx:nginx /var/moodledata
Permission configuration balances functionality with security requirements. Set appropriate file and directory permissions for web server access.
sudo chmod -R 755 /var/www/html/moodle
sudo chmod -R 775 /var/moodledata
Nginx Virtual Host Configuration
Virtual Host File Creation
Server block configuration defines how Nginx processes requests for the Moodle domain. Create dedicated configuration files with optimized settings.
sudo nano /etc/nginx/sites-available/moodle
Complete Nginx configuration for Moodle:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
root /var/www/html/moodle;
index index.php index.html index.htm;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
Configuration activation enables the new virtual host through symbolic links. Link configuration files from available to enabled directories.
sudo ln -s /etc/nginx/sites-available/moodle /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Performance and Security Headers
Security header implementation protects against common web vulnerabilities. Add essential headers within server configuration blocks.
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Compression configuration reduces bandwidth usage and improves page load times. Enable gzip compression for appropriate file types.
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml+rss;
Moodle Web-Based Installation Process
Initial Setup Wizard
Browser-based installation completes final configuration through Moodle’s web interface. Navigate to the configured domain to begin the setup process.
Access the installation URL: https://your-domain.com
Language selection determines the primary interface language for administrative functions. Choose appropriate localization options based on institutional requirements.
Installation path verification confirms correct file and directory locations. Verify web and data directory paths match previous configuration steps.
Database Connection Configuration
Database driver selection specifies the connection method for data storage. Choose “Improved MySQL (Native/MySQLi)” for MariaDB installations.
Connection parameter input establishes communication with the database server. Enter previously configured database credentials and test connectivity.
- Database host: localhost
- Database name: moodle
- Database user: moodleuser
- Database password: secure_password_here
- Database prefix: mdl_
Connection testing verifies successful database communication. The installation wizard validates credentials and database accessibility before proceeding.
Administrative Account Creation
Site administrator setup creates the primary administrative account for Moodle management. Use strong passwords and valid email addresses for account recovery.
Profile configuration establishes essential administrative information including:
- Username (avoid common names like ‘admin’)
- Email address for notifications
- First and last name
- Password (minimum 8 characters, mixed case, numbers, symbols)
Site Configuration
Basic site information defines the primary identity and branding elements for the Moodle installation:
- Full site name
- Short site name for breadcrumbs
- Front page summary
- Default timezone selection
Email delivery configuration enables system notifications and user communications. Configure SMTP settings or system mail delivery methods.
Registration policies determine user account creation procedures. Configure self-registration options, email confirmation requirements, and default user roles.
Post-Installation Configuration and Optimization
Performance Enhancement
Caching system implementation dramatically improves site responsiveness and reduces server load. Configure application caching through Moodle’s administration interface.
Navigate to Site Administration > Plugins > Caching > Configuration. Enable caching stores and configure cache definitions for:
- Application cache: File system storage
- Session cache: Database storage
- Request cache: Static acceleration
Session storage optimization improves concurrent user handling. Configure session storage methods based on deployment scale and infrastructure.
sudo nano /var/www/html/moodle/config.php
Add session configuration:
$CFG->session_handler_class = '\core\session\database';
$CFG->session_database_acquire_lock_timeout_error = 120;
Database connection optimization enhances query performance through connection pooling and caching configurations.
$CFG->dboptions = array(
'dbpersist' => false,
'dbport' => '',
'dbsocket' => '',
'dbcollation' => 'utf8mb4_unicode_ci',
);
Security Hardening
Regular update scheduling maintains current security patches and feature improvements. Establish maintenance windows for system and application updates.
Create automated update scripts:
#!/bin/bash
cd /var/www/html/moodle
git fetch
git checkout MOODLE_500_STABLE
git pull
sudo chown -R nginx:nginx /var/www/html/moodle
Plugin security validation ensures third-party extensions maintain security standards. Review plugin sources and update schedules before installation.
User authentication hardening implements multi-factor authentication and password policies. Configure authentication methods through Site Administration > Plugins > Authentication.
Monitoring and Maintenance
Log file management maintains system health monitoring and troubleshooting capabilities. Configure log rotation and retention policies.
sudo nano /etc/logrotate.d/moodle
Log rotation configuration:
/var/www/html/moodle/moodledata/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
sharedscripts
}
Performance monitoring tracks system resource usage and identifies optimization opportunities. Implement monitoring solutions for CPU, memory, disk, and network utilization.
Database maintenance ensures optimal query performance and storage efficiency. Schedule regular maintenance tasks:
#!/bin/bash
mysql -u root -p -e "OPTIMIZE TABLE moodle.mdl_sessions;"
mysql -u root -p -e "ANALYZE TABLE moodle.mdl_log;"
Troubleshooting Common Issues
Installation Problems
Permission-related errors frequently occur during initial setup. Verify file ownership and directory permissions match web server requirements.
sudo chown -R nginx:nginx /var/www/html/moodle /var/moodledata
sudo chmod -R 755 /var/www/html/moodle
sudo chmod -R 775 /var/moodledata
Database connection failures indicate credential or connectivity issues. Verify database service status and connection parameters.
sudo systemctl status mariadb
mysql -u moodleuser -p moodle -e "SHOW TABLES;"
PHP extension errors prevent proper Moodle functionality. Install missing extensions and restart PHP-FPM service.
sudo dnf install -y php-sodium php-intl php-gd
sudo systemctl restart php-fpm
Performance Issues
Memory limit exceeded errors require PHP configuration adjustments. Increase memory limits in php.ini and restart services.
sudo sed -i 's/memory_limit = .*/memory_limit = 512M/' /etc/php.ini
sudo systemctl restart php-fpm
File upload limitations prevent course material uploads. Adjust upload size limits in both PHP and Nginx configurations.
Database query timeouts indicate performance bottlenecks. Optimize MariaDB configuration for Moodle workloads.
sudo nano /etc/my.cnf.d/server.cnf
MariaDB optimization settings:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
max_connections = 200
Best Practices and Maintenance
Regular Maintenance Tasks
System update procedures maintain security and stability. Schedule monthly update cycles during maintenance windows.
Moodle version upgrades introduce new features and security improvements. Plan upgrades during academic breaks to minimize disruption.
Database backup procedures protect against data loss. Implement automated backup solutions with offsite storage.
#!/bin/bash
mysqldump -u moodleuser -p moodle > /backup/moodle-$(date +%Y%m%d).sql
tar -czf /backup/moodledata-$(date +%Y%m%d).tar.gz /var/moodledata
Security Best Practices
User access management implements role-based permissions and regular access reviews. Establish clear policies for account creation, modification, and deletion.
Plugin management maintains security through regular updates and security assessments. Limit plugin installations to essential functionality from trusted sources.
SSL certificate maintenance ensures continuous encryption. Implement automated certificate renewal with monitoring alerts.
sudo certbot renew --dry-run
Congratulations! You have successfully installed Moodle. Thanks for using this tutorial for installing Moodle on the AlmaLinux OS 10 system. For additional help or useful information, we recommend you check the official Moodle website.