Problématique

La mise en place d’un serveur RapidPro suppose le déploiement d’une application intégrant divers composants dont :

  • des bases de données PostgreSQL et Redis

  • une application web développée à l’aide

    ** du framework Django (Python)

    ** d’outils JavaScript, notamment NodeJS, Less, CoffeeScript

Dans ce qui va suivre, nous allons successivement installer ces différents composants.

Création d’un utilisateur Linux

RapidPro requiert la création d’un utilisateur temba avec des droits d’administrateur

Créer l’utilisateur temba:

sudo adduser temba

Ajout de l'utilisteur Linux *temba*

Ajouter l’utilisateur temba au groupe d’administrateur sudo:

sudo usermod -aG sudo temba

Basculer vers le compte de l’utilisateur temba :

su - temba

Basculer vers le compte de temba

Installation de NodeJS

Nous allons d’abord installer l’utilitaire NVM qui permet de gérer facilement plusieurs versions de NodeJS.

Dans un premier temps, nous allons télécharger le script d’installation de NVM et l’exécuter

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

Installer NVM

Nous allons à présent nous déconnecter puis nous reconnecter afin forcer l’initialisation de l’environnement suite à l’installation de NVM.

exit 
su - temba

Nous pouvons vérifier que la commande nvm fonctionne correctement

nvm current

Installation de NodeJS Installer le patch le plus récent de la version 6 (v6..), au moment de l’écriture de cet article, il s’agit de la v6.11.2

nvm install v6

Installer Node

Vérifier le contenu du script téléchargé en demandant à nouveau à NVM la version courante de Node installée :

nvm current

Vérifier que notre installation de Node fonctionne correctement

node -v

Vérifier que dans le PATH il y a /home/temba/.nvm/versions/node/v6.11.2/bin/

echo $PATH
sudo ln -sf /home/temba/.nvm/versions/node/v6.11.2/bin/node /usr/bin/node

Verifier PATH

Installation de Redis

Nous allons maintenant installer Redis, un Système de gestion de base de données “mémoire” de type “clés - valeurs” .

Installation de Redis

sudo apt-get update
sudo apt-get install redis-server

Vérifier que Redis s’est bien installé

redis-server -v

Verifier Redis

Vérifier la version du client, nécessaire pour se connecter au serveur Redis

redis-cli -v

Verifier Redis client

Démarrer le serveur Redis et faire un ping pour vérifier que le serveur est en marche. En retour le serveur vous renvoie un PONG

redis-server
redis-cli ping

Demarrer Redis

Installation de Less

Less un langage au dessus de CSS qui permet de rajouter notamment des fonctions et des opérateurs au CSS. Less est utilisé dans la Webapp RapidPro. Nous allons donc installer le compilateur LESSC qui permettra de convertir les fichiers .less en format .css

Installer le compilateur par npm

npm install -g less

Verifier less

Vérifier que le compilateur Lessc est bien installé

which lessc
sudo ln -sf /home/temba/.nvm/versions/node/v6.11.2/bin/lessc /usr/bin/lessc

Verifier less

Installation de CoffeeScript

A présent, nous allons installer les outils de développement web côté serveur. Il s’agit de CoffeeScript un langage au dessus de JavaScript qui apporte un peu de sucre syntaxique au langage.

Installer CoffeeScript

npm install -g coffeescript

Une fois l’installation terminée, les commandes ‘coffee’ et ‘cake’, vont automatiquement explorer le répertoire personnel de l’utilisateur temba (~) pour trouver la version de CoffeeScript qui est installée en local.

sudo ln -sf /home/temba/.nvm/versions/node/v6.11.2/bin/coffee /usr/bin/coffee

Installer coffee

Installation de Bower

Nous allons maintenant installer Bower, un gestionnaire de packages semblable à npm, mais en plus des dépendances Node, il gère les composants (html, css, js, etc…) front-end des webapp. Il faut installer bower avec le module bower.

npm install bower -g

Installer bower

Installation de PostgreSQL

Nous allons commencer par installer le Système de gestion de base de données PostgreSQL ainsi que son plugin PostGIS qui permet de manipuler les données géospatiales.

