Journal Présentation de Cozy Light une micro PaaS pour s'initier à l'auto-hébergement

Posté par  (site web personnel) . Licence CC By‑SA.
26
30
oct.
2014

Bonjour tout le monde,

Aujourd'hui je viens vers vous avec un nouveau projet qui répond au doux nom de Cozy Light. L'idée est venu de le créer en constatant trois choses. Premièrement, les diverses solutions d'auto-hébergement sont souvent un peu trop lourdes pour les petits hardwares tels que le Raspberry Pi (et pourtant 4 millions d'entre eux se baladent dans la nature et ne demandent qu'à se rendre utile !). Deuxièmement leur installation est souvent trop complexe (il faut souvent se rabattre sur une "image"). Et enfin la manière de contribuer au code n'est pas toujours évidente.
En bref, quand on veut s'auto-héberger, même une simple configuration de Nginx peut s'avérer rebutante surtout quand une fois arrivé au but on se rend compte que ça mouline sévère sur notre Pi.

Et c'est là qu'arrive Cozy Light qui permet de gérer son infrastructure comme un assemblage de lego. On part d'une plateforme minimaliste (800 lignes de codes en JS) qui s'installe en deux lignes de commandes. Ensuite on ajoute les plugins dont on a besoin pour réaliser les actions souhaitées comme déployer un blog ou associer un nom de domaine à une app. De cette manière on peut donner différents visages à sa machine et en faire un cloud personnel, une console de jeu vidéo HTML5 ou même un serveur pour son site web et son blog. Cozy Light supporte par défaut des applications Node.js avec des bases de données embarqués. Pour les applications plus évoluées il faudra passer par Docker.

Voici un exemple pour le déploiement d'un site statique et d'un moteur de blog :

    # Installation (pour Ubuntu 14.04)
    sudo apt-get install git npm nodejs-legacy
    sudo npm install cozy-light -g
    # Configuration des plugins 
    cozy-light add-plugin cozy-labs/cozy-light-html5-apps # pour déployer le site web statique
    cozy-light add-plugin cozy-labs/cozy-light-docker # pour déployer le blog
    cozy-light add-plugin cozy-labs/cozy-light-domains
    # Installation du site web statique
    cozy-light install monutilisateurgithub/monsite
    # Installation du moteur de blog Ghost
    cozy-light install-docker frankrousseau/ghost # Un manifeste spécifique est requis pour les apps Cozy Light.
    # Configuration des domaines et du githook
    cozy-light link-domain monsiteweb.fr monutilisateurgithub/monsite
    cozy-light link-domain www.monsiteweb.fr monutilisateurgithub/monsite
    cozy-light link-domain blog.monsiteweb.fr frankrousseau/ghost
    # Démarrage de la plateforme sur le port 80 (attention aux droits)
    cozy-light start --port 80

Et voilà si vous avez fait les redirections qui vont bien, le blog Ghost est accessible sur blog.monsiteweb.fr et votre site sur www.monsiteweb.fr ! Attention Docker n'est pas disponible sur Raspberry Pi mais vous pouvez tout de même deployer votre site web statique et si vous être patient porter Ghost en application standard pour Cozy Light (étant donné que c'est du node.js).

Deuxième exemple : le cloud personnel

    # Configuration des plugins 
    cozy-light add-plugin cozy-labs/cozy-light-auth
    # Installation des applications
    cozy-light install cozy-labs/calendar
    cozy-light install cozy-labs/files
    cozy-light install cozy-labs/contacts
    # Mise en place de l'authentification
    cozy-light add-plugin cozy-labs/cozy-light-basic-auth
    cozy-light set-password # affiche un prompt masqué pour récupérer le password
    # Configuration des domaines
    cozy-light link-domain calendrier.monsiteweb.fr cozy-labs/calendar
    cozy-light link-domain fichiers.monsiteweb.fr cozy-labs/files
    cozy-light link-domain contacts.monsiteweb.fr cozy-labs/contacts
    # Démarrage de la plateforme sur le port 80 (attention aux droits)
    cozy-light start --port 80

