Sur cette page

Sur site

Pour installer Ideanote dans votre propre environnement, utilisez le Ideanote Helm Chart.
Ce chart contient tous les composants requis pour démarrer et peut évoluer pour prendre en charge des déploiements de grande envergure.

Le Ideanote Helm Chart est fourni « tout compris » et est conçu pour être facile à installer et à configurer.
Le chart comprend plusieurs sous-charts ainsi qu’une configuration par défaut qui peut être personnalisée en fonction de vos besoins.
Veuillez consulter la section architecture pour en savoir plus sur les composants inclus dans le chart Helm.

Architecture

Ideanote se compose de plusieurs composants déployés dans un cluster Kubernetes à l’aide du Ideanote Helm Chart.
Le diagramme suivant présente l’architecture de ces composants et la manière dont ils interagissent.

Architecture sur site

Prérequis

Avant de déployer Ideanote dans un cluster Kubernetes, vous devez définir et respecter les prérequis suivants :

1. Créez un Kubernetes cluster.

2. Installez kubectl.

3. Installez Helm.

4. Obtenez un ZIP-folder auprès de l’équipe Ideanote avec les jetons requis pour accéder au graphique Helm et aux images Docker.

5. Authentifiez-vous avec le Ideanote Helm registry

6. Choisissez comment core services doit être hébergé

7. Choisissez comment vous souhaitez effectuer load balancing

8. Choisissez comment effectuer backups

9. Choisissez comment effectuer monitoring

10. Créez des jetons pour les intégrations

11. Mettez à jour la configuration dans le fichier values.yaml

1. Créez un Kubernetes cluster

Un cluster doté d’au moins 4 processeurs virtuels et de 10 GB de RAM est recommandé.
Veuillez consulter les instructions de votre fournisseur de services cloud pour savoir comment créer un cluster Kubernetes.

2. Installez kubectl

Pour installer kubectl, consultez la documentation d’installation de Kubernetes. La documentation couvre la plupart des systèmes d’exploitation.

Après avoir créé le cluster, vous devez configurer kubectl avant de pouvoir interagir avec le cluster depuis la ligne de commande.

3. Installez Helm

Pour ce guide, nous utilisons la dernière version de Helm v3 (v3.15.4 ou ultérieure). Pour installer Helm, consultez la documentation d’installation de Helm.

4. Un ZIP-folder de l’équipe Ideanote

Pour demander l’accès au graphique Helm Ideanote, vous devez contacter l’équipe Ideanote à l’adresse hello@ideanote.io.
Une licence Ideanote est requise pour obtenir ce jeton d’accès.

Ideanote vous fournira un ZIP-folder nommé ideanote-on-premise.zip contenant les éléments suivants :

  • Un fichier values.yaml contenant la configuration par défaut. Ce fichier contient également les secrets du registre requis pour que le cluster Kubernetes puisse extraire les images Docker. Veuillez lire ce guide pour en savoir plus sur la configuration du graphique Helm pour la production.
  • Un fichier helm-access-token.json contenant le jeton d’accès au registre Helm.

5. Authentifiez-vous avec le Ideanote Helm registry

Veuillez exécuter la commande suivante pour vous authentifier auprès du registre Helm à l’aide du helm-access-token.json fourni par Ideanote dans le fichier ZIP-folder :

# Linux/MacOS
cat helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

# Windows (Command Prompt)
type helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

# Windows (PowerShell)
Get-Content helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

Facultatif : vous pouvez exécuter la commande suivante pour vérifier que vous êtes authentifié auprès du registre Helm.
Cette commande téléchargera le fichier Ideanote Helm Chart sur votre machine locale.

helm pull oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0

6. Choisissez comment les services principaux doivent être hébergés

Le Ideanote Helm Chart comprend deux sous-graphiques pour les services de base de données et de mise en cache, installés au cours du processus d’installation :

  • PostgreSQL utilisé comme base de données principale
  • Redis utilisé comme service de mise en cache

Toutefois, pour les environnements de production, nous vous recommandons d’utiliser plutôt des services gérés en externe pour Redis et PostgreSQL et de fournir les détails de connexion lors de l’installation du graphique Helm.

Par conséquent, avant d’installer le Ideanote Helm Chart, vous devez choisir l’une des deux options suivantes :

  1. Sous-graphiques inclus : laissez le graphique Helm installer automatiquement Redis et PostgreSQL dans votre cluster. Il s’agit de l’option par défaut.. Pour en savoir plus sur la configuration de ces services principaux inclus, consultez cette page.
  2. Services principaux gérés : utilisez des services gérés pour Redis et/ou PostgreSQL. Cette option vous oblige à fournir les détails de connexion des services gérés lors de l’installation du graphique Helm. Veuillez suivre ce guide pour en savoir plus sur la configuration de vos propres services gérés.

7. Choisissez comment vous souhaitez effectuer load balancing

Le Ideanote Helm Chart comprend deux sous-graphiques permettant de gérer l’équilibrage de charge et les certificats SSL :

  • ingress-nginx Contrôleur Ingress/équilibreur de charge utilisé pour acheminer le trafic vers les services Ideanote.
  • cert-manager utilisé pour émettre automatiquement des certificats SSL pour les services Ideanote à l’aide de Let’s Encrypt.

Lors de l’installation du Ideanote Helm Chart, vous devez donc choisir entre les deux options suivantes :

  1. Sous-graphiques inclus : laissez le graphique Helm installer automatiquement le ingress-nginx répartiteur de charge et cert-manager dans votre cluster. Il s’agit de l’option par défaut. Cette option nécessite que vous possédiez un domaine auquel vous pouvez ajouter un enregistrement DNS. Il peut s’agir d’un sous-domaine tel que poc.domain.com. Les serveurs Let’s Encrypt doivent pouvoir résoudre l’adresse IP de votre cluster Kubernetes afin d’émettre des certificats. En savoir plus sur la configuration du répartiteur de charge intégré ici.
  2. Équilibreur de charge géré : Choisissez votre propre solution d’équilibrage de charge, avec votre propre contrôleur Ingress/équilibreur de charge géré ou l’équilibreur de charge d’un fournisseur cloud. En savoir plus sur la configuration de votre propre équilibreur de charge personnalisé ici.

Quel que soit votre choix ci-dessus, lors de l’installation du graphique Helm, vous devez fournir à Ideanote une URL que vous utiliserez pour accéder aux services Ideanote.
Cette URL doit être ajoutée au fichier values.yaml situé sous global.ideanote.ingress.url.

global:
  ideanote:
    ingress:
      url: https://<your-domain>

Si vous choisissez d’utiliser les sous-graphiques nginx du contrôleur Ingress/équilibreur de charge fourni et cert-manager, vous devez également indiquer votre adresse e-mail dans le fichier values.yaml.
Cette adresse e-mail est utilisée par Let’s Encrypt pour émettre des certificats SSL pour les services Ideanote.

cert-manager:
  email: <your-email-address>

8. Choisissez comment effectuer backups

Le Ideanote Helm Chart ne comprend actuellement aucune solution de sauvegarde intégrée.
Nous vous recommandons vivement de configurer une planification des sauvegardes pour les déploiements en production.

Selon les sous-graphiques que vous choisissez d’installer, Ideanote créera 3 PVCs (Persistent Volume Claims) dans votre cluster, avec des volumes que vous devrez tous sauvegarder :

  • Volume de la base de données PostgreSQL : data-<release>-postgresql-0 (non créé si vous utilisez PostgreSQL géré)
  • Volume de la base de données Redis : redis-data-<release>-redis-master-0 (non créé si vous utilisez Redis géré)
  • Volume des téléversements Ideanote : <release>-storage-data

9. Choisissez comment effectuer monitoring

Le Ideanote Helm Chart ne comprend actuellement aucune solution de surveillance intégrée.
Nous travaillons à ajouter la prise en charge de Prometheus et de Grafana à l’avenir.

Les services Ideanote écrivent leurs journaux dans stdout et stderr.
Ces journaux sont ensuite capturés par l’environnement d’exécution des conteneurs et peuvent être consultés à l’aide d’outils Kubernetes tels que kubectl logs.
Cependant, par défaut, ces journaux sont liés au cycle de vie du pod. Ainsi, lorsqu’un pod est arrêté, ses journaux sont perdus, sauf s’ils sont conservés ailleurs.

Par conséquent, pour configurer une surveillance adéquate des services Ideanote, vous devez installer une solution de surveillance capable de collecter ces journaux à partir des conteneurs en cours d’exécution dans le cluster Kubernetes.

10. Créez des jetons pour les intégrations

Les fonctionnalités facultatives suivantes nécessitent la création et la configuration de jetons pour des intégrations (externes). Elles sont toutes facultatives.

  • OpenAI intégration pour les fonctionnalités d’IA. Définissez la valeur ideanote.api.openai.key sur une clé API OpenAI valide. Pour en savoir plus sur la configuration de l’intégration OpenAI, cliquez ici.
  • Sendgrid intégration pour les notifications par e-mail. Définissez la valeur ideanote.api.sendgrid.key sur une clé API Sendgrid valide. Pour en savoir plus sur la configuration de l’intégration Sendgrid, cliquez ici.
  • SAML : intégration pour l’authentification unique. Pour en savoir plus sur la configuration de l’intégration SAML, cliquez ici.
  • LDAP : intégration pour l’authentification unique. Pour en savoir plus sur la configuration de l’intégration LDAP, cliquez ici.

11. Mettez à jour la configuration dans le fichier values.yaml

Le values.yaml inclus dans le ZIP-folder fourni par l’équipe Ideanote contient la configuration par défaut du Ideanote Helm Chart.

La configuration par défaut n’est pas destinée à la production et peut servir de point de départ pour personnaliser le graphique Helm selon vos besoins.

Valeurs requises :

  • global.ingress.url (obligatoire) : L’URL sous laquelle Ideanote doit fonctionner. Exemples : https://domain.com, https://poc.domain.com, http://192.0.2.0. Pour en savoir plus sur load-balancing ici.
  • cert-manager.email (obligatoire si vous choisissez l’équilibreur de charge et le gestionnaire de certificats par défaut) : Votre adresse e-mail, afin que Let’s Encrypt puisse émettre un certificat. Pour en savoir plus sur cert-manager ici.

Installation de Ideanote

Avant d’installer le graphique Helm, vous devrez satisfaire aux 11 conditions préalables ci-dessus.

Pour installer Ideanote Helm Chart, exécutez la commande suivante.
Cela suppose que vous avez configuré values.yaml conformément aux prérequis et à vos besoins.

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

Cette opération installera les services Ideanote dans votre cluster Kubernetes, dans un nouvel espace de noms appelé ideanote, avec un nom de version ideanote.
Veuillez patienter quelques minutes, le temps que toutes les ressources soient allouées et que les services démarrent.

Vous pouvez vérifier l’état de chaque pod en exécutant la commande suivante :

kubectl get pods -n ideanote --watch

Suivez ces étapes pour terminer l’installation

Ces étapes supposent que vous installez Ideanote Helm Chart avec les sous-graphiques ingress-nginx d’équilibreur de charge et cert-manager inclus.

1․ Récupérez l’adresse IP allouée dynamiquement à l’Ingress NGINX installé :

kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

2․ Ajoutez cette adresse IP aux enregistrements DNS du domaine que vous avez spécifié dans le fichier values.yaml.

3․ Attendez quelques minutes que les enregistrements DNS se propagent et que cert-manager émette les certificats SSL. Vérifiez le statut des certificats en exécutant les commandes suivantes :

kubectl describe certificate -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote

4․ Enfin, accédez à l’URL que vous avez spécifiée dans le fichier values.yaml pour configurer Ideanote.

Configuration de votre espace de travail Ideanote

Maintenant que vous avez installé Ideanote dans votre cluster Kubernetes, la dernière étape consiste à configurer votre espace de travail Ideanote.
Vous pouvez accéder à votre espace de travail Ideanote en visitant l’URL que vous avez indiquée dans le fichier values.yaml et en suivant les instructions à l’écran.

Configuration de l’espace de travail avec les options « À partir de zéro » et « Importer des données »

Vous pouvez configurer votre espace de travail de deux façons :

  • À partir de zéro : Vous pouvez choisir de créer un espace de travail à partir de zéro. Cette option vous guidera dans la création d’un compte propriétaire Ideanote et d’un espace de travail.
  • Importer des données : Si vous avez utilisé Ideanote sur ideanote.io par le passé, vous pouvez choisir d’importer l’intégralité de votre espace de travail dans votre environnement sur site. Pour ce faire, veuillez contacter l’équipe Ideanote, qui vous fournira un TAR-folder contenant toutes les données de votre espace de travail. Ce TAR-file doit être importé pendant le processus de configuration de l’espace de travail, lorsque cela vous sera demandé.

Exemples de déploiements

Cette section contient des exemples de déploiement de Ideanote auprès de différents fournisseurs cloud et dans divers environnements.
Ces exemples peuvent vous inspirer pour déployer Ideanote dans votre propre environnement.
Vous pouvez installer Ideanote auprès du fournisseur cloud de votre choix, mais nous recommandons d’utiliser AWS, Azure ou Google Cloud Platform.
Vous pouvez également installer Ideanote sur un cluster Kubernetes local à l’aide de Minikube.

Tous les exemples de déploiement supposent que vous avez respecté les prérequis et configuré le fichier values.yaml selon vos besoins.

Minikube

La configuration de Minikube désactivera le sous-chart d’équilibrage de charge nginx inclus et utilisera à la place l’extension de routage native fournie par minikube.

Pour installer Ideanote sur Minikube, procédez comme suit :

1․ Installez Docker

2․ Installez Minikube

3․ Démarrez Minikube à l’aide de la commande suivante. Celle-ci allouera 4 CPU et 8 GB de RAM au cluster :

minikube start --cpus 4 --memory 8192

4․ Activez les modules complémentaires requis :

minikube addons enable metrics-server
minikube addons enable ingress

5․ Assurez-vous que la configuration suivante figure dans le fichier values.yaml :

global:
  ideanote:
    ingress:
      # `minikube tunnel` will expose the load balancer on this IP
      url: "http://127.0.0.1"
      tls:
        enabled: false

# Disable both cert-manager and nginx because Minikube is using its own routing addon
cert-manager:
  install: false

ingress-nginx:
  install: false

6․ Installez le graphique Helm d’Ideanote :

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

7․ Démarrez le tunnel Minikube (et le tableau de bord) :

minikube tunnel
minikube dashboard

8․ Accédez à : http://127.0.0.1 et configurez votre instance Ideanote.

Azure Kubernetes Service (AKS)

La configuration d’Azure utilisera le nginx contrôleur Ingress et le cert-manager fournis par Ideanote Helm Chart.
Si vous choisissez plutôt d’utiliser le routing add-on natif d’Azure pour Kubernetes, vous pouvez le faire en suivant ces instructions et en désactivant les services inclus nginx et cert-manager (voir comment désactiver ces services ici).

1․ Créez un cluster Azure Kubernetes Service (AKS) avec au moins 2 vCPU et 8 GB de mémoire (par exemple, en utilisant Standard_DS2_v2). Consultez ce guide pour en savoir plus sur la création d’un cluster Azure Kubernetes.

2․ Installez le Azure CLI sur votre ordinateur local. Consultez ce guide pour en savoir plus.

3․ Exécutez la commande suivante pour configurer kubectl afin de le connecter à votre cluster AKS :

az aks get-credentials --resource-group Ideanote --name Ideanote

4․ Configurez le values.yaml en fonction des conditions préalables et de vos besoins. Définissez global.ingress.url sur le nom de domaine que vous souhaitez utiliser pour Ideanote. Vous devrez configurer un enregistrement DNS pour ce domaine plus loin dans ce guide.

5․ Installez le graphique Helm d’Ideanote :

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

6․ Attendez quelques minutes que tous les services démarrent, puis récupérez l’adresse IP allouée dynamiquement par Azure à l’Ingress NGINX installé :

kubectl get ingress -l "app.kubernetes.io/part-of"=ideanote --namespace ideanote

7․ Ajoutez cette adresse IP aux enregistrements DNS du domaine que vous avez spécifié dans le fichier values.yaml.

8․ Patientez quelques minutes, le temps que les enregistrements DNS se propagent, puis accédez à l’URL que vous avez spécifiée dans le fichier values.yaml pour configurer Ideanote. Veuillez consulter le guide de dépannage si vous rencontrez des problèmes avec l’URL/l’adresse IP.

Configuration du contrôleur Ingress nginx LoadBalancer pour Azure

Si vous devez configurer le LoadBalancer nginx contrôleur d’ingress inclus pour Azure, vous pouvez le faire en ajoutant ces annotations au fichier values.yaml.
Vous pouvez également utiliser ces annotations pour attribuer une adresse IP statique au LoadBalancer en suivant ce guide.
Par exemple :

ingress-nginx:
  controller:
    service:
      annotations:
        "service.beta.kubernetes.io/azure-load-balancer-resource-group": "MC_Ideanote_Ideanote_francecentral"
        "service.beta.kubernetes.io/azure-pip-name": "public-cluster-load-balancer-ip"

Utilisation de nœuds Spot Azure

Veuillez ajouter ce qui suit au fichier values.yaml pour exécuter tous les déploiements sur des nœuds Spot Azure :

tolerationsAndAffinity: &tolerationsAndAffinity
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                  - "spot"
  tolerations:
    - key: "kubernetes.azure.com/scalesetpriority"
      operator: "Equal"
      value: "spot"
      effect: "NoSchedule"

postgresql:
  primary:
    <<: *tolerationsAndAffinity

redis:
  master:
    <<: *tolerationsAndAffinity

ingress-nginx:
  controller:
    <<: *tolerationsAndAffinity

cert-manager:
  <<: *tolerationsAndAffinity
  cainjector:
    <<: *tolerationsAndAffinity
  webhook:
    <<: *tolerationsAndAffinity
  startupapicheck:
    <<: *tolerationsAndAffinity

global:
  ideanote:
    <<: *tolerationsAndAffinity

Google Plateforme cloud (GKE)

Cet exemple vous montre comment configurer Ideanote sur un cluster GKE Kubernetes Autopilot (GCP).
Le cluster sera prêt pour la production avec un PostgreSQL géré et un LoadBalancer géré, ainsi qu’une mise en cache CDN pour les ressources.

Prérequis :

  • Suivez tous les prérequis principaux
  • Vous devez posséder un domaine auquel vous pouvez ajouter un enregistrement DNS
  • Vous devez avoir un compte Google Cloud Platform

1․ Créer un réseau VPC
2․ Créer un nouveau cluster Kubernetes Autopilot

  • Associez le réseau VPC que vous avez créé à l’étape 1

3․ Créer une nouvelle instance PostgreSQL

  • Associez le réseau VPC que vous avez créé à l’étape 1
  • Créez une base de données nommée ideanote
  • Créez un utilisateur nommé ideanote et notez le mot de passe

4. Installez l’interface de ligne de commande gcloud cli et connectez-vous à votre compte GCP
5. Configurez kubectl pour vous connecter à votre cluster GCP

gcloud container clusters get-credentials <cluster> --region <region> --project <project>

6. Créez une nouvelle adresse IP statique pour LoadBalancer et notez l’adresse IP :

gcloud compute addresses create ideanote-global --global
gcloud compute addresses list --project ideanote-sa

7. Accédez à votre fournisseur DNS et ajoutez un enregistrement A pour le domaine que vous souhaitez utiliser avec Ideanote. Faites pointer l’enregistrement A vers l’adresse IP statique créée à l’étape 6.

8. Configurez le fichier values.yaml avec les valeurs suivantes. Renseignez les valeurs de global.ideanote.psql.host, global.ideanote.psql.passwordSecret.password, global.ideanote.ingress.url et global.ideanote.gke.ingress.staticIPName.

global:
  # This will create GKE-specific resources such as selecting the native GCP ingress controller, creating backend/frontend configs and activating CDN caching for assets
  cloudProvider: GKE

  gke:
    ingress:
      staticIPName: "<static-google-cloud-ip-name>"

  ideanote:
    ingress:
      url: "https://<your-domain>"

    autoscaling:
      enabled: true

    resources:
      enabled: true

    psql:
      database: "ideanote"
      username: "ideanote"
      host: "<google-cloud-sql-ip>"
      passwordSecret:
        password: "<google-cloud-sql-password>"

    storage:
      persistence:
        size: "50Gi"

cert-manager:
  install: false

ingress-nginx:
  install: false

postgresql:
  install: false

redis:
  install: true
  master:
    persistence:
      size: 5Gi

9. (Facultatif) Modifiez la classe de stockage par défaut avec allowVolumeExpansion: true afin de permettre de redimensionner facilement les PVC:

kubectl patch storageclass standard-rwo -p '{"allowVolumeExpansion": true}'

10. Installez le graphique Helm d’Ideanote :

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

11. Attendez que le cluster soit prêt, puis accédez à l’URL indiquée dans values.yaml. L’allocation initiale des ressources des clusters Autopilot peut prendre beaucoup de temps. Veuillez également patienter jusqu’à 1 heure pour que Google Cloud émette le certificat SSL.

Préparez votre cluster GKE pour la production

12. Modifiez les demandes de volume avec persistentVolumeReclaimPolicy: Retain afin d’éviter toute perte de données lors de la suppression de la version Helm :

kubectl patch pvc -n ideanote ideanote-storage-data -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
kubectl patch pvc -n ideanote redis-data-ideanote-redis-master-0 -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

13. Configurez des sauvegardes de la base de données PostgreSQL. Vous pouvez utiliser les sauvegardes Cloud SQL ou une solution de sauvegarde tierce.

14. Configurez des sauvegardes pour l’ensemble du cluster Kubernetes, y compris les VPCs (Persistent Volume Claims), en suivant ce guide.

Utilisation de nœuds Spot GCP

Veuillez ajouter ce qui suit au fichier values.yaml pour exécuter des déploiements sur des machines virtuelles Spot GCP :

nodeSelector: &nodeSelector
  nodeSelector:
    cloud.google.com/gke-spot: "true"

redis:
  master:
    <<: *nodeSelector

global:
  ideanote:
    <<: *nodeSelector

Ubuntu 24 avec MicroK8s (instance AWS EC2, cluster à nœud unique)

Ce guide vous montrera comment installer Ideanote sur un cluster Kubernetes à nœud unique à l’aide de MicroK8s sur une instance AWS EC2.
Il utilise les modules complémentaires MicroK8s inclus nginx pour l’équilibrage de charge et le module complémentaire hostpath-storage pour le stockage.
En production, envisagez de remplacer ces modules complémentaires par une solution adaptée à la production, comme openebs pour le stockage et AWS ELB pour l’équilibrage de charge.

1. Créez une nouvelle instance EC2 Ubuntu 24

  • Au moins 4 processeurs et 8 Go de RAM (par exemple, avec le type d’instance t1.large).
  • Au moins 30 Go de stockage.
  • Vérifier Allow HTTPS traffic from the internet
  • Vérifier Allow HTTP traffic from the internet
  • Créer, associer et télécharger une paire de clés pour l'accès SSH.
Configuration d’une instance Amazon EC2 avec Ubuntu sélectionné et un bouton Lancer l’instance

2. Associez l’adresse IP de l’instance à un nom de domaine

Notez l'adresse publique IP de l'instance et associez-la à un nom de domaine dont vous êtes propriétaire en ajoutant un enregistrement A aux paramètres DNS du domaine.
Par exemple : ideanote.your-domain.com ou your-domain.com.

3. Connectez-vous à l’instance via SSH

4. Installez MicroK8s

# Update the system
sudo apt update && sudo apt upgrade -y

# Install MicroK8s
sudo snap install microk8s --classic --channel=1.31

# Join the `microk8s` group
sudo usermod -a -G microk8s ubuntu
sudo chown -R ubuntu ~/.kube
newgrp microk8s

# Wait for all services to be running
microk8s status --wait-ready
microk8s kubectl get nodes
microk8s kubectl get services

# Alias `kubectl` to `microk8s kubectl`
alias kubectl='microk8s kubectl'

# Alias 'helm' to 'microk8s helm'
alias helm='microk8s helm'

# Add the above aliases to the `.bashrc` file
echo -e "\n# Alias kubectl to microk8s kubectl\nalias kubectl='microk8s kubectl'\n# Alias helm to microk8s helm\nalias helm='microk8s helm'" >> ~/.bashrc && source ~/.bashrc

5. Activez les modules complémentaires

# Required addons
microk8s enable ingress
microk8s enable hostpath-storage # Consider using "openebs" in production environment

# Optional addons
microk8s enable dashboard
microk8s enable metrics-server

6. Téléversez le ZIP-folder fourni par l’équipe Ideanote sur l’instance

# Run this on your local machine
chmod 400 <key>.pem
scp -i <key>.pem ideanote-on-premise.zip ubuntu@<instance ip address>:/home/ubuntu

7. Décompressez le ZIP-folder sur l’instance EC2 et authentifiez-vous auprès du registre Helm

sudo apt install unzip
cd /home/ubuntu
unzip ideanote-on-premise.zip
cat helm-access-token.json | helm registry login -u _json_key --password-stdin europe-west3-docker.pkg.dev

8. Mettez à jour le fichier values.yaml avec les valeurs suivantes

cert-manager:
  install: true
  email: <your-email-address>

# Don't install the included `nginx` Ingress controller as we are using the MicroK8s `ingress` addon
ingress-nginx:
  install: false

global:
  ideanote:
    ingress:
      url: "https://your-domain.com"

9. Installez le graphique Helm d’Ideanote

helm install ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --create-namespace --namespace ideanote --wait --timeout 10m -f values.yaml

10. Attendez quelques minutes que tous les services démarrent et que les certificats SSL soient délivrés par cert-manager

kubectl get deployments -n ideanote --watch
kubectl get certificaterequest -n ideanote --watch

11. Enfin, rendez-vous sur https://your-domain.com pour configurer votre espace de travail Ideanote

Configurer values.yaml

Le tableau suivant répertorie les paramètres configurables du graphique Ideanote et leurs valeurs par défaut.

Clé

Type

Par défaut

Description

cert-manager.email

string

Définissez l’adresse e-mail à utiliser pour le compte ACME. Cette valeur est requise si vous choisissez d’installer et d’utiliser le cert-manager graphique inclus.

cert-manager.install

boolean

true

Installez le sous-chart cert-manager

cert-manager.resources.requests.cpu

string

"50m"

Demandes de ressources CPU pour le service cert-manager

cert-manager.resources.requests.memory

string

"128Mi"

Demandes de ressources mémoire pour le service cert-manager

cert-manager.server

string

"https://acme-v02.api.letsencrypt.org/directory"

Définissez l’URL du serveur ACME. Utilisez le serveur de préproduction « https://acme-staging-v02.api.letsencrypt.org/directory » pour les tests.

cert-manager.solvers

array

[{http01:{ingress:{ingressClassName:nginx}}}]

Configurez l’émetteur ACME pour le graphique cert-manager. En savoir plus ici

global.cloudProvider

GKE / EKS / AKS

Le fournisseur de cloud à utiliser pour le déploiement. Si vous définissez cette valeur, le déploiement privilégiera les composants natifs du fournisseur de cloud spécifié, tels qu’un équilibreur de charge natif. Actuellement, seul GKE est pris en charge.

global.clusterDomain

string

"cluster.local"

Définissez éventuellement le domaine du cluster pour le déploiement. Cette valeur est utilisée pour générer les URL des services internes

global.ideanote.affinity

object

{}

Ajoutez l’affinité à tous les déploiements Ideanote

global.ideanote.annotations

object

{}

Ajoutez des annotations à tous les déploiements Ideanote

global.ideanote.autoRefreshBrowser

boolean

true

Par défaut, l’application Web est actualisée automatiquement chaque fois qu’une nouvelle version est déployée. Cela permet aux utilisateurs d’obtenir la dernière version de l’application Web sans avoir à actualiser eux-mêmes la page.

global.ideanote.autoscaling.enabled

boolean

false

Activez ou désactivez la mise à l’échelle automatique pour tous les déploiements Ideanote

global.ideanote.autoscaling.maxReplicas

number

Remplacez le nombre maximal de réplicas pour tous les déploiements Ideanote

global.ideanote.autoscaling.minReplicas

number

Remplacez le nombre minimal de réplicas pour tous les déploiements Ideanote

global.ideanote.autoscaling.targetCPUUtilizationPercentage

number

Remplacez le pourcentage cible d’utilisation du CPU pour tous les déploiements Ideanote

global.ideanote.autoscaling.targetMemoryUtilizationPercentage

number

Remplacez le pourcentage cible d’utilisation de la mémoire pour tous les déploiements Ideanote

global.ideanote.features.featureSuggestions

boolean

true

Cela activera dans l’interface utilisateur le bouton « suggestion de fonctionnalité », qui permet aux utilisateurs de proposer directement de nouvelles demandes de fonctionnalités à l’équipe Ideanote.

global.ideanote.features.issueReporting

boolean

true

Cela activera dans l’interface utilisateur le bouton « signaler un problème », qui permet aux utilisateurs de signaler directement des problèmes à l’équipe Ideanote.

global.ideanote.image.credentials.email

string

Définissez l’adresse e-mail utilisée pour l’authentification auprès du registre Docker. Cette valeur est fournie par Ideanote.

global.ideanote.image.credentials.password

string

Définissez le mot de passe utilisé pour l’authentification auprès du registre Docker. Cette valeur est fournie par Ideanote.

global.ideanote.image.pullPolicy

string

"IfNotPresent"

Remplacez la stratégie de récupération des images pour tous les déploiements Ideanote

global.ideanote.image.repository

string

"europe-west3-docker.pkg.dev/ideanote/ideanote"

Remplacez le dépôt des images pour tous les déploiements Ideanote

global.ideanote.image.tag

string

Remplacez la balise des images pour tous les déploiements Ideanote

global.ideanote.ingress.annotations

object

{}

Ajoutez des annotations supplémentaires à l’objet ingress créé pour Ideanote. Consultez la liste des annotations autorisées pour le graphique nginx-ingress inclus ici

global.ideanote.ingress.className

string

Définissez le nom de la classe ingress pour l’objet ingress Ideanote

global.ideanote.ingress.enabled

boolean

true

Activez la création de l’objet ingress pour Ideanote

global.ideanote.ingress.tls.certManagerIssuerName

string

"letsencrypt"

L’Issuer cert-manager à utiliser pour le certificat TLS.

global.ideanote.ingress.tls.enabled

boolean

true

Activez ou désactivez TLS pour l’objet ingress créé pour Ideanote. Cette option doit être activée si vous souhaitez utiliser le cert-manager sous-graphique.

global.ideanote.ingress.tls.secretName

string

"ideanote-tls"

Définissez le nom du secret pour le certificat TLS. Obligatoire si vous désactivez le cert-manager sous-graphique et activez TLS.

global.ideanote.ingress.url

string

Définissez l’URL ingress pour Ideanote. Il doit s’agir d’un domaine que vous contrôlez et depuis lequel vous souhaitez que Ideanote soit accessible. Cette valeur peut également inclure un sous-domaine. Cette valeur est obligatoire.

global.ideanote.logLevel

error, warn, info, verbose, debug

"info"

Définissez logLevel pour tous les services Ideanote.

global.ideanote.networkPolicies.enabled

boolean

true

Cela créera des stratégies réseau pour tous les services Ideanote. Les stratégies réseau servent à restreindre le trafic entrant et sortant des services et appliquent par défaut le principe du moindre privilège.

global.ideanote.nodeSelector

object

{}

Ajoutez nodeSelector à tous les déploiements Ideanote

global.ideanote.podDisruptionBudget.enabled

boolean

true

Activez ou désactivez la création d’un PodDisruptionBudget pour tous les déploiements Ideanote

global.ideanote.podDisruptionBudget.minAvailable

number

1

Définissez le nombre minimal de pods disponibles pour tous les déploiements Ideanote pendant les interruptions

global.ideanote.psql.database

string

"ideanote"

Le nom de la base de données PostgreSQL à utiliser pour le service Ideanote

global.ideanote.psql.host

string

"The host of the postgresql sub-chart service"

L’hôte à utiliser pour se connecter à la base de données PostgreSQL

global.ideanote.psql.passwordSecret.key

string

"postgres-password-user"

Remplacez la clé utilisée pour stocker dans le secret le mot de passe de l’utilisateur de la base de données.

global.ideanote.psql.passwordSecret.name

string

Si vous choisissez de créer votre propre secret de mot de passe pour Redis à l’aide de "kubectl", vous devez définir ici le nom du secret. Le secret doit contenir la clé "global.ideanote.psql.passwordSecret.key".

global.ideanote.psql.passwordSecret.password

string

"A randomly generated password"

Définissez le mot de passe de l’utilisateur de la base de données

global.ideanote.psql.port

number

5432

Le port à utiliser pour se connecter à la base de données PostgreSQL

global.ideanote.psql.username

string

"ideanote"

Le nom d’utilisateur PostgreSQL à utiliser pour le service Ideanote

global.ideanote.redis.database

integer

Le numéro de base de données Redis à utiliser pour le service Ideanote

global.ideanote.redis.host

string

"The host of the redis sub-chart service"

L’hôte à utiliser pour se connecter à la base de données Redis

global.ideanote.redis.passwordSecret.key

string

"redis-password"

Remplacez la clé utilisée pour stocker dans le secret le mot de passe de l’utilisateur Redis.

global.ideanote.redis.passwordSecret.name

string

Si vous choisissez de créer votre propre secret de mot de passe pour Redis à l’aide de "kubectl", vous devez définir ici le nom du secret. Le secret doit contenir la clé "global.ideanote.redis.passwordSecret.key".

global.ideanote.redis.passwordSecret.password

string

Définissez le mot de passe de l’utilisateur Redis

global.ideanote.redis.port

number

6379

Le port à utiliser lors de la connexion à la base de données Redis

global.ideanote.redis.username

string

Le nom d’utilisateur Redis à utiliser pour le service Ideanote

global.ideanote.resources.enabled

boolean

false

Activer ou désactiver les demandes de ressources pour tous les déploiements Ideanote

global.ideanote.resources.limits.cpu

string

Remplacer la limite de processeur pour tous les déploiements Ideanote

global.ideanote.resources.limits.memory

string

Remplacer la limite de mémoire pour tous les déploiements Ideanote

global.ideanote.resources.requests.cpu

string

Remplacer la demande de processeur pour tous les déploiements Ideanote

global.ideanote.resources.requests.memory

string

Remplacer la demande de mémoire pour tous les déploiements Ideanote

global.ideanote.restartDeploymentsWhenConfigChanges

boolean

true

Tous les services seront redémarrés à chaque modification de la configuration afin de garantir l’application immédiate de la nouvelle configuration.

global.ideanote.service.annotations

object

{}

Ajouter des annotations à tous les services Ideanote

global.ideanote.service.externalPort

number

Remplacer le port de service externe pour tous les services Ideanote

global.ideanote.service.internalPort

number

Remplacer le port de service interne pour tous les services Ideanote

global.ideanote.service.type

string

Remplacer le type de service pour tous les services Ideanote

global.ideanote.serviceAccount.annotations

object

{}

Ajouter des annotations au compte de service créé par Ideanote

global.ideanote.serviceAccount.enabled

boolean

true

Permettre aux déploiements Ideanote d’utiliser un compte de service créé automatiquement par le graphique Helm Ideanote

global.ideanote.serviceAccount.name

string

""

Remplacer le nom du compte de service Ideanote

global.ideanote.sso.saml.cert

string

Certificat SAML pour configurer Ideanote en tant que fournisseur de services

global.ideanote.sso.saml.key

string

Clé privée SAML pour configurer Ideanote en tant que fournisseur de services

global.ideanote.tolerations

array

[]

Ajouter des tolérances à tous les déploiements Ideanote

global.leaderElection.namespace

string

"kube-system"

Par défaut, cert-manager installe les ressources dans l’espace de noms « kube-system ». Modifiez cette valeur si vous ne souhaitez pas que l’espace de noms « kube-system » soit modifié.

ideanote.api.affinity

object

Définir l’affinité du service API

ideanote.api.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement de l’API

ideanote.api.autoscaling.enabled

boolean

true

Activer la mise à l’échelle automatique du service API. Cette option peut être remplacée à l’aide de global.ideanote.autoscaling.enabled.

ideanote.api.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas pour le service API

ideanote.api.autoscaling.minReplicas

number

2

Nombre minimal de réplicas pour le service API

ideanote.api.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d’utilisation du processeur pour le service API

ideanote.api.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d’utilisation de la mémoire pour le service api

ideanote.api.enableMigrationSchemaValidation

boolean

false

Activez cette valeur pour que le pod échoue immédiatement s’il détecte une incompatibilité de schéma de base de données. Cela se produit généralement lors d’une restauration de la version précédente du service api, après la mise à jour du schéma de base de données vers une version plus récente, mais avant le retour de la base de données au schéma précédent.

ideanote.api.nodeSelector

object

Définir nodeSelector pour le service api

ideanote.api.openai.key

string

Définir sur une clé API OpenAI pour activer API OpenAI

ideanote.api.path

string

"api"

Chemin ou sous-domaine du service api. Cette valeur est utilisée pour créer l’URL de l’objet ingress.

ideanote.api.replicaCount

number

1

Nombre de réplicas du service api. L’activation de la mise à l’échelle automatique remplacera cette valeur.

ideanote.api.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources pour le service api. Cette valeur peut être remplacée à l’aide de global.ideanote.resources.enabled.

ideanote.api.resources.limits.cpu

string

"1500m"

Limites de ressources CPU et mémoire pour le service api

ideanote.api.resources.limits.memory

string

"2Gi"

Limites de ressources mémoire pour le service api

ideanote.api.resources.requests.cpu

string

"250m"

Demandes de ressources CPU et mémoire pour le service api

ideanote.api.resources.requests.memory

string

"1Gi"

Demandes de ressources mémoire pour le service api

ideanote.api.sendgrid.key

string

Définissez une clé API Sendgrid pour permettre à Ideanoate d’envoyer des e-mails

ideanote.api.service.annotations

object

{}

Ajouter des annotations supplémentaires au service api

ideanote.api.service.externalPort

number

80

Port externe pour api

ideanote.api.service.internalPort

number

3000

Port interne pour api

ideanote.api.service.type

string

"ClusterIP"

Type de service pour api

ideanote.api.tolerations

array

Définir les tolérances du service api

ideanote.convert.affinity

object

Définir l’affinité du service convert

ideanote.convert.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement convert

ideanote.convert.autoscaling.enabled

boolean

true

Activer la mise à l’échelle automatique pour le service convert. Cette valeur peut être remplacée à l’aide de global.ideanote.autoscaling.enabled.

