Introduction
Open edX is an open-source platform you can use to create and host online courses. It was originally developed in 2012 by scientists at MIT and Harvard University and has since been adopted by organizations of all shapes and sizes to power a wide range of online learning use cases.
Open edX is the world's leading online learning platform. Google, Microsoft LaaS are just some of its users who use it to train employees and onboard new customers.
It has also been adopted by Harvard, MIT, Arizona State University among others for both interactive content delivery as well as progress tracking capabilities in large courses with multiple participants at once through an open-source system that can be downloaded easily free of cost from their website.
You can find some of the real-world examples here:
One of the most prominent features of the Open edX learning platform is self-paced training, which allows students to learn at their own pace. Other features include online discussion groups, wiki-based collaborative learning, learning assessments as a student progresses through a course, right-to-left language support, learner analytics, cohort-specific content.
As you complete this article, your production-ready Open edX platform is installed on a Ubuntu 20.4 server that can serve thousands of students and host multiple courses with ease.
Versions
Since 2012 Open edX team released 12 versions of this learning management system. Each new release contains several new features for learners, course teams, and developers. You can view full release notes for each version on the Open edX website.
This article describes the steps needed to install Lilac on Ubuntu 20.04.
Prerequisites
An understanding of the following items is required for this installation option:
- Basic terminal usage
- The basics of how Python web applications are built, installed, and deployed.
- How to manage a Linux system, including supervisor.
- The basics of configuration management and automation using Ansible.
Server Requirements
A single server can support hundreds of registered students if the following requirements are met.
Ubuntu 20.04 server
You need a Ubuntu 20.04 amd64 server(oraclejdk required). This server should be accessible over SSH and have a public IP address associated with it for hosting your Open edX instance publicly available on the internet.
Minimum 8GB of memory
To run Open edX successfully, you need a minimum of 8GB of memory. Please ensure that your server has more memory than that. For better performance, you can utilize a larger compute instance size depending on the amount of memory you need to serve students.
At least one 2.00GHz CPU and 50GB of Disk Space
If you want to have a few courses and video materials, it's suggested that you have more than 50GB of disk space.
You should have wget
installed in your server.
If wget is not installed already, run sudo apt-get install wget
An understanding of the following items is required for this installation option:
HTTP firewall ports
After creating your Ubuntu server, Open the following HTTP ports used by Open edx
- 80
- 443
- 22
- 18010
- 18000
1. Prep the server
Launch your server and log in to it via SSH as a user that has full sudo privileges. Update your Ubuntu package sources:
sudo apt-get update -y
sudo apt-get upgrade -y
sudo reboot
2. Bootstrap the Ansible installation
export OPENEDX_RELEASE=open-release-lilac.master
wget https://raw.githubusercontent.com/edx/configuration/open-release/lilac.master/util/install/ansible-bootstrap.sh -O - | sudo bash
3. Prep the Ansible Configuration
Create a directy for edx-configs
where all the ansible configurations goes, download the configuration variables there, and generate strong passwords for different services like different MySQL users and MongoDB.
mkdir edx-configs && cd edx-configs
sudo wget https://raw.githubusercontent.com/edx/configuration/open-release/lilac.master/playbooks/sample_vars/passwords.yml
sudo wget https://raw.githubusercontent.com/cubiteDevops/do-edx-configs/main/vars.yml
while IFS= read line; do REPLACE=$(LC_ALL=C < /dev/urandom tr -dc 'A-Za-z0-9' | head -c35) && echo "$line" | sed "s/\!\!null/\'$REPLACE\'/"; done < ./passwords.yml | sudo tee ./my-passwords.yml
Be sure to save the generated passwords in a safe place
4. Download the Theme
Create a directory for theming assets and download Lilac theme there.
mkdir /edx-themes && sudo chmod -R 777 /edx-themes && cd /edx-themes
git clone https://github.com/cubitetech/theme -b lilac cubite-theme
This theme is responsive and made with one of the best frontend technologies, TailwindCSS.
5. Install Open edX
These instructions will potentially destroy the server they are run on, you should only do them on a freshly installed virtual machine
This can take some time, perhaps an hour.
cd /edx/app/edx_ansible/edx_ansible/playbooks/ && git checkout open-release/lilac.master
sudo /edx/app/edx_ansible/venvs/edx_ansible/bin/ansible-playbook -c local ./openedx_native.yml -i 'localhost,' -e@/root/edx-configs/my-passwords.yml -e@/root/edx-configs/vars.yml
Important
- Ubuntu may alert you that a newer version of Ubuntu is available when you SSH into your server and may suggest that you run
do-release-upgrade
to upgrade to that newer version. Don’t do it. - Pip may alert you that there is a newer version of pip available and may suggest that you run
pip install --upgrade pip
to install it. ** Don’t do it**.
6. Important Open edX Platform Folders
/edx/app
application software files for all Open edx modules
/edx/app/edx_ansible/edx_ansible/playbooks
all Ansible playbooks. You’ll learn a lot about how Ansible works simply by learning more about its folder structure
/edx/app/edx_ansible
location to store server-vars.yml (further described in downstream repos)
/edx/bin
“home” folder for all pip, ansible, and bash admin utilities
/edx/etc
configuration files for all edx modules
/edx/var
all data (app, logs, etcetera)
7. Add Superuser
After the installation is successful you need a superuser to be able to access the Django admin portal. To add superuser to your instance, SSH to the server and run the following command
sudo -H -u edxapp bash
source /edx/app/edxapp/edxapp_env
cd /edx/app/edxapp/edx-platform
python manage.py lms --settings=production createsuperuser
The prompt asks for a username, an email, and a password. After the user creation is complete visit http://public\_ip\_of\_your\_server/admin and login with the username (not the email) and password you picked previously.
This user has full access to your platform, Make sure you save your username and password in a secure place.
8. Enable SSL certificate
Installing an SSL certificate on your OpenX server is the best way to ensure security for both yourself and your students. The installation process only takes a few minutes.
It's highly recommended to install an SSL certification as soon as possible to keep users safe from any potential cyber-attacks.
Create DNS records
Open edx runs on Nginx, a fast, bare-bones webserver alternative to Apache, and like Apache, Nginx can host multiple virtual web servers on the same Ubuntu server instance. Each Open edX instance has at least 3 URLs. One for LMS, one for Studio, and One for Preview. Create A record in your DNS for each URL pointing to your server's public IP address. For example
mysite.com #LMS record
studio.mysite.com #Studio record
preview.mysite.com #Preview record
Open edX and edX are registered trademarks. You may not use “openedx.” or “edx.” as subdomains when naming your site. Here are some examples of unacceptable domain names:
- DON’T : openedx.yourdomain.org
- DON’T : edx.yourdomain.org
- DON’T : openedxyourdomain.org
- DON’T : yourdomain-edx.com
Change lms.yml
and studio.yml
lms.yml
open /edx/etc/lms.yml
file with your favorite editor. Change following variables to domain names you just assigned to your instance
PREVIEW_LMS_BASE: preview.mysite.com
LMS_BASE: mysite.com
LMS_ROOT_URL: https://mysite.com
CMS_BASE: studio.mysite.com
CROSS_DOMAIN_CSRF_COOKIE_DOMAIN:
LOGIN_REDIRECT_WHITELIST:
- studio.mysite.com
studio.yml
open/edx/etc/studio.yml
file with your favorite editor. Change following variables to domain names you just assigned to your instance
PREVIEW_LMS_BASE: preview.mysite.com
LMS_BASE: mysite.com
LMS_ROOT_URL: https://mysite.com
CMS_BASE: studio.mysite.com
LMS_INTERNAL_ROOT_URL: https://mysite.com
CROSS_DOMAIN_CSRF_COOKIE_DOMAIN:
LOGIN_REDIRECT_WHITELIST:
- studio.mysite.com
Change Nginx files
LMS and Preview
open /edx/app/nginx/sites-available/lms
file with our favorite editor and add the following after server {
section
server_name mysite.com preview.mysite.com
It should look like following
server {
server_name mysite.com preview.mysite.com
.
.
.
.
.
.
Studio
open /edx/app/nginx/sites-available/cms
file with our favorite editor and add the following after server {
section
server_name studio.mysite.com
It should look like following
server {
server_name studio.mysite.com
.
.
.
.
.
.
Install Certbot
The published installation procedure on the official Certbot site changed in late 2020. The good news is that the new installation procedure is very simple to follow assuming that you are running Ubuntu 20.04 LTS or later:
sudo apt-get update
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
When the prompt asks you for the Domain names, Make sure it covers LMS, Studio, and Preview addresses. Also, Choose Redirect to redirect all HTTP connections to HTTPS
Now you need to restart Nginx
sudo systemctl restart nginx
To verify that your configuration edits are correct you should check the server status after restarting:
sudo systemctl status nginx
Test Your Platform
If everything works then your Open edX LMS and CMS should automatically redirect to https.
Setup A Cron Job To Auto-Renew Your Certificate(s)
The Certbot packages on your system come with a cron job that will renew your certificates automatically before they expire. Since Let’s Encrypt certificates expire after only 90 days, it’s highly advisable to take advantage of this feature. You can test automatic renewal for your certificates by running this command:
sudo certbot renew --dry-run
If that appears to be working correctly, you can arrange for automatic renewal by adding a cron job that runs the following command regularly:
certbot renew
Create a new cron job and add renew command there.
crontab -e
and next add following the content of the opened file
0 7 * * * sudo certbot renew
9. Troubleshooting Guide
Restarting the platform
When your Open edX installation is misbehaving and you’re unsure of your next step, You begin with a reboot. It can’t hurt, and occasionally you’re pleasantly surprised to find your instance in good health immediately afterward. The commands are as follows:
/edx/bin/supervisorctl restart lms
/edx/bin/supervisorctl restart cms
Django configuration
If you’re not a Python Django developer and you haven’t previously supported a Django app then you’d have no reason to be aware that Django apps have their back end that’s somewhat similar to the WordPress admin console. From your web browser, open your LMS, login, and then navigate to /admin/
.
It's suggested that you spend some time getting acquainted with the parameters that are available to modify in the console.
Creating courses
In this article, we don't go over the details of how to create a course in your Open edX instance.
However, if you want to get started right away and skip all these complicated steps just head straight on over to your CMS URL, The studio URL you set in step 8. Once there log in with any user who has staff access such as the one created for yourself during Step 7. After logging into Studio successfully it's time to start creating courses.
Customizing Theme
The theme directory is located at /edx-themes
to customize it please follow Open edX instructions for comprehensive theming and changing theme
Conclusion
Open edX is a good alternative for businesses since it allows you to implement customizations, manage and update training courses. Open edX will enable organizations to deploy their learning platform and develop high-quality content for their learners by providing a strong LMS and Open edX Studio.
It is important to keep in mind that Open edX can be a complex system. However, following the right instructions and best practices will allow you to experience one of the most scalable LMSs available today.
References
- You can find official documentation at https://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/latest/index.html
- Open edX GitHub repository is located at: https://github.com/edx/edx-platform
If you need any help contact us at hello@cubite.io
Top comments (2)
Hello,
Thank you for the great work,
Please how can I sign in to strapi to costumize cubite?
Hi there
did you read strapi.io/blog/decouple-a-monolith... ?
Please write us in DM if you need any help