Aller au contenu principal
Version: 3.21

Prérequis techniques Phrasea

Objectif

Présenter l’architecture technique de la solution logicielle Phrasea.

Cette page décrit les différents modules qui la composent, ainsi que les dépendances logicielles et services externes nécessaires à sa mise en œuvre.

Elle s’adresse :

  • Aux équipes informatiques souhaitant déployer Phrasea sur leur infrastructure
  • Aux architectes applicatifs désirant intégrer Phrasea
  • Aux architectes techniques désirant intégrer Phrasea

Source de l’application Phrasea

Le code source de l’application Phrasea est disponible sur GitHub :

Orchestration du déploiement

Phrasea peut être déployé avec Docker/Docker Compose ou sur un cluster Kubernetes. Chaque technologie offre des fonctionnalités de scalabilité et présente ses propres avantages et inconvénients. Selon vos besoins en scalabilité et gestion d’infrastructure, vous pouvez choisir la méthode de déploiement la plus adaptée à votre projet.

Docker Compose

Permet un déploiement rapide de Phrasea en environnement de développement ou local. La stack inclut des services externes comme PostgreSQL, Redis, Elasticsearch et MinIO. Grâce aux profils Docker Compose, vous pouvez sélectionner les services à démarrer, offrant une flexibilité selon les besoins de chaque environnement. Cependant, la scalabilité de la stack sera uniquement verticale.

Système d’exploitation : Linux Ubuntu 24.04 LTS, Debian 11

Versions minimales requises :

  • Docker : 28.5.2
  • Docker Compose : 2.40.3

Le fichier Docker Compose est inclus dans le dépôt GitHub Phrasea pour faciliter le déploiement en environnement de développement :

Vous pouvez également consulter la page de description des variables d’environnement pour plus d’informations sur les variables disponibles.

Kubernetes

Kubernetes est idéal pour les besoins à grande échelle. Phrasea peut être déployé sur plusieurs nœuds pour une scalabilité horizontale. Pour les déploiements Kubernetes, utilisez les charts Helm disponibles :

Versions minimales requises :

  • Kubernetes : 1.29
  • Helm : v3.17.1

Remarque sur les déploiements Docker et Kubernetes

Les conteneurs fournis dans Docker Compose et les charts Helm pour Phrasea sont principalement conçus pour le développement et les tests. Pour garantir que ces conteneurs soient adaptés à la production, une personnalisation supplémentaire est nécessaire : optimisation des configurations, sécurisation des accès, gestion des ressources, résilience et supervision adaptées à la production. Ces ajustements sont essentiels avant tout déploiement en production.

Il est fortement recommandé de déléguer les datastores principaux—tels que PostgreSQL et le stockage objet compatible S3 (servi par MinIO)—à des services managés externes pour améliorer les performances, la fiabilité et la scalabilité.

Images Docker Phrasea

Images externes

Les images référencées dans la stack Docker Compose et Helm ne sont pas des images Phrasea générées par Alchemy, mais sont nécessaires pour les déploiements de développement ou de test. Comme expliqué précédemment, ces images sont destinées à être remplacées par des services externes.

Pour la version exacte déployée dans le contexte Docker Compose, référez-vous à la valeur d’environnement. Pour le contexte Kubernetes, consultez values.yaml.

Réseau

  • Traefik reverse proxy et load balancer, incluant la certification Let's Encrypt pour certains providers

Datastores principaux

Moteur de recherche, serveur de cache et bus applicatif

Outils additionnels utiles pour le développement et les tests de la stack :

  • MariaDB – serveur de base de données relationnelle utilisé pour le déploiement local de la stack Matomo.
  • PgAdmin – outil de gestion pour PostgreSQL.
  • phpMyAdmin – outil de gestion pour MySQL/MariaDB.
  • Mailhog – serveur SMTP et interface client mail pour capturer les emails en développement.
  • Elasticsearch-HQ – interface pour interroger Elasticsearch.
  • k6 – outil de test de charge et de performance.
  • InfluxDB – base de données de séries temporelles utilisée par k6.
  • Grafana – plateforme de visualisation des données pour les résultats de tests k6.
  • Mendhak – service d’écho HTTP/HTTPS pour les tests.
  • Jwilder – Dockerize, utilitaire pour orchestrer les services Docker.
  • Minio-MC – MinIO Client, utilitaire de gestion pour MinIO.
  • Novu – infrastructure backend du framework de notification Novu.

Technologies utilisées