ideanote.convert.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas du service convert

ideanote.convert.autoscaling.minReplicas

number

1

Nombre minimal de réplicas du service convert

ideanote.convert.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d’utilisation du CPU pour le service convert

ideanote.convert.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d’utilisation de la mémoire pour le service convert

ideanote.convert.nodeSelector

object

Définir nodeSelector pour le service convert

ideanote.convert.replicaCount

number

1

Nombre de réplicas du service convert. L’activation de la mise à l’échelle automatique remplacera cette valeur.

ideanote.convert.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources pour le service convert. Cela peut être remplacé en utilisant global.ideanote.resources.enabled.

ideanote.convert.resources.limits.cpu

string

"2000m"

Limites de ressources CPU et mémoire pour le service convert

ideanote.convert.resources.limits.memory

string

"5Gi"

Limites de ressources mémoire pour le service convert

ideanote.convert.resources.requests.cpu

string

"500m"

Demandes de ressources CPU et mémoire pour le service convert

ideanote.convert.resources.requests.memory

string

"1Gi"

Demandes de ressources mémoire pour le service convert

ideanote.convert.service.annotations

object

{}

Ajouter des annotations supplémentaires au service convert

ideanote.convert.service.externalPort

number

80

Port externe pour convert

ideanote.convert.service.internalPort

number

3000

Port interne pour convert

ideanote.convert.service.type

string

"ClusterIP"

Type de service pour convert

ideanote.convert.tolerations

array

Définir les tolérances pour le service convert

ideanote.html-renderer.affinity

object

Définir l'affinité pour le service html-renderer

ideanote.html-renderer.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement html-renderer

ideanote.html-renderer.autoscaling.enabled

boolean

true

Activer la mise à l'échelle automatique pour le service html-renderer. Cela peut être remplacé en utilisant global.ideanote.autoscaling.enabled.

ideanote.html-renderer.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas pour le service html-renderer

ideanote.html-renderer.autoscaling.minReplicas

number

1

Nombre minimal de réplicas pour le service html-renderer

ideanote.html-renderer.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d'utilisation du CPU pour le service html-renderer

ideanote.html-renderer.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d'utilisation de la mémoire pour le service html-renderer

ideanote.html-renderer.nodeSelector

object

Définir nodeSelector pour le service html-renderer

ideanote.html-renderer.replicaCount

number

1

Nombre de réplicas pour le service html-renderer. L'activation de la mise à l'échelle automatique remplacera cette valeur.

ideanote.html-renderer.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources pour le service html-renderer. Cela peut être remplacé en utilisant global.ideanote.resources.enabled.

ideanote.html-renderer.resources.limits.cpu

string

"1500m"

Limites de ressources CPU et mémoire pour le service html-renderer

ideanote.html-renderer.resources.limits.memory

string

"2Gi"

Limites de ressources mémoire pour le service html-renderer

ideanote.html-renderer.resources.requests.cpu

string

"250m"

Demandes de ressources CPU et mémoire pour le service html-renderer

ideanote.html-renderer.resources.requests.memory

string

"500Mi"

Demandes de ressources mémoire pour le service html-renderer

ideanote.html-renderer.service.annotations

object

{}

Ajouter des annotations supplémentaires au service html-renderer

ideanote.html-renderer.service.externalPort

number

80

Port externe de html-renderer

ideanote.html-renderer.service.internalPort

number

3000

Port interne de html-renderer

ideanote.html-renderer.service.type

string

"ClusterIP"

Type de service de html-renderer

ideanote.html-renderer.tolerations

array

Définir les tolérations du service html-renderer

ideanote.idea-widget.affinity

object

Définir l’affinité du service idea-widget

ideanote.idea-widget.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement idea-widget

ideanote.idea-widget.autoscaling.enabled

boolean

true

Activer la mise à l’échelle automatique du service idea-widget. Cette option peut être remplacée en utilisant global.ideanote.autoscaling.enabled.

ideanote.idea-widget.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas du service idea-widget

ideanote.idea-widget.autoscaling.minReplicas

number

1

Nombre minimal de réplicas du service idea-widget

ideanote.idea-widget.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d’utilisation du processeur pour le service idea-widget

ideanote.idea-widget.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d’utilisation de la mémoire pour le service idea-widget

ideanote.idea-widget.nodeSelector

object

Définir nodeSelector pour le service idea-widget

ideanote.idea-widget.path

string

"widget"

Le chemin ou le sous-domaine du service idea-widget. Cette valeur est utilisée pour créer l’URL de l’objet ingress.

ideanote.idea-widget.replicaCount

number

1

Nombre de réplicas du service idea-widget. L’activation de la mise à l’échelle automatique remplacera cette valeur.

ideanote.idea-widget.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources du service idea-widget. Cette option peut être remplacée en utilisant global.ideanote.resources.enabled.

ideanote.idea-widget.resources.limits.cpu

string

"1500m"

Limites des ressources CPU et mémoire pour le service idea-widget

ideanote.idea-widget.resources.limits.memory

string

"2Gi"

Limites de ressources mémoire du service idea-widget

ideanote.idea-widget.resources.requests.cpu

string

"250m"

Demandes de ressources CPU et mémoire pour le service de widget d’idées

ideanote.idea-widget.resources.requests.memory

string

"1Gi"

Demandes de ressources mémoire du service idea-widget

ideanote.idea-widget.service.annotations

object

{}

Ajouter des annotations supplémentaires au service idea-widget

ideanote.idea-widget.service.externalPort

number

80

Port externe de idea-widget

ideanote.idea-widget.service.internalPort

number

3000

Port interne de idea-widget

ideanote.idea-widget.service.type

string

"ClusterIP"

Type de service de idea-widget

ideanote.idea-widget.tolerations

array

Définir les tolérations du service idea-widget

ideanote.storage.affinity

object

Définir l’affinité du service storage

ideanote.storage.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement "storage"

ideanote.storage.autoscaling.enabled

boolean

false

La mise à l’échelle automatique n’est pas activée par défaut pour le service "storage". Veuillez modifier "ideanote.storage.persistence.accessMode" en "ReadWriteMany" si vous l’activez.

ideanote.storage.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas pour le service de stockage

ideanote.storage.autoscaling.minReplicas

number

1

Nombre minimal de réplicas pour le service de stockage

ideanote.storage.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d’utilisation du processeur pour le service de stockage

ideanote.storage.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d’utilisation de la mémoire pour le service de stockage

ideanote.storage.maxUploadSize

string

"500m"

Taille maximale de téléversement pour le service de stockage. Cette valeur sera utilisée pour définir « client_max_body_size » dans la configuration nginx du graphique nginx-ingress inclus.

ideanote.storage.nodeSelector

object

Définir nodeSelector pour le service de stockage

ideanote.storage.path

string

"files"

Chemin ou sous-domaine du service de stockage. Cette valeur est utilisée pour créer l’URL de l’objet ingress.

ideanote.storage.persistence.accessMode

string

"ReadWriteOnce"

Mode d’accès pour le PVC

ideanote.storage.persistence.enabled

boolean

true

Définir sur true pour activer la persistance du service de stockage

ideanote.storage.persistence.existingClaim

string

Si un PVC existant doit être utilisé pour le service de stockage, indiquez son nom ici. Ce graphique Helm ne créera alors pas automatiquement de nouveau PVC

ideanote.storage.persistence.size

string

"4Gi"

Taille de stockage du PVC

ideanote.storage.persistence.storageClassName

string

Classe de stockage du PVC

ideanote.storage.persistence.volumeMode

string

"Filesystem"

Mode de volume du PVC

ideanote.storage.replicaCount

number

1

Nombre de réplicas du service de stockage. L’activation de la mise à l’échelle automatique remplacera cette valeur.

ideanote.storage.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources pour le service de stockage. Cette valeur peut être remplacée à l’aide de global.ideanote.resources.enabled.

ideanote.storage.resources.limits.cpu

string

"1500m"

Limites de ressources en processeur et en mémoire pour le service de stockage

ideanote.storage.resources.limits.memory

string

"2Gi"

Limite de ressources en mémoire pour le service de stockage

ideanote.storage.resources.requests.cpu

string

"100m"

Demandes de ressources en processeur et en mémoire pour le service de stockage

ideanote.storage.resources.requests.memory

string

"500Mi"

Demande de ressources en mémoire pour le service de stockage

ideanote.storage.service.annotations

object

{}

Ajouter des annotations supplémentaires au service de stockage

ideanote.storage.service.externalPort

number

80

Port externe du service de stockage

ideanote.storage.service.internalPort

number

3000

Port interne du service de stockage

ideanote.storage.service.type

string

"ClusterIP"

Type de service pour le service de stockage

ideanote.storage.tolerations

array

Définir les tolérances pour le service de stockage

ideanote.webapp.affinity

object

Définir l’affinité pour le service de l’application web

ideanote.webapp.annotations

object

{}

Ajouter des annotations supplémentaires au déploiement de l’application web

ideanote.webapp.autoscaling.enabled

boolean

true

Activer la mise à l’échelle automatique du service d’application web. Cette option peut être remplacée en utilisant global.ideanote.autoscaling.enabled.

ideanote.webapp.autoscaling.maxReplicas

number

4

Nombre maximal de réplicas pour le service d’application web

ideanote.webapp.autoscaling.minReplicas

number

2

Nombre minimal de réplicas pour le service d’application web

ideanote.webapp.autoscaling.targetCPUUtilizationPercentage

number

60

Pourcentage cible d’utilisation du processeur pour le service d’application web

ideanote.webapp.autoscaling.targetMemoryUtilizationPercentage

number

70

Pourcentage cible d’utilisation de la mémoire pour le service d’application web

ideanote.webapp.nodeSelector

object

Définir nodeSelector pour le service d’application web

ideanote.webapp.path

string

""

Le chemin ou le sous-domaine du service d’application web. Cette valeur est utilisée pour créer l’URL de l’objet d’ingress.

ideanote.webapp.replicaCount

number

1

Nombre de réplicas du service d’application web. L’activation de la mise à l’échelle automatique remplacera cette valeur.

ideanote.webapp.resources.enabled

boolean

true

Définir sur true pour activer les demandes de ressources pour le service d’application web. Cette option peut être remplacée en utilisant global.ideanote.resources.enabled.

ideanote.webapp.resources.limits.cpu

string

"1500m"

Limites de ressources du processeur et de la mémoire pour le service d’application web

ideanote.webapp.resources.limits.memory

string

"2Gi"

Limites de ressources de mémoire pour le service d’application web

ideanote.webapp.resources.requests.cpu

string

"250m"

Demandes de ressources du processeur et de la mémoire pour le service d’application web

ideanote.webapp.resources.requests.memory

string

"1Gi"

Demandes de ressources de mémoire pour le service d’application web

ideanote.webapp.service.annotations

object

{}

Ajouter des annotations supplémentaires au service d’application web

ideanote.webapp.service.externalPort

number

80

Port externe du service d’application web

ideanote.webapp.service.internalPort

number

3000

Port interne du service d’application web

ideanote.webapp.service.type

string

"ClusterIP"

Type de service du service d’application web

ideanote.webapp.tolerations

array

Définir les tolérances du service d’application web

ingress-nginx.controller.service.type

string

"LoadBalancer"

Type de service à créer pour le contrôleur Ingress

ingress-nginx.install

boolean

true

Installez le sous-chart ingress-nginx inclus

postgresql.install

boolean

true

Installez le sous-chart PostgreSQL inclus

postgresql.primary.persistence.size

string

"5Gi"

Taille de stockage du PVC du service PostgreSQL inclus

postgresql.primary.resourcesPreset

string

"small"

Préréglage de ressources PostgreSQL

redis.install

boolean

true

Installez le sous-chart Redis inclus

redis.master.persistence.size

string

"3Gi"

Taille de stockage pour le PVC du service Redis inclus

redis.master.resourcesPreset

string

"micro"

Préréglage des ressources Redis

Configurer les sous-charts inclus

Configuration du sous-chart postgresql inclus

Le Ideanote Helm Chart installe par défaut le chart PostgreSQL de Bitnami en tant que sous-chart.
Cela configure une base de données PostgreSQL pour le service Ideanote.

Vous pouvez configurer le sous-chart PostgreSQL en modifiant les valeurs dans le fichier values.yaml sous la clé postgresql.
Veuillez consulter PostgreSQL cette liste des valeurs autorisées pour le sous-chart inclus ici
Exemple de configuration :

postgresql:
  install: true
  primary:
    persistence:
      size: 5Gi
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Mot de passe

Le sous-chart PostgreSQL inclus créera automatiquement un secret contenant le mot de passe de l’utilisateur de la base de données et de l’administrateur.
Vous pouvez remplacer le mot de passe généré automatiquement pour la base de données en définissant la valeur global.ideanote.psql.passwordSecret.password dans le fichier values.yaml.

Connexion à la base de données PostgreSQL depuis l’extérieur du cluster

Pour vous connecter à votre base de données depuis l’extérieur du cluster, exécutez les commandes suivantes :

