Moodle Requirements
In order to run Moodle on your CentOS 7 server, you need the following requirements pre-installed:
- Web Server: Apache >= 2.0 compiled with mod_rewrite module, or Nginx
- PHP >= PHP 7.0 or above is recommended, with the following PHP extensions enabled: intl, Zip, XMLRPC, Soap and opcache
- MySQL 5.5.31 or later, MariaDB 5.5.31 or later or PostgreSQL 9.3 or later installed on your CentOS virtual server
- CentOS 7 VPS with root access enabled.
1. Login via SSH
Log in to your CentOS 7 VPS via ssh as user root
ssh roo@IP_Address -p Port_number
2. Update all packages
Once you are logged in to the server run the following command to make sure that all installed packages are up to date
yum clean all
yum update
3. Install LAMP stack
As mentioned in the requirements section of the tutorial, a LAMP stack (Apache, MySQL/MariaDB, and PHP) is required to run Moodle on the server. We will start with installing Apache web server
yum -y install httpd
Start the Apache web server and enable it to start upon server boot
systemctl enable httpd
PHP version 7.1 is not available in the default CentOS 7 repositories so we will use the Remi repository.
To install and enable both EPEL and Remi repositories run the following commands:
yum install epel-release
rpm -Uhv https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager –enable remi-php71
wgte
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
yum install yum-utils
yum-config-manager –enable remi-php72
Install PHP 7.1 and all necessary PHP modules using the following command:
yum install php php-common php-intl php-zip php-soap php-xmlrpc php-opcache php-mbstring php-gd php-curl php-mysql php-xml
Yum update
During the installation, the yum package manager will prompt you to install the Remi GPG Signing key. Accept the key by typing ‘y’ and the package manager will install all necessary PHP extensions.
In order to complete the LAMP installation, install the MariaDB database server using the following command:
yum -y install mariadb mariadb-server
Start the MariaDB service and set it to start on reboot
systemctl start mariadb
systemctl enable mariadb
Run the ’ mysql_secure_installation’ post-installation script provided by MariaDB to strengthen the security of the database server and set a root password. You can use the following options:
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
4. Install Moodle on CentOS 7
Moodle is not available in the official CentOS 7 repositories, so we will have to download the latest stable version from the official website page at https://download.moodle.org/releases/latest/ and extract the Moodle archive to a directory on the server by executing the following commands:
cd /opt
wget https://download.moodle.org/download.php/direct/stable35/moodle-latest-35.tgz -O moodle-latest.tgz
tar -xvzf moodle-latest.tgz
mv /opt/moodle/ /var/www/html/moodle/
This will create a new directory named ‘moodle’ containing the necessary files and directories.
Change the ownership of the /var/www/html/ directory:
chown -R apache:apache /var/www/html/
5. Configure Apache to serve Moodle
Create a new Apache configuration file and add the following contents below to the /etc/httpd/conf.d/moodle.conf file using vi or your favorite text editor:
# vi /etc/httpd/conf.d/moodle.conf
Add the following lines:
<VirtualHost *:80>
ServerAdmin admin@your-domain.com
DocumentRoot /var/www/html/moodle
ServerName your-domain.com
ServerAlias www.your-domain.com
Alias /moodle “/var/www/html/moodle/”
<Directory /var/www/html/moodle/>
Options +FollowSymlinks
AllowOverride All
</Directory>
ErrorLog /var/log/httpd/moodle-error_log
CustomLog /var/log/httpd/moodle-access_log common
</VirtualHost>
Save the changes and restart the Apache web server for the changes to take effect:
systemctl restart httpd
6. Create a MariaDB database for Moodle
Log into MariaDB with the root account:
# mysql -u root -p
Now we will create a MariaDB database for Moodle using the following query:
mysql> CREATE DATABASE moodledb;
Add a separate user for Moodle that will interact with the database:
mysql> GRANT ALL PRIVILEGES ON moodledb.* to ‘moodle’@’localhost’ IDENTIFIED BY ‘5tr0ng_Pa55w0rd’;
Execute the following command to apply the privileges we set:
mysql> FLUSH PRIVILEGES;
Now we can exit the MariaDB session:
mysql> quit
Edit the MariaDB configuration file (/etc/my.cnf.d/server.cnf) and add the following lines:
[client]
default-character-set = utf8mb4
[mysqld]
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
[mysql]
default-character-set = utf8mb4
Restart MariaDB service for the changes to take effect
service mariadb restart
You can now open a web browser and access the Moodle application at http://your-domain.com
From here you can finish the setup by following the steps below:
- Choose a language for the Moodle installation.
- Confirm the website address, Moodle directory, and data directory.
- Choose a database driver (improved MySQL or MariaDB).
- Enter the database settings: localhost or 127.0.0.1 as database host, then enter a database name, username, password, database port (3306), and once you have filled in the form, click Next.
- Edit the /var/www/html/moodle/config.php configuration file and replace ‘mysqli’ with ‘mariadb’.
- Moodle will check to make sure that your server meets the Moodle requirements. If everything is OK, click Next.
- Enter a username, password and email address for the administrator user account.
- Complete registration with Moodle.net.moodle
That’s it, now you should have successfully installed Moodle on your CentOS 7 server.