Deploying Moodle: Difference between revisions
Jump to navigation
Jump to search
(3 intermediate revisions by the same user not shown) | |||
Line 44: | Line 44: | ||
=Pre-requisites installation= | =Pre-requisites installation= | ||
* Log into the webserver and run the below commands | * Log into the webserver and run the below commands | ||
< | <pre> | ||
ssh kedar@10.1.65.107 | 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 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 | ||
Line 52: | Line 52: | ||
sudo systemctl restart apache2 | sudo systemctl restart apache2 | ||
sudo systemctl status apache2 | sudo systemctl status apache2 | ||
</ | </pre> | ||
=Database Creation= | =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. | *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. | ||
< | <pre> | ||
sudo mysql -u root -p | sudo mysql -u root -p | ||
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | ||
Line 61: | Line 61: | ||
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
quit; | quit; | ||
</ | </pre> | ||
=Create self signed certificates= | =Create self signed certificates= | ||
* Log into the webserver and run the below commands | * Log into the webserver and run the below commands | ||
< | <pre> | ||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/moodle.key -out /etc/ssl/certs/moodle.crt | openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/moodle.key -out /etc/ssl/certs/moodle.crt | ||
</ | </pre> | ||
* You can use a commercial self signed certificate if you have one or can also use free Lets Encrypt certificate | * You can use a commercial self signed certificate if you have one or can also use free Lets Encrypt certificate | ||
=Download Moodle= | =Download Moodle= | ||
*Download & extract Moodle in the correct directory, giving permissions to the apache user | *Download & extract Moodle in the correct directory, giving permissions to the apache user | ||
< | <pre> | ||
cd /var/www/html | cd /var/www/html | ||
sudo mkdir moodle | sudo mkdir moodle | ||
cd /home/kedar | cd /home/kedar | ||
wget https://download.moodle.org/download.php/direct/stable38/moodle-latest-38.tgz | wget https://download.moodle.org/download.php/direct/stable38/moodle-latest-38.tgz | ||
</ | </pre> | ||
=Deploy Moodle= | =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 | * 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 | ||
< | <pre> | ||
sudo su | sudo su | ||
cd / | cd / | ||
Line 85: | Line 85: | ||
chown -R www-data:www-data moodledata | chown -R www-data:www-data moodledata | ||
exit | exit | ||
</ | </pre> | ||
* Extract moodle and copy the contents to root folder of moodle in /var/www/html/moodle | * Extract moodle and copy the contents to root folder of moodle in /var/www/html/moodle | ||
< | <pre> | ||
cd /home/kedar | cd /home/kedar | ||
tar -zxvf moodle-latest-38.tgz | tar -zxvf moodle-latest-38.tgz | ||
Line 94: | Line 94: | ||
cd /var/www/html | cd /var/www/html | ||
sudo chown -R www-data:www-data moodle/ | sudo chown -R www-data:www-data moodle/ | ||
</ | </pre> | ||
* Create virtual host for the website | * Create virtual host for the website | ||
< | <pre> | ||
cd /etc/apache2/sites-available | cd /etc/apache2/sites-available | ||
sudo a2dissite 000-default.conf | sudo a2dissite 000-default.conf | ||
sudo a2dissite default-ssl.conf | sudo a2dissite default-ssl.conf | ||
sudo nano moodle.conf | sudo nano moodle.conf | ||
</ | </pre> | ||
* Add the below configuration in the moodle.conf file | * Add the below configuration in the moodle.conf file | ||
< | <pre> | ||
<IfModule mod_ssl.c> | <IfModule mod_ssl.c> | ||
<VirtualHost _default_:443> | <VirtualHost _default_:443> | ||
Line 124: | Line 124: | ||
</VirtualHost> | </VirtualHost> | ||
</IfModule> | </IfModule> | ||
</ | </pre> | ||
* Enable the site and Restart apache service | * Enable the site and Restart apache service | ||
< | <pre> | ||
sudo a2ensite moodle.conf | sudo a2ensite moodle.conf | ||
sudo sysemctl restart apache2 | sudo sysemctl restart apache2 | ||
</ | </pre> | ||
* Using a browser navigate to https://moodle.networked.com | * 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. | ** 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 | ** Login to moodle using the admin credentials | ||
=Cronjob for running all scheduled tasks in moodle= | |||
<pre> | |||
sudo su | |||
crontab -u www-data -e | |||
* * * * * /usr/bin/php /var/www/html/moodle/admin/cli/cron.php >/dev/null | |||
</pre> | |||
=Conclusion= | =Conclusion= |
Latest revision as of 05:38, 9 June 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