Install Moodle 4.3 on Ubuntu 22.04: A Step-by-Step Tutorial

Musa Amin
4 min readJan 4, 2024

Moodle, an acronym for Modular Object-Oriented Dynamic Learning Environment, is a robust open-source platform designed to facilitate online learning and course management. Developed by Martin Dougiamas in 2002, Moodle has evolved into one of the most widely used Learning Management Systems (LMS) globally.

Whether you are an educator, administrator, or learner, Moodle offers a robust and flexible environment for creating and participating in online courses. In this tutorial, we will learn how to install Moodle 4.3 with the following specifications:

  • Vultr Cloud Server: 1 CPU, 1 GB RAM, 32 GB Storage
  • Operating System: Ubuntu 22.04 LTS
  • Subdomain: lms.aminlabs.my.id
  • SSL: Let’s Encrypt
  • Web Server: Apache
  • PHP: PHP v8.1
  • Database: MariaDB v10.6
  • Moodle: Moodle v4.3.2

Note: Register here to get $100 free credit from Vultr.

Step 1: Update system packages

Connect to your server and ensure your system packages are up-to-date:

apt update
apt upgrade -y

Note: This tutorial uses the root user.

Step 2: Install dependencies

Install the required dependencies for Moodle, Apache web server, PHP, and MariaDB database:

apt install apache2 libapache2-mod-php php-mysql php-mbstring php-curl php-tokenizer php-xmlrpc php-soap php-zip php-gd php-xml php-intl mariadb-server -y

Open the php.ini configuration file:

nano nano /etc/php/8.1/apache2/php.ini

Activate and configure the following settings:

max_input_vars = 5000

Step 3: Create a Database

Log in to MariaDB:

mysql

Creating a database for Moodle:

CREATE DATABASE lms_aminlabs DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON lms_aminlabs.* TO 'lms_aminlabs'@'localhost' IDENTIFIED BY 'secretpassword';
FLUSH PRIVILEGES;
exit

Step 4: Download Moodle

Download Moodle v4.3.2 from https://download.moodle.org:

wget https://packaging.moodle.org/stable403/moodle-4.3.2.tgz

Extract moodle-4.3.2.tgz:

tar xzvf moodle-4.3.2.tgz

Move the moodle directory to /var/www/lms.aminlabs.my.id/moodle-app :

mkdir /var/www/lms.aminlabs.my.id
mv moodle /var/www/lms.aminlabs.my.id/moodle-app

Create the moodle-data directory.

mkdir /var/www/lms.aminlabs.my.id/moodle-data

Change user-group and permissions for the lms.aminlabs.my.id directory.

chown -R www-data:www-data /var/www/lms.aminlabs.my.id
chmod -R 755 /var/www/lms.aminlabs.my.id

Step 5: Configure Virtual Host

Create a virtual host configuration for the subdomain lms.aminlabs.my.id:

nano /etc/apache2/sites-available/lms.aminlabs.my.id.conf

Insert the following virtual host configuration:

<VirtualHost *:80>
ServerName lms.aminlabs.my.id
DocumentRoot /var/www/lms.aminlabs.my.id/moodle-app
<Directory /var/www/lms.aminlabs.my.id/moodle-app>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/lms.aminlabs.my.id_error.log
CustomLog /var/log/apache2/lms.aminlabs.my.id_access.log combined
</VirtualHost>

Enable the rewrite module, virtual host, and restart Apache:

a2enmod rewrite
a2ensite lms.aminlabs.my.id
systemctl restart apache2

Check the status of the UFW firewall:

ufw status
Status: active

To Action From
-- ------ ----
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)

If UFW is active, allow HTTP and HTTPS ports:

ufw allow http
ufw allow https

Browse the subdomain to test whether Moodle is accessible:

Step 6: Configure HTTPS using Let’s Encrypt SSL

Install certbot:

apt install certbot python3-certbot-apache -y

Requesting an SSL certificate for the subdomain:

certbot --non-interactive -m admin@aminlabs.my.id --agree-tos --no-eff-email --apache -d lms.aminlabs.my.id --redirect

Example message displayed when the SSL certificate request is successful:

Requesting a certificate for lms.aminlabs.my.id

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/lms.aminlabs.my.id/fullchain.pem
Key is saved at: /etc/letsencrypt/live/lms.aminlabs.my.id/privkey.pem
This certificate expires on 2024-04-02.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for lms.aminlabs.my.id to /etc/apache2/sites-available/lms.aminlabs.my.id-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://lms.aminlabs.my.id

Browse the subdomain to test the results of the HTTPS configuration:

Step 7: Web installation

Continue the installation in the web browser. Choose the language, for example English (en), then click the Next.

Enter the path for the Moodle Data directory, which is /var/www/lms.aminlabs.my.id/moodle-data, then click the Next:

Database driver, choose MariaDB (native/mariadb), then click Next.

Enter database settings. Input Database name, Database user, and Database password. Then click Next:

Copyright notice, click Continueto confirm.

Checking if the server environment meets all the requirements. Click Continue if everything is OK:

The installation is in progress, click Continue when it’s finished:

Creating an admin account, then click Update profile.
Configure Site home settings, then click Save changes:

The installation of Moodle has been completed. Site registration, click Skip.

Congratulations! We have successfully installed Moodle 4.3 on Ubuntu 22.04. Let’s explore the platform’s features, customize our courses, and embark on a journey of seamless online learning with Moodle.

--

--