DEV Community


Posted on • Updated on

How to install Open edx on Ubuntu 20.04


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.


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.


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
Enter fullscreen mode Exit fullscreen mode

2. Bootstrap the Ansible installation

export OPENEDX_RELEASE=open-release-lilac.master
wget -O - | sudo bash
Enter fullscreen mode Exit fullscreen mode

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
sudo wget
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
Enter fullscreen mode Exit fullscreen mode

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 -b lilac cubite-theme
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode


  • 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


application software files for all Open edx modules


all Ansible playbooks. You’ll learn a lot about how Ansible works simply by learning more about its folder structure


location to store server-vars.yml (further described in downstream repos)


“home” folder for all pip, ansible, and bash admin utilities


configuration files for all edx modules


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 lms --settings=production createsuperuser
Enter fullscreen mode Exit fullscreen mode

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                #LMS record         #Studio record        #Preview record
Enter fullscreen mode Exit fullscreen mode

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 :
  • DON’T :
  • DON’T :
  • DON’T :

Change lms.yml and studio.yml


open /edx/etc/lms.yml file with your favorite editor. Change following variables to domain names you just assigned to your instance

Enter fullscreen mode Exit fullscreen mode


open/edx/etc/studio.yml file with your favorite editor. Change following variables to domain names you just assigned to your instance

Enter fullscreen mode Exit fullscreen mode

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
It should look like following

server {
Enter fullscreen mode Exit fullscreen mode


open /edx/app/nginx/sites-available/cms file with our favorite editor and add the following after server { section
It should look like following

     server {
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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


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.


If you need any help contact us at

Top comments (2)

babakhalid profile image
Khalid BABA

Thank you for the great work,
Please how can I sign in to strapi to costumize cubite?

corpcubite profile image

Hi there
did you read ?
Please write us in DM if you need any help