How to install and start E-commerce service in Open edX navetive installations (Ubuntu 16.04)

Assumptions:
  1. You are installing this on an AWS instance of Ubuntu 12.04, 64-bit
  2. You have at least 30GB of space assigned to the root drive
  3. These instructions are as current as of the Fiscus.3 platform release
1. Update and install system dependencies

sudo apt-get update -y

sudo apt-get install -y build-essential software-properties-common python-software-properties curl git-core libxml2-dev libxslt1-dev libfreetype6-dev python-pip python-apt python-dev libxmlsec1-dev swig libmysqlclient-dev

sudo pip install --upgrade pip

sudo pip install --upgrade virtualenv

2. Clone the edx configuration repository and install edX and ecommerce

cd /var/tmp

git clone https://github.com/edx/configuration

cd /var/tmp/configuration

sudo pip install -r requirements.txt

sudo pip install setuptools --upgrade

cd /var/tmp/configuration/playbooks

nano -w edx_sandbox.yml

* Inside the edx_sandbox.yml file, change the SANDBOX_ENABLE_ECOMMERCE flag from False to True.

sudo ansible-playbook -c local edx_sandbox.yml -i "localhost,"

3. Create a superuser account

cd /edx/app/edxapp/edx-platform

sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws create_user -s -p edx -e user@example.com

sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws changepassword user

sudo -u www-data /edx/bin/python.edxapp ./manage.py lms --settings aws shell


from django.contrib.auth.models import User
me = User.objects.get(username="user")
me.is_superuser = True
me.is_staff = True
me.save()
exit()

NOTE: The username for this account will be the first half of the email address provided in line 2 (the user part). As such, user in lines 2, 3, and 7 should all be identical. In line 6, User is to be entered exactly as listed as that's referencing a django model and not an explit user.

4. Configure edX
Edit /edx/app/edxapp/lms.env.json (replacing <server> with the ip address or url of your server)


  • Change flag FEATURES['ENABLE_OAUTH2_PROVIDER'] to true
  • Change flag OAUTH_ENFORCE_SECURE to false if not using SSL; also change https to http for the remaining items.
  • Change flag JWT_ISSUER to "https://<server>:80/oauth2"
  • Change OAUTH_OIDC_ISSUER to "https://<server>:80/oauth2"
  • Change ECOMMERCE_API_URL to "http://<server>:18130/api/v2"
  • Change ECOMERCE_PUBLIC_URL_ROOT to "http://<server>:18130"
  • Change JWT_AUTH [ JWT_ISSUER ] to "https://<server>:80/oauth2"
  • Change CMS_BASE to "<server>:18010"
  • Change PREVIEW_LMS_BASE to "preview.<server>:18020"
  • Change LMS_BASE to "<server>:80"
  • Change LMS_ROOT_URL to "http://<server>:80"

5. Create and register client with OIDC/OAUTH
Browse to <server>/admin/oauth2/client/1/ and log into the django administration panel using the superuser username and password created earlier:

  • User: select the user we created earlier
  • URL is http://<server>:18130/
  • Redirect Url is https://<server>:18130/complete/edx-oidc/ (change to http is not using SSL)
  • Client type is Confidential (Web applications)
  • Logout uri: http://<server>:18130/logout/
  • Notate or change the Client ID and Client Secret. You will need this for the site configuration
  • Browse to <server>/admin/edx_oauth2_provider
  • Add trusted client
  • From the drop-down menu, select the redirect url you just entered

6. Instruct the LMS to use Otto ecommerce (the one we're setting up)

  • Browse to <server>/admin/commerce/commerceconfiguration and log into the django administration panel using the superuser username and password created earlier
  • Click the Add commerce configuration button in the upper right-hand corner
  • In the Add commerce configuration screen, check the boxes for Enabled and Checkout on ecommerce service. Then click the save button in the lower right-hand corner.


7. Configure ecommerce
Site configuration

sudo su ecommerce -s /bin/bash

cd ~/ecommerce

source ../ecommerce_env

python manage.py makemigrations

python manage.py migrate

python manage.py create_or_update_site --site-id=1 --site-domain=<server:18130 or url> --partner-code=edX --partner-name='Open edX' --lms-url-root=http://<server or url> --theme-scss-path=sass/themes/edx.scss --payment-processors=cybersource,paypal --client-id=<change to OIDC client ID> --client-secret=<change to OIDC client secret> --from-email=user@example.com

Notes:

  • Change payment-processors to the name of the processor(s) you are using.
  • For site-domain it is important to not include the http:// or https://


7. Edit /edx/etc/ecommerce.yml (replacing <server> with your server's IP or url)


  • Change COMMERCE_API_URL to http://<server>:80/api/commerce/v1/
  • Change COURSE_CATALOG_API_URL to  http://<server>:8008/api/v1/
  • Change ECOMMERCE_URL_ROOT to http://<server>:18130
  • Change ENROLLMENT_API_URL to http://<server>:80/api/enrollment/v1/enrollment
  • Change JWT_AUTH / JWT_ISSUERS (preserving the ecommerce_worker entry) to http://<server>:80/oauth2
  • Change LMS_DASHBOARD_URL to http://<server>:80/dashboard
  • Change LMS_HEARTBEAT_URL to http://<server>:80/heartbeat
  • Change LMS_URL_ROOT to http://<server>:80
  • Change OAUTH2_PROVIDER_URL to http://<server>:80/oauth2
  • Change SOCIAL_AUTH_EDX_OIDC_LOGOUT_URL to http://<server>:80/logout
  • Change SOCIAL_AUTH_EDX_OIDC_URL_ROOT to http://<server>:80/oauth2

Notes:

  • If you do not have SSL set up, edit /edx/app/ecommerce/ecommerce/ecommerce/settings/production.py
  • Just after the from ecommerce.settings.logger import get_logger_config line, add the following

DEBUG = True

  • Besides for creating http instead of https in the build_ecommerce_url function, what else does setting the DEBUG flag to True do?


8. Payment Processor configuration - PayPal
You will need to add a REST API application to your PayPal account. More information on how to do this can be found at the PayPal Developer Documentation site. You will need the API Credentials to fill in the appropriate sections below.
Edit /edx/etc/ecommerce.yml (Note that PayPal sandbox and live settings uses different ID and secret values)

  • cancel_url: http://<server>:80/commerce/checkout/cancel/
  • client_id: (your PayPal REST application client ID)
  • client_secret: (your PayPal REST application secret)
  • error_url: http://<server>:80/commerce/checkout/error/
  • mode: (either sandbox for testing or live for production use)
  • receipt_url: http://<server>:80/commerce/checkout/receipt/


9. Restart ecommerce and edxapp processes

sudo /edx/bin/supervisorctl restart edxapp: ecommerce:

Notes: 
If you're working with other Open edX repositories instead of the official one, please check when was the last commit. If the last commit of your Open edX repository is behind the e-commerce repository (e.g. 2 months), there is a chance that this tutorial will not work. If that's the case, you can fix it by do as following:

0. Go to Mysql and drop the e-commerce database (if you haven't done the database migration, skip this)

1. Go the the ecommerce directory:

cd /edx/app/ecommerce

2. Delete the default ecommerce source code directory:

rm -rf ecommerce

3. Clone again  the repo:

git clone https://github.com/edx/ecommerce.git

4. Go inside the repo:

cd ecommerce
(at this point, you're at the latest commit of master)

5. Checkout the desired commit (the one that was committed around the same time with your Open EdX's last commit):

git checkout <a commit hash>

6. Then run the migration


This guide was original published on the Open edX official wiki: https://openedx.atlassian.net/wiki/display/OpenOPS/How+to+Install+and+Start+the+E-Commerce+Service+in+Native+Installations