Richie, the best OpenSource CMS to build education portals
Learning Management Systems (LMS) are great tools for hosting and playing interactive online
courses and MOOCs.
However, if you need to build a complete website with flexible content to aggregate your courses, in several languages and from different sources, you will soon need a CMS.
At "France Université Numérique", we wanted to build an OpenSource portal with
Django. That's why we built
Richie on top of DjangoCMS, one of
the best CMS on the market, as a toolbox to easily create full fledged websites with a catalog of
Among the features that
Richie offers out of the box:
- multi-lingual by default,
- advanced access rights and moderation,
- catalog of courses synchronized with one or more
- search engine based on
Elasticsearchand pre-configured to offer full-text queries, multi-facetting, auto-complete,...
- flexible custom pages for courses, organizations, categories, teachers, blog posts (and their inter-relations),
- Extensible with any third-party
DjangoCMSplugin or any third-party
You can test Richie on our demo site.
The database, is regularly flushed.
Richie is a container-native application but can also be installed
on your machine.
For development, the project is defined using a docker-compose file and consists of 4 services:
- db: the
- elasticsearch: the search engine,
- app: the actual
DjangoCMSproject with all our application code,
- node: used for front-end related tasks, i.e. transpiling
TypeScriptsources, bundling them into a JS package, and building the CSS files from Sass sources.
At "France Université Numérique", we deploy our applications on
First, make sure you have a recent version of Docker and Docker Compose installed on your laptop:
$ docker -v Docker version 1.13.1, build 092cba3 $ docker-compose --version docker-compose version 1.17.1, build 6d101fb
sudo but this can be avoided by assigning your
user to the
The easiest way to start working on the project is to use our
$ make bootstrap
This command builds the
app container, installs front-end and back-end dependencies, builds the
front-end application and styles, and performs database migrations. It's a good idea to use this
command each time you are pulling code from the project repository to avoid dependency-related or
Now that your
Docker services are ready to be used, start the full CMS by running:
$ make run
You should be able to view the site at localhost:8070
Once the CMS is up and running, you can create a superuser account:
$ make superuser
You can create a basic demo site by running:
$ make demo-site
Note that if you don't create the demo site and start from a blank CMS, you will get some errors requesting you to create some required root pages. So it is easier as a first approach to test the CMS with the demo site.
This project is intended to be community-driven, so please, do not hesitate to get in touch if you have any question related to our implementation or design decisions.
We try to raise our code quality standards and expect contributors to follow the recommandations from our handbook.
Checking your code
We use strict flake8, pylint, isort and black linters to check the validity of our backend code:
$ make lint-back
We use strict tslint and prettier to check the validity of our frontend code:
$ make lint-front
On the backend, we use pytest to run our test suite:
$ make test-back
On the frontend, we use karma to run our test suite:
$ make test-front
The first time you start the project with
make bootstrap, the
db container automatically
creates a fresh database named
richie and performs database migrations. Each time a new
database migration is added to the code, you can synchronize the database schema by running:
$ make migrate
Handling new dependencies
Each time you add new front-end or back-end dependencies, you will need to rebuild the application. We recommend to use:
$ make bootstrap
To go further
To see all available commands, run:
We also provide shortcuts for docker-compose commands as sugar scripts in the
bin ├── exec ├── pylint ├── pytest └── run
More details and tips & tricks can be found in our development with Docker documentation
This work is released under the MIT License (see LICENSE).