Written by

Nous sommes par­fois confron­tés à des cas d’utilisation où nous avons besoin de mélan­ger dif­fé­rentes tech­no­lo­gies pour exé­cu­ter nos appli­ca­tions. C’est deve­nu un cas d’utilisation si com­mun qu’on le trouve à la base de l’architecture micro-ser­vices. Nous avons ten­dance à mélan­ger les tech­no­lo­gies pour obte­nir l’environnement le plus puis­sant qu’elles peuvent offrir.

Exécuter différentes versions du même interpréteur

L’une des fonc­tion­na­li­tés les plus puis­santes (et, mal­heu­reu­se­ment, l’une des moins connues) de l’architecture d’alwaysdata est le com­mu­ta­teur de ver­sions !

always­da­ta a tou­jours eu pour objec­tif de vous four­nir un large éven­tail d’interpréteurs : PHP, Python, Node.js, Ruby, Erlang… même Perl sont sup­por­tés dans votre compte always­da­ta. Mais nous avons par­fois besoin d’une ver­sion spé­ci­fique. Qu’en est-il si vous avez besoin d’exécuter une appli­ca­tion qui néces­site une ver­sion mini­male ? Disons, Node.js 10 ? Votre compte est pré-pro­vi­sion­né avec un large éven­tail de ver­sions pour chaque lan­gage. Par exemple, Node.js est livré avec toutes les ver­sions sui­vantes (au moment où j’écris ces lignes) :

  • 12.0.0
  • 11.12.0
  • 11.8.0
  • 11.1.0
  • 11.0.0
  • 10.15.3
  • 10.15.1
  • 10.13.0
  • 10.12.0
  • 10.9.0
  • 9.11.2
  • 8.15.1
  • 8.15.0
  • 8.12.0
  • 8.11.4
  • 6.17.0
  • 6.16.0
  • 6.14.4

Wow. Ça fait… beau­coup !

Nous pou­vons donc spé­ci­fier la ver­sion à uti­li­ser grâce au com­mu­ta­teur de ver­sions, sous forme d’une variable d’environnement :


Il est éga­le­ment pos­sible d’être moins spé­ci­fique pour s’en tenir à la der­nière release majeure d’une ver­sion don­née :


Le com­mu­ta­teur de ver­sions est dis­po­nible pour tous les inter­pré­teurs inté­grés dans votre compte : PYTHON_VERSION,PHP_VERSION, etc. Vous pou­vez récu­pé­rer une liste de toutes les ver­sions dis­po­nibles dans la page dédiée au lan­gage concer­né dans votre inter­face d’administration : Environnement > [Langage].

Mélangez-les tous : le cas d’utilisation Kresus

Cas pra­tique avec le pro­jet Kresus. Kresus est un ges­tion­naire de finances per­son­nelles qui peut se connec­ter à votre compte ban­caire en ligne en uti­li­sant une biblio­thèque dédiée : Weboob. L’ensemble de manière auto-héber­gée, puisque, nous l’avons déjà dit : la vie pri­vée est impor­tante.

Mais Kresus est écrit en Node.js et attend une ver­sion de node >= 10, quand Weboob est écrit en Python et néces­site python >= 3. Alors mélan­geons-les !

Kresus : Vue des comptes
Kresus : Vue des comptes

Connectez-vous à votre compte en uti­li­sant SSH, et créez un réper­toire pour héber­ger le pro­jet :

Installer Weboob

Nous allons créer un virtualenv Python pour Weboob qui héber­ge­ra la biblio­thèque et ses com­po­sants :

Installer Kresus

Nous sommes main­te­nant prêts à ins­tal­ler le ges­tion­naire Kresus. Nous devons d’abord ins­tal­ler le ges­tion­naire de paquets yarn, car Kresus s’en sert pour les tâches de com­pi­la­tion :


C’est une autre puis­sante fonc­tion­na­li­té du PaaS always­da­ta : même si vous n’êtes pas root, vous pou­vez ins­tal­ler les dépen­dances de manière glo­bale ! Grâce à nos fonc­tion­na­li­tés de wrap­ping, tout est iso­lé dans votre compte, et consi­dé­ré comme un outil sys­tème par vos ges­tion­naires de paquets !

Installons main­te­nant le pro­jet :

Lancer le service

Nous sommes prêts à faire fonc­tion­ner le ser­vice !

Créez un nou­veau site dans votre pan­neau d’administration à Web > Sites > Ajouter un site. Sélectionnez un site Node.js et spé­ci­fiez la ver­sion 12.0.0.

Interface d'administration : site Node.js
Interface d’ad­mi­nis­tra­tion : site Node.js

Voici les para­mètres :

  • Commande : node bin/kresus
  • Répertoire de tra­vail : kresus/app.
  • Environnement : NODE_ENV=production HOST=[IP] KRESUS_DIR=/home/[username]/kresus/data KRESUS_PYTHON_EXEC=/home/[username]/kresus/weboob/bin/python KRESUS_SALT=[longue chaîne aléatoire]

Veillez à rem­pla­cer les valeurs sui­vantes :

  • IP : l’IPv4 sur laquelle l’application doit écou­ter, indi­qué sous le champ Commande. Cette adresse est spé­ci­fique à chaque appli­ca­tion, et les outils Node.js s’attendent géné­ra­le­ment à ce qu’elle soit expo­sée par la variable d’environnement HOST (nous tra­vaillons sur ce point).
  • nom d'utilisateur : le nom de votre compte always­da­ta
  • longue chaîne aléatoire : une chaîne aléa­toire d’au moins 16 carac­tères uti­li­sée par Kresus pour sécu­ri­ser les ses­sions.

Vous pou­vez éga­le­ment véri­fier l’option Forcer le HTTPS dans l’onglet SSL pour assu­rer une connexion sécu­ri­sée.

Terminé ! Lancez votre appli­ca­tion en visi­tant l’URL du site. La pre­mière connexion peut prendre un peu de temps en rai­son de l’initialisation de la base de don­nées, ain­si que la récu­pé­ra­tion du pre­mier compte ban­caire. Prenez un café et soyez patient.


Ce n’est qu’un petit exemple des puis­santes fonc­tion­na­li­tés que nous offrons sur always­da­ta.

Au cours des pro­chaines semaines, nous migre­rons notre pla­te­forme vers une nou­velle ver­sion et nous intro­dui­rons une nou­velle fonc­tion­na­li­té à la sur­couche de wrap­ping pour vous per­mettre d’accéder à la ver­sion de votre choix de n’importe quel inter­pré­teur. Le com­mu­ta­teur de ver­sions reste dis­po­nible, mais vous pour­rez uti­li­ser direc­te­ment node12 ou python3.7 plu­tôt que de pas­ser par les variables d’environnement.

Rendez-vous dans quelques semaines pour ces nou­velles fonc­tion­na­li­tés ! D’ici là, lan­cez votre propre ins­tance de Kresus !