Deploying Moodle: Difference between revisions

From The Opensource Knowledgebase
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 138: Line 138:
sudo su
sudo su
crontab -u www-data -e
crontab -u www-data -e
* * * * * /usr/bin/php  /path/to/moodle/admin/cli/cron.php >/dev/null
* * * * * /usr/bin/php  /var/www/html/moodle/admin/cli/cron.php >/dev/null
</pre>
</pre>



Revision as of 13:36, 24 May 2020

Setup Details
hostname: infrabase1
Network: 10.1.65.0/24
IP Address : 10.1.65.11
Subnet Mask: 255.255.255.0
Gateway: 10.1.65.1
DNS: 8.8.8.8
sudo user: kedar

Container: webserver
Network: 10.1.65.0/24
IP Address : 10.1.65.107
Subnet Mask: 255.255.255.0
Gateway: 10.1.65.1
DNS: 8.8.8.8
sudo user: kedar

Container: db1
Network: 10.1.65.0/24
IP Address : 10.1.65.108
Subnet Mask: 255.255.255.0
Gateway: 10.1.65.1
DNS: 8.8.8.8
sudo user: kedar

User PC Details
PC type: Desktop
OS: Ubuntu Desktop
IP Address: 10.1.65.160

Before you proceed

The domain used here is networked.com. This is used only for demonstration and required dns entries for this domain have already been done to the host file to make the domain and any subdomains reachable on the network. This domain may be owned by someone else and we do not know who it is and we are not linked to them. Moodle configured for this domain in this howto is not reachable on public IP. If you try networked.com and find any material that may be suitable / unsuitable to you, we are not the owners of the same and we are not responsible for the content.

Introduction

  • We shall be creating a website using moodle with FQDN as: https://moodle.networked.net
  • We shall be hosting the site on port number: 443
  • We shall be using a self signed SSL certificate
  • Host entry to ensure this website is reachable is done in the user PC, in absence of a DNS

Pre-requisites installation

  • Log into the webserver and run the below commands
ssh kedar@10.1.65.107
sudo apt install apache2 php7.2 php7.2-curl php7.2-gd php7.2-intl php7.2-json php7.2-mbstring php7.2-mysql php7.2-soap php7.2-xml php7.2-zip libapache2-mod-php7.2 
sudo apt install rsync nano openssl
sudo a2enmod ssl
sudo a2enmod rewrite
sudo systemctl restart apache2
sudo systemctl status apache2

Database Creation

  • Database will be created in a mariadb server which is installed into a container created on the host server (infrabase1). Latest mariadb server has been installed and run the below commands after an ssh into the mariadb server.
sudo mysql -u root -p
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodle'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
quit;

Create self signed certificates

  • Log into the webserver and run the below commands
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/moodle.key -out /etc/ssl/certs/moodle.crt
  • You can use a commercial self signed certificate if you have one or can also use free Lets Encrypt certificate

Download Moodle

  • Download & extract Moodle in the correct directory, giving permissions to the apache user
cd /var/www/html
sudo mkdir moodle
cd /home/kedar
wget https://download.moodle.org/download.php/direct/stable38/moodle-latest-38.tgz

Deploy Moodle

  • First create a data directory where all moodle data will be stored. Will be creating this folder on the root (/ partition). Will login using root, create the data folder and change the ownership of that folder to the apache user and group
sudo su
cd /
mkdir moodledata
chown -R www-data:www-data moodledata
exit
  • Extract moodle and copy the contents to root folder of moodle in /var/www/html/moodle
cd /home/kedar
tar -zxvf moodle-latest-38.tgz
cd moodle
sudo rsync -avz . /var/www/html/moodle
cd /var/www/html
sudo chown -R www-data:www-data moodle/
  • Create virtual host for the website
cd /etc/apache2/sites-available
sudo a2dissite 000-default.conf
sudo a2dissite default-ssl.conf
sudo nano moodle.conf
  • Add the below configuration in the moodle.conf file
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerName      moodle.networked.net
                ServerAlias     moodle
                ServerAdmin     admin@networked.net
                DocumentRoot /var/www/html/moodle

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                SSLEngine on
                SSLCertificateFile      /etc/ssl/certs/moodle.crt
                SSLCertificateKeyFile /etc/ssl/private/moodle.key
		<FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
		</VirtualHost>
</IfModule>
  • Enable the site and Restart apache service
sudo a2ensite moodle.conf
sudo sysemctl restart apache2
  • Using a browser navigate to https://moodle.networked.com
    • Answer various questions based on some of the steps we have done above like db name, db user, db server etc.
    • Login to moodle using the admin credentials

Cronjob for running all scheduled tasks in moodle

sudo su
crontab -u www-data -e
* * * * * /usr/bin/php  /var/www/html/moodle/admin/cli/cron.php >/dev/null

Conclusion

  • We have a working moodle website hosted on an apache web server. Explore the plugins and extensions and create a corporate learning portal