Install Moodle eLearning Platform on Debian 9

Install Moodle eLearning Platform on Debian 9

Moodle is a flexible and powerful free open source course management system and e-learning platform written in PHP and often deployed in Linux under Apache/Nginx web servers with PHP and MySQL/MariaDB database management system, also known as LAMP or LEMP stack.

This tutorial will explain how to install and configure the latest version of Moodle in Debian 9 release in order to create an e-learning platform at your premises.

Moodle platform offers an intuitive web interface that can be used by educators and trainers to store course data and to keep track of students, grades and online courses. Most major universities worldwide are deploying Moodle e-learning platform in order to ease the educational activities for their students and teachers.


In order to successfully install and deploy Moodle, your server needs to meet the below requirements.

  • A Debian 9 server installed with minimal software requirements on a bare-metal server machine or on a virtual private server
  • direct access to root account via console or SSH or remote or direct access to an account with root privileges gained via sudo utility
  • A network interface card configured with a static IP address
  • In order to use Moodle email registration, notifications or another type of features you should properly set up a mail server properly at your premises with access to IMAP, POP3 and SMTP services.
  • A private or a public domain name, depending on your deployment, with the proper DNS records configured for web services. If don’t have a valid or a registered domain name you can perform the installation and access the website via your server IP address

Install Apache, PHP, and MySQL

In the first step, before you start to install and configure Moodle platform, first log in to your server with root account or an account with root powers and start to update Debian system repositories and software packages by issuing the below commands.apt update

apt upgrade

Next, after you’ve updated the system software, configure the name for your Debian server by executing the following commands. Make sure you replace the hostname variable to match your own settings, as illustrated in the below example.hostnamectl set-hostname www.myblog.com

Then, you can verify your machine hostname and hosts file by issuing the below commands.hostnamectlcat /etc/hostnamehostname –shostname –f

In order to apply the kernel updates and apply the hostname changes, issue the below command to reboot the machine.systemctl reboot

One of the most important LAMP components for deploying Moodle learning platform is an RDBMS database that is used by the web application to store different configurations, such as users, sessions, contacts and other data. In this tutorial, we’ll configure Moodle CMS with MariaDB database backend with loopback access to MySQL database. This means that the database can only be accessed via localhost or address. No external connections can be made to MySQL database. In order to install MariaDB database server and client in Debian 9 server, issue the below command.apt install mariadb-server mariadb-client

After MariaDB database has finished installing in your Debian server, issue netstat command as shown in the below example in order to check if the service is up and running and listens for connections on localhost, port 3306.netstat –tlpn | grep mysql

In case netstat network utility is not installed by default in your Debian system, execute the below command to install it.apt install net-tools

The MySQL root account is not properly secured in Debian 9 at installation time. You can log in to the database without a root password. In order to secure the root account, log in to MySQL server console and secure execute the following commands.mysql -h localhostWelcome to the MariaDB monitor. Commands end with ; or g.

Your MariaDB connection id is 2

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.MariaDB [(none)]> use mysql;Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changedMariaDB [mysql]> update user set plugin='' where user='root';Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0MariaDB [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> exitBye

After you’ve properly enforced the database root account, execute the mysql_secure_installation script, provided by Debian stretch repositories while installing the database, in order to further secure MySQL database.The script will ask you a series of questions designed to secure MariaDB database: if you want to change MySQL root password, to remove anonymous users, to disable remote root logins and delete the test database. Execute the script by issuing the below command and assure you type yes to all questions, as shown in the below script output excerpt:mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB


In order to log into MariaDB to secure it, we'll need the current

password for the root user. If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y

... Success!

Normally, root should only be allowed to connect from 'localhost'. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y

... Success!

By default, MariaDB comes with a database named 'test' that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y

- Dropping test database...

... Success!

- Removing privileges on test database...

... Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y

... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

Finally, after you’ve secured MySQL daemon, log in to the database console and provide no password for root account. The access to the database should be denied if no password is provided for the root account, as illustrated in the below command excerpt:mysql -h localhost -u rootERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Logging in to MySQL database console should be granted if you provide the root password, as shown in the command sample:mysql -h localhost -u root -pEnter password:

Welcome to the MariaDB monitor. Commands end with ; or g.

Your MariaDB connection id is 15

Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> exit


Moodle CMS is a web-based application that is mostly written in PHP server-side programming language. So far we’ve installed only MySQL database component of LAMP. In order to execute the PHP file scripts of the application, a web server, such as Apache HTTP server, and a PHP processing gateway must be installed and operational in the system. In order to install Apache web server and the PHP interpreter alongside with all required PHP modules needed by the application to run properly, issue the following command in your server console.apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-mysql php7.0-gd php7.0-opcache php7.0-json php7.0-mbstring php7.0-xml php7.0-ldap php7.0-cli php7.0-curl php7.0-ldap php7.0-zip php7.0-bcmath php-imagick php7.0-xmlrpc php7.0-soap php7.0-intl

Issue the following command in order to verify if all the installed PHP modules are enabled in your systemphp7.0 –m

After Apache and PHP have been installed, test if the web server is up and running and listening for network connections on port 80 by issuing the following command with root privileges.netstat –tlpn

From the netstat command output we can see that Apache web server is listening for incoming network connections on port 80. For the same task, you can also use the ss command, which is automatically installed, by default, in Debian 9.ss- tulpn

In case the UFW firewall application is installed and enabled in Debian server, you should add a new rule to allow HTTP traffic to pass through the firewall by issuing the following command.ufw allow WWW

orufw allow 80/tcp

In case iptables raw rules are used by the system administrator to manage Firewall rules in Debian server, add the following rules to allow port 80 inbound traffic on the firewall so that visitors can browse the online application.apt-get install -y iptables-persistentiptables -I INPUT -p tcp --destination-port 80 -j ACCEPTnetfilter-persistent savesystemctl restart netfilter-persistentsystemctl status netfilter-persistentsystemctl enable netfilter-persistent.service

In case you are remotely managing your Debian server via SSH, make sure you add the below rule to allow incoming SSH connections to your machine.iptables -I INPUT -p tcp --destination-port 22 -j ACCEPTnetfilter-persistent savesystemctl restart netfilter-persistent

You might also need to enable and activate the following Apache modules required by the Moodle application to run properly, by issuing the below commands.a2enmod rewritesystemctl restart apache2

Finally, test if Apache web server default web page can be displayed in your client’s browser by visiting your Debian machine IP address or your domain name or server FQDN via HTTP protocol, as shown in the below image. If you don’t know your machine IP address, execute ifconfig or ip a command to reveal the IP address of your server.


view as pdf | print

Đăng ký liền tay Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !

Add Comment

Click here to post a comment

Đăng ký liền tay
Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !