À découvrir : Fasty, un CMS pour les équipes de développeurs

Posté par  . Édité par Davy Defaud, bubar🦥, palm123 et Benoît Sibaud. Modéré par Davy Defaud. Licence CC By‑SA.
Étiquettes :
20
5
nov.
2020
Internet

Fasty est un système de gestion de contenu (CMS) libre basé sur OpenResty, une divergence de NGINX avec LuaJIT embarqué et ArangoDB, une base de données multi‑document, et graph.

Après une conférence suivie sur Hong Kong où deux interlocuteurs faisaient une présentation d’ArangoDB et OpenResty, j’ai mis environ un an pour commencer à creuser un peu plus du côté d’OpenResty et de Lua. En effet, je connaissais déjà pas mal ArangoDB qui était devenu ma base de données de choix pour la plupart de mes projets. Le développeur présentant OpenResty était si enthousiaste qu’il a attiré mon attention. Et il venait du monde Ruby, comme moi.

Donc, je viens du monde Ruby et Ruby on Rails, et je commençais à me lasser de ce cadriciel. Je cherchais donc du frais. Mon prérequis était les performances brutes (ArangoDB est très rapide, et LuaJIT également). Je voulais également me simplifier la vie lors du déploiement d’une nouvelle application. J’ai donc créé Fasty. Un système de gestion de contenu mais, en fait, pas seulement. Étant multi‑tenant, je peux donc créer autant d’applications que mon serveur le permet (et, en fait, la limite est haute).

Le système de gestion de contenu est donc :

  • multi‑tenant ;
  • internationalisable (multilingue) ;
  • gère plusieurs patrons (templates) ;
  • gère les partiels ;
  • gère les requêtes AQL ;
  • permet de créer une API côté serveur  ;
  • permet de créer des applications Web monopages (connectées aux API) ;
  • gère des vues dynamiques côté serveur ;
  • gestion de types de données sur mesure (texte, étiquette, image, fichier, select, etc.) ;
  • gestion de scripts Node.js avec redémarrage automatique (possibilité de faire du Socket.IO, par exemple, ou des scripts callbacks pour les paiements des banques) ;
  • gestion du workflow (staging, QA, production).

Bref, il me permet maintenant de créer des sites complexes sans même avoir à toucher le cœur du système de gestion de contenu.

D’ailleurs, pour information, ce dernier se base sur un cadriciel appelé Lapis. Il est codé en MoonScript qui compile en Lua). Pour ce qui est des applications Web monopages (SPA), j’utilise RiotJS.

J’ai donc quelques sites qui tournent avec en production :

Pour information, le démarrage ou redémarrage de l’application est instantanée. Il n’y a pas de temps d’arrêt. Et le tout est géré par Docker Compose.

J’ai également créé un module NPM qui me permet de synchroniser mes partiels, layouts, API, etc., sur mon ordinateur en utilisant mon éditeur favori. Chaque modification de fichier est envoyée sur le serveur directement. Cela facilite le développement. Le script permet également de travailler à plusieurs sur le projet et synchronise les fichiers de tous les développeurs connectés.

Le projet est open source et donc tous les contributeurs sont les bienvenus. Pour le moment, je suis le développeur principal, mais j’espère que d’autres me rejoindront.

