Otto – développement

By | 22 octobre 2015

ottoOtto est un nouvel outil tout droit sorti de chez HashiCorp, annoncé le 28 septembre 2015 comme le successeur de Vagrant ! Otto est un outil pour gérer votre environnement de développement et déployer vos applications quel qu’elles soient. HashiCorp a clairement mis en avant que Otto facilitera la mise en place et le déploiement des architectures de type micro-services, tout ça sans configuration ?!

Attention Otto n’est pas en version stable à ce jour (version 0.1.2), et ne doit donc pas être utilisé sur un environnement de production !

Installation

L’installation de Otto se fait simplement en téléchargeant le binaire.
La dernière commande (otto version) consiste à s’assurer que Otto est correctement installé, si vous obtenez une erreur (otto: command not found), assurez vous que le path /usr/local/bin se trouve bien dans votre $PATH (export PATH=$PATH:/usr/local/bin).

Pour les personnes qui ne pas sous linux, reportez vous à la page de téléchargement pour récupérer la version correspondant à votre OS (https://ottoproject.io/downloads.html).

Initialiser son projet

Commençons par initialiser un projet, avec un Hello World! comme il se doit: .Pour le moment ne vous souciez pas du contenu du fichier index.php, vous remarquerez juste le dns redis.service.consul utilisé pour se connecter à Redis.

Otto nous offre 2 possibilités pour initialiser notre projet, de manière manuelle, ou automatique. De manière automatique Otto va tenter de trouver le nom du projet, et surtout le type d’application.

Nous allons initialiser de manière manuelle afin de nous familiariser avec la syntaxe du fichier de configuration:

Application

La section application permet de définir plusieurs propriétés de votre application, son type, son nom et ses dépendances. Le nom d’une application est libre, mais il faut garder à l’esprit qu’il sera utilisé par la suite pour créer un DNS ({app_name}.service.consul). Le type peut être: PHP, Ruby, GO, Node ou Docker. Pour notre exemple nous allons donc utiliser une application de type PHP.

Les sections dependency correspondent aux dépendances de notre application, que nous allons maintenant préparer.

Dépendances

Une dépendance correspond à une application, comme vu précédemment, nos applications devront donc avoir leur propre fichier Appfile, dans lequel nous allons définir leur type. Nous avons donc besoin d’une instance Redis de type Docker. Les dépendances peuvent être récupérées depuis plusieurs sources (local, git, http …), pour une question de simplicité nous allons créer nos dépendances en local:

Petite nouveauté sur cette application, la partie customization. Cette section nous permet de définir la version de l’image Docker que nous voulons utiliser, ainsi que de mettre en place le port forwarding. Au niveau de la variable run_args, nous aurions pu injecter n’importe quelle option Docker.

Compilation

Maintenant que notre application ainsi que ses dépendances sont prêtes, nous allons passer à la phase de compilation. La compilation consiste à préparer votre future plateforme en préparant la configuration des différents outils utilisés par Otto (Vagrant, Consul …).

Chaque dépendance doit être compilée avant de pouvoir être utilisée:
Maintenant que nos dépendances sont compilées, passons à notre application principale:
Si vous êtes curieux, vous pouvez jeter un oeil au dossier .otto/compiled/app. Dans ce dossier vous allez retrouvez par exemple le Vagrantfile généré par la compilation, ou la configuration de Consul.

Consul

Otto utilise Consul comme registre de services. Son rôle sera donc de rendre accessible les applications dont notre application dépend via un DNS.

Notre application va avoir besoin de communiquer avec Redis, qu’il soit en locale ou sur un autre serveur ne nous concerne pas, tous ce que nous voulons c’est l’atteindre où qu’il soit, c’est donc Consul qui aura en charge cette tâche. Chaque service sera donc accessible via le dns {application}.service.consul, dans notre cas il sera redis.service.consul.

Développement

Pour préparer votre environnement de développement, otto utilise Vagrant, et pour initialiser la box il suffit d’utiliser la commande otto dev:
Maintenant que notre environnement de développement est prêt nous allons pouvoir nous y connecter pour démarrer un serveur PHP et tester notre application:
En allant sur votre navigateur, et en renseignant l’ip fournit par la commande otto dev address, vous devriez voir apparaitre World !.

Conclusion

Otto est un projet très prometteur qui mérite d’être suivi. Dans une seconde partie je vous présenterai la partie build et deploiément de l’application, mais ayant rencontré quelques problèmes je préfère attendre qu’ils soient réglés

Les problèmes rencontrés au niveau du build/déploiement:

  • Consul ne prenait pas en compte les dépendances de mes applications, ce qui les rendaient inaccessible par mon application principale.
  • Pas de possibilité de choisir le document root apache
  • Pas la possibilité de remplacer Apache par Nginx

 

  • Franck Girodon

    Merci pour l’article.
    Si l’on n’utilise que le mod dev d’otto, quel intérêt par apport à vagrant puisque de toute façon, otto tourne avec vagrant et utilise le vagrantfile pour installer l’infra de dev ?

    • Hello Franck,

      dans l’état, Otto ne t’apportera effectivement rien de plus que Vagrant, peut être la facilité de gérer les dépendances de ton application (et les dépendances des dépendances).

      Sur ce premier article, pour introduire Otto, je n’ai effectivement présenté que la partie développement, qui n’est qu’une petite partie de ce qui est possible de faire avec Otto. Le vrai point fort de Otto est justement sa capacité à gérer les différents environnements de ton application depuis la dev jusqu’à son déploiement en production (pour le moment possible que sur AWS).

      Dans la seconde partie, lorsque je présenterai la partie build et déploiement, l’utilisation de Otto prendra tout son sens, mais ayant rencontré quelques problèmes avec Consul, j’ai préféré attendre que le problème soit fixé.