Guide d’installation d’edX

Introduction

edX est une plateforme de formation en ligne qui permet de proposer des « MOOC » (cours en ligne ouverts à tous). L’objectif de ce guide technique est de vous expliquer pas à pas comment installer un serveur de production. Il est aussi possible de mettre en place un serveur de développement, aspect que nous ne traiterons pas ici.

edX propose de mettre en place très rapidement un environnement « Fullstack » (ie de production) via une machine virtuelle. Pour un serveur de production, surtout s’il s’agit d’un VPS (la méthode n’est en général pas applicable), nous éviterons cette méthode.

Nous nous basons sur l’expérience que nous avons de la plateforme à l’INARES.

Nous aborderons les points suivants (dans des parties différentes) :

  • installation
  • configuration et utilisation
  • que faire en cas de problème (troubleshooting)
  • configuration avancée
  • personnalisation du thème (theming)
  • maintenance et l'administration

 

Documentation

Voici quelques ressources qui pourront vous servir par la suite :
Wiki de la plateforme edX
Comment faire l’installation sur un serveur Ubuntu 12.04 x64
Forum d’aide (Google Groups)

 

Matériel nécessaire

edX est gourmand en ressources (CPU, mémoire, I/O), surtout l’installation, la mise à jour et la personnalisation. Nous vous recommandons donc d’avoir au moins :

  • 2 core ou 2 vCPU suffisamment performants
  • 4 Go de mémoire vive (RAM)
  • 30 Go d’espace disque libre (il vaut mieux prévoir 50 Go)
  • La distribution Linux Ubuntu server 12.04 x64 (attention, edX n’est pas encore compatible avec les versions plus récentes d’Ubuntu)

Évidemment, si votre plateforme accueil de nombreux utilisateurs, vous devrez avoir une configuration plus musclée.

Vous pouvez utiliser un serveur VPS pour essayer edX. Si votre budget est limité, voici deux possibilités : Digital Ocean, Firstheberg (uniquement les versions HQ).

Attention : edX ne fonctionne pas sous OpenVZ. Certains VPS sont proposés avec cette méthode de virtualisation. Un des composant d’OpenVZ n’est pas compatible (AppArmor).

 

Installation

edX préconise d’utiliser un script qui réalise automatiquement l’installation. D’expérience, il vaut mieux l’éviter et réaliser les étapes à la main. Cette façon de faire n’est pas compliquée et permet de mieux maîtriser le processus, surtout que l’installation plante souvent. edX est en plein développement et n’est pas forcément stable.

edX préconise d’utiliser un script qui réalise automatiquement l’installation. D’expérience, il vaut mieux l’éviter et réaliser les étapes à la main. Cette façon de faire n’est pas compliquée et permet de mieux maîtriser le processus, surtout que l’installation plante souvent. edX est en plein développement et n’est pas forcément stable.

 

Première étape : installation du système

Installer d’abord Ubuntu Server 12.04.5 x64.

Mettez à jour en suite Ubuntu de la façon suivante :

  • sudo apt-get update
  • sudo apt-get dist -y
  • sudo apt-get dist-upgrade -y

Installer ensuite certains packages de base :

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

Le reboot est nécessaire. Dans le cas contraire, le système ne trouvera pas la commande pip.

 

Installation avec Ansible

Il est préférable de respecter les répertoires préconisés par edX. Toutefois, n’hésitez pas à mettre vos fichiers ailleurs si votre espace disque est insuffisant, puis faites un lien (par exemple : ln -s /home/configuration /var/tmp). Vous devez disposer d’au moins 8 Go de libre.

On récupère tout d'abord les fichier de configuration pour Ansible

  • cd /var/tmp
  • git clone https://github.com/edx/configuration

L’installation est automatiquement réalisée par Ansible. Par défaut, le processus d’installation interdit la connexion en SSH avec un mot de passe. Prenez donc vos disposition en générant des clés ou modifiez le fichier « configuration/playbooks/roles/common/defaults/main.yml » en mettant « COMMON_SSH_PASSWORD_AUTH: "yes" ».

