Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nua, un PaaS open source en Python pour l'auto-hébergement de vos applications

Nua, un PaaS open source en Python pour l'auto-hébergement de vos applications

Résumé

Nua est un projet de plateforme cloud open source lancé par Abilian en 2021. Il propose un PaaS (platform as a service) qui peut s'installer facilement sur des serveurs bare metal ou virtualisés, et qui permet de faire tourner des applications web conteneurisées, en gérant leur cycle de vie, les ressources dont elles ont besoin (stockage, bases de données, etc.), les droits d'accès des utilisateurs, les backups, le monitoring, les logs...

Nua permet de gérer des applications issues d'un portefeuille applicatif ("marketplace"), i.e. packagées et optimisées par les développeurs de la plateforme (ou des tiers). Nua permet aussi de déployer des applications en cours de développement (démo / qualif / prod), y compris plusieurs instances d'une même application, et y compris en déploiement automatique (exemple de use case: créer des instances de démo à la demande de prospects, en optimisant la consommation de ressources).

Nua est basé sur les principaux standards du monde open source et du cloud: base de données (Postgres, MySQL, Mongodb, Redis), stockage (S3), OCI, dockerfiles et buildpacks, LDAP et SSO, etc. Nua s'appuie actuellement sur Docker, mais permettra à terme de déployer des applications dans d'autres environnements d'exécution (autres conteneurs, VMs classiques ou légères, SlapOS...).

Documentation et code source:

https://nua.rocks
https://github.com/abilian/nua

Plan de la présentation

Vision et caractéristiques principales du projet
Simplification du packaging et du déploiement multi-instances,
Auto-hébergement, souveraineté numérique
Architecture générale

Pourquoi python ?
Un runtime python dans le container
Un orchestrateur pilotant les containers
Réutilisation de composants entre le packaging, l'exécution de scripts et l'orchestration

Exemples et démo
Fichier de configuration (vue du packageur)
Déploiement de configurations (vue CLI de l'utilisateur)

Roadmap et comment contribuer

Take-aways

Pour les développeurs / devops : comment Nua peut aider à déployer rapidement des versions de dev en phase de dev / préprod / prod, et à gérer les contraintes de la production (backup, upgrades) ?
Pour les responsables informatiques: comment Nua permet de déployer et de gérer facilement un portefeuille d'application Web open source (intranet / extranet / Web) ?
Pour les développeurs d'applications tierces: comment porter ses applications sous Nua?
Pour les contributeurs open source: quelle est la roadmap de Nua et comment y contribuer ?

Stefane Fermigier

February 19, 2023
Tweet

More Decks by Stefane Fermigier

Other Decks in Programming

Transcript

  1. Résumé Besoin et contexte La proposition Nua Le projet Le

    fichier nua-config.toml Exemple d’une application
  2. Besoin et contexte Un besoin: • Déployer rapidement plusieurs instances

    d’applications sur des environnements bare metal ou virtualisés • Déployer des applications développées en interne et des applications tierces • Pour des besoin internes • Pour mettre à disposition des clients de Abilian des applications en mode SaaS • En simplifiant les étapes du déploiement (base de données / stockage / Nginx / HTTPS, ...)
  3. Besoin et contexte L’état de l’art technique • PaaS, SaaS

    • Conteneurs • Cloud, GAFAM Le contexte européen • Demande croissante de solutions « souveraines » • L’auto-hébergement d’applications web reste complexe (compétences, fiabilité, sécurité)
  4. La proposition Nua Le projet Nua vise à contruire un

    "Self-hosted PaaS" • Ou « plateforme en tant que service auto-hébergée » • C’est un oxymore technique • Mais une réponse disruptive aux besoins du marché
  5. Our Solution “Nua streamlines the development, selection, installation and resilient

    operations of Web applications in a self- sovereign cloud environment”
  6. Le projet 100 % python • Poetry, pytest, type hints,

    black, flake8, ruff, ... • Des commandes d’administration système • Des algorithmes d’affectation de ressources Des choix structurants • Privilégier, autant que possible : • la configuration déclarative plutôt qu'impérative • les conventions plutôt que la configuration explicite, en évitant les duplications d'information • S’appuyer sur des technologies éprouvées (containers OCI/Docker dans un premier temps) • S’inspirer des « best practices » comme les "12 factor apps", SBOM, … • Prévoir des extensions par le biais de plugins
  7. Le projet 2 étapes fondamentales • Le « build »

    • Le « run » Avec quelques contraintes • Simplicité (ergonomie) • Reproductible, sûr, fiable • Evolutif (plugins) • Résilience, sécurité, maintenabilité
  8. Le projet « nua-build » • La commande bas niveau

    qui pilote la création du package déployable • Aujourd’hui : une image Docker pour Linux/amd64 La séquence de build • Analyse du fichier « nua-config » • Détection des images de base requises • « build » ou « pull » des images requises • Récupération des fichiers (sources, Dockerfile, fichiers de configuration) • « build » proprement dit de l’image Docker • Stockage du résultat (localement comme image Docker)
  9. Le projet « nua-orchestrator » • La commande bas niveau

    pour déployer une(des) application(s) • L’orchestrateur doit être installé sur le serveur hôte La séquence de déploiement • Analyse des applications demandées • « pull » des images Nua correspondantes • Récupération des métadata depuis les images Nua • « pull » des dépendances éventuelles • Configuration des ports, volumes, etc. • Déploiement proprement dit (arrêt / installation / démarrage)
  10. Le fichier nua-config.toml Un fichier unique • Les metadonnées •

    Configuration du « build » • Récupération des sources et dépendances • Configuration du « run » • Déclaration des ressources requises Utilisé par l’environnement de build et l’orchestrateur • Lors du « build » le fichier de configuration est copié dans le conteneur de l’application • L’orchestrateur (le « run ») récupère les informations directement depuis le conteneur de l’application
  11. Exemple d’application : Hedgedoc HedgeDoc • Une application d'édition collaborative

    de documents au format Markdown • Une application NodeJs qui utilise les outils classiques pour cet écosystème: package.json et npm. • https://hedgedoc.org/
  12. Le « build » Aperçu du build (1/2) • Début

    : recherche des composants Nua de base
  13. Le « build » Aperçu du build (2/2) • Création

    de l’image Docker • En mode « verbose », tout le log du build Docker serait affiché.
  14. Les sections « run » Affectation automatique des ports •

    Seule l’information du port utilisé par l’application est nécessaire • L’orchestrateur affectera des ports pour les redirections • Supporte le multi-instances
  15. Les sections « run » Déclaration de ressources de stockage

    • L’orchestrateur créera des espaces uniques à chaque instance
  16. Les sections « run » Déclaration de ressources applicatives •

    L’orchestrateur créera les instances de bases de données