Ed-tech industry in India was valued at US$750 million in 2020, and is projected to be $1.04 billion by 2021. (source)
I am documenting the process of edx installation on local system for evaluating. I’m not doing a comparision with any similar product here. Also, I’m writing this post from a develper’s perspective of course, because I’m a software developer. Don’t expect any business related expertise from here.
With this post, I’ll document my own learning. Mostly what technologies this project uses, and how the project is laid out and which tech is used by which component.
What is Open edX?
Open edX is a open source project which powers edx.org and thousands of other online education sites.
Talking about edx.org, edX is the online learning destination co-founded by Harvard and MIT. The Open edX platform provides the learner-centric, massively scalable learning technology behind it. Originally envisioned for MOOCs, Open edX platform has evolved into one of the leading learning solutions catering to Higher Ed, enterprise, and government organizations alike.
You can learn more about Open edX at their official website: https://openedx.org.
Enough of marketing now, now let’s get straight back to installation part.
There are two recommended ways to install openedx. Both of them are Docker oriented.
- Tutor: A community-supported Docker-based environment suited for both production and development.
- Devstack: A development environment based on Docker; useful if you want to modify Open edX code locally.
As I’m just trying out this project. I’ll use the Tutor version.
Apart from installation method, you can either choose to install a specific version, or the latest one from GitHub. I’ve decided to use Lilac Release, which is one of the recent release. You can find all the releases on Open edX Platform Releases page
As per the official documentation, the system requirements are as follows:
- Supported OS: 64-bit Unix based system. Avoid WSL.
- Architecture: AMD64, but ARM64 may be supported in future.
- Required runtime: Docker v18.06+ with Docker Compose v1.22.0
- Recommended hardware: 8GB RAM, 4CPU, 25GB disk space
Note: I don’t know how does above hardware requirement goes with Kubernetes deployment. That will be a good candidate for my new post in this series.
There are multiple ways to install Tutor. The first one listed on the documentation page shows the pip installation methed, that is the one we are going to use. Also, just for sake of awareness, I’m trying all of these on a Ubuntu 20.04 machine locally.
pip install tutor[full]
Note: I am doing it in a virtual environment so my system namespace is not polluted.
At this moment you may want to play around with the tutor command.
$ tutor --help Usage: tutor [OPTIONS] COMMAND [ARGS]... Tutor is the Docker-based Open edX distribution designed for peace of mind. Options: --version Show the version and exit. -r, --root PATH Root project directory (environment variable: TUTOR_ROOT) [default: /home/santosh/.local/share/tutor] -h, --help Show this message and exit. Commands: config Configure Open edX dev Run Open edX locally with development settings help Print this help images Manage docker images k8s Run Open edX on Kubernetes license Manage your Tutor licenses local Run Open edX locally with docker-compose plugins Manage Tutor plugins shell Interactive shell webui Web user interface xqueue Interact with the Xqueue server
In this section, we’ll do basic configuration to run our local instance of Open edX.
The next step I’m going to follow is:
tutor config save --interactive
This will ask some question.
Are you configuring a production platform? Type 'n' if you are just testing Tutor on your local computer [Y/n] n As you are not running this platform in production, we automatically set the following configuration values: LMS_HOST = local.overhang.io CMS_HOST = studio.local.overhang.io ENABLE_HTTPS = False Your platform name/title [My Open edX] Your public contact email address [[email protected]] The default language code for the platform [en] Configuration saved to /home/santosh/.local/share/tutor/config.yml Environment generated in /home/santosh/.local/share/tutor/env
The default location for the configuration is at $HOME/.local/share/tutor. You can also jump there by doing
cd "$(tutor config printroot)".
config.yml is the main file here.
You can see there are multiple sub-directories inside
env/ directory. These files here are generated from the main
config.yml, and as a consequence, every time the values from config.yml are modified, the environment must be regenerated with tutor config save.
As we are going to test the local installation, I’d highly recommend going through the
env/local directory. This directory has the docker-compose.yml files which are used to run the project locally.
We are doing doing local install, so I’d recommend running
tutor local once.
$ tutor local Usage: tutor local [OPTIONS] COMMAND [ARGS]... Run Open edX locally with docker-compose Options: -h, --help Show this message and exit. Commands: bindmount Copy the contents of a container directory to a... createuser Create an Open edX user and interactively set their... dc Direct interface to docker-compose. exec Run a command in a running container importdemocourse Import the demo course init Initialise all applications logs View output from containers quickstart Configure and run Open edX from scratch reboot Reboot an existing platform restart Restart some components from a running platform. run Run a command in a new container settheme Assign a theme to the LMS and the CMS. start Run all or a selection of services. stop Stop a running platform upgrade Perform release-specific upgrade tasks
Likewise, if you want to explore the k8s, or want to do development on edX, use the relevant tutor commands.
But for this post, I won’t go deep. Let’s start a local instance here:
tutor local start
The initial start may take some time as there are multiple images to be build. But at the end, you’d see something like this in your terminal:
All services initialised The Open edX platform is now running in detached mode Your Open edX platform is ready and can be accessed at the following urls: http://local.overhang.io http://studio.local.overhang.io
The first link is what a new student will see. The second link is something the course creator or site administrator will see.
You can do multiple things with this installation now. Some of them include:
- Log in as administrator
- Import demo course
- Change the look and feel
- Tweak if you have programming experience
- Deploy to Kubernetes
You can head over to https://docs.tutor.overhang.io/whatnext.html if you are interested in any of those.
Let’s talk about the main part here as a developer. The technologies used in this project are as follows:
- Python: There is heavy use of Python. Even tutor is written in Python.
- Docker: Docker of course is used, and there is also support for Kubernetes.
- Caddy & Nginx: Both are web servers and reverse proxies. Caddy is mostly used for load balancing and SSL termination.
- MongoDB & MySQL & Redis & Elasticsearch: Yes, all of them are used.
- devture/exim-relay: This is for handling mailing services.
Open edX is also composed of different frontend which in openedx’s language is called a mfe or micro frontends.
This project is good for someone like me who already has some experience in Python, MongoDB, Docker, Kubernetes, and Nginx. This can also be a good opportunity for me to learn more about Redis, Caddy and Elasticsearch.
This project is good for frontend developers too, as it uses React in it’s micro frontends.
I intend to experiment with this project to hone my skills. And I might make a follow up post on openedx getting deep into the development and deployment side.
PS: If you want to clean up the local setup environment, you can run
docker rmi $(docker images -q). This will cleanup all the images which were build during the long wait.