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 :
- Le dépôt du projet : https://github.com/cozy-labs/cozy-light
- Un screencast de présentation avec un exemple sur un VPS OVH : https://vimeo.com/110419102
# apt?
Posté par devnewton 🍺 (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 maboiteaspam . É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 gelnior (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 maboiteaspam . É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,
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(..).
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 gelnior (site web personnel) . Évalué à 3.
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().
Je crois que c'est requis par npm pour toute install globale. Mais dans le fond ce n'est pas obligatoire.
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.
Héhé, merci d'essayer la plateforme. J'espère que ça te plaira !
[^] # Re: c'est génial
Posté par maboiteaspam . É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.
[^] # Re: c'est génial
Posté par gelnior (site web personnel) . Évalué à 2.
N'hésite pas à partager tes idées sur le dépôt. Le projet est encore jeune, les lignes peuvent bouger !
# golang
Posté par x6776 . É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 maboiteaspam . É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 gelnior (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 :
Si vous voulez une authentification de type basic, vous pouvez la supprimer au profit de :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.