Can Open Edx Enterprise run with Tutor?

Before I spend time trying to get Enterprise to work I just want to know, can Open Edx Enterprise run with Tutor?

I am happy with a ‘yes’ or ‘no’ answer but any additional guidance not listed in the enterprise docs would be appreciated. Particularly if it needs to be enabled in config files, what is the enabler variable etc.

I currently don’t have eCommerce enabled as this project is for a not for profit, but we have multiple different organization’s that would value being able to enroll and report their own learners. So if an alternative can be advised, that would also be appreciated.

Thanks in advance

Hi @dancasey! I am not familiar with Open edX Enterprise. Can you please give me some pointers?
This means that Enterprise will not work out of the box with Tutor. However, it doesn’t mean that it will not work with Tutor: any Open edX component can work with Tutor, provided you create the right plugin. If you need support for creating such a plugin, please don’t hesitate to get in touch.

Perfect @regis thanks, I will try and get it set up but with the understanding that I might need to develop a plugin and so shouldn’t promise it as deliverable by next week :grin:

From the enterprise documentation. It would seem that it is shipped as part of edx-platform, and only requires configuring from Admin.

However, this blog post from opencraft from April 2020 (only checked the date now), states that “making use of all functionality provided by the Open edX Enterprise Service requires a working setup of ecommerce and course-discovery”.

I will set some time aside for trying to integrate in enterprise in the coming weeks, and will report back with any issues and hopefully any solutions

@dancasey did enterprise work with tutor?? I have done all required backend configuration (catalogue + tutor e-commerce is running) but unable to access the site >

I was trying to map :: new_org.localhost (*in local environment) to test this but it didn’t work. Please let me know your thoughts.

@regis : running at 3.12. version of tutor


@venkat.330 I am only getting back to look at this today. I will configure catalogue + tutor e-commerce, and let you know how I get on.

Thanks, we are still trying to understand this.
however, in the local environment added “new_org.localhost” in nginx.conf to allow request and we were able to see catalogue. your thoughts and workflow would be helpful.



Where did you add “new_org.localhost”? I don’t see nginx.conf, but can see env/apps/nginx/extra.conf
Where are you now seeing the catalogue?

I am struggling with getting my LMS (localhost) to communicate with the discover app.

Could you advice if we have configured in similar ways or if there are anythings I’ve missed?

I am running tutor V3.12.5, which is running inside a venv.

Steps taken:

  1. Enabled discover and ecommerce
    $ tutor plugins enable discovery ecommerce
    $ tutor local quickstart

  2. Created super users for both discover and ecommerce
    $ tutor local run ecommerce ./ createsuperuser
    $ tutor local run discovery ./ createsuperuser

  3. Checked applications were running by navigating to http://discovery.localhost and http://ecommerce.localhost. Both look to be running with access to the admin panels after login in

  4. Add new catalogue in discovery containing all courses - http://discovery.localhost/admin/catalogs/catalog/add/
    Name: myCat
    Query: GET /api/v1/search/courses

  5. Add new enterprise customer - http://localhost/admin/enterprise/enterprisecustomer/add/
    No catalogues listed in the drop down selector.
    Clicking ‘Create a new catalogue’ attempts to go to http://discovery:8000/admin/catalogs/catalog/add/, but returns ‘server not found’
    Expected it to point at discover.localhost

  6. Add Catalog integration - http://localhost/admin/catalog/catalogintegration/add/
    Set Internal API URL: http://discovery.localhost/api/v1
    Prompt states DEPRECATED: Use the setting COURSE_CATALOG_API_URL

  7. Check if catalogue is visible at http://localhost/admin/enterprise/enterprisecustomer/add/
    Catalogues are now visible but ‘View catalog …’ and Create a new catalog’ still point to ‘discover:8000’

  8. Set COURSE_CATALOG_API_URL = "http://discovery:8000" as suggested [here] (Lms <-> discovery communication). First tried this by setting in cms.env.json and lms.env.json, but then
    $ tutor config printvalue COURSE_CATALOG_API_URL
    and got http://discovery.localhost.
    $ tutor config save --set COURSE_CATALOG_API_URL=“http://discovery:8000
    $ tutor config printvalue COURSE_CATALOG_API_URL
    and got http://discovery:8000

    http://discover:8000 still responds with ‘Server not found’

1 Like

[quote=“dancasey, post:7, topic:645, full:true”]

Where did you add “new_org.localhost”? I don’t see nginx.conf, but can see env/apps/nginx/extra.conf
Where are you now seeing the catalogue?