kubectl get secret -n ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote
# or
kubectl port-forward -n ideanote svc/ideanote-postgresql 5432:5432 &
psql --host 127.0.0.1 -d postgres -p 5432 -U postgres

Configuration du sous-chart redis inclus

Le Ideanote Helm Chart installe par défaut le chart Redis de Bitnami en tant que sous-chart.
Cela configure une base de données Redis pour le service Ideanote.

Vous pouvez configurer le sous-chart Redis en modifiant les valeurs dans le fichier values.yaml sous la clé redis.
Veuillez consulter Redis cette liste des valeurs autorisées pour le sous-chart inclus ici.
Exemple de configuration :

redis:
  install: true
  master:
    persistence:
      size: 5Gi
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Connexion à la base de données redis depuis l’extérieur du cluster

Pour vous connecter à votre base de données Redis depuis l’extérieur du cluster, exécutez les commandes suivantes :

kubectl exec -it -n ideanote svc/ideanote-redis-master -- redis-cli
# or
kubectl port-forward -n ideanote svc/ideanote-redis-master 6379:6379
redis-cli -h localhost -p 6379

Configuration du sous-chart ingress-nginx inclus

Le Ideanote Helm Chart installe par défaut le chart ingress-nginx en tant que sous-chart.
Cela configure un équilibreur de charge pour le service Ideanote et sert de contrôleur d’ingress pour l’objet ingress Ideanote.

Vous pouvez configurer le sous-chart ingress-nginx en modifiant les valeurs dans le fichier values.yaml sous la clé ingress-nginx.
Veuillez consulter ingress-nginx cette liste des valeurs autorisées pour le sous-chart inclus ici.

Exemple de configuration :

ingress-nginx:
  enabled: true
  controller:
    service:
      annotations:
        cloud.google.com/load-balancer-type: "Internal"
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      limits:
        memory: 2Gi
        cpu: 500m

Configuration du sous-chart cert-manager inclus

Le Ideanote Helm Chart installe par défaut le chart cert-manager en tant que sous-chart.
Cela configure le cert-manager pour créer et gérer automatiquement les certificats TLS du service Ideanote.

Vous pouvez configurer le cert-manager sous-chart en modifiant les valeurs dans le fichier values.yaml sous la clé cert-manager.
Veuillez consulter ici la liste des valeurs autorisées pour le cert-manager sous-chart inclus ici.

Exemple de configuration :

cert-manager:
  install: true
  installCRDs: false
  replicaCount: 2

Interaction avec le service cert-manager

Nous recommandons d’installer cmctl pour interagir avec le service cert-manager.
Cet outil CLI peut vous aider à gérer les ressources cert-manager au sein de votre cluster.

Par exemple, vous pouvez renouveler le certificat à l’aide de cet outil en exécutant la commande suivante :

cmctl renew ideanote-tls -n ideanote

kubectl get certificaterequest -n ideanote

Configurer des services externes/gérés

Ideanote comprend des sous-graphiques intégrés pour PostgreSQL, Redis et Load-balancer services.
Ces services sont gérés par le Ideanote Helm Chart et sont installés par défaut lors du déploiement de Ideanote.
Cependant, nous recommandons d’utiliser des services externes ou gérés pour autant de ces services que possible lorsque Ideanote est exécuté dans un environnement de production.
Cela vous permettra de disposer d’une infrastructure fiable et évolutive.

Cette section comprenait un guide expliquant comment configurer les services externes/gérés pour PostgreSQL, Redis et Load-balancer (la combinaison de ingress-nginx et cert-manager).

Configurer une instance externe de PostgreSQL

Pour utiliser une instance externe de PostgreSQL avec Ideanote, vous devez fournir les informations de connexion lors de l'installation de Ideanote Helm Chart.
Voici un exemple de configuration pour se connecter à une instance externe de PostgreSQL :

global:
  ideanote:
    psql:
      database: <database>
      username: <username>
      host: <host>
      passwordSecret:
        password: <password>

      # You can also instead create a secret object yourself with "kubectl" and provide it here
      # passwordSecret:
      #   name: <secret-name>
      #   key: postgres-password      # The key in the secret object where the password is stored

postgresql:
  install: false

Configurer une instance externe de Redis

Pour utiliser une instance externe de Redis avec Ideanote, vous devez fournir les informations de connexion lors de l'installation de Ideanote Helm Chart.
Voici un exemple de configuration pour se connecter à une instance externe de Redis :

global:
  ideanote:
    redis:
      username: <username>
      host: <host>
      passwordSecret:
        password: <password>

      # You can also instead create a secret object yourself with "kubectl" and provide it here
      # passwordSecret:
      #   name: <secret-name>
      #   key: redis-password      # The key in the secret object where the password is stored

redis:
  install: false

Configurez un load-balancer

Nous recommandons d'utiliser un équilibreur de charge natif du fournisseur cloud pour le contrôleur d'entrée.
Les fournisseurs cloud proposent souvent des équilibreurs de charge gérés qui peuvent être utilisés avec Kubernetes en définissant ingress class ou en ajoutant des annotations à l'objet d'entrée.
Vous pouvez ajouter ces valeurs à l'aide de la configuration suivante :

global:
  ideanote:
    ingress:
      annotations: <annotations>
      className: <ingress-class>

cert-manager:
  install: false

ingress-nginx:
  install: false

Configurer les intégrations

Vous trouverez ici des guides expliquant comment configurer les différentes intégrations prises en charge par Ideanote.
Aucune de ces intégrations n'est requise pour exécuter Ideanote sur site, mais elles peuvent améliorer les fonctionnalités de votre espace de travail.

Configurer l'intégration Sendgrid

Pour que Ideanote puisse envoyer des e-mails, vous devez fournir une clé Sendgrid API lors de l'installation de Ideanote Helm Chart.
Veuillez suivre ce guide pour configurer l'intégration Sendgrid :

1․ Créez un compte Sendgrid si vous n’en avez pas déjà un.

2․ Créez une clé API dans le tableau de bord Sendgrid. Elle doit disposer d’au moins Mail Send capacités.

Clé API Sendgrid

3․ Fournissez la clé API au fichier values.yaml :

ideanote:
  api:
    sendgrid:
      key: "SG........."

Configurer l'intégration OpenAI

Pour que la plateforme Ideanote fournisse des fonctionnalités d'IA, vous devez fournir une clé OpenAI API lors de l'installation de Ideanote Helm Chart.
Veuillez suivre ce guide pour configurer l'intégration OpenAI :

1․ Créez un compte OpenAI si vous n’en avez pas déjà un.

2․ Créez une clé API dans le tableau de bord OpenAI. Elle doit disposer des autorisations All.

Clé API OpenAI

3․ Fournissez la clé API au fichier values.yaml :

ideanote:
  api:
    openai:
      key: "sk-........."

Configurer l'intégration SAML

Le Ideanote Helm Chart permet de configurer votre déploiement en tant que fournisseur de services SAML, afin que vous puissiez utiliser votre propre fournisseur d'identité pour l'authentification.
Pour cela, vous devez fournir un certificat lors de la configuration de l'intégration SAML.

Veuillez suivre ce guide pour configurer l'intégration SAML :

1․ Créez un certificat autosigné à l’aide de la commande suivante :

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=my-service.example.com"

2․ Fournissez le certificat et la clé au fichier values.yaml et installez le Ideanote Helm Chart :

global:
  ideanote:
    saml:
      cert: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
      key: ....

3․ Rendez-vous sur https://<your-domain>/api/sso/saml/metadata.xml ; il s’agit désormais du point de terminaison des métadonnées de votre fournisseur de services SAML Ideanote.

4․ Configurez votre fournisseur d’identité. Veuillez suivre ce guide pour plus d’informations et pensez à remplacer l’metadata.xml URL par la vôtre.

Configurez l’intégration LDAP

Ideanote prend en charge le LDAP protocole pour l’intégration à votre répertoire d’utilisateurs et de groupes existant, tel que Microsoft Active Directory et Entra ID. Vous pouvez utiliser LDAP pour authentifier et synchroniser les utilisateurs, soit au moment de leur connexion à votre espace de travail grâce au provisionnement juste-à-temps, soit à l’avance via une étape de Provisionnement intégrée directement à l’assistant de configuration LDAP. LDAP ne peut pas être configuré à l’aide de la configuration values.yaml, mais doit plutôt être configuré après ou pendant le processus de configuration de votre espace de travail Ideanote.

Si vous souhaitez utiliser LDAP, mais que vous ne l’avez pas encore mis en œuvre dans votre infrastructure informatique, veuillez consulter la documentation pertinente pour sa mise en œuvre, adaptée à votre infrastructure informatique. Nous vous recommandons les ressources suivantes :

Dans ce guide, nous vous accompagnerons tout au long du processus de configuration sur la plateforme Ideanote.

Configuration de LDAP sur votre espace de travail

Illustration LDAP 1
  1. Accédez à Paramètres.
  2. Accédez à Authentification.
  3. Cliquez sur Ajouter pour créer une nouvelle option de connexion.
  4. Sélectionnez LDAP dans la liste des options.

Configuration de LDAP

Illustration LDAP 2
  1. Cliquez sur Ajouter une configuration.
  2. Saisissez l’URL du serveur LDAP, sans le protocole ldap:// ni son port.
  3. Saisissez le Bind DN/UPN, qui correspond au nom distinctif (DN) ou au nom principal d’utilisateur (UPN) dans certains environnements, tels que Microsoft Active Directory ou Microsoft Entra ID, utilisé pour établir la liaison (s’authentifier) avec votre annuaire LDAP. Il indique l’entrée de l’annuaire que Ideanote utilisera pour l’authentification et les recherches. Ce compte doit disposer d’un accès en lecture à l’annuaire. Par exemple, un UPN peut se présenter sous la forme you@your-domain.com, ce qui le rend plus facile à mémoriser et à utiliser. Un DN de liaison plus traditionnel peut également se présenter sous la forme CN=Admin,OU=Users,DC=your-domain,DC=com, qui indique un utilisateur administratif au sein de l’unité organisationnelle Users du domaine your-domain.com.
  4. Saisissez le Bind Password. Il s’agit du mot de passe associé au nom distinctif de liaison (Bind DN/UPN). Ideanote utilise ce mot de passe pour authentifier le DN de liaison spécifié lors de la connexion à l’annuaire LDAP. Ce mot de passe doit correspondre au compte indiqué dans le champ Bind DN/UPN, qu’il s’agisse d’un nom principal d’utilisateur (UPN) tel que you@your-domain.com ou d’un nom distinctif LDAP plus traditionnel tel que CN=Admin,OU=Users,DC=your-domain,DC=com. Ce mot de passe est indispensable pour établir une connexion sécurisée permettant d’effectuer des recherches et de récupérer les informations utilisateur nécessaires aux processus d’authentification. La valeur enregistrée sera AES-256 chiffrée.
  5. Cliquez sur Test Connection pour vérifier qu’il est possible de se connecter à l’URL du serveur LDAP et d’établir une liaison avec celui-ci (de s’y « authentifier ») à l’aide du Bind DN/UPN et du Bind Password fournis. Si la connexion réussit, le texte Connexion LDAP établie avec succès s’affichera à côté du bouton Test Connection.

Si vous rencontrez un problème, veuillez consulter la section Dépannage de la connexion.

Illustration LDAP 3

Champs de configuration supplémentaires

Illustration LDAP 4
  1. Le DN de base représente le niveau supérieur de votre arborescence d’annuaire dans lequel rechercher lors du provisionnement des utilisateurs et des groupes. Vous pouvez l’utiliser pour limiter la recherche à une branche spécifique de votre annuaire. Le DN de liaison doit disposer d’un accès en lecture au DN de base et à ses objets.
  2. Le filtre LDAP, le cas échéant, sera appliqué lors de la recherche dans l’annuaire que vous avez configuré dans votre Base DN. Cela est utile si vous souhaitez imposer des restrictions sur l’étendue des utilisateurs pouvant être provisionnés et s’authentifier dans votre espace de travail. Vous devez utiliser la syntaxe standard des requêtes LDAP, telle que décrite dans RFC 4515. Par exemple : (&(givenName=you)(sn=yourlastname)).
  3. En activant Use SSL/TLS, LDAP over SSL (ldaps) sera activé. Plusieurs champs supplémentaires
    seront affichés, que vous pouvez consulter ici.
  4. En activant Use StartTLS, StartTLS sera utilisé pour établir d’abord une connexion non chiffrée sur le port LDAP standard (389), puis pour mettre à niveau la connexion afin d’utiliser TLS au moyen d’une opération StartTLS. Plusieurs champs supplémentaires deviendront visibles. Vous pouvez en savoir plus ici.

Configurer LDAPS ou StartTLS

Illustration LDAP 6