Aller plus loin

  • # intéressant !

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

    La techno est intéressante. Mais linuxfr pourrait éviter de faire la pub pour un produit "fumeux" pour rester gentil.

    "La première sécurité est la liberté"

    • [^] # Re: intéressant !

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

      Oui…

      Et puis, LuaJIT "rapide"… ca reste du jit sur un language interprété. C'est peut-être rapide pour un language interprété, mais de là à parler de, je cite, "performances brutes"…

      Cela me fait penser à java, dont on nous rabache depuis 25 ans que sisi, c'est rapide, d’ailleurs on a amélioré la vitesse dans la dernière version.

      Par contre nginx, ça, c'est de la performance brute ! Mais comme proxy/frontend, pas comme serveur d'application. Ce n'est pas son métier.

      • [^] # Re: intéressant !

        Posté par  . Évalué à 3. Dernière modification le 05 novembre 2020 à 20:08.

        N'oubliez pas que je venais du monde Ruby on rails… Donc du coup tout me semble plus rapide ;)

        Un des avantages de Lua et openresty est les coroutines qui permet d'écrire du code asynchrone de façon transparente.

        De plus lapis est simple a comprendre même si on ne connait pas openresty et Lua

        Bien évidemment il y a des stacks / langages plus performants. Après j'y ai trouvé du plaisir à découvrir celle là.

        • [^] # Re: intéressant !

          Posté par  . Évalué à 6.

          Perso, je n'arrive pas à consulter tes sites (en particulier les 2 premiers), la mise en page est complètement pétée par mes extensions (uMatrix+LocalCDN), je n'ai que moyennement envie de chercher à comprendre pourquoi. L'appel aux CDNs pour le js peut être l'une des raisons, je vois pas mal de Cross-Origin Request Blocked dans la console de dev FF.
          C'est dommage j'aime bien les podcasts (j'aurais pu m'en tirer avec les flux Atom/RSS, mais ton site n'en propose pas).
          Ce n'est pas contre toi spécifiquement je te rassure, mais je fais partie des internautes qui refusent de visiter tout un pan du web à cause de ce type de conception qui n'a plus rien à voir avec du HTML.

          • [^] # Re: intéressant !

            Posté par  . Évalué à 2.

            Alors bonne remarque pour le flux Atom/RSS je vais le leur soumettre. Le code du front-end n'a pas été fait par moi, je m'occupe en général du backend.

            Je vais voir ce que je peux améliorer.

      • [^] # Re: intéressant !

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

        Je pensais à la cocotte à 200€…

        "La première sécurité est la liberté"

        • [^] # Re: intéressant !

          Posté par  . Évalué à 1.

          je ne voulais montrer que le blog qui l'utilise … après on pourrait l'enlever pourquoi pas …

          • [^] # Re: intéressant !

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

            OK on va faire ça alors, je ne suis pas très à l'aise avec ce blog qui me parle nutrition quantique et médecines ésotériques…
            Cf https://www.vitaliseurde marion.fr/fr/officiel/article/slug/congres-quantique-planete

            • [^] # Re: intéressant !

              Posté par  (Mastodon) . Évalué à 5.

              Ah ! Mais ? Mais, LinuxFR fait de la censure !

              NB: pour être clair, je n'ai pas d'objection sur le fond au fait d'avoir censuré ce lien

              Surtout, ne pas tout prendre au sérieux !

              • [^] # Re: intéressant !

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

                Le rationalisme matérialiste scientiste étant une religion très majoritairement pratiqué sur LinuxFr (j'en veux pour preuve le numéro afligeant de lèche à HygieneMentale), il est normal de censuré un site qui blasphème.

                Allez-y, moinssez…

                « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

                • [^] # Re: intéressant !

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

                  euh… méthode scientifique, expérience, tout ça tout ça…

                  "La première sécurité est la liberté"

                  • [^] # Re: intéressant !

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

                    Justement, le rationnalisme matérialiste n'a rien de scientifique, il est régulièrement démonté par des physiciens dans des papiers publiés dans des revues à commité de lecture. Un exemple
                    Le rationnalisme (c'est l' "isme" que je condamne, pas le fait d'être rationnel, qui est nécessaire) est une idéologie qui a tout des structures du catholicisme en France, avec l'Union Rationaliste comme haut-clergé.

                    Les théories des zet comme HygienneMentale et consort sont bourrés de biais qu'il dénoncent chez les autres.

                    Tu confonds l'esprit scientifique avec des croyances. L'esprit scientifique est une démarche, pas l'acception d'un dogme et la peur de le remettre en cause.

                    « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

                    • [^] # Re: intéressant !

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

                      "L'esprit scientifique est une démarche,"

                      On est tout à fait d'accord. Et tout ces machins "naturopathes", ne respectent absolument jamais cette démarche.

                      "La première sécurité est la liberté"

      • [^] # Re: intéressant !

        Posté par  . Évalué à 1.

        https://gist.github.com/spion/3049314 LuaJIT ne semble pas si mal

      • [^] # Re: intéressant !

        Posté par  . Évalué à 3.

        Lua est l'un des langages de script les plus rapides et les plus légers, (l'opposé de js avec nodejs donc), il est beaucoup utilisé dans l'embarqué, dans les jeux vidéos (notamment dans les systèmes de plugins) et dans les systèmes à forte audience liés à internet.

        Dans le domaine des applications/systèmes Openresty/luajit pairé à nginx qui est également assez utilisé pour les sites à très très fortes audience. Il est à l'origine fait par Alibaba, pour tengine, son fork de nginx dont certaines améliorations sont revenus dans le core de nginx, et était utilisé pour Taobao.

        Mais en plus d'OpenResty, on peut aussi citer Mediawiki, le moteur de Wikipédia qui l'utilise comme principal langage de script. Le cache Redis C'est également, dans les services réseau, utilisé par PowerDNS, les outils d'analyse nmap et Wireshark

  • # Tiers lieu à Toulon

    Posté par  (Mastodon) . Évalué à 2.

    Sympa le contenu de ce site : https://podcasts.letelegraphe.org/

    Cela donnerait envie de les visiter quand l'on se retrouve à Toulon

    Surtout, ne pas tout prendre au sérieux !

  • # A propos de arangodb

    Posté par  . Évalué à 1.

    Un des attraits de arangodb est Foxx. Un framework is permettant de créer des APIs dans le coeur de la base de données.

    Fasty permet donc de modifier et de créer de nouvelles APIs. Là également l'édition de fait en livre t il y a du hot reload. C'est tres pratique.

    Je pense que cette base n'est pas assez connu et mérite grandement de s'y intéresser

  • # Je ne sais pas!

    Posté par  . Évalué à 4.

    Attention, ma critique n'est pas négative.
    J'ai 44 ans et demi, et mon cerveau assimile de moins en moins les nouvelles techno.
    De ce fait je me contente de suivre php et python parce que j'aime ça.

    Mais je ne comprends pas/plus pourquoi on embarque autant de technologie différente sur un seul projet.

    Simple exemple, que vient faire nginx là-dedans? Ça à était cité plus haut.
    Pour afficher du statique, des images, il est parfait. Donc frontend/proxy…

    Soit j'ai raté quelque chose à la lecture de ta dépêche, et donc une subtilité.
    Honnêtement, si on m'avait donné ce cahier des charges(mais j'ai arrêté, j'élève des poules et prend des cours de flutes avec Richard), c'était php et laravel en framework, node.js je n'ai pas trouvé l'intérêt.
    Envoyer directement un fichier édité en local, c'est ca?
    Moi ca me semble dangereux.

    Puis dernière chose, tu te rends compte de tout ce qu'il faut installer pour faire tourner le bouzin?
    Je ne pense pas que ca facilite les ops, et encore moins les dev, sans parler des contributeurs.

    Ce sont juste des questions que je me pause.
    Ne le prends pas mal, j'aime KISS alors autant ça à l'air super, et d'un autre côté hyper lourd à installer/tourner/contribuer

    • [^] # Re: Je ne sais pas!

      Posté par  . Évalué à 1. Dernière modification le 06 novembre 2020 à 10:09.

      Alors en fait pour l'installer grossomodo il faut docker & docker-compose.

      J'utilise openresty (qui est un fork de nginx) car le framework lapis tourne dessus.

      Ensuite j'ai besoin d'une base de données (arangodb)

      Les scripts nodejs ne sont pas obligatoire et répondent à un besoin précis (temps réel par exemple)

      L'édition via le module de synchronization est bien évidemment protégé via un token est communique en https (là aussi pas forcément obligatoire mais bien plus pratique) et je ne travaille jamais sur la prod, mais sur le dev.

      Pour info, j'ai bientôt 44 ans et j'ai aussi des poules, 2 chèvres, 4 ânesses et 1 cheval :)

      Donc en PHP on aurait :

      • laravel
      • apache
      • mysql

      Et avec Fasty :

      • openresty + lapis
      • arangodb

      pas sûr que ce soit plus lourd (le frontend pèse 1,5Mo en RAM) et le déploiement avec docker-compose est assez facile : docker-compose up cms

      • [^] # Re: Je ne sais pas!

        Posté par  . Évalué à 3.

        En plus il faut docker?
        Non on doit pouvoir l'installer à la main.

        Mais faites des choses simples svp!
        Je ne crache pas sur ton travail, je ne comprends pas tous les outils utilisés pour faire ca.

        Allez bonne journée à toi, je vais me coucher….

        • [^] # Re: Je ne sais pas!

          Posté par  . Évalué à 1.

          Non docker n'est pas obligatoire non plus. On peut très bien installer openresty et arangodb sans docker …

          • [^] # Re: Je ne sais pas!

            Posté par  . Évalué à 1.

            Merci pour ton eclairsiment!

            On a beau avoir des points de vue différents, mais vous avez fait du bon boulot, et bonne chance à votre projet!

  • # openresty

    Posté par  . Évalué à 1.

    J'ai mis en place ce service pour faire une passerelle d'accès via token JWT il y a un an. Ca ne grogne pas, ça ne tombe pas : ça tourne (forcément avec le socle nginx en dessous).

    C'est un beau petit projet, je recommande pour ceux qui on besoin de faire un peu de tuyauterie réseau au niveau d'un proxy http.

Suivre le flux des commentaires

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