server {
listen 80;
server_name localhost preview.localhost new_org.localhost ;

Rest other config looks ok for me… also

can you set COURSE_CATALOG_API_URL as http://discovery.localhost. , it should work make sure *new_org.localhost is allowed host of your LMS conf (JSON / :: just for testing

Edited tutor/env/app/nginx/lms.conf:

  server { 
  listen 80; 
  server_name localhost preview.localhost new_org.localhost; 

Edited tutor/env/apss/openeds/settings/lms/

COURSE_CATALOG_API_URL = "http://discovery.localhost"


Navigated to - http://localhost/admin/enterprise/enterprisecustomer/add/

‘Create a new catalog’ link now successfully navigates to http://discovery.localhost/admin/catalogs/catalog/add/ but the catalog is not then listed in the dropdown.

Are you able to select a catalog when adding a new enterprise customer?
What enterprise documentation are you using? (The documentation found via github, seems pretty out of date)

did you index your courses ??

to understand catlouges further:: you can run kibana instance for trouble shooting purpose

docker run -d --name kibana_local --net tutor_local_default -p 5601:5601 -e ELASTICSEARCH_URL=http://elasticsearch:9200 kibana:4.1.3

Thanks @venkat.330, I have yet to dive into the world of elasticsearch and kibana, and beginning to think I might be biting off more than I can chew tackling this.

I will do a bit more research using the links you provided and decide whether our project really needs the added complexity of Enterprise (since Tutor has been be pretty simple so far). All I really want to achieve is separate reporting for a number of different groups, by a group reporter that is not STAFF. Maybe a hack of Figures, but that would be another learning curve for another forum thread :roll_eyes:

The following is only an FYI and as I said I should probably do more research.


$ tutor local run discovery ./ refresh_course_metadata --partner_code=openedx

Returns error

requests.exceptions.ConnectionError: HTTPConnectionPool(host=‘’, port=80): Max retries exceeded with url: /oauth2/access_token (Caused by NewConnectionError(’<requests.packages.urllib3.connection.HTTPConnection object at 0x7fd8896c4860>: Failed to establish a new connection: [Errno -2] Name or service not known’,))
Error: Command failed with status 1: docker-compose -f /home/dan/ClimateIreland/CIL/tutor/env/local/docker-compose.yml --project-name tutor_local run --rm discovery ./ refresh_course_metadata --partner_code=openedx

I presume because doesn’t actually exist.

But when I run a blank query from http://discovery.localhost/, it successfully returns the single course on my platform…so just presumed the courses were indexed and searchable.

Even I am exploring what can be done with entriprise. It looks to be to attractive and think will be an effective feature to use in edx considering we should know to use catalogue & course_runs properly.

This conversation was a great read for me, and thank you a lot for sharing your findings with Enterprise and Course Discovery!

All I really want to achieve is separate reporting for a number of different groups, by a group reporter that is not STAFF.

This is exactly what I also would like to do! (and I’m hoping to be able to use the “catalog” and “program” features of course discovery as well)

@dancasey and @venkat.330 I was wondering if either of you got it all to work in the end. If so, I would be very happy if you could share the last missing pieces of the puzzle here. Thanks in advance!

1 Like

This convo helped alot setting up tutor with enterprise.I was able to set enterprise-catalog, enterprise, discovery, ecommerse similar to that in devstack but now i am unable to fetch /enterprise/login and all other enterprise related urls.So if this topic is active any help would be really appreciated.

Hi Maarten. I did not pursue this via the Course Discovery or Enterprise. I didn’t really have the time to dig into the code or try to integrate my own plugin so I just run reports in a jupyter notebook. Though this is not ideal it might help others with smaller systems because it is working fine for me.

Our platform only runs a single course so it is a little more straightforward, but each course run has learners from about 40 different organizations that need to be reported separately. The course is 3hrs long, course runs are 6 weeks, about 2000 learners are enrolled per course run. So 3 course runs in and 6000 completed and this process seems to work away fine.

Once a week;

  1. Manually download the Grade Report and CSV of learners who can enroll
  2. Run jupyter script that
    a. Combines the two downloaded CSVs and assigns each learner a status (Not registered, Registered/in progress, Complete)
    b. References a local json file to create separate csv reports for each organization based on email domain or other email pattern.
    c. Develops overall report with a Plolty chart to show overall progress / completion rate of each organization
  3. The files are then uploaded to individual folders on a shared drive to be accessed by the relevant training officers.

This might seem a bit messy but allowed for very specific reporting, and takes no more than 10min a week. It would be nice to just have the reports emailed to the relevant organizations but conscious of GDPR (maybe overly so), we did not want to be sending emails that contained the contact details of employees.

Hope this helps someone.