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
Ajouter l’utilisateur temba au groupe d’administrateur sudo:
sudo usermod -aG sudo tembaBasculer vers le compte de l’utilisateur temba :
su - 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
Nous allons à présent nous déconnecter puis nous reconnecter afin forcer l’initialisation de l’environnement suite à l’installation de NVM.
exit
su - tembaNous pouvons vérifier que la commande nvm fonctionne correctement
nvm currentInstallation 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
Vérifier le contenu du script téléchargé en demandant à nouveau à NVM la version courante de Node installée :
nvm currentVérifier que notre installation de Node fonctionne correctement
node -vVérifier que dans le PATH il y a /home/temba/.nvm/versions/node/v6.11.2/bin/
echo $PATHsudo ln -sf /home/temba/.nvm/versions/node/v6.11.2/bin/node /usr/bin/node
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-serverVérifier que Redis s’est bien installé
redis-server -v
Vérifier la version du client, nécessaire pour se connecter au serveur Redis
redis-cli -v
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
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
Vérifier que le compilateur Lessc est bien installé
which lesscsudo ln -sf /home/temba/.nvm/versions/node/v6.11.2/bin/lessc /usr/bin/lessc
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 coffeescriptUne 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
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
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
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.listOuvrir 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

Importer la clé du dépôt de Postgresql
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Mettre à jour la liste de paquets :
sudo apt-get updateInstaller PostgreSQL et PostGis :
sudo apt-get install postgresql postgisVérifier que Postgresql est bien installé :
which psql
psql --version
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
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
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 tembaLancer la console Postgres
psqlA 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;
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:
\qSe logger dans Linux en tant que temba
su - tembaPasser à la console de Postgresql avec la commande :
psqlVérifier que le user temba est connecté
\conninfoActiver les extensions Postgis pour la base de données temba avec les commandes respectives :
create extension postgis;
create extension postgis_topology;
create extension hstore;
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 -yL’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
Construire l’environnement virtuel
Lorsqu’on parcourt le projet Rapidpro, on trouve divers fichiers.
cd ~/rapidpro
ls -la
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.pyInstallation 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 upgradeVérifier que l’installation est bien effectuée
python --versionInstaller python-pip
sudo apt-get install python-pipVérifier que pip est installé par défaut avec Python.
apt-cache show python-pip
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
Démarrer l’outil virtualenv, pour récupérer ses dépendances et l’activer
sudo /usr/bin/easy_install virtualenvVérifier que la commande est opérationnelle
virtualenv --version
Créer l’environnement virtuel
Exécutez la commande
sudo virtualenv envCette 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

Activer l’environnement virtuel du projet
source env/bin/activateL’activation de l’environnement fera apparaître le nom de l’environnement entre parenthèses au début du prompt

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-devFinaliser 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.txtVérifier que Django est bien installé :
django-admin --versionInstaller 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 installModifier 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
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 migrateDémarrer le serveur
sudo python manage.py runserver 0.0.0.0:8000Vérifier que Rapidpro est accessible pour les clients web Taper l’adresse publique de votre serveur avec le port 8000

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