Identifier le nom de code de votre distribution linux. Ce nom nous servira à l’étape 2., pour préciser la source où sera récupéré Postgresql

lsb_release -c

Verifier nom de code linux

Stretch est le nom de code de développement de Debian 9.

Créer le fichier /etc/apt/sources.list.d/pgdg.list

sudo touch /etc/apt/sources.list.d/pgdg.list

Ouvrir le fichier /etc/apt/sources.list.d/pgdg.list et rajouter la ligne suivante deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main

Modifier fichier postgress

Importer la clé du dépôt de Postgresql

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Importer cle postgress

Mettre à jour la liste de paquets :

sudo apt-get update

Installer PostgreSQL et PostGis :

sudo apt-get install postgresql postgis

Vérifier que Postgresql est bien installé :

which psql
psql --version

Verifier postgress install

Vérifions que l’utilisateur postgres a été créé : Par défaut un nouvel utilisateur postgresql est créé après l’installation de PostgreSQL. Il faut tout de même vérifier que l’utilisateur postgres a été créé par défaut

sudo -i -u postgres

Verifier utilisateur postgress

Créer l’utilisateur temba pour postgres : Grace à l’utilisateur Linux postgres avec lequel nous sommes connectés maintenant, nous avons accès à un ensemble d’utilitaires du SGBD Postgres. A l’aide de l’utilitaire “createuser” nous allons créer un user Postgres nommé temba et correspondant au user Linux temba. Le mot de passe de cet utilisateur temba dans Postgres sera temba.

createuser temba -P -d

Creer l'utilsateur temba pour postgress

L’option “-d” va permettre au nouvel utilisateur de créer des bases de données tandis que l’option “-P” va nous forcer à définir un mot de passe.

Créer la base de donnée temba

createdb temba

Lancer la console Postgres

 psql

A noter que comme nous étions logués dans Linux en tant que postgres, la commande précédente nous connecte dans Postgres en tant que postgres.

Dans Postgres, donner au user temba les droits de superuser

ALTER USER temba WITH SUPERUSER;

Donner les droits de superutilisateur a temba

Dans la console Postgres, attribuer les privilèges de ‘super user’ à l’utilisateur postgresql nommé temba. Cela lui permettra d’ajouter des extensions à sa base de données

Se deconnecter de la console Postgres

Ensuite, il faut se déconnecter de la base de données avec la commande:

\q

Se logger dans Linux en tant que temba

su - temba

Se logger en tant que temba

Passer à la console de Postgresql avec la commande :

psql

Vérifier que le user temba est connecté

\conninfo

Verifier que temba est connecte

Activer les extensions Postgis pour la base de données temba avec les commandes respectives :

create extension postgis;
create extension postgis_topology;
create extension hstore;

Activer extensions postgis

Déconnectez-vous de la base de données (\q) et allez dans le dossier personnel du compte temba (cd ~)

Cloner le projet RapidPro

Il s’agit de récupérer le projet RapidPro depuis Github vers votre serveur, avec l’outil Git. Git est un système de contrôle de version pour suivre les changements dans les fichiers informatiques et coordonner le travail sur ces fichiers parmi plusieurs personnes.

Installation de git Installer git sur le serveur s’il n’est pas disponible :

sudo apt-get install git -y

L’option y permet de répondre automatiquement ‘yes’ à toutes les confirmations interactives

Récupérer le code source

Récupérer le dépôt de RapidPro sur le serveur

 git clone https://github.com/rapidpro/rapidpro.git

Cloner git

Construire l’environnement virtuel

Lorsqu’on parcourt le projet Rapidpro, on trouve divers fichiers.

cd ~/rapidpro
ls -la

Construire environnement virtuel

Nous allons d’abord créer un lien symbolique /home/temba/rapidpro/temba/settings.py qui va pointer vers le fichier de configuration /home/temba/rapidpro/temba/settings.py.dev :

sudo ln -s  /home/temba/rapidpro/temba/settings.py.dev /home/temba/rapidpro/temba/settings.py

Installation de Python et ses paquets