Lorsque Use SSL/TLS ou Use StartTLS est activé, des champs de configuration facultatifs supplémentaires apparaissent en dessous :

  1. Certificat(s) de l'autorité de certification du serveur LDAP : fournissez le ou les certificats de l'autorité de certification (CA) qui a signé le certificat SSL de votre serveur LDAP. Cela est nécessaire si votre serveur LDAP utilise des certificats autosignés ou des certificats émis par une autorité de certification privée. Le ou les certificats doivent être au format PEM.
  2. Certificat client : fournissez le certificat client à présenter au serveur LDAP pour l'authentification. Cela est obligatoire si votre serveur LDAP exige une authentification par certificat client. Le certificat doit être au format PEM.
  3. Clé privée du client : fournissez la clé privée correspondant à votre certificat client. Cela est nécessaire si vous avez fourni un certificat client. La clé privée doit être au format PEM et ne doit pas être protégée par un mot de passe.
  4. Autoriser les certificats autosignés : activez cette option pour autoriser les connexions aux serveurs LDAP utilisant des certificats autosignés sans vérifier l'autorité de certification. Avertissement : l'activation de cette option peut rendre votre connexion vulnérable aux attaques de l'homme du milieu.

Mappage des attributs

Illustration LDAP 9

De nombreux serveurs modernes compatibles avec LDAPv3 permettent d’interroger le schéma pris en charge pour connaître les attributs disponibles. Si cette fonctionnalité est disponible, Ideanote détectera le schéma et proposera des suggestions par défaut pertinentes pour associer les données de votre répertoire aux propriétés équivalentes des utilisateurs et des équipes dans Ideanote. Vous pouvez consulter et personnaliser ces associations depuis la page Mappage des attributs.


  1. attribut LDAP représente les attributs découverts dans le schéma de votre serveur LDAP. Ils proviennent de votre fournisseur d’annuaire, tel que Microsoft Active Directory ou Microsoft Entra ID. Si, pour une raison quelconque, votre serveur LDAP n’est pas conforme à LDAPv3, nous estimons les noms d’attributs possibles en nous fondant sur les conventions historiques et les types d’attributs décrits dans RFC4519. Par exemple, givenName représente généralement le prénom d’une personne, tandis que sn représente généralement son nom de famille.


  2. Type représente une version simplifiée de la définition de syntaxe d’un attribut LDAP. Il existe de nombreuses définitions de syntaxe de ce type, qui sont toutes décrites ici dans RFC4517, mais, par souci de simplicité, Ideanote les regroupe dans les définitions suivantes :







    • string : Représente une séquence de caractères. Les définitions de syntaxe LDAP telles que DirectoryString, PrintableString, TelephoneNumber, NumericString et d’autres utilisent toutes ce type.

    • date : Représente une date avec un horodatage, au format Generalized Time (YYYYMMDDHHMMSSZ) ou UTCTime (YYMMDDHHMMSSZ). Ideanote saura l’interpréter et l’analyser ; vous pouvez donc l’associer aux propriétés utilisateur/d’équipe Ideanote spécifiques aux dates.

    • integer : Bien que LDAP ne définisse pas de syntaxe pour les nombres à virgule flottante (ceux-ci utilisent plutôt des définitions de syntaxe telles que NumericString, qui sera associé à string dans Ideanote), le type `integer` représente des nombres entiers, qui peuvent être associés aux propriétés utilisateur/d’équipe Ideanote numériques.

    • boolean : les valeurs booléennes true et false.

    • binary : certains attributs LDAP représentent des données binaires, comme l’attribut thumbnailPhoto couramment utilisé pour les avatars des profils utilisateur. En règle générale, ils ne peuvent être associés qu’à avatar pour les utilisateurs Ideanote, et à logo pour les équipes Ideanote.

    • reference : la définition de syntaxe LDAP DN (Distinguished Name) fait référence à une autre entité portant ce DN. Elle est généralement utilisée dans le mappage des attributs sur la plateforme Ideanote pour associer l’attribut memberOf des associations de groupes d’un utilisateur aux équipes Ideanote équivalentes.

  3. Attribut correspondant à Ideanote représente la propriété de données des utilisateurs/équipes à laquelle l’attribut LDAP doit être associé. Vous pouvez le personnaliser en cliquant sur le menu déroulant de chaque ligne de la liste. Les options disponibles dépendront du type de l’attribut LDAP. Par exemple, un attribut LDAP de type date ne peut pas être associé à First name.

Synchronisation des groupes/équipes d’utilisateurs

Illustration LDAP 10

Si vous souhaitez synchroniser (ou cesser de synchroniser) les appartenances aux équipes d’un utilisateur lorsqu’il se connecte à Ideanote (ou lorsqu’il est préprovisionné via l’étape de provisionnement), identifiez l’attribut LDAP qui représente le ou les groupes auxquels appartient l’utilisateur.

Avec Microsoft Active Directory et Microsoft Entra ID, cet attribut est généralement appelé memberOf et est de type reference dans Ideanote.

Par défaut, il sera déjà associé à la propriété utilisateur spéciale Teams Ideanote, comme illustré ci-dessus.

Si vous souhaitez cesser de synchroniser les équipes :

  1. Identifiez l’attribut LDAP memberOf (ou la propriété équivalente dans le schéma de votre serveur LDAP)
  2. Cliquez sur le menu déroulant de cette ligne, dans la colonne Attribut Ideanote correspondant.
  3. Sélectionnez Ne pas importer.

Création d’une correspondance d’attributs personnalisée

Illustration LDAP 8

Les correspondances que Ideanote affiche par défaut reposent sur nos tentatives de définir des valeurs par défaut pertinentes. Si vous souhaitez associer d’autres attributs à Ideanote, vous pouvez également cliquer sur le bouton Ajouter un attribut situé sous le tableau des utilisateurs et celui des groupes/équipes.

Illustration LDAP 11

Dans la boîte de dialogue qui s’affiche, vous pouvez saisir un nom d’attribut personnalisé et lui attribuer le type de données qui lui correspond le mieux. Le champ de texte affichera tous les autres attributs détectés sur votre serveur LDAP qui ne figuraient pas parmi les suggestions de correspondance par défaut. Vous n’êtes pas obligé d’en choisir un, bien qu’il soit très probable que votre serveur LDAP ne prenne en charge que les noms d’attributs suggérés.

Les correspondances d’attributs que vous avez créées via la boîte de dialogue Ajouter un attribut peuvent être supprimées en cliquant sur l’icône « Croix » à côté de la ligne, comme illustré ci-dessous, ou en remplaçant la correspondance par Do Not Import.

Illustration LDAP 12

Provisionnement

Lorsque vos utilisateurs se connectent à votre espace de travail, ils sont provisionnés. Cela signifie que la représentation de leurs données dans votre annuaire est synchronisée avec le compte utilisateur équivalent dans Ideanote, conformément aux règles de correspondance des attributs que vous avez définies.

Toutefois, dans de nombreux cas, il est pertinent de provisionner les utilisateurs à l’avance. Un cas d’utilisation courant consiste à préprovisionner tous vos utilisateurs et équipes afin de pouvoir configurer les accès à vos collectes d’idées avant de les inviter officiellement à contribuer dans votre espace de travail.

L’étape de provisionnement des paramètres LDAP vous permet de le faire.

Illustration LDAP 13
  1. Le champ de recherche vous permet d’effectuer une recherche directement dans votre annuaire LDAP. Votre saisie sera recherchée parmi les attributs LDAP courants distinguishedName, userPrincipalName, sAMAccountName, mail, displayName et cn.
  2. La Table affiche toutes les entrées récupérées depuis votre annuaire, ainsi que des informations pertinentes sur chacune d’elles, par exemple si elles représentent un Utilisateur ou un Groupe, la date de leur dernière synchronisation avec votre espace de travail, etc.
  3. Le Filtre vous permet d’affiner davantage les résultats de recherche. Vous pouvez choisir de n’afficher que les groupes ou les utilisateurs, ainsi que de n’afficher que les entités qui n’ont jamais été provisionnées sur votre espace de travail.
  4. Le Bouton de démarrage du provisionnement lance le processus de provisionnement. Vous pourrez suivre sa progression dans une barre de progression située à côté du bouton. Lorsque le provisionnement est en cours, vous pourrez également cliquer sur Annuler afin d’empêcher le provisionnement d’entités supplémentaires.
Illustration LDAP 14

Dépannage de la connexion

Illustration LDAP 5

Lorsque LDAP a été correctement configuré, le texte Connexion LDAP établie avec succès apparaît à côté du bouton Test Connection.

Cependant, vous pouvez rencontrer certains problèmes courants. Vous trouverez ci-dessous des conseils de dépannage pour chaque message d’erreur potentiel :

Erreur : Le serveur LDAP n’a pas pu être résolu. Vérifiez que l’URL du serveur saisie est correcte et que votre réseau actuel peut s’y connecter.

Causes possibles :

  • L’URL du serveur LDAP est peut-être mal saisie ou incorrecte.
  • L’application ne peut pas accéder au serveur LDAP en raison de restrictions réseau.

Étapes de dépannage :

  • Vérifiez que le nom d’hôte ou l’adresse IP ne comporte pas de faute de frappe.
  • Vérifiez que le serveur LDAP se trouve sur le même réseau virtuel que votre déploiement Ideanote. Si ce n’est pas le cas, configurez un appairage réseau ou un VPN afin que les deux réseaux puissent communiquer.
  • Assurez-vous que les connexions sortantes du cluster Kubernetes exécutant le déploiement sur site de Ideanote sont autorisées sur les ports suivants :

    • 389 pour LDAP (par défaut)
    • 636 pour LDAPS (par défaut)
  • Mettez à jour les règles du pare-feu afin d’autoriser le trafic vers le serveur LDAP sur ces ports.
  • Si vous utilisez un nom d’hôte, vérifiez que la résolution DNS est correctement configurée dans le cluster Kubernetes.
  • Si vous utilisez Microsoft Entra ID et que vous venez de configurer Microsoft Entra Domain Services pour activer l’intégration LDAP, vous devez redémarrer complètement votre cluster Kubernetes avant qu’il puisse résoudre le nom d’hôte.

Erreur : L’authentification LDAP avec le DN de liaison et le mot de passe de liaison fournis a échoué.

Causes possibles :

  • Les identifiants sont incorrects.
  • La synchronisation des hachages de mots de passe n’est pas activée (problème courant avec Microsoft Entra Domain Services)
  • Le compte de l’utilisateur de liaison est désactivé, verrouillé ou a expiré.
  • Le serveur LDAP nécessite LDAPS, et il est possible que vous n’ayez pas activé le Use SSL/TLS, ou que vous ayez fourni des certificats/clés incorrects.

Étapes de dépannage :

  • Vérifiez une nouvelle fois que le DN de liaison est correctement syntaxé et ne contient pas de faute de frappe.

    • Le DN de liaison doit être le DN complet de l’utilisateur (par exemple, cn=admin,dc=example,dc=com), ou son UPN, tel que you@your-domain.com si vous utilisez Microsoft Entra ID ou Microsoft Active Directory.
  • Vérifiez que le mot de passe de liaison est correct.
  • Authentifiez-vous à l’aide d’un client LDAP avec le DN de liaison et le mot de passe de liaison pour confirmer qu’ils fonctionnent en dehors de Ideanote.
  • Si vous utilisez Microsoft Entra Domain Services, vérifiez que la synchronisation des hachages de mot de passe est activée. Si vous avez récemment configuré Microsoft Entra Domain Services, vous devrez peut-être réinitialiser le mot de passe du compte associé au DN de liaison avec lequel vous essayez de vous authentifier. Voici les instructions pour les comptes d’utilisateurs exclusivement cloud, et voici les instructions pour les comptes d’utilisateurs synchronisés.
  • Vérifiez que le compte de l’utilisateur de liaison est actif et qu’il n’est soumis à aucune restriction.
  • Déterminez si le serveur LDAP nécessite SSL/TLS.

    • Si tel est le cas, activez Use SSL/TLS pour utiliser ldaps:// dans l’URL du serveur. Vérifiez également que LDAP Server PORT indique le port approprié, qui est 636 par défaut pour LDAPS.
    • Vérifiez que vous avez fourni le certificat d’autorité de certification du serveur LDAP, le certificat client et la clé privée du client appropriés (si nécessaire).
    • Vérifiez si l’activation de « Autoriser les certificats auto-signés » résout le problème.
    • Vérifiez que le certificat SSL du serveur LDAP est approuvé par le cluster Kubernetes.
    • Si nécessaire, importez le certificat du serveur LDAP dans le magasin de certificats approuvés du cluster.

Erreur : L’authentification LDAP a réussi, mais il n’a pas été possible d’effectuer une recherche dans le DN de base fourni.

Causes possibles :

  • Le Base DN est incorrect ou pointe vers un emplacement erroné dans l’annuaire.
  • L’utilisateur de liaison ne dispose pas des autorisations nécessaires pour effectuer une recherche dans le DN de base fourni.

Étapes de dépannage :

  • Vérifiez que le DN de base est correctement formaté (par exemple, DC=your-domain,DC=com).
  • Vérifiez qu’il n’y a pas de faute de frappe ni de virgule ou de signe égal mal placé.
  • Vérifiez que l’utilisateur de liaison indiqué par le DN de liaison dispose des autorisations de lecture et de recherche pour le DN de base.
  • Utilisez un client LDAP (tel que ldapsearch) pour tester la recherche dans le DN de base avec les identifiants de l’utilisateur de liaison.
  • Vérifiez que la structure de l’annuaire sous le DN de base contient les entrées d’utilisateurs auxquelles vous souhaitez accéder.