Back-end

  • Langage de programmation :
    • Phrasea est développé en PHP avec le framework Symfony.
    • Node.js pour certains modules (indexeur)

Front-End

  • Technologies web :
    • HTML5, CSS3 et JavaScript forment la base de l’interface utilisateur, permettant des interfaces web interactives et accessibles.
  • Framework JavaScript :
    • React et Material UI sont utilisés pour les clients consommant l’API Phrasea.

Base de données

  • PostgreSQL est la base de données relationnelle qui stocke et/ou référence les différents objets Phrasea. C’est un datastore principal ; les conteneurs utilisés dans la stack Docker ou K8s sont uniquement pour le développement et les tests. Un service externe est recommandé en production.
    Le serveur de base de données contient une base par service :
    • Base Configurator
    • Base Keycloak
    • Base Databox
    • Base Uploader
    • Base Expose
    • Base Report

Moteur de recherche

  • Elasticsearch :
    • Pour optimiser la recherche, l’indexation des assets/collections et la scalabilité, Phrasea utilise Elasticsearch.
    • La dénormalisation des objets contenus dans le SGBDR est réalisée dans différents index, permettant des recherches textuelles sur les objets pertinents.

Gestion des fichiers et stockage

  • Stockage objet :
    • Un stockage objet de type S3 est utilisé pour stocker les assets et les rendus. C’est un datastore principal ; MinIO utilisé dans la stack Docker ou Kubernetes est uniquement pour le développement et les tests. Un service externe et une solution de sauvegarde sont recommandés en production.
  • Stockage bloc :
    • Le stockage bloc local est utilisé pour les fichiers temporaires.
    • Un stockage réseau partagé (NAS, NFS, etc.) est utilisé pour le partage de données entre les conteneurs.

Gestion des utilisateurs et sécurité

  • Système de gestion des identités (IAM)

Intégration de Keycloak dans Phrasea. Plus d’informations ici

Chiffrement

  • Les données en transit sont chiffrées via TLS/SSL pour sécuriser les communications entre les utilisateurs et les applications.

Schéma d’architecture

Schéma technique

Prérequis de capacité d’infrastructure

Les besoins en capacité dépendent de l'usage prévu de la plateforme et de la charge attendue. Les recommandations en termes de cœurs CPU et de RAM sont des valeurs indicatives et doivent être ajustées en fonction de votre contexte spécifique. Phrasea est conçu pour une montée en charge horizontale, ce qui permet de démarrer avec des ressources modestes et de les étendre selon les besoins en production.

Métriques à considérer :

  • Service(s) Phrasea déployé(s)
  • Nombre d’utilisateurs en écriture simultanés
  • Nombre d’utilisateurs en lecture simultanés
  • Volume de stockage requis pour les documents
  • Volume des index de documents
  • Nombre de rendus à générer
  • Nombre de versions attendues par document
  • Nombre de processus parallélisés déployés
  • SLA souhaité
  • Durée de rétention des logs

Images Phrasea déployées avec Docker Compose et Kubernetes

CPU : 6 Coeurs
RAM : 16 Go
Capacité disque pour la gestion des images Docker : 100 Go
Capacité disque pour les volumes temporaires : 100 Go

Service managé

  • PostgreSQL :

    • CPU : 2 Coeurs
    • RAM : 8 Go
    • Taille du disque : selon les besoins
  • Stockage objet :

    • CPU : 2 Coeurs
    • RAM : 8 Go
    • Taille du disque : selon les besoins

Points d’attention pour la production

  • Sécurité : Utilisez TLS pour tout le trafic externe (configurez Traefik avec Let’s Encrypt ou vos propres certificats).
  • Supervision : Mettez en place la collecte des logs et la supervision pour capturer la sortie standard des conteneurs (ex : Fluent Bit, Prometheus, Grafana).
  • APM : Vous pouvez utiliser le service SaaS Sentry pour capturer les erreurs de la stack ; les agents front-end et back-end sont installés dans les images Phrasea. Configurez vos identifiants Sentry ici.
  • Sauvegardes : Mettez en place des sauvegardes régulières pour PostgreSQL et le stockage objet.
  • Elasticsearch n’est pas un datastore principal, mais le temps d’indexation peut être significatif si le nombre d’assets est important. Sauvegarder les index Elasticsearch permet une reprise rapide après incident. Il est aussi conseillé d’utiliser un cluster externe pour Elasticsearch.
  • La base de données des messages RabbitMQ doit être persistée pour éviter une perte de messages en cas de redémarrage du conteneur.