Et voilà on a nos trois apps accessibles via un joli nom de domaine !

Pour finir, comme je le mentionnais au début, il est facile de contribuer en code à la plateforme grâce à l'architecture en greffons. Certains font à peine trente lignes de codes et apporte des fonctionnalités intéressantes. J'ai même pu en faire un en moins d'une heure !

Si vous aimez le projet n'hésitez pas à mettre une étoile sur le dépôt ou à en parler autour de vous. Si vous vous sentez à l'étroit avec Cozy Light et que voulez des solutions plus évoluées jetez une oeil à Yunohost, Arkos, Owncloud et bien sûr Cozy en version complète !

Et pour finir voici deux liens et un nuage content :

Titre de l'image

  • # apt?

    Posté par  (site web personnel) . Évalué à 3.

    Est-ce que tu n'es pas en train de réinventer un système de paquets?

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

    • [^] # Re: apt?

      Posté par  . Évalué à 3.

      En tant que développeur, pour moi cela ressemble plus à un genre de runtime dédié au web. S'occupant de certaines tâches comme l'attribution d'une ip/port, bases de données ect.
      Je tend à penser que la gestion des paquets et dépendances est opérées en sous main par npm. A vérifier, mais c'est ce que je crois comprendre dans un bref aperçu de https://github.com/cozy-labs/cozy-light/blob/master/cozy-light

    • [^] # Re: apt?

      Posté par  (site web personnel) . Évalué à 5.

      Je n'avais pas vu ça comme ça mais effectivement ça pourrait en être un. Comme l'explique le commentaire précédent, Cozy Light est basé sur NPM et Github. Il fait aussi de la configuration et lance un/des serveurs, c'est donc un peu plus qu'un gestionnaire de paquets. Ceci dit on pourrait à terme imaginer trois modules: Cozy Light package, Cozy Light server, Cozy-light config. Ce qui au final aboutit au runtime décrit par boiteàspam.

      Mais effectivement un gestionnaire de paquets très simple pour l'auto-hébergement pourrait vraiment être intéressant. (NB: Yunohost va dans ce sens). Ca permettrait à un éco-système d'émerger rapidement comme ça a été le cas pour NPM et Node. En tout cas le but de Cozy Light est aussi de permettre à tout le monde de participer facilement. Les paquets Debian, étant un peu compliqués à réaliser, n'ont pas l'air adapté au stade de maturité de l'auto-hébergement (même si niveau sécu c'est bien mieux).

      … S'en va mettre une grosse armure.

  • # c'est génial

    Posté par  . Évalué à 2. Dernière modification le 30 octobre 2014 à 13:58.

    Hello,

    Excellent projet ! J'adhères totalement.

    Par contre, quelques liens qui mériteraient à apparaître sur le README,
    https://github.com/cozy/americano-cozy
    https://github.com/cozy/americano
    http://jugglingdb.co/
    https://github.com/pouchdb/pouchdb

    En passant, je lisais, https://github.com/cozy/americano/blob/master/main.coffee, il n'y à pas de stop.
    Les applications ne sont pas démontable ?

    Aussi, une application peut elle dépendre d'une autre ? Exemple, une application A, fournit une interface rest pour un genre d'objets B. Je voudrais ré écrire le frontend, puis je écrire une application qui dépend de A, et consomme les objets B à travers les interfaces fournies par A?

    Dans ton exemple,

    cozy-light link-domain calendrier.monsiteweb.fr cozy-labs/calendar
    cozy-light link-domain fichiers.monsiteweb.fr cozy-labs/files
    cozy-light link-domain contacts.monsiteweb.fr cozy-labs/contacts
    

    Chaque app est accessible via un sous répertoire ? calendar, files, contact ?

    Et pourquoi un sudo dans
    sudo npm install cozy-light -g

    ?

    Par contre, n'est il pas possible d'éviter la dépendance à node-gyp ? donc pouchdb(..).

    npm http GET https://registry.npmjs.org/cryptiles
    npm http GET https://registry.npmjs.org/sntp

    leveldown@0.10.2 install /home/clement/lib/node_modules/cozy-light/node_modules/pouchdb/node_modules/leveldown
    node-gyp rebuild

    make: Entering directory '/home/clement/lib/node_modules/cozy-light/node_modules/pouchdb/node_modules/leveldown/build'
    CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.14.0/db/builder.o

    il n'y à pas de fallback de DB dispo ? Ce n'est pas très clair désolé.

    La dessus je m'en retourne attendre que le setup se termine, je trouve cela surprennement long : / Probablement mon accès internet à deux balles.

    Bye

    • [^] # Re: c'est génial

      Posté par  (site web personnel) . Évalué à 3.

      En passant, je lisais, https://github.com/cozy/americano/blob/master/main.coffee, il n'y à pas de stop. Les applications ne sont pas démontable ?

      Americano se base sur Express. Quand tu démarres l'application cela te renvoie un objet server dans le callback. Sur cet objet tu peux appeler la function .close().

      Et pourquoi un sudo dans sudo npm install cozy-light -g

      Je crois que c'est requis par npm pour toute install globale. Mais dans le fond ce n'est pas obligatoire.

      Par contre, n'est il pas possible d'éviter la dépendance à node-gyp ? donc pouchdb

      J'ai mis ça au niveau de la plateforme mais en fait seules les apps s'en servent. Le mettre au niveau de la plateforme permet aux apps de ne pas récupérer la dépendance lors de l'installation.
      Un fallback possible serait d'utiliser une implémentation de levelup en pure JS https://github.com/medea/medeadown mais cette base charge toutes les données en mémoire. Je ne sais pas si elle est vraiment utilisable.

      La dessus je m'en retourne attendre que le setup se termine, je trouve cela surprennement long : / Probablement mon accès internet à deux balles.

      Héhé, merci d'essayer la plateforme. J'espère que ça te plaira !

      • [^] # Re: c'est génial

        Posté par  . Évalué à 3.

        C'est exactement ce que je cherchais en ce moment ; ) ou faisais ^-^

        Il n'y a que cette partie bases de données qui ne me plaît pas beaucoup. J'ai quelques idées, différentes sur la question.
        M'enfin d'ici là je vais me laisser porter par les bases fournies et me contenter d'en profiter. Il y a de quoi se faire plaisir. Avec un beau binaire made in JS.
        Héhé ouais c'est cool !

        -g c'est pour mac os, il me semble.

  • # golang

    Posté par  . Évalué à 0.

    Sinon pour faire encore plus simple sur une RaspberryPI, j'utilise le langage Go pour le serveur web statique et Pelican (Python) comme moteur de site statique.

    Au final je fais un simple :

    pelican -s setting.py -t ../themes/gum . && webpi --port 8080 --dir /home/monsite

    Et ça tourne impeccable.

  • # Le pendant de l'auto hébergement

    Posté par  . Évalué à 0.

    Quid des DNS ? Il y a des systèmes pleinement décentralisé qui sont utilisable ?

    J'avais cherché quelque jours auparavant, mais cela ne semblait pas encore complètement convaincant.

  • # Erreur dans l'exemple

    Posté par  (site web personnel) . Évalué à 2.

    Il ne faut pas installer deux plugins différents pour gérer le mot de passe. Seule la ligne suivante suffit :

    cozy-light add-plugin cozy-labs/cozy-light-auth
    

    Si vous voulez une authentification de type basic, vous pouvez la supprimer au profit de :

    cozy-light add-plugin cozy-labs/cozy-light-basic-auth
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.