Aller au contenu principal

Déploiement

Architecture

Architecture

Schéma d'architecture de la plateforme Qalita

Prérequis

Plateforme

Puissance de calcul

La plateforme comprend la Webapp avec son backend. Elle nécessite peu de puissance de calcul.

UtilisationMémoireCPU
Au repos500 Mo0.5
En utilisation2 Go1
Optimal4 Go2

Stockage

Le stockage comprend :

  • La base relationnelle contient les données de gestion de la plateforme, les métriques, ainsi que les logs d'activités utilisateurs.
  • Le stockage S3 comprend les logs des tâches, les assets (archives des packs).
UtilisationPostgresqlS3
Minimal1 Go1 Go
Dépend du volume des métriques et fréquence des analyses10+ Go10+ Go

Agents

Les caractéristiques de l'agent dépend grandement de la typologie ainsi que la volumétrie du ou des sources pour lesquels il effectue les analyses de qualité.

UtilisationMémoireCPU
Minimal50 Mo0.2
Dépend du volume des sources et fréquence des analyses..

I Déploiement Cloud SaaS

Qalita SAS propose une solution entièrement managé et hébergé sur cloud européen HDS et SecNumCloud.

Architecture

Schéma d'architecture de la plateforme Qalita en mode SaaS

Contactez nous pour plus d'informations.

II Déploiement Localhost

Prérequis

Pour déployer en local sur votre ordinateur, il vous faudra :

info

La clé de licence permet de se connecter au docker registry et de pull les images docker, en plus d'ajouter des informations pour la plateforme.

  1. Se connecter au dépôt d'images docker :
docker login qalita.azurecr.io
  1. Créez ces deux fichiers :
docker-compose.yaml
version: '3'
services:
frontend:
image: qalita.azurecr.io/qalita/frontend:1.7.1
container_name: frontend
environment:
- QALITA_PUBLIC_DOC_URL=http://localhost:3001
- QALITA_PUBLIC_API_URL=http://localhost:3080
- QALITA_API_URL=http://backend:3080/api/v1
- NODE_ENV=production
- NEXT_TELEMETRY_DISABLED=1
- NEXT_WEBPACK_USEPOLLING=false
ports:
- "3002:3000"
depends_on:
- backend
- doc
backend:
image: qalita.azurecr.io/qalita/backend:1.7.1
container_name: backend
ports:
- "3080:3080"
tty: true
environment:
- POSTGRESQL_PASSWORD=*****************
- POSTGRESQL_USERNAME=qalita
- POSTGRESQL_SERVER=db
- POSTGRESQL_PORT=5432
- POSTGRESQL_DATABASE=qalitadb
- REDIS_SERVER=cache
- REDIS_PORT=6379
- REDIS_PASSWORD=
- QALITA_INIT_SLEEP=3
- QALITA_ADMIN_USERNAME=admin
- QALITA_ADMIN_PASSWORD=*****************
- QALITA_SECRET_KEY=*****************
- QALITA_ALGORITHM=HS256
- QALITA_ACCESS_TOKEN_EXPIRE_MINUTES=240
- QALITA_ENV=PROD
- QALITA_API_PORT=3080
- QALITA_API_HOST=0.0.0.0
- QALITA_FRONTEND_URL=http://localhost:3000
- QALITA_ORGANIZATION_NAME=Qalita Localhost
- QALITA_API_WORKER=4
- QALITA_S3_URL=http://s3:8333
- QALITA_S3_KEY_ID=*****************
- QALITA_S3_KEY_SECRET=*****************
depends_on:
- db
- cache
- s3
doc:
image: qalita.azurecr.io/qalita/doc:1.6.0
container_name: doc
ports:
- 3001:80
db:
image: bitnami/postgresql:15.4.0
tty: true
ports:
- "5432:5432"
container_name: db
environment:
- POSTGRESQL_PASSWORD=*****************
- POSTGRESQL_USERNAME=qalita
- POSTGRESQL_DATABASE=qalitadb
- POSTGRESQL_PORT=5432
volumes:
- data:/bitnami/postgresql
cache:
image: redis:alpine
hostname: redis-cache
container_name: cache
ports:
- '6379:6379'
command: redis-server
volumes:
- cache:/data
s3:
image: chrislusf/seaweedfs:3.62
container_name: s3
ports:
- "8333:8333"
- "8080:8080"
- "9333:9333"
volumes:
- datas3:/data
- ./s3_config.json:/s3_config.json
command: server -dir=/data -s3 -s3.port 8333 -s3.config "/s3_config.json"
volumes:
data:
cache:
datas3:
s3_config.json
{
"identities": [
{
"name": "admin",
"credentials": [
{
"accessKey": "****************",
"secretKey": "****************"
}
],
"actions": [
"Read",
"Write",
"List",
"Tagging",
"Admin"
]
},
{
"name": "reader",
"credentials": [
{
"accessKey": "****************",
"secretKey": "****************"
}
],
"actions": [
"Read",
"List"
]
}
]
}
  1. Executer docker-compose :
docker-compose up -d

III Déploiement sur Kubernetes

kubernetes-deployment

Schéma d'architecture de la plateforme Qalita déployé sur Kubernetes

Configurations possibles Agents <-> Sources

Même namespace :

  1. Déploiement avec agent dans le même namespace agent.enabled=true
  2. Déploiement de data sources dans le même namespace

Autre namespace :

  1. Déploiement d'un agent dans un autre namespace
  2. Pour se connecter à une source dans un autre namespace

Délocalisé :

  1. Déploiement d'un agent dans tout autre environnement (vm, localhost etc...)
  2. Pour se connecter à une source localisé dans le même environnement

Prérequis

Pour déployer sur un cluster Kubernetes managé, il vous faudra :

Dependencies

Installation du helm chart Qalita

astuce

Pour avoir la documentation la plus à jour possible pour le helm chart : Allez directement sur le site Artifacthub

1. Créer un namespace

Créer un namespace qalita dans votre cluster Kubernetes.

2. Créer un secret

Créer un secret qalita-license dans votre namespace qalita contenant votre clé de licence.

3. Adding the chart Repository

helm repo add qalita https://helm.qalita.io/
helm repo update

4. Resolve dependencies

helm dependency update

5. Install

astuce

Il va vous falloir modifier les values pour correspondre le mieux à votre organisation. Voir un exemple de fichier de values

helm install qalita qalita/qalita -f values.yaml

6. Use it

The chart will deploy the following resources:

  • QALITA App
  • QALITA API
  • QALITA Doc
  • QALITA Postgresql Database
  • QALITA Redis Cache Database
  • QALITA Seaweedfs S3 Storage

With cluster.domain=example.com Creates the following endpoints:

Values

astuce

Il va vous falloir modifier les values pour correspondre le mieux à votre organisation. Voir un exemple de fichier de values

Common
KeyTypeDefaultDescription
cluster.issuerstringletsencrypt-prodCluster Issuer for Cert-Manager, you can get your cluster issuer name by running kubectl get clusterissuer
cluster.domainstringexample.comDNS Domain or Sub domain for QALITA app and api endpoints
cluster.namestringlocalCluster name for QALITA app and api endpoints, it is concatenated with cluster.domain
dockerregistry.enabledbooltrueEnable Private Docker Registry, qalita's container images are private, you need to setup the registry in order to pull the images
dockerregistry.dataSecretstring{"auths":{"<registry-url>":{"password":"<password>","username":"<username>"}}}Docker Registry Secret, you need to configure it to pull the private registry images
Frontend
KeyTypeDefaultDescription
frontend.telemetryDisabledstring1Prevent NextJS framework to send telemetry data to Vercel Servers
frontend.webPackPollingboolfalsePrevent webpack to update its compiled content, used only in dev mode
frontend.modestringproductionThe running mode of the platform, can be <DEV/PROD/DEMO>
frontend.image.repositorystringqalita.azurecr.io/qalita/frontendQALITA Frontend Image Repository
frontend.image.tagstring1.5.0QALITA Frontend Image Tag
frontend.image.pullPolicystringAlwaysQALITA Frontend Image Pull Policy
frontend.replicaCountint1QALITA Frontend Replica Count
frontend.service.typestringClusterIPQALITA Frontend Service Type
frontend.service.targetPortint3000QALITA Frontend Service Port
frontend.service.protocolstringTCPQALITA Frontend Service Protocol
frontend.ingress.enabledbooltrueQALITA Frontend Ingress Enabled
frontend.ingress.tls.enabledbooltrueQALITA Frontend Ingress TLS Enabled
frontend.deployment.resources.requests.cpustring500mQALITA Frontend Deployment CPU Request
frontend.deployment.resources.requests.memorystring256MiQALITA Frontend Deployment Memory Request
frontend.deployment.extraEnvlist[]QALITA Frontend Deployment Environment Variables, format : - name: QALITA_ENV value: "PROD"
Backend
KeyTypeDefaultDescription
backend.organization.namestringlocalSet the organization Name
backend.tokenExpireMinutesint240Set the user session timeout, it is configured in the JWT exp value
backend.modestringPRODThe running mode of the platform, can be <DEV/PROD/DEMO>
backend.iniSleepint3The amount of seconds the backend waits to connect to the backend database (postgresql) before retrying
backend.adminUsernamestringadminThe admin user name
backend.adminPasswordstringrandAlphaNum 25 char long stringAdmin Account password
backend.secretKeystringrandAlphaNum 512 char long stringKey seed to generate JWT Tokens
backend.secretKeyAlgorithmstringHS256Algorithm Type used to issue JWT
backend.api.portint3080Backend API exposed Port
backend.api.hoststring0.0.0.0Ip address Backend is exposed to
backend.api.workerint4Number of process bootstrapped
backend.image.repositorystringqalita.azurecr.io/qalita/backendQALITA Backend Image Repository
backend.image.tagstring1.5.0QALITA Backend Image Tag
backend.image.pullPolicystringAlwaysQALITA Backend Image Pull Policy
backend.replicaCountint1QALITA Backend Replica Count
backend.service.typestringClusterIPQALITA Backend Service Type
backend.service.targetPortint3000QALITA Backend Service Port
backend.service.protocolstringTCPQALITA Backend Service Protocol
backend.ingress.enabledbooltrueQALITA Backend Ingress Enabled
backend.ingress.tls.enabledbooltrueQALITA Backend Ingress TLS Enabled
backend.deployment.resources.requests.cpustring500mQALITA Backend Deployment CPU Request
backend.deployment.resources.requests.memorystring256MiQALITA Backend Deployment Memory Request
backend.deployment.extraEnvlist[]QALITA Backend Deployment Environment Variables, format : - name: QALITA_ENV value: "PROD"
backend.s3.urlstringhttp://seaweedfs-s3:8333S3 Store Url Endpoint
backend.s3.secretNamestringseaweedfs-s3-secretSecret containing read / write credentials for the s3 store
backend.s3.admin_access_key_idstring``S3 Write user access key
backend.s3.admin_secret_access_keystring``S3 Write user secret key
backend.s3.read_access_key_idstring``S3 read user access key
backend.s3.read_secret_access_keystring``S3 read user secret key
Agent
KeyTypeDefaultDescription
agent.enabledboolfalseEnabling agent deployment
agent.namestringlocal-agentQalita Agent Name
agent.initscriptstringecho hello worldQalita Agent init script helps add custom instructions before launching agent, can be used to mount cifs remote path or other actions
agent.modestringworkerQalita Agent mode <job/worker>
agent.tokenstringchangemeQalita Agent API Token
agent.image.repositorystringqalita/agentQALITA Agent Image Repository
agent.image.tagstring1.5.0QALITA Agent Image Tag
agent.image.pullPolicystringAlwaysQALITA Agent Image Pull Policy
agent.replicaCountint1QALITA Agent Replica Count
agent.deployment.extraEnvlist[]QALITA Agent Deployment Environment Variables, format : - name: QALITA_ENV value: "PROD"
agent.deployment.resources.requests.memorystring256MiQALITA Agent Memory Request
agent.deployment.resources.requests.cpustring200mQALITA Agent CPU Request
agent.pvc.enabledboolfalseEnable persistence for agent data
agent.pvc.storageSizestring10GiPVC Size for persisting data
Documentation
KeyTypeDefaultDescription
doc.image.repositorystringqalita.azurecr.io/qalita/docQALITA Doc Image Repository
doc.image.tagstring1.5.0QALITA Doc Image Tag
doc.image.pullPolicystringAlwaysQALITA Doc Image Pull Policy
doc.replicaCountint1QALITA Doc Replica Count
doc.service.typestringClusterIPQALITA Doc Service Type
doc.service.targetPortint80QALITA Doc Service Port
doc.service.protocolstringTCPQALITA Doc Service Protocol
doc.ingress.enabledbooltrueQALITA Doc Ingress Enabled
doc.ingress.tls.enabledbooltrueQALITA Doc Ingress TLS Enabled
doc.deployment.resources.requests.cpustring50mQALITA Doc Deployment CPU Request
doc.deployment.resources.requests.memorystring50MiQALITA Doc Deployment Memory Request
Database (Postgresql)

For more detailed configuration, please refer to Bitnami Postgresql Chart

KeyTypeDefaultDescription
postgresql.enabledbooltrueEnable deploy local postgresql, disable if you use external Postgresql Database
postgresql.image.tagstring15.3.0Postgresql Image Tag
postgresql.global.potgresql.auth.databasestringqalitadbPostgresql Database Name
postgresql.global.potgresql.auth.usernamestringqalitaPostgresql Database Username
postgresql.global.potgresql.auth.passwordstringrandAlphaNum 25 char long stringPostgresql Database Password
postgresql.primary.persistence.sizestring8GiPVC Size for persisting data
S3 Object Storage (Seaweedfs)

For more detailed configuration, please refer to Seaweedfs Chart

KeyTypeDefaultDescription
seaweedfs.enabledbooltrueEnable deploy local s3 file storage, disable if you use external S3 storage System
seaweedfs.global.imageNamestringchrislusf/seaweedfsSeaweedfs Image Name
seaweedfs.global.createClusterRolebooltrueCreates Service Accounts and Role and Role Binding for seaweedfs
Cache (Redis)

For more detailed configuration, please refer to Truecharts Redis Chart

KeyTypeDefaultDescription
redis.enabledbooltrueEnable deploy local redis, disable if you use external Redis Database
redis.passwordstringrandAlphaNum 25 char long stringRedis Database Password
Helm Sync

For more detailed configuration, please refer to alpine/helm

KeyTypeDefaultDescription
helmSync.enabledboolfalseEnable Helm Sync
helmSync.image.repositorystringalpine/helmHelm Sync Image Repository
helmSync.kubeconfigyaml``Kubeconfig yaml formatted, see default values to have a template
helmSync.resources.requests.cpustring500mQALITA helmsync Deployment CPU Request
helmSync.resources.requests.memorystring256MiQALITA helmsync Deployment Memory Request
attention

Pour une utilisation en production, il est fortement recommandé de déployer la plateforme sur un cluster Kubernetes managé.

QALITA offre une solution entièrement managée et hébergée sur cloud européen HDS et SecNumCloud.

Contactez-nous