Rapidpro est écrit en Python. Vous devriez toujours utiliser un environnement virtuel pour exécuter votre application RapidPro. Les dépendances nécessaire pour RapidPro se trouvent dans pip-freeze.txt. Installation de Python et de Pip (une mise à jour du système (Debian) suffit pour nous avoir Python à jour sur la machine)

sudo apt-get update
sudo apt-get -y upgrade

Vérifier que l’installation est bien effectuée

python  --version

Installer python-pip

sudo apt-get install python-pip

Vérifier que pip est installé par défaut avec Python.

apt-cache show python-pip

Verifier python install

Installer et démarrer l’outil virtualenv

Virtualenv est un outil pour créer des environnements Python isolés. Virtualenv crée un dossier contenant tous les exécutables nécessaires pour utiliser les paquets dont un projet Python aurait besoin.

Voici la commande pour installer Virtualenv

pip install virtualenv

Installer environnement virtuel

Démarrer l’outil virtualenv, pour récupérer ses dépendances et l’activer

sudo /usr/bin/easy_install virtualenv

Vérifier que la commande est opérationnelle

virtualenv --version

Demarrer environnement virtuel

Créer l’environnement virtuel

Exécutez la commande

sudo virtualenv env

Cette commande va créer un dossier dans le répertoire actif, pour contenir les fichiers exécutables Python et une copie de la bibliothèque pip, laquelle vous pouvez utiliser pour installer d’autres paquets. Le nom de l’environnement ainsi créé est env

Creer environnement virtuel

Activer l’environnement virtuel du projet

source env/bin/activate

L’activation de l’environnement fera apparaître le nom de l’environnement entre parenthèses au début du prompt Activer environnement virtuel

Désormais, tout paquet que vous installerez depuis l’environnement, avec pip sera placé dans le dossier env, isolé de l’installation globale Python.

Installer les composants supplémentaires

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

Finaliser installation env virtuel Dans le projet de Rapidpro, se trouve le fichier pip-freeze.txt. Ce fichier contient la liste des dépendances utiles pour finaliser la mise en place de l’environnement virtuel.

Faite la commande suivante pour restaurer l’environnement env et importe toutes les librairies nécessaire pour RapidPro, y compris DJANGO.

sudo pip install -r pip-freeze.txt

Vérifier que Django est bien installé :

django-admin --version

Installer les scripts Bower pour Rapidpro

A la racine du projet Rapidpro, il y a un fichier bower.json. Comme son nom l’indique, ce fichier sera exploité par l’outil Bower pour télécharger les dépendances Node du projet et gérer les composants frontend. Charger les dépendances listées dans le fichier bower.js avec la commande :

bower install

Modifier les configurations d’accès à la webapp

Il faut indiquer à Django l’IP du serveur sur lequel sera déployé Rapidpro

sudo vi  /home/temba/rapidpro/temba/settings.py.dev

Modifier config webApp

Migration et démarrage de Rapidpro

Vous devriez maintenant pouvoir exécuter toutes les migrations et initialiser votre serveur de développement Rapidpro. Ce processus inclut : la migration, l’initialisation de tous les groupes d’utilisateurs et les autorisations. Le processus peut durer jusqu’à plusieurs minutes. Ce vaut le coup de patienter.

Migrer la webapp et synchroniser la base de données

sudo python manage.py migrate

Démarrer le serveur

sudo python manage.py runserver 0.0.0.0:8000

Vérifier que Rapidpro est accessible pour les clients web Taper l’adresse publique de votre serveur avec le port 8000

Interface RapidPro

Sources

https://rapidpro.github.io/rapidpro/docs/development/ https://travis-ci.org/rapidpro/rapidpro/builds/124720331 https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-debian-8 http://docs.python-guide.org/en/latest/dev/virtualenvs/ https://www.tqhosting.com/kb/446/How-to-install-PostgreSQL-95-on-Debian-8-Jessie.html https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-9-4-on-debian-8

https://askubuntu.com/questions/370368/after-installing-coffee-script-the-coffee-command-is-found-but-does-nothing


Ginette HOUNKPONOU

Developer