Au cas où vous auriez un Firewall, n'oubliez pas d'ouvrir le port pour git, l'installation n'utilisant pas HTTPS (port 443) mais le protocole git (port 9418). Si vous utilisez iptables (changez l'interface eth0 si besoin) :

  • sudo iptables -A OUTPUT -o eth0 -p tcp --dport 9418 -m state --state NEW,ESTABLISHED -j ACCEPT

Le fichier /etc/update-motd.d/51-cloudguest doit obligatoirement exister, créez le si besoin (la commande peut être lancée dans tous les cas) :

  • sudo touch /etc/update-motd.d/51-cloudguest

Enfin lancer l’installation, la dernière commande peut être très longue :

  • cd /var/tmp/configuration
  • sudo pip install -r requirements.txt
  • cd playbooks
  • sudo ansible-playbook -c local ./edx_sandbox.yml -i "localhost,"

Si tout se passe bien, votre serveur est en route. Pour y accéder :

  • utilisez le port 80 pour le site principal (LMS), par exemple http://127.0.0.1
  • utilisez le port 18010 pour le Studio, où vous pouvez créer et modifier les cours (CMS), par exemple http://127.0.0.1:18010

 

N'oubliez pas que vous pouvez modifier les fichiers /var/tmp/configuration/playbooks/roles/edxapp/defaults/main.yml et /var/tmp/configuration/playbooks/edx_sandbox.yml afin de personnaliser votre installation.

 

8 commentaires sur “Guide d’installation d’edX

  1. Bonjour, je voulais mettre en place un server edX et j’ai vu votre guide m’a beaucoup aide. J’ai rencontre des problemes lors de l’installation de la dierniere commande (sudo ansible-playbook -c local ./edx_sandbox.yml -i “localhost”).
    Merci cordialement.

    TASK: [edxapp | create checksum for requirements, package.json and Gemfile] ***
    failed: [localhost] => {« changed »: true, « cmd »: « /usr/bin/md5sum /edx/app/edxapp/edx-platform/requirements/edx/pre.txt /edx/app/edxapp/edx-platform/requirements/edx/post.txt /edx/app/edxapp/edx-platform/requirements/edx/base.txt /edx/app/edxapp/edx-platform/requirements/edx/custom.txt /edx/app/edxapp/edx-platform/requirements/edx/paver.txt /edx/app/edxapp/edx-platform/requirements/edx-sandbox/post.txt /edx/app/edxapp/edx-platform/requirements/edx-sandbox/base.txt 2>/dev/null > /var/tmp/edxapp.req.new « , « delta »: « 0:00:00.010949 », « end »: « 2015-11-16 15:19:21.118794 », « item »: «  », « rc »: 1, « start »: « 2015-11-16 15:19:21.107845 »}

    TASK: [edxapp | install python post-requirements] *****************************
    failed: [localhost] => {« cmd »: « /edx/app/edxapp/venvs/edxapp/bin/pip install -i https://pypi.python.org/simple -r /edx/app/edxapp/edx-platform/requirements/edx/post.txt », « failed »: true, « item »: «  »}
    msg: stdout: You are using pip version 6.0.8, however version 7.1.2 is available.
    You should consider upgrading via the ‘pip install –upgrade pip’ command.
    Collecting python-saml==2.1.3 (from -r /edx/app/edxapp/edx-platform/requirements/edx/post.txt (line 12))
    Using cached python_saml-2.1.3-py2-none-any.whl
    Collecting isodate==0.5.0 (from python-saml==2.1.3->-r /edx/app/edxapp/edx-platform/requirements/edx/post.txt (line 12))
    Using cached isodate-0.5.0.tar.gz
    Collecting M2Crypto==0.22.3 (from python-saml==2.1.3->-r /edx/app/edxapp/edx-platform/requirements/edx/post.txt (line 12))
    Using cached M2Crypto-0.22.3.tar.gz
    Collecting dm.xmlsec.binding==1.3.2 (from python-saml==2.1.3->-r /edx/app/edxapp/edx-platform/requirements/edx/post.txt (line 12))
    Using cached dm.xmlsec.binding-1.3.2.tar.gz
    Error: cannot get XMLSec1 pre-processor and compiler flags; do you have the `libxmlsec1` development package installed?
    Complete output from command python setup.py egg_info:
    Error: cannot get XMLSec1 pre-processor and compiler flags; do you have the `libxmlsec1` development package installed?

    —————————————-
    Command « python setup.py egg_info » failed with error code 1 in /tmp/pip-build-fFx4gg/dm.xmlsec.binding

    FATAL: all hosts have already failed — aborting

    PLAY RECAP ********************************************************************
    to retry, use: –limit @/home/edx/edx_sandbox.retry

    localhost : ok=171 changed=37 unreachable=0 failed=1

      • Bonjour, merci de votre reponse
        je l’ai fait puis relance l’installation et je tombe sur une autre erreur que je ne parvient pas a corrige la voici:
        failed: [localhost] => (item=lms) => {« changed »: true, « cmd »:  » /edx/app/edxapp/venvs/edxapp/bin/python manage.py lms syncdb –migrate –noinput –settings=aws_migrate « , « delta »: « 0:00:38.393931 », « end »: « 2015-11-22 14:21:08.472990 », « item »: « lms », « rc »: 1, « start »: « 2015-11-22 14:20:30.079059 »}
        stderr: Traceback (most recent call last):
        File « manage.py », line 111, in
        startup = importlib.import_module(edx_args.startup)
        File « /usr/lib/python2.7/importlib/__init__.py », line 37, in import_module
        __import__(name)
        File « /edx/app/edxapp/edx-platform/lms/startup.py », line 11, in
        settings.INSTALLED_APPS # pylint: disable=pointless-statement
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 48, in __getattr__
        self._setup(name)
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 44, in _setup
        self._wrapped = Settings(settings_module)
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 113, in __init__
        raise ImproperlyConfigured(« The SECRET_KEY setting must not be empty. »)
        django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
        failed: [localhost] => (item=cms) => {« changed »: true, « cmd »:  » /edx/app/edxapp/venvs/edxapp/bin/python manage.py cms syncdb –migrate –noinput –settings=aws_migrate « , « delta »: « 0:00:03.041400 », « end »: « 2015-11-22 14:21:11.819154 », « item »: « cms », « rc »: 1, « start »: « 2015-11-22 14:21:08.777754 »}
        stderr: Traceback (most recent call last):
        File « manage.py », line 111, in
        startup = importlib.import_module(edx_args.startup)
        File « /usr/lib/python2.7/importlib/__init__.py », line 37, in import_module
        __import__(name)
        File « /edx/app/edxapp/edx-platform/cms/startup.py », line 8, in
        settings.INSTALLED_APPS # pylint: disable=pointless-statement
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 48, in __getattr__
        self._setup(name)
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 44, in _setup
        self._wrapped = Settings(settings_module)
        File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 113, in __init__
        raise ImproperlyConfigured(« The SECRET_KEY setting must not be empty. »)
        django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

        FATAL: all hosts have already failed — aborting

      • Bonsoir, j ai repris l’installation et voici l »erreur que j’obtiens:
        failed: [localhost] => {« changed »: true, « cmd »: [« update-alternatives », « –set », « libblas.so.3gf », « /usr/lib/libblas/libblas.so.3gf »], « delta »: « 0:00:00.006642 », « end »: « 2015-11-23 10:19:08.880784 », « item »: «  », « rc »: 2, « start »: « 2015-11-23 10:19:08.874142 »}
        stderr: update-alternatives: error: no alternatives for libblas.so.3gf
        FATAL: all hosts have already failed — aborting

        PLAY RECAP ********************************************************************
        to retry, use: –limit @/home/serveredx/edx_sandbox.retry

        localhost : ok=148 changed=22 unreachable=0 failed=1

        Merci cordialement.

  2. Bonsoir et merci de votre reponse qui m’a beaucoup aide.
    Apres installation j’ai relance la commande et voici l’erreur que j’obtiens:
    failed: [localhost] => (item=lms) => {« changed »: true, « cmd »:  » /edx/app/edxapp/venvs/edxapp/bin/python manage.py lms syncdb –migrate –noinput –settings=aws_migrate « , « delta »: « 0:00:38.393931 », « end »: « 2015-11-22 14:21:08.472990 », « item »: « lms », « rc »: 1, « start »: « 2015-11-22 14:20:30.079059 »}
    stderr: Traceback (most recent call last):
    File « manage.py », line 111, in
    startup = importlib.import_module(edx_args.startup)
    File « /usr/lib/python2.7/importlib/__init__.py », line 37, in import_module
    __import__(name)
    File « /edx/app/edxapp/edx-platform/lms/startup.py », line 11, in
    settings.INSTALLED_APPS # pylint: disable=pointless-statement
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 48, in __getattr__
    self._setup(name)
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 44, in _setup
    self._wrapped = Settings(settings_module)
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 113, in __init__
    raise ImproperlyConfigured(« The SECRET_KEY setting must not be empty. »)
    django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
    failed: [localhost] => (item=cms) => {« changed »: true, « cmd »:  » /edx/app/edxapp/venvs/edxapp/bin/python manage.py cms syncdb –migrate –noinput –settings=aws_migrate « , « delta »: « 0:00:03.041400 », « end »: « 2015-11-22 14:21:11.819154 », « item »: « cms », « rc »: 1, « start »: « 2015-11-22 14:21:08.777754 »}
    stderr: Traceback (most recent call last):
    File « manage.py », line 111, in
    startup = importlib.import_module(edx_args.startup)
    File « /usr/lib/python2.7/importlib/__init__.py », line 37, in import_module
    __import__(name)
    File « /edx/app/edxapp/edx-platform/cms/startup.py », line 8, in
    settings.INSTALLED_APPS # pylint: disable=pointless-statement
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 48, in __getattr__
    self._setup(name)
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 44, in _setup
    self._wrapped = Settings(settings_module)
    File « /edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/django/conf/__init__.py », line 113, in __init__
    raise ImproperlyConfigured(« The SECRET_KEY setting must not be empty. »)
    django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

    FATAL: all hosts have already failed — aborting

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

CAPTCHA * Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.