AlmaLinuxRHEL Based

How To Install Moodle on AlmaLinux 10

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.

Install Moodle on AlmaLinux 10

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.

VPS Manage Service Offer
If you don’t have time to do all of this stuff, or if this is not your area of expertise, we offer a service to do “VPS Manage Service Offer”, starting from $10 (Paypal payment). Please contact us to get the best deal!

r00t

r00t is an experienced Linux enthusiast and technical writer with a passion for open-source software. With years of hands-on experience in various Linux distributions, r00t has developed a deep understanding of the Linux ecosystem and its powerful tools. He holds certifications in SCE and has contributed to several open-source projects. r00t is dedicated to sharing her knowledge and expertise through well-researched and informative articles, helping others navigate the world of Linux with confidence.
Back to top button