Si aucun de ces conseils de dépannage ne vous aide, veuillez consulter la documentation fournie par votre fournisseur d’infrastructure ou contacter Ideanote pour obtenir une aide supplémentaire au dépannage.

Configurer pour la production

Cette section présente des recommandations pour configurer le Ideanote Helm Chart dans des environnements de production.

Services externes

Nous vous recommandons de déléguer autant de services que possible à des services externes/gérés lorsque vous exécutez Ideanote dans un environnement de production.
Cela permet de garantir une infrastructure fiable et évolutive.

En particulier, le service PostgreSQL devrait être géré en externe, car le sous-graphique PostgreSQL inclus ne prend pas en charge, par défaut, la haute disponibilité, les sauvegardes et la montée en charge.

Veuillez consulter la section Configurer des services externes/gérés pour en savoir plus sur la configuration des services externes.

Mise à l’échelle automatique

Par défaut, le Ideanote Helm Chart n’active pas la mise à l’échelle automatique des services.
Tous les services ont un nombre de réplicas par défaut de 1 et peuvent être mis à l’échelle manuellement en modifiant la valeur replicaCount dans le fichier values.yaml.

Vous pouvez activer la mise à l’échelle automatique des services en ajoutant ce qui suit au fichier values.yaml :

global:
  ideanote:
    autoscaling:
      enabled: true

ingress-nginx:
  controller:
    autoscaling:
      enabled: true
      minReplicas: 2
      maxReplicas: 6

Cela créera un Horizontal Pod Autoscaler (HPA) pour chaque Ideanote service et mettra à l’échelle le nombre de réplicas en fonction de l’utilisation du processeur et de la mémoire du service.
Les api et webapp services seront mis à l’échelle entre 2 et 4 réplicas par défaut, et les autres entre 1 et 4, mais vous pouvez modifier le nombre minimal et maximal de réplicas en changeant les valeurs minReplicas et maxReplicas dans le fichier values.yaml de chaque service.
Exemple de configuration :

ideanote:
  api:
    autoscaling:
      minReplicas: 3
      maxReplicas: 5

  html-renderer:
    autoscaling:
      enabled: false

  convert:
    autoscaling:
      minReplicas: 2
      maxReplicas: 3

Demandes de ressources

Par défaut, le Ideanote Helm Chart ne définit pas de demandes de ressources pour les services Ideanote.
Cela permet aux services de s’exécuter sur des clusters aux ressources limitées.

Dans les environnements de production, nous recommandons d’activer les demandes de ressources de manière globale en ajoutant ce qui suit au fichier values.yaml :

global:
  ideanote:
    resources:
      enabled: true

Chaque service est associé à des demandes et des limites par défaut en matière de processeur et de mémoire, qui devraient convenir à la plupart des cas d’utilisation. L’activation globale des ressources devrait donc suffire.
Toutefois, si vous devez modifier les demandes de ressources d’un service spécifique, vous pouvez le faire en changeant les valeurs dans le fichier values.yaml sous la clé du service correspondant.
Par exemple :

global:
  ideanote:
    resources:
      enabled: true

ideanote:
  api:
    resources:
      requests:
        memory: 1Gi
        cpu: 250m
      # Disable limits
      limits:
        memory: null
        cpu: null

postgresql:
  primary:
    resources:
      requests:
        memory: 1024Mi
        cpu: 500m
      limits:
        memory: 1536Mi
        cpu: 750m

redis:
  master:
    resources:
    requests:
        memory 512Mi
        cpu: 500m
    limits:
        memory: 768Mi
        cpu: 750m

ingress-nginx:
  controller:
    resources:
      requests:
        memory: 256Mi
        cpu: 250m
      limits:
        memory: 512Mi
        cpu: 500m

cert-manager:
  cainjector:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  webhook:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  startupapicheck:
    resources:
      requests:
        cpu: 50m
        memory: 128Mi
  resources:
    requests:
      cpu: 50m
      memory: 128M

Volumes persistants et sauvegardes

Si vous installez le Ideanote Helm Chart avec tous les sous-graphiques inclus, cela créera 3 PVCs (Persistent Volume Claims) dans votre cluster :

  • data-<release>-postgresql-0 pour la base de données PostgreSQL
  • redis-data-<release>-redis-master-0 pour la base de données Redis
  • <release>-storage-data pour les téléversements multimédias Ideanote

Kubernetes allouera les PVs (volumes persistants) correspondants à ces PVCs, et les données seront stockées sur ces volumes.

Pour les déploiements en production, nous recommandons d'effectuer les 3 tâches suivantes :

1․ Le stockage alloué par défaut aux services est défini à une valeur minimale. Nous recommandons d'augmenter la taille du stockage en fonction de vos besoins en modifiant le fichier values.yaml :

postgresql:
  primary:
    persistence:
      # Used as primary database. Critical to increase if you expect a large amount usage.
      size: 10Gi

redis:
  master:
    persistence:
      # Used as a memory cache. Not necessarily critical to increase.
      size: 5Gi

ideanote:
  storage:
    persistence:
      # User uploaded files will be stored here. Increase if you expect large file uploads.
      size: 20Gi

2․ PVs sont créés par défaut avec la politique de récupération Delete, ce qui signifie que lorsque PVC est supprimé, PV et les données qu’il contient sont également supprimés. Nous recommandons donc de remplacer la politique de récupération par Retain pour PVs créé par Ideanote Helm Chart. Vous pouvez le faire en appliquant un patch à PVs alloué à l’aide de la commande suivante :

# Set all PVs in the ideanote namespace to "Retain"
kubectl get pv -n ideanote -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -I {} kubectl patch pv {} -n ideanote -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'

# Check that the PVs have been patched
kubectl get pv -n ideanote

# Patch individual PVs with the reclaim policy Retain
kubectl patch pv <pv-name> -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}' -n ideanote

3․ Nous recommandons également de mettre en place une stratégie de sauvegarde automatique pour tous les volumes.

Journalisation et surveillance

Actuellement, Ideanote ne fournit pas de solution de journalisation intégrée avec le chart Helm, mais nous recommandons de mettre en place une solution de surveillance dans les environnements de production.

Dans les environnements de production, nous recommandons également de définir global.ideanote.logLevel sur info ou warn dans le fichier values.yaml afin de réduire la quantité de journaux générés par les services.

Nous recommandons également de mettre en place des contrôles d’état pour surveiller la disponibilité de votre déploiement Ideanote.
Si vous choisissez de mettre en place des contrôles d’état, voici les chemins que vous devez surveiller :

Contrôles d’état externes

Service

Chemin

application web

<domain>/healthz

API

<domain>/api/healthz

widget d’idées

<domain>/widget/healthz

stockage

<domain>/files/healthz

Contrôles d’état internes

Service

Chemin

convertir

ideanote-convert.ideanote.svc.cluster.local/healthz

moteur de rendu HTML

ideanote-html-renderer.ideanote.svc.cluster.local/healthz

Équilibrage de charge et CDN

Si votre environnement le permet, nous recommandons de mettre en place un CDN devant l’équilibreur de charge Ideanote afin de mettre en cache les ressources statiques et de réduire la charge du service.
De préférence, le CDN doit être configuré pour mettre en cache tous les chemins commençant par /files et /chunk-.

Mise à niveau

Lorsque vous exécutez Ideanote sur site, vous devrez effectuer une mise à niveau vers une nouvelle version dès qu’une nouvelle version sera disponible.
Ideanote vous informera de la disponibilité d’une nouvelle version et fournira les notes de version de chaque nouvelle version, qui incluront des informations sur les changements incompatibles et les nouvelles fonctionnalités.

Dans les environnements de production, vous devrez accorder une attention particulière au guide de mise à niveau fourni par Ideanote afin d’éviter toute interruption de service ou perte de données.

Dépannage

Veuillez contacter developer@ideanote.io si vous rencontrez des problèmes lors de l’exécution de Ideanote sur site.
Ideanote vous aidera à résoudre le problème et vous indiquera comment le corriger conformément à l’accord en vigueur.
Avant de nous contacter, veuillez consulter le guide de dépannage suivant afin de comprendre le problème et, éventuellement, de le résoudre vous-même.

Échec de l’installation du chart Helm

Si le Ideanote Helm Chartne s’installe pas, veuillez exécuter la commande d’installation avec l’option --debug afin d’obtenir davantage d’informations sur l’erreur.
Cela fournira des informations plus détaillées sur l’erreur et vous aidera à comprendre la cause du problème.

Si vous ne parvenez pas à résoudre le problème, veuillez contacter developer@ideanote.io pour obtenir de l’aide.
Veuillez inclure autant d’informations que possible sur le problème, notamment la sortie de l’installation avec --debug et le fichier values.yaml.

Vous pouvez également obtenir un aperçu des composants défaillants en exécutant la commande suivante :

kubectl get all,certificaterequests,issuer -n ideanote

Le graphique Helm est bloqué dans un état en attente ou en échec

Consultez l’état du graphique Helm en exécutant la commande suivante :

helm status ideanote -n ideanote
# or
helm history ideanote -n ideanote

Si le graphique Helm est bloqué dans un état en attente ou en échec, vous devrez peut-être effectuer une restauration à l’aide de la commande suivante :

helm rollback ideanote -n ideanote

Mon URL/IP-address ou mon certificat SSL ne fonctionne pas

Vous pouvez vérifier si l’adresse IP-address associée à votre équilibreur de charge répond correctement en exécutant les commandes suivantes :

1․ Récupérez l’adresse IP attribuée dynamiquement à votre répartiteur de charge. Assurez-vous que l’ingress est associé à une adresse IP et à des noms d’hôte.

kubectl get ingress -n ideanote

2․ Vérifiez que votre cluster Kubernetes répond correctement aux requêtes en exécutant cette commande curl avec les valeurs (l’adresse IP associée et un nom d’hôte) de la commande ci-dessus. Assurez-vous qu’il renvoie un code d’état 200 OK et le fichier index-html du service Ideanote.

# With only host
curl -kivL <host>

# With host and IP-address
curl -kivL -H 'Host: <host>' <ip-address>

3․ Avec le sous-graphique ingress-controller nginx inclus, le service devrait être disponible avec un certificat TLS après quelques minutes. Il utilisera un certificat auto-signé fourni par défaut par ingress-nginx-controller jusqu’à ce que le certificat ait été créé. Les navigateurs afficheront un avertissement indiquant qu’il s’agit d’un certificat non valide. Après quelques minutes, le certificat devrait être créé et le service devrait être disponible avec un certificat valide.

4․ Vous pouvez vérifier le statut de CertificateRequest en exécutant la commande suivante :

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote
kubectl get Issuer -n ideanote

Le service API ne cesse de tomber en panne, car il ne parvient pas à se connecter à la base de données/à Redis

Si le service api tombe en panne parce qu’il ne parvient pas à se connecter à la base de données ou à Redis, veuillez vérifier les points suivants.

2․ Vérifiez les journaux du service api :

kubectl logs -n ideanote svc/ideanote-api

2․ Vérifiez si postgres et redis sont en cours d’exécution (suivez les étapes )

kubectl get pods -n ideanote

Parfois, il vous suffit de forcer le redémarrage du service api pour qu’il se reconnecte à la base de données et à Redis.

kubectl get pods -n ideanote
kubectl delete pod <pod-name> -n ideanote --force
kubectl run --rm -it --image=busybox test-pod -- /bin/sh
ping <redis-service-ip>
nc -zv <redis-service-ip> 6379

ping <postgres-service-ip>
nc -zv <postgres-service-ip> 5432
kubectl exec -it -n ideanote svc/ideanote-api -- /bin/sh

Je vois de nombreuses erreurs TypeError: fetch failed dans les journaux

Tout d’abord, vérifiez que tous les pods sont en cours d’exécution :

kubectl get pods -n ideanote

Vous pouvez également vérifier que le DNS du service peut être résolu directement depuis le pod. Par exemple :

kubectl exec svc/ideanote-api -n ideanote -- nslookup ideanote-convert.ideanote.svc.cluster.local

Vous pouvez vérifier que vous pouvez envoyer une requête ping à d’autres services directement depuis le pod. Par exemple :

kubectl exec svc/ideanote-webapp -n ideanote -- wget -qO- http://ideanote-api.ideanote.svc.cluster.local

Le problème peut également être lié aux règles réseau, qui peuvent parfois bloquer la communication entre les services.
Vous devrez peut-être désactiver temporairement les règles réseau pour Ideanote afin de vérifier si elles sont à l’origine du problème.
Vous pouvez désactiver les règles réseau en définissant global.ideanote.networkPolicies.enabled sur false dans le fichier values.yaml.

Surveiller le trafic réseau dans votre cluster

Vous pouvez utiliser https://www.kubeshark.co/ pour surveiller le trafic réseau dans votre cluster.

1․ Installez kubeshark

sh <(curl -Ls https://kubeshark.co/install)

# OR

brew install kubeshark

2․ Démarrez kubeshark

kubeshark tap -n ideanote

3․ Ouvrez le tableau de bord kubeshark dans votre navigateur et surveillez le trafic

Kubeshark

Tester la disponibilité de chaque service

Voici un aperçu de la manière de tester la disponibilité de chaque service.
Veuillez utiliser ce guide comme référence pour tester chaque service en cas de problème.

Diffusion des journaux en continu

Pour consulter les journaux d’un service spécifique, vous pouvez utiliser la commande suivante.

kubectl logs -n ideanote svc/ideanote-api

Cela est utile pour déboguer les problèmes liés au service. Vous pouvez également afficher les journaux de tous les pods de l’espace de noms ideanote en exécutant la commande suivante :

kubectl get pods -n ideanote -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | xargs -I {} kubectl logs -n ideanote {} --all-containers=true

Si vous souhaitez diffuser en continu les journaux de tous les services à la fois, nous vous recommandons d’installer kubetail et d’exécuter la commande suivante :

kubetail -n ideanote

Pendant le dépannage, nous vous recommandons également de régler global.ideanote.logLevel sur debug dans le fichier values.yaml afin d’augmenter le volume de journaux générés par les services.

Vérifier l’état des services

Pour vérifier si les déploiements sont prêts, vous pouvez exécuter la commande suivante. Elle doit indiquer 1/1 READY pour chaque service.

kubectl get deployments -n ideanote

Si l’un des services n’est pas prêt, vous pouvez vérifier le service en exécutant la commande suivante :

kubectl describe deployment <service-name> -n ideanote

Pour obtenir une vue plus détaillée des services, nous recommandons d’installer k9s et d’exécuter la commande suivante :

k9s -n ideanote

application web

Le service webapp devrait être accessible à l’adresse /. La commande suivante devrait renvoyer un code d’état 200 OK avec le fichier index html :

curl -kL your-domain.com

Vous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :

kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000

API

Le service api devrait être accessible à l’adresse /api. La commande suivante devrait renvoyer un code d’état 200 OK avec le texte « Ideanote API » :

curl -kL your-domain.com/api

Vous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :

kubectl port-forward --namespace ideanote svc/ideanote-webapp 3000:80
curl -kL localhost:3000

Si vous souhaitez examiner la file de messages interne de Ideanote API, vous pouvez accéder au chemin /api/bullmq.
Pour obtenir les identifiants de la file de messages API, veuillez exécuter la commande suivante :

kubectl get secret --namespace ideanote ideanote-api -o jsonpath="{.data.API_BULLMQ_CREDENTIALS}" | base64 -d

widget d’idées

Le service idea-widget devrait être accessible à l’adresse /widget. La commande suivante devrait renvoyer un code d’état 200 OK avec le fichier index html :

curl -kL your-domain.com/widget

Vous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl :

kubectl port-forward --namespace ideanote svc/ideanote-idea-widget 3000:80
curl -kL localhost:3000

stockage

Le service storage devrait être accessible à l’adresse /files. La commande suivante devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Storage » :

curl -kL your-domain.com/files

Vous pouvez également rediriger le port du service vers votre machine locale et le tester avec curl. Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Convert » :

kubectl port-forward --namespace ideanote svc/ideanote-storage 3000:80
curl -kL localhost:3000

convertir

Le service convert n’est pas exposé sur Internet, mais vous pouvez le tester en redirigeant son port vers votre machine locale et en utilisant curl.
Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote Convert » :

kubectl port-forward --namespace ideanote svc/ideanote-convert 3000:80
curl -kL localhost:3000

Vous pouvez également vérifier l’état des tâches de conversion des téléversements de fichiers multimédias en accédant au chemin /bullmq.

# 1: Port-forward the service to your local machine
kubectl port-forward --namespace ideanote svc/ideanote-convert 3000:80
# 2: Visit the /bullmq path in a browser:
http://localhost:3000/bullmq

moteur de rendu HTML

Le service html-renderer n’est pas exposé sur Internet, mais vous pouvez le tester en redirigeant son port vers votre machine locale et en utilisant curl.
Il devrait renvoyer un code d’état 200 OK avec le texte « Ideanote HTML Renderer » :

kubectl port-forward --namespace ideanote svc/ideanote-html-renderer 3000:80
curl -kL localhost:3000

postgresql

Pour vérifier la disponibilité du PostgreSQL service, vous pouvez rediriger son port vers votre machine locale et le tester avec psql.

# 1. Get the password for the database
kubectl get secret --namespace ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

# 2. Open a connection to the database
kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote

# 3. Check that the API has correctly run migrations in the database.
#    It should show a list of tables.
#    If this command shows "Did not find any relations." it means that the API hasn't been able to connect to the database.
ideanote=> \d

# 4. Exit psql
ideanote=> \q

redis

Pour vérifier la disponibilité du Redis service, vous pouvez rediriger son port vers votre machine locale et le tester avec redis-cli.

# 1. Port-forward the service to your local machine
kubectl port-forward --namespace ideanote svc/ideanote-redis-master 6379:6379

# 2. Initiate a connection to the database
redis-cli -h localhost -p 6379

# 3. Check that the api and convert services have been able to connect to the database.
127.0.0.1:6379> CLIENT LIST

# 4. Check that the api and convert services have been able to create keys in the database.
127.0.0.1:6379> KEYS *

gestionnaire de certificats

Veuillez consulter le guide officiel pour savoir comment vérifier que cert-manager est correctement installé.

Si votre certificat n'est pas créé, vous pouvez vérifier l'état de CertificateRequest en exécutant la commande suivante :

kubectl get certificaterequest -n ideanote
kubectl describe CertificateRequest ideanote-tls-1 -n ideanote

Vous pouvez également vérifier l'état de Issuer en exécutant la commande suivante :

kubectl get Issuer -n ideanote

Il est également utile de consulter les journaux du service cert-manager pour voir s'il présente des problèmes.

ingress-nginx

Pour vérifier l'état du service ingress-nginx, vérifiez d'abord qu'il est en cours d'exécution :

kubectl get deployments -l app.kubernetes.io/name=ingress-nginx -n ideanote

Essayez de rediriger le port du service vers votre machine locale et de le tester avec curl (qui devrait renvoyer un code d’état « 404 Not Found ») :

kubectl port-forward --namespace ideanote svc/ideanote-ingress-nginx-controller 8080:80
curl -kL localhost:8080

Vous devez également vérifier qu'une adresse IP lui a été attribuée :

kubectl get svc -l app.kubernetes.io/name=ingress-nginx -n ideanote

Vérifiez également que l'objet Ideanote ingress a bien été attribué à l'ingress-nginxrépartiteur de charge.
Il doit afficher la même adresse IP que le ingress-nginx service et le nom d'hôte attendu que vous avez défini dans le fichier values.yaml lors de l'installation de Ideanote Helm Chart.

kubectl get ingresses -n ideanote

Essayez d’interroger l’adresse IP avec curl. Elle devrait renvoyer un code d’état « 404 Not Found » :

curl -kL <ip-address>

Essayez maintenant d’inclure un en-tête « Host » dans la requête.
Le service web Ideanote devrait répondre avec le fichier HTML d’index :

curl -kL -H 'Host: <host>' <ip-address>

Enfin, essayez de visiter le domaine dans un navigateur. Le service web Ideanote devrait s’afficher.

Mise à niveau de Ideanote vers une nouvelle version

Ideanote publiera périodiquement de nouvelles versions de Ideanote Helm Chart, intégrant de nouvelles fonctionnalités et des corrections de bogues.
Lors de la mise à niveau vers une nouvelle version, vous devrez suivre le guide de mise à niveau fourni par Ideanote afin d’éviter toute interruption de service ou perte de données.

Tous les services sont conçus pour être sans état (à l’exception de redis, de postgres et de storage) et peuvent être mis à niveau sans interruption de service au moyen d’une stratégie de mise à jour progressive.

Les versions et les migrations de base de données sont déployées automatiquement et conçues pour réduire les temps d’arrêt au minimum.
Pendant les migrations de base de données, qui durent généralement quelques minutes, les services restent disponibles, mais certaines fonctionnalités peuvent être désactivées ou ralenties jusqu’à la fin de la migration.
Veuillez consulter les notes de version de chaque nouvelle version pour savoir si des migrations sont à prendre en compte.

Nous veillons à tester les versions dans nos propres environnements de production avant leur mise à disposition du public, mais nous vous recommandons de tester la nouvelle version dans un environnement de préproduction avant de mettre à niveau l’environnement de production.

Avant de passer à une nouvelle version, veuillez suivre les étapes suivantes

1․ Consultez les notes de version pour vérifier s’il existe des changements incompatibles ou de nouvelles fonctionnalités.

2․ Sauvegardez vos données. Nous recommandons de sauvegarder les bases de données PostgreSQL et Redis avant de passer à une nouvelle version. Prévoyez également un plan clair et testé de restauration de la base de données en cas d’échec de la mise à niveau.

3․ Nous recommandons d’installer le plugin helm-diff et d’exécuter la commande suivante pour afficher précisément les modifications qui seront apportées à votre cluster Kubernetes :

HELM_DIFF_USE_INSECURE_SERVER_SIDE_DRY_RUN=true helm diff upgrade oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --values values.yaml --dry-run=server

Lors de la mise à niveau vers une nouvelle version, veuillez suivre les étapes suivantes :

1․ Mettez à niveau Ideanote Helm Chart vers la nouvelle version :

helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yaml

2․ Vérifiez le statut de la mise à niveau :

helm status ideanote --namespace ideanote

helm history ideanote --namespace ideanote

kubectl get pods -n ideanote --watch

3․ api est le service le plus important à vérifier après une mise à niveau, car les migrations peuvent prendre quelques minutes et échouer, ce qui pourrait entraîner une interruption de service. Consultez les journaux de l’API en continu pour surveiller les migrations :

kubectl logs svc/ideanote-api -n ideanote -f

Lors d’un retour à une version précédente, veuillez suivre les étapes suivantes :

1․ Vérifiez si des migrations ont été exécutées dans le service api :

kubectl logs svc/ideanote-api -n ideanote

Vous pouvez également vérifier l’état des migrations de api à l’aide de psql :

# 1. Get the password for the database
kubectl get secret --namespace ideanote ideanote-postgres-password -o jsonpath="{.data.postgres-password-user}" | base64 -d

# 2. Open a connection to the database
kubectl exec -it -n ideanote svc/ideanote-postgresql -- psql -U ideanote -d ideanote

# 3. Check if the API has ran migrations in the database. You can compare "migration_time" with the current date.
ideanote=> select * from knex_migrations order by migration_time desc limit 10;

2․ Rétablissez la version précédente de Helm :

helm rollback ideanote --namespace ideanote

3․ Vérifiez le statut du retour arrière :

helm status ideanote --namespace ideanote

4․ Si certaines migrations ont effectivement été achevées dans le api service et que vous devez revenir en arrière, il est essentiel de restaurer également la base de données à son état précédent, car le nouveau schéma de base de données pourrait ne pas être compatible avec l’ancienne version du api service et le pod api ne démarrera pas en raison d’une incompatibilité de schéma de base de données.

Versions de Helm Chart

Voici la liste des versions de Ideanote Helm Chart et des modifications apportées à chacune d’elles.

1.0.0

Version initiale du Ideanote Helm Chart public.

Modification de values.yaml après l’installation

Si vous modifiez le fichier values.yaml après l’installation de Ideanote Helm Chart, vous pouvez mettre à niveau la version à l’aide de la commande suivante :

helm upgrade ideanote oci://europe-west3-docker.pkg.dev/ideanote/charts/ideanote --version 1.0.0 --namespace ideanote --wait --timeout 10m -f values.yaml

Désinstallation de Ideanote

Pour désinstaller Ideanote Helm Chart, exécutez la commande suivante :

helm uninstall ideanote --namespace ideanote

Cette opération supprimera de votre cluster Kubernetes toutes les ressources et tous les services associés à Ideanote Helm Chart.

Veuillez toutefois noter que certaines ressources ne seront pas désinstallées et devront être supprimées manuellement :

# Delete all PVCs associated with the Ideanote Helm Chart
kubectl delete pvc -l app.kubernetes.io/name=postgresql -n ideanote
kubectl delete pvc -l app.kubernetes.io/name=redis -n ideanote
kubectl delete pvc -l app.kubernetes.io/name=storage -n ideanote

# Delete all PV's associated with the Ideanote Helm Chart
kubectl get pv -n ideanote
kubectl delete pv <pv-name>

# Delete global CustomResourceDefinitions (don't do this if you have multiple Ideanote installations in the same cluster)
kubectl delete crd \
  issuers.cert-manager.io \
  clusterissuers.cert-manager.io \
  certificates.cert-manager.io \
  certificaterequests.cert-manager.io \
  orders.acme.cert-manager.io \
  challenges.acme.cert-manager.io

# Delete the namespace
kubectl delete namespace ideanote