Cette page uniquementToutes les pages
Propulsé par GitBook
1 sur 27

8.x à 10.x

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Image WorkflowGen

Loading...

Loading...

Loading...

Loading...

Loading...

Image de base de données WorkflowGen

Loading...

Loading...

Loading...

Image de mise à jour WorkflowGen

Loading...

Loading...

Kubernetes

Loading...

Loading...

Loading...

Loading...

Loading...

WorkflowGen pour Docker

Ce guide fournit des instructions sur la configuration, le déploiement et la gestion des intégrations de WorkflowGen avec Docker.

Démarrer

Aperçu

Cette section fournit des instructions sur comment exécuter rapidement le conteneur WorkflowGen avec une architecture minimale sur votre ordinateur local.

Prérequis globaux

  • Assurez-vous d'avoir une licence WorkflowGen valide.

  • Si vous utilisez Windows Server, assurez-vous qu'il s'agit bien de Windows Server 2019 et utilisez la balise correspondant à cette version. Par exemple, pour Windows Server 2019, utilisez la balise qui se termine par ltsc2019.

Déploiement manuel de Docker sur une machine locale

Aperçu de l'architecture

À la fin de cette section, l’architecture suivante sera déployée sur votre ordinateur local :

Dans le moteur Docker de votre ordinateur, vous aurez un serveur WorkflowGen en cours d'exécution et une base de données WorkflowGen qui utiliseront des volumes mappés sur votre ordinateur local pour conserver les fichiers de données.

Prérequis

Assurez-vous d'avoir installé Docker sur votre ordinateur.

Pour Windows 10 Pro

Suivez les instructions dans le guide (disponible en anglais uniquement) pour installer Docker pour Windows. Vous devez utiliser des conteneurs Windows, donc vous devez utiliser au minimum Windows 10 Pro.

Pour Windows Server

N'installez pas Docker pour Windows sur Windows Server. Il est conçu pour le développement seulement.

Si vous avez configuré une machine virtuelle sur votre fournisseur de cloud, où le modèle indique quelque chose comme Windows Server with Containers, il est probablement prudent de supposer que Docker est déjà installé. Exécutez docker version sur la machine pour vérifier que c'est bien le cas. Si c'est le cas, vous pouvez ignorer le processus d'installation.

Suivez les instructions dans le guide pour installer Docker sur Windows Server.

Pour cette configuration, il est recommandé d'utiliser l'image Docker de la base de données de WorkflowGen. Vous pouvez également utiliser une base de données SQL installée sur votre ordinateur local.

Exécutez le conteneur de base de données

Pour télécharger l'image de la base de données sur votre ordinateur local, ouvrez PowerShell et entrez ce qui suit :

  • Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

  • N'oubliez pas d'utiliser la balise correcte pour votre version de Windows.

Pour que WorkflowGen fonctionne, vous devez exécuter la base de données avant d'exécuter WorkflowGen. Avant de créer le conteneur, vous allez créer un volume Docker afin d'externaliser les fichiers de base de données (.mdf et .ldf). Cela garantira que les données sont toujours là après la suppression du conteneur.

L'emplacement physique du volume peut être obtenu à l'aide de la commande suivante :

Généralement, il sera stocké dans C:\ProgramData\Docker\volumes\sqldata\_data. Assurez-vous que le conteneur dispose d'un accès en écriture à ce répertoire (voir l'article Microsoft pour plus d'informations).

Vous êtes maintenant prêt à exécuter le conteneur de base de données. Pour ce faire, exécutez la commande suivante :

Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

Cette dernière commande définira les mots de passe de l'utilisateur SA de la base de données, de l'utilisateur de la base de données WFGEN_USER et du compte wfgen_admin WorkflowGen sur strong(!)Pass. Selon la nature de Docker, les variables d’environnement SA_PASSWORD et ACCEPT_EULA proviennent du conteneur de base microsoft/mssql-server-windows-express et ne sont pas directement traitées par le conteneur WorkflowGen.

Exécutez le conteneur WorkflowGen

Entrez ce qui suit pour télécharger l’image WorkflowGen :

  • Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

  • N'oubliez pas d'utiliser la balise appropriée à votre version de Windows (voir ci-dessus).

Pour ce conteneur, vous avez besoin de trois volumes afin de conserver correctement les données WorkflowGen :

  • Licences WorkflowGen (licences)

  • Les données WorkflowGen (data), qui contiennent les éléments suivants :

    • Le dossier App_data (appdata

Vous devez maintenant copier votre licence WorkflowGen dans le volume de licences. Pour ce faire, exécutez la commande suivante :

De cette façon, le conteneur WorkflowGen pourra récupérer la license via le volume. Vous avez également besoin d'une clé de chiffrement pour le conteneur. Utilisez la commande suivante pour en générer une :

Pour exécuter le conteneur actuel, remplacez <YOUR_WFG_LIC_KEY> par votre clé de licence WorkflowGen et <YOUR_NEW_GUID> par le GUID que vous avez généré à l'étape précédente, puis exécutez la commande suivante :

Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

Lorsque le conteneur est prêt, ouvrez un navigateur et accédez à http://localhost:8080/wfgen, où vous serez invité à vous authentifier par WorkflowGen. Par défaut, le conteneur est configuré avec la méthode d'authentification applicative.

Fermez les conteneurs

Une fois que vous avez terminé avec cet environnement, vous pouvez fermer les conteneurs en les arrêtant. Ils peuvent être redémarrés plus tard.

  • Toute variable d'environnement définie sera réappliquée après le redémarrage d'un conteneur. Par conséquent, toute modification apportée à un fichier web.config sans variables d'environnement ne sera pas effectuée entre les redémarrages ou les réexécutions.

  • Cette action conserve les données dans le système de fichiers du conteneur entre les redémarrages. Si vous ajoutez un fichier qui ne se trouve pas dans un volume, il sera conservé après le redémarrage.

Enlevez les conteneurs

Pour supprimer complètement les conteneurs, exécutez la commande suivante :

Cela supprimera la base de données et les conteneurs WorkflowGen, y compris toute modification manuelle du système de fichiers du conteneur qui ne fait pas partie d'un volume. Même si les conteneurs ne sont plus là, les données des volumes sont conservées et peuvent être utilisées par d'autres conteneurs. Par exemple, vous pouvez lancer trois autres conteneurs WorkflowGen qui utilisent les mêmes volumes et ils obtiendront tous exactement les mêmes fichiers au point de montage du volume.

Déploiement Docker Compose sur une machine locale

Cette section décrit la méthode recommandée pour déployer facilement un environnement de développement local sans avoir à entrer beaucoup de commandes. Pour en savoir plus sur Docker Compose, consultez la (disponible en anglais uniquement).

Aperçu de l'architecture

À la fin de cette section, l’architecture suivante sera déployée sur votre ordinateur local :

Dans le moteur Docker de votre ordinateur, vous aurez un serveur WorkflowGen en fonctionnement et une base de données WorkflowGen. Ces deux conteneurs utiliseront des volumes mappés sur votre ordinateur local pour conserver les fichiers de données.

Prérequis

Pour Windows 10 Pro

Suivez les instructions dans le guide pour installer Docker pour Windows. Vous devez utiliser des conteneurs Windows, donc vous devez utiliser au minimum Windows 10 Pro.

Pour Windows Server

N'installez pas Docker pour Windows sur Windows Server. Il est conçu pour le développement seulement.

Si vous avez configuré une machine virtuelle sur votre fournisseur de cloud, où le modèle indique quelque chose comme Windows Server with Containers, il est probablement prudent de supposer que Docker est déjà installé. Exécutez docker version sur la machine pour vérifier que c'est bien le cas. Si c'est le cas, vous pouvez ignorer le processus d'installation.

Suivez les instructions dans le guide pour installer Docker sur Windows Server.

Pour Windows Server uniquement, vous devez également installer l’outil Docker Compose, car il n’est pas installé par défaut. Suivez les instructions pour Windows Server dans le guide . Pour vérifier que Docker Compose est correctement installé, exécutez la commande suivante

Pour cette configuration, il est recommandé d'utiliser l'image Docker de la base de données de WorkflowGen. Vous pouvez également utiliser une base de données SQL installée sur votre ordinateur local.

Créez le volume de licences

Avant de créer les services, vous devez créer le volume de licences en externe à partir de la composition afin que les licences soient présentes au moment de la création du conteneur. Pour ce faire, exécutez la commande suivante:

Ensuite, vous devez copier votre fichier de licence dans le répertoire des licences. La commande suivante vous montrera où la licence sera stockée :

Pour copier votre licence, exécutez la commande suivante :

Créez la clé de chiffrement symétrique

Cette valeur devrait être générée par vous. Un simple GUID suffira puisqu'il contient une entropie suffisante pour ne pas être deviné :

Créez les fichiers d'environnement

Pour chaque service que vous allez créer (un pour WorkflowGen et un pour la base de données), vous aurez besoin d'un fichier contenant toutes les variables d'environnement de ce service.

Base de données

Utilisez le fichier suivant comme modèle :

Enregistrez-le sous le nom database.env en utilisant le chemin où vous placerez le fichier Compose.

WorkflowGen

Utilisez le fichier suivant comme modèle :

Remplacez <YOUR_WFG_LIC_KEY> par la valeur de votre clé de licence WorkflowGen. Remplacez <YOUR_NEW_GUID> par la clé de chiffrement symétrique que vous avez générée précédemment.

Enregistrez ce fichier sous le nom workflowgen.env en utilisant le chemin où vous placerez le fichier Compose.

Déployez les services

Pour déployer des services avec Docker Compose, vous avez besoin d'un fichier Compose qui les décrit. Utilisez le fichier Compose suivant pour cet exemple :

Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

Enregistrez ce fichier sous le nom docker-compose.yml en utilisant le chemin où vous avez placé vos fichiers de variables d’environnement, puis exécutez la commande suivante :

Attendez quelques minutes que les conteneurs soient lancés, puis ouvrez un navigateur et accédez à http://localhost:8080/wfgen, où vous serez invité à vous authentifier. Entrez les informations d'identification (nom d'utilisateur wfgen_admin et mot de passe strong(!)Pass). La page d'accueil de WorkflowGen devrait s'afficher.

La version Windows de l'image advantys/workflowgen-sql-express est conçue pour le développement ou les tests seulement. Il n'est pas adapté aux charges de travail de production. Au lieu de cela, envisagez d'utiliser la version Linux de l'image (p.ex. advantys/workflowgen-sql:7.18.2-ubuntu-18.04).
)
  • Applications de workflow (wfapps)

  • Get started with Docker for Windows
    Prise en main : Préparer Windows pour les conteneurs
    Stockage persistant dans des conteneurs
    Prérequis globaux
    documentation Docker
    Get started with Docker for Windows
    Prise en main : Préparer Windows pour les conteneurs
    Install Docker Compose
    docker image pull advantys/workflowgen-sql:9.3.1-express-win-ltsc2019
    docker volume create sqldata
    docker volume inspect -f "{{.Mountpoint}}" sqldata
    docker container run -it `
      --env ACCEPT_EULA=Y `
      --env 'SA_PASSWORD=strong(!)Pass' `
      --env WFGEN_DATABASE_USER_USERNAME=WFGEN_USER `
      --env 'WFGEN_DATABASE_USER_PASSWORD=strong(!)Pass' `
      --env 'WFGEN_ADMIN_PASSWORD=strong(!)Pass' `
      -v sqldata:C:\wfgen\sql `
      --name wfgen_sql `
      --hostname database `
      advantys/workflowgen-sql:9.3.1-express-win-ltsc2019
    docker image pull advantys/workflowgen:9.3.1-win-ltsc2019
    "licenses", "wfgdata" | ForEach-Object { docker volume create $_ }
    Copy-Item C:\Path\To\WorkflowGen.lic $(docker volume inspect -f "{{.Mountpoint}}" licenses)
    [guid]::NewGuid().ToString('N')
    # fda7a6a81db2428b8885bd1210522755
    docker container run -it `
      --env 'WFGEN_APP_SETTING_ApplicationUrl=http://localhost:8080/wfgen' `
      --env 'WFGEN_APP_SETTING_ApplicationSerialNumber=<YOUR_WFG_LIC_KEY>' `
      --env 'WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey=<YOUR_NEW_GUID>' `
      --env 'WFGEN_DATABASE_CONNECTION_STRING=Data Source=database,1433;Network Library=DBMSSOCN;Initial Catalog=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;' `
      -p 8080:80 `
      -v wfgdata:C:\wfgen\data `
      -v licenses:C:\wfgen\licenses:RO `
      --name wfgen `
      advantys/workflowgen:9.3.1-win-ltsc2019
    # Stopping the containers
    "wfgen", "wfgen_sql" | ForEach-Object { docker container stop $_ }
    
    # Starting the containers
    docker container start wfgen_sql
    # Wait for the database to be ready and then start the WorkflowGen container
    docker container start wfgen
    
    # Restarting the containers
    "wfgen_sql", "wfgen" | ForEach-Object { docker container restart $_ }
    "wfgen", "wfgen_sql" | ForEach-Object { docker container rm -f $_ }
    docker-compose version
    docker volume create licenses
    docker volume inspect -f "{{.Mountpoint}}" licenses
    Copy-Item C:\Path\To\WorkflowGen.lic $(docker volume inspect -f "{{.Mountpoint}}" licenses)
    [guid]::NewGuid().ToString('N')
    # fda7a6a81db2428b8885bd1210522755
    SA_PASSWORD=strong(!)Pass
    WFGEN_DATABASE_USER_USERNAME=WFGEN_USER
    WFGEN_DATABASE_USER_PASSWORD=strong(!)Pass
    WFGEN_ADMIN_PASSWORD=strong(!)Pass
    WFGEN_APP_SETTING_ApplicationUrl=http://localhost:8080/wfgen
    WFGEN_APP_SETTING_ApplicationSerialNumber=<YOUR_WFG_LIC_KEY>
    WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey=<YOUR_NEW_GUID>
    WFGEN_DATABASE_CONNECTION_STRING=Data Source=database,1433;Network Library=DBMSSOCN;Initial Catalog=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;
    version: '3.8'
    services:
      workflowgen:
        image: advantys/workflowgen:9.3.1-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        ports:
          - '8080:80'
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      database:
        image: advantys/workflowgen-sql:9.3.1-express-win-ltsc2019
        env_file:
          - '.\database.env'
        volumes:
          - 'sqldata:C:\wfgen\sql'
    
    volumes:
      wfgdata:
      licenses:
        external: true
      sqldata:
    
    Set-Location C:\Path\To\ComposeFile
    docker-compose up

    Options d'hébergement SQL Server

    Aperçu

    Cette section explique les configurations recommandées pour la base de données en production.

    Déploiement d'une base de données

    Azure SQL

    Consultez la documentation suivante pour l'installation d'Azure SQL:

    Sur place

    Consultez la documentation suivante sur la configuration requise pour les bases de données sur site :

    À base de conteneurs

    WorkflowGen propose une image de base de données prête pour la production basée sur l'image Microsoft SQL Server pour Linux. Elle a les mêmes options que l'image Microsoft avec quelques fonctionnalités supplémentaires telles que la création automatique de la base de données WorkflowGen et la définition du nom d'utilisateur et du mot de passe wfgen_admin. L'image est disponible sur Docker Hub :

    Pour plus d'informations sur l'image de base de données WorkflowGen, voir dans la section Image de base de données WorkflowGen.

    Gestion des fichiers

    Aperçu

    Cette section indique quelles données persistantes sont exposées et où. Il recommande également certaines façons de conserver, partager et sauvegarder les données. Pour les stratégies et recommandations de sauvegarde, voir la section Continuité des activités et reprise après sinistre.

    Données persistantes dans la base de données WorkflowGen

    Les données persistantes sont différentes selon que vous utilisez la version Linux ou la version Windows.

    Linux

    La version Linux a un moyen plus géré de persister les données de la base de données. Au lieu de ne conserver que les fichiers .mdf et .ldf de la base de données WorkflowGen, vous conservez à la place toutes les données d'état SQL Server, y compris les fichiers de base de données master. Pour plus d'informations sur la persistance des données dans Linux, consultez l'article dans la documentation Microsoft officielle pour SQL Server.

    Windows

    Étant donné que l'image de base de la version Windows n'a pas été mise à jour par Microsoft depuis un certain temps, les fichiers de base de données de WorkflowGen doivent être persistés manuellement. Par conséquent, le conteneur de base de données a un volume défini qui contiendra uniquement les fichiers de base de données WorkflowGen. De plus, il est recommandé d'utiliser la fonction de base de données autonome de SQL Server pour conserver les informations d'identification au niveau de la base de données plutôt qu'au niveau du système SQL Server. Pour plus d'informations sur la fonctionnalité de base de données autonome, consultez l'article dans la documentation officielle de Microsoft.

    Particularité des conteneurs Windows

    Les volumes sont traités différemment avec les conteneurs Windows par rapport aux conteneurs Linux. Le modèle d'autorisation change et est différent selon que vous utilisez l'isolation de processus ou l'isolation Hyper-V. Avant de poursuivre les procédures de cette section, vous devez lire .

    TLS / SSL

    Manuel

    Dans Kubernetes, il existe des outils pour vous aider à gérer les certificats et à établir une connexion TLS. C'est plus facile que de créer une architecture personnalisée à l'aide de la méthode du proxy inverse. Pour en savoir plus sur la gestion des certificats avec Kubernetes, voir la page suivante (disponible en anglais uniquement) :

    • Manage TLS Certificates in a Cluster

    Utilisation de cert-manager

    est une application cloud native qui gère les certificats pour vous. Il comprend des mécanismes pour demander automatiquement les certificats Let's Encrypt et obtenir des certificats de , ou vous pouvez utiliser vos propres certificats générés par une autorité de certification (CA) ou un certificat auto-signé.

    Continuité des activités et reprise après sinistre

    Aperçu

    Cette section présente des indications permettant de se familiariser avec différentes solutions de création de sauvegardes et de récupération après une perte de données imprévue.

    En production, vous devez utiliser un orchestrateur tel que Docker Swarm, Kubernetes ou Kubernetes dans le service Azure Kubernetes.

    Fichiers WorkflowGen

    Partages de fichiers SMB

    Vous devez avoir au moins trois différents partages de stockage pour gérer les fichiers persistants WorkflowGen. Si vous avez utilisé des partages de fichiers SMB personnalisés, vous devriez avoir une stratégie pour sauvegarder les disques du partage de fichiers. Si un problème survient, vous pouvez restaurer une sauvegarde. N'oubliez pas de restaurer les données de la base de données à l'heure exacte de la sauvegarde du partage de fichiers.

    Azure Files

    Pour Azure Files, consultez la documentation Microsoft suivante sur les sauvegardes et les restaurations :

    • Sauvegarder des partages de fichiers Azure

    • Planification de la récupération d’urgence et basculement du stockage Azure

    Disques Azure

    Pour les disques Azure, consultez la documentation Microsoft suivante sur les sauvegardes et les restaurations :

    • Sauvegarde et récupération d’urgence de disques managés Azure

    Base de données

    Base de données sur site

    Consultez la section Opérations dans le Guide technique de WorkflowGen pour obtenir des informations sur la sauvegarde et la restauration de bases de données sur site.

    Azure SQL

    Consultez la documentation Microsoft suivante sur la continuité des opérations pour Azure SQL :

    • Vue d’ensemble de la continuité de l’activité avec la base de données Azure SQL

    Kubernetes

    La création de sauvegardes et leur récupération dans Kubernetes peuvent être compliquées, mais des outils existent pour vous aider à les gérer. Voici un article (en anglais) sur les sauvegardes avec Kubernetes :

    • Kubernetes: Backups and recovery

    Il existe deux outils principaux pour la sauvegarde et la récupération :

    • Velero

    • kube-backup

    Azure Kubernetes Service

    Comme d'autres services Azure, Microsoft fournit des guides pour les sauvegardes et les restaurations :

    • Bonnes pratiques pour la continuité d’activité et la reprise d’activité dans AKS (Azure Kubernetes Services)

    Configuration de la base de données SQL Azure
    Configurations matérielles suggérées
    advantys/workflowgen-sql - Docker Hub
    Configuration

    Nom

    Description

    C:\wfgen\sql

    Ce chemin contient les fichier .mdf et .ldf de la base de données WorkflowGen

    Déployer et se connecter à des conteneurs Linux SQL Server
    contained database authentication (option de configuration de serveur)
    la documentation Microsoft sur le stockage de conteneurs Windows Server
    cert-manager
    HashiCorp Vault

    Description de l'architecture principale

    Aperçu

    Cette section contient des détails sur l'architecture recommandée à utiliser lors du déploiement de WorkflowGen pour Docker. Le schéma suivant illustre tous les composants en action :

    Comme vous pouvez le constater, tous les composants d'exécution se trouvent dans un ou plusieurs hôtes Docker. Vous pouvez utiliser autant de conteneurs d'applications Web que vous le souhaitez pour une disponibilité et des performances accrues, mais vous ne pouvez disposer que d'une seule instance de chaque service Windows WorkflowGen. Vous n'avez pas non plus à utiliser le conteneur de base de données, si vous le souhaitez, vous pouvez externaliser la base de données vers un fournisseur de cloud tel qu'Azure SQL ou votre propre SQL Server sur site.

    Comme d'habitude, vous pouvez configurer le service SMTP que vous souhaitez utiliser avec le conteneur de WorkflowGen. Aucune configuration spéciale n'est requise pour cela.

    Toutes les données persistantes sont externalisées. Les licences utilisées pour WorkflowGen, les données d'application (App_Data) et les applications de workflow (wfapps) sont toutes conservées dans un espace partagé distinct (wfgdata dans le diagramme). Par exemple, il peut s’agir d’un partage de fichiers, d’un service Azure Files, d'un disque Azure Disk ou de tout autre service capable d’agir en tant que répertoire sur un hôte Docker.

    De plus, dans ce diagramme, les fichiers de base de données se trouvent dans un volume Docker. Ce volume doit être un disque, tel qu'un disque local sur l'hôte Docker dont vous pouvez contrôler les sauvegardes, ou quelque chose comme un disque Azure Disk pour que vous puissiez prendre des copies de sauvegarde. Dans le cas de la base de données, il est important d'avoir un disque pour maintenir de bonnes performances. Pour des résultats optimaux, vous devez externaliser la base de données. Consultez la page pour plus de détails.

    Services WorkflowGen

    Cette section décrit chacun des environnements d'exécution du conteneur WorkflowGen. N'oubliez pas que tous les environnements sont regroupés dans une seule image.

    Applications Web

    Lorsque vous exécutez les applications Web du conteneur, les composants suivants sont en cours d'exécution :

    • Portail utilisateur

    • Module d'administration

    • Toutes les APIs :

      • GraphQL

    Ce sont tous les composants dont vous avez besoin pour faire fonctionner chaque service Web et interface graphique.

    Services Windows

    Lorsque vous exécutez les services Windows du conteneur, les composants suivants sont en cours d'exécution :

    • Service de la synchronisation des annuaires

    • Service du moteur

    Stockage des fichiers

    Ce sont des espaces partagés entre les conteneurs où se trouvent des données qui devraient être persistantes et qui ne peuvent pas être dans la base de données. Un espace partagé pour les licences WorkflowGen est requis car une licence ne peut pas être stockée directement dans une image. Au lieu de cela, il est récupéré au moment de l'exécution à partir du conteneur et placé à l'emplacement correct à l'intérieur du conteneur.

    Le dossier WorkflowGen App_Data doit être partagé entre les conteneurs. Il contient les informations suivantes dont WorkflowGen a besoin pour fonctionner correctement :

    • Fichiers de processus au moment du design

    • Fichiers de processus d'exécution

    • Fichiers de log

    • Fichiers temporaries des applications de workflow

    L'application Web IIS de wfapps est également partagée entre les conteneurs car les formulaires Web contenus à cet emplacement sont des fichiers ASP.NET générés au moment de la conception. C'est pourquoi ils sont considérés comme un stockage. Les dossiers App_Data et wfapps sont regroupés dans le même espace partagé appelé wfgdata.

    Conteneur de base de données et stockage

    Dans cette architecture, la base de données WorkflowGen est conteneurisée et ses données sont stockées dans un espace partagé, de préférence également soutenu par un disque haute performance. Vous pouvez ajouter d'autres bases de données conteneurisées en tant que réplicas en lecture avec leur propre espace partagé pour leurs données. Pour plus de détails sur le conteneur de base de données ou la gestion de base de données avec des conteneurs, voir la section .

    Service SMTP

    WorkflowGen s'appuie sur une passerelle SMTP pour envoyer des notifications par courrier électronique. Un serveur ou un service SMTP avec une latence réseau faible et une haute disponibilité est recommandé.

    Architecture mutualisée

    Aperçu

    Cette section présente comment réaliser la mutualisation (« multitenancy ») avec des images WorkflowGen et Kubernetes. De par la nature des conteneurs et des outils présents dans Kubernetes, un cluster unique peut avoir plusieurs instances de WorkflowGen avec une isolation relative les unes des autres. La meilleure isolation peut être obtenue avec plusieurs clusters.

    À titre de référence pour les meilleures pratiques, consultez les liens suivants vers la documentation de Google Kubernetes Engine et Azure Kubernetes Service :

    Problèmes de sécurité

    Avant de commencer avec les architectures recommandées, il est important de noter quelques problèmes de sécurité liés à l'utilisation de conteneurs Windows. L'image WorkflowGen est une image de conteneur Windows. Certaines fonctionnalités de sécurité présentes dans les conteneurs Linux ne sont pas nécessairement disponibles dans les conteneurs Windows, comme les profils AppArmor et SELinux et les capacités Linux. Consultez l'article Kubernetes (disponible en anglais uniquement) pour toutes les limitations actuelles.

    L'important dans les clusters multi-locataires est d'isoler les locataires les uns des autres et de limiter les actions possibles en cas d'intrusion. Vous pouvez atteindre un bon niveau d'isolement avec les stratégies réseau sur Kubernetes. Ce sont des spécifications qui nécessitent l'installation d'un logiciel tiers pour appliquer ces politiques. Pour le moment, seul le projet Calico a un support Windows (consultez le site pour plus d'informations).

    Pour la sécurité dans le conteneur, à l'heure actuelle, seul runAsUserName est disponible pour exécuter l'instance de conteneur sous un nom d'utilisateur différent de ContainerAdministrator (consultez l'article Kubernetes pour plus d'informations). Il n'est pas nécessaire pour le conteneur WorkflowGen car les applications Web s'exécutent en tant qu'utilisateur du groupe IIS_IUSRS.

    Recommandations

    • Assurez-vous que le trafic entrant des services Windows WorkflowGen est refusé. Il ne doit pas être ouvert au public.

    • Assurez-vous que les pods de base de données WorkflowGen ne sont pas accessibles au public. Ils sont uniquement utilisés par le conteneur WorkflowGen.

    • Les pods des applications Web WorkflowGen ne doivent être accessibles au public que via HTTPS. HTTP est fortement déconseillé. Cependant, vous ne devriez pas du tout pouvoir accéder à WorkflowGen depuis l'intérieur du cluster, même en HTTPS.

    Architecture

    L'idée de base derrière la mutualisation est d'avoir un déploiement reproductible. Ce schéma montre deux déploiements identiques mais dans des espaces de noms différents. Chacun a ses propres données, configuration et licence. L'isolement entre les espaces de noms doit être appliqué par les stratégies réseau. Vous pouvez éventuellement utiliser un contrôleur Ingress avec cert-manager pour gérer facilement le routage et les certificats.

    Cette architecture s'applique également aux environnements multicluster (multirégion). La seule chose qui changera est la façon dont vous acheminez vers l'instance correcte. Les mêmes problèmes de sécurité s'appliquent.

    Outils de gestion de cluster

    Aperçu

    Cette section présente quelques outils que vous pouvez utiliser pour administrer un cluster de conteneurs.

    Kubernetes

    Kubernetes est installé avec son propre portail de gestion appelé Dashboard (tableau de bord). Consultez l'article de Kubernetes (disponible en anglais uniquement) pour plus d'informations.

    Consultez l'article Microsoft pour obtenir des instructions sur comment s'y connecter dans Azure Kubernetes Service.

    VMware Octant

    est un logiciel open source de VMware pour visualiser les clusters Kubernetes. Vous pouvez également éditer certaines définitions YAML et transférer des ports directement vers votre machine.

    TLS / SSL

    Aperçu

    Cette section présente différentes manières de configurer une connexion sécurisée (HTTPS) au conteneur WorkflowGen à l'aide d'un certificat. Avec Docker, les conteneurs s'exécutent sur un réseau interne et seuls les ports exposés seront disponibles publiquement. Par conséquent, vous ne pouvez pas configurer une connexion TLS sur un seul conteneur; vous devez le faire pour tous les conteneurs, mais cette méthode n'est pas très évolutive.

    Utilisation d'un conteneur Nginx

    Cette méthode utilise le serveur Web Nginx en tant que proxy inverse configuré avec une connexion TLS qui redirigera tout le trafic vers le ou les conteneurs WorkflowGen. Cette méthode peut être appliquée que vous ayez ou non une orchestration.

    Consultez les pages suivantes (disponible en anglais uniquement) pour plus d'informations :

    Utilisation de Traefik

    Traefik est un proxy inverse qui gère le routage, la terminaison TLS et l'équilibrage de charge, entre autres. Il est disponible en tant que conteneur et vous pouvez l'utiliser devant le conteneur WorkflowGen. Pour plus d'informations sur Traefik, consultez (disponible en anglais uniquement).

    Utilisation d'Azure Application Gateway

    Dans Azure, vous pouvez utiliser le service Application Gateway pour obtenir une connexion TLS pour les domaines que vous possédez. Consultez l'article Microsoft pour vous aider à démarrer.

    Kubernetes

    Pour plus d'informations et de recommandations sur la gestion TLS / SSL dans Kubernetes, consultez la page dans la section Kubernetes.

    Noms de domaine personnalisés

    Aperçu

    Cette section décrit certaines manières de configurer les noms de domaine dans Docker.

    Dans le conteneur WorkflowGen, pour configurer un nom de domaine, vous pouvez transmettre la variable d'environnement WFGEN_APP_SETTING_ApplicationUrl=https://somedomain.com/wfgen

    Deploy and Access the Kubernetes Dashboard
    Accéder aux ressources Kubernetes à partir du portail Azure
    Octant
    Let's Encrypt With Docker
    Secure services with TLS
    sa page de documentation
    Présentation de la terminaison TLS et du chiffrement TLS de bout en bout avec Application Gateway
    TLS / SSL

    SOAP

  • SCIM v2

  • Webhooks

  • Authentification OpenID Connect

  • Formulaires Web ASP.NET

  • Applications de workflow (assemblys .NET)

  • Menus personnalisés du portail utilisateur

  • Modèles de processus

  • Modèles d'email

  • Options d'hébergement SQL Server
    Options d'hébergement SQL Server
    .

    Noms de domaine internes

    Dans Docker, il existe un DNS interne qui gère les noms de domaine des conteneurs et des ordinateurs. Vous pouvez facilement configurer un nom de domaine interne pour chaque conteneur en transmettant des paramètres simples. Consultez la page suivante (disponible en anglais uniquement) pour plus d'informations :

    • Networking overview

    Noms de domaine destinés au public

    Pour les noms de domaine publics, vous aurez généralement besoin d'un service externe (par exemple, NameCheap ou AWS Route 53) qui vend des noms de domaine, puis configurez ce service pour qu'il pointe vers l'adresse IP publique des conteneurs destinés au public.

    Obtenir une adresse IP publique

    Tout ce que vous devez faire est d'exposer le port du conteneur (ou du service) dont vous avez besoin et il sera disponible publiquement.

    Vous devez configurer les nœuds frontaux manuellement avec l'adresse IP que vous possédez. Aucun équilibreur de charge n'est créé automatiquement.

    Si vous utilisez une autre version de WorkflowGen, remplacez 9.3.1 dans la commande ci-dessus par votre numéro de version.

    Cela exposera le port 80 du conteneur au port 80 de l'hôte. L'adresse IP publique est celle de l'hôte Docker.

    docker container run `
        # ...
        -p 80:80 `
        # ...
        advantys/workflowgen:9.3.1-win-ltsc2019
    Chaque pod WorkflowGen dans un espace de noms ne doit pas pouvoir contacter d'autres pods dans d'autres espaces de noms. Assurez-vous d'avoir une stratégie réseau pour cela.
  • En général, vous devez toujours refuser tout trafic entrant, sauf si vous en avez explicitement besoin.

  • Architecture de cluster mutualisée
    Bonnes pratiques relatives à l’isolation de clusters dans Azure Kubernetes Service (AKS)
    Windows containers in Kubernetes
    Calico for Windows
    Configure RunAsUserName for Windows pods and containers
    Architecture mutualisée

    Gestion des mises à jour

    Aperçu

    Cette section explique comment gérer les mises à jour de WorkflowGen et les déployer en toute sécurité dans vos environnements.

    Vous pouvez utiliser le conteneur de mise à jour WorkflowGen pour appliquer automatiquement les fichiers et les opérations de base de données lors de la mise à jour d'une version vers une autre. Pour plus d'informations sur le conteneur de mise à jour, voir la page

    dans la section Image de mise à jour WorkflowGen.

    Prérequis

    • Sauvegardez tous les partages de fichiers.

    • Sauvegardez la base de données.

    Pour plus d'informations sur la continuité des activités et la reprise après sinistre, voir la section Continuité des activités et reprise après sinistre.

    Mise à jour manuelle

    Étape 1 : Exécutez toutes les actions requises

    Ces actions peuvent inclure le déplacement, la suppression ou l’ajout de certains fichiers dans les partages de fichiers, la mise à jour de certaines configurations dans votre orchestrateur ou vos fichiers de configuration, l’ajout de secrets, l’ajout ou la suppression de services, etc. Les actions sont détaillées dans le Guide de mise à jour de WorkflowGen (choisissez la version vers laquelle vous souhaitez effectuer la mise à jour).

    N'exécutez que les actions concernant les fichiers des partages de fichiers. Toute action concernant des fichiers ou des services dans le conteneur de WorkflowGen doit être ignorée. Celles-ci seront déjà effectuées une fois la nouvelle version de l'image en place. Par exemple, n'arrêtez pas le service IIS, car il est inutile avec un conteneur Docker.

    Étape 2 : Mettez à jour la base de données

    Consultez la section Mettre à jour la base de données WorkflowGen dans le Guide de mise à jour WorkflowGen (choisissez la version vers laquelle vous souhaitez effectuer la mise à jour).

    Si vous utilisez l'image de la base de données WorkflowGen, après la mise à jour de la base de données, vous devez également mettre à jour le conteneur :

    Si vous effectuez une mise à niveau entre d’autres versions de WorkflowGen, remplacez 9.3.0 et 9.3.1 dans la commande ci-dessus par les numéros de version appropriés.

    Étape 3 : Actions d'image WorkflowGen personnalisée

    Ignorez cette étape si vous n'avez pas d'image WorkflowGen personnalisée. Consultez la section Image WorkflowGen personnalisée pour plus d'informations.

    Exécutez toutes les actions sur les fichiers de votre image

    Si vous avez une image WorkflowGen personnalisée, vous devez effectuer les actions requises pour les fichiers web.config si vous avez des fichiers web.config personnalisés. Lisez attentivement la section Mettre à jour le fichier de configuration Web du Guide de mise à jour WorkflowGen pour savoir si vous devez modifier quoi que ce soit dans vos fichiers.

    Mettez à jour la version de WorkflowGen dans votre Dockerfile

    Votre Docker doit être basé sur l’image WorkflowGen (instruction FROM). Mettez à jour le numéro de version de l'image WorkflowGen, créez votre image et transférez-la dans votre registre de conteneurs. Par exemple, si votre version de WorkflowGen est 9.3.0 et que vous souhaitez effectuer une mise à jour vers 9.3.1, exécutez la modification suivante sur la ligne d'instruction FROM :

    Ensuite, créez votre image WorkflowGen personnalisée :

    Enfin, poussez l'image dans votre registre de conteneurs :

    Étape 4 : Lancez la mise à jour dans vos conteneurs

    En production, vous devez utiliser un orchestrateur et donc utiliser le mécanisme de lancement des mises à jour fourni par cet orchestrateur.

    Comme les conteneurs sont sans état, leur mise à jour nécessite simplement de remplacer ceux qui sont en cours d'exécution par la nouvelle version. Pour ce faire :

    1. Tirez la nouvelle version du conteneur.

    2. Supprimez les conteneurs avec l'ancienne version.

    3. Exécutez les conteneurs avec la nouvelle version.

    Par exemple, si vous souhaitez mettre à jour vers WorkflowGen version 7.16.1 :

    Configuration
    - FROM advantys/workflowgen-sql:9.3.0-ubuntu-18.04
    + FROM advantys/workflowgen-sql:9.3.1-ubuntu-18.04
    - FROM advantys/workflowgen:9.3.0-win-ltsc2019
    + FROM advantys/workflowgen:9.3.1-win-ltsc2019
    Set-Location C:\Path\To\Custom\Context
    docker image build `
        # ...
        -t mycorporation/workflowgen:9.3.1-win-ltsc2019 `
        # ...
        .
    # Docker Hub is the default container registry
    docker image push mycorporation/workflowgen:9.3.1-win-ltsc2019
    # 1. Pull the new version of the container.
    # For custom images, use the name of your account instead of "advantys".
    docker pull advantys/workflowgen:9.3.1-win-ltsc2019
    
    # 2. Remove the containers with the old version.
    # This code loops through all containers whose name contains "wfgen"
    docker container ls --format name=wfgen -q `
        | ForEach-Object { docker container rm -f $_ }
    
    # 3. Run containers with the new version
    docker container run `
        # ...
        advantys/workflowgen:7.16.1-win-ltsc2019

    Gestion des fichiers

    Aperçu

    Cette section indique quelles données persistantes sont exposées et où. Il recommande également des moyens de persister, de partager et de sauvegarder les données. Pour des stratégies et des recommandations de sauvegarde, consultez la section Continuité des activités et reprise après sinistre.

    Données persistantes dans WorkflowGen

    Trois éléments doivent être conservés dans WorkflowGen : le dossier App_Data, le dossier de l'application Web wfapps et les données SQL. Pour déployer une base de données, consultez la section .

    Les deux autres sont des fichiers de WorkflowGen, et la raison pour laquelle ils doivent être conservés via un partage de fichiers est expliquée dans la section .

    Vous devez aussi disposer d'un partage de fichier contenant une licence WorkflowGen valide pour que le conteneur puisse le récupérer. Ces dossiers doivent être exposés aux conteneurs WorkflowGen via des volumes. Pour plus d'informations sur les volumes Docker, consultez l'article de Docker (disponible en anglais uniquement).

    Particularité des conteneurs Windows

    Les volumes sont traités différemment avec les conteneurs Windows par rapport aux conteneurs Linux. Le modèle d'autorisation change et diffère selon que vous utilisez l'isolation de processus ou l'isolation Hyper-V. Avant de poursuivre les procédures décrites dans cette section, vous devez lire l'article de Microsoft.

    Pour l'essentiel, vous devez vous assurer que les conteneurs WorkflowGen peuvent lire et écrire sur le volume wfgdata et lire à partir du volume de licences. L'utilisateur du conteneur qui accédera aux volumes s'appelle IIS_IUSRS.

    Moyens recommandés pour persister

    Chemin du système de fichiers local sur l'hôte Docker

    Ceci est le moyen le plus simple de conserver les fichiers WorkflowGen avec les conteneurs. Cela consiste à créer un volume local ou à utiliser un montage de liaison sur votre hôte Docker qui conservera les fichiers après la suppression d'un conteneur. Les volumes sont le moyen préféré pour conserver les fichiers par rapport aux montages liés, car ils sont gérés par Docker. Cette méthode ne s'adapte pas bien à plusieurs hôtes Docker, cependant, d'autres méthodes doivent être considérées dans ce cas.

    Volumes

    Pour créer un volume pour chaque chemin de données du conteneur, exécutez la commande suivante :

    Ensuite, vous devez copier (ou déplacer) votre fichier de licence sur le volume de licences en exécutant la commande suivante :

    Vous pouvez maintenant exécuter le conteneur WorkflowGen avec ces volumes pour conserver les données. Voici un exemple de commande d'exécution :

    Vous avez maintenant correctement conservé les fichiers de WorkflowGen.

    Montages de liaisons

    N'oubliez pas que vous gérez les montages liés manuellement. Ce sont des chemins spécifiques sur l'hôte Docker que vous contrôlez. Pour utiliser les montages de liaisons en tant que volumes, il vous suffit de passer les chemins lorsque vous exécutez la commande d'exécution de la manière suivante :

    Partage de fichiers réseau

    Vous pouvez utiliser un partage de fichiers SMB avec des conteneurs Windows tels que Azure Files. Concrètement, vous connectez le partage à l'hôte Docker, puis vous le montez comme un montage lié dans des conteneurs. Cela s'appelle un montage SMB. Pour en savoir plus sur les montages SMB, consultez l'article de Microsoft.

    Utilisation d'un orchestrateur

    Kubernetes

    Dans Kubernetes, vous utiliserez un objet Persistent Volume pour spécifier un endroit où Kubernetes placera les données des pods. Pour plus d'informations sur les volumes persistants, consultez la page sur le site Web de Kubernetes (disponible en anglais uniquement).

    Concrètement, pour WorkflowGen, vous devrez configurer un volume qui peut gérer l'autorisation ReadWriteMany pour le volume de données WorkflowGen car plusieurs pods en même temps accéderont à ce volume pour lire et écrire des données. En règle générale, pour ce faire, vous devrez créer une revendication de stockage sur le cluster comme suit :

    Dans cet exemple, la revendication fait référence à une classe de stockage (Storage Class), mais vous pouvez référencer directement un volume persistant ou d'autres services de stockage spécifiques au cloud en fonction du fournisseur de cloud. Ici, la classe de stockage azurefile est fournie par Azure Kubernetes Service. L'attribution du stockage se fera automatiquement par le service. Il créera un compte de stockage avec un partage de fichiers d'une capacité de 50 Go.

    Répertoire de collecte

    Si vous configurez WorkflowGen pour utiliser un répertoire de collecte pour les notifications, vous devez également spécifier un volume afin d'exposer les notifications à d'autres services qui les traiteront.

    Le chemin par défaut du répertoire de collecte est C:\inetpub\mailroot\Pickup. Vous pouvez le changer en fournissant à la variable d'environnement WFGEN_APP_SETTING_ApplicationSmtpPickupDirectory un chemin quelconque à l'intérieur du conteneur. Ensuite, vous devez créer un volume pour les fichiers de la manière suivante :

    Vous pouvez maintenant mapper ce volume sur le répertoire de collecte configuré :

    À ce stade, vous pouvez déployer un autre conteneur avec votre service pour prendre en charge les notifications et lier le même volume pour partager les fichiers de notification.

    Collecte de journaux et métriques d'application

    Aperçu

    Cette section présente ce qui est enregistré dans l’image WorkflowGen et comment. Il indique également les pointeurs permettant de configurer la journalisation centralisée avec certains services et orchestrateurs.

    WorkflowGen n'a pas de génération de métriques prête à l'emploi. Néanmoins, vous pouvez configurer certains logiciels ou services existants avec le conteneur de WorkflowGen afin d'obtenir des indicateurs de valeur pour la surveillance des performances et du trafic.

    Image personnalisée

    Aperçu

    Cette page explique comment créer une image personnalisée de la base de données WorkflowGen afin d'ajouter du code personnalisé ou des scripts SQL à exécuter. Gardez à l'esprit que ce guide fournit des exemples simples, vous n'êtes donc pas limité à ce qui est montré ici. Les exemples utiliseront la version Linux de l'image. Tous les exemples de code sont dans PowerShell.

    Usage

    Aperçu

    Cette page présente les cas d'utilisation courants de l'image de mise à jour de WorkflowGen. Cette image est disponible en tant que conteneurs Linux et Windows et est conçue pour être un conteneur à usage unique qui s'exécute jusqu'à la fin. Vous devez le supprimer une fois que vous en avez terminé.

    Nom

    Description

    C:\wfgen\data

    Ce chemin contient toutes les données WorkflowGen, y compris le dossier App_Data et toutes les applications de workflow créées dans WorkflowGen (par exemple dans le dossier wfapps).

    C:\wfgen\licenses

    Ce chemin contient les licences personnalisées que vous souhaitez pour WorkflowGen. Le conteneur prendra le premier qu'il détecte. Il est recommandé de ne placer qu'une seule licence dans ce répertoire pour éviter les problèmes de licence.

    Si vous ne possédez pas de licence d'évaluation, n'oubliez pas de définir la variable d'environnement WFGEN_CONFIG_ApplicationSerialNumber en fonction de votre licence.

    Options d'hébergement SQL Server
    Description de l'architecture principale
    Volumes
    Vue d’ensemble du stockage de conteneurs
    Vue d’ensemble du stockage de conteneurs
    Persistent Volumes
    Sources des journaux

    Lors du déploiement de WorkflowGen, de nombreuses applications fournissent des journaux via différents flux. Ce tableau liste les différentes sources des journaux et leurs flux :

    Source

    Flux

    Applications Web WorkflowGen

    Journaux écrits dans le fichier App_Data

    Services Windows WorkflowGen

    Journaux écrits via l'API d'événements Windows

    Internet Information Services (IIS)

    Journaux écrits dans les fichiers du conteneur

    iisnode

    Journaux écrits dans plusieurs fichiers du dossier de chaque application Node.js dans le conteneur

    Comme vous pouvez le constater, il existe de nombreuses sources pour les journaux et toutes ne sont pas gérées directement par le conteneur. Certains d'entre eux doivent être gérés manuellement.

    Journaux des applications Web WorkflowGen

    Ces journaux sont écrits dans un fichier du dossier App_Data et ce dossier est exposé via un volume. Pour plus d'informations sur les volumes exposés, consultez la section Gestion des fichiers.

    Afin de centraliser ces journaux dans un service ou un système de journalisation, vous devez développer votre propre script ou votre propre application, qui lira périodiquement les journaux du volume App_Data et les poussera au service. Concrètement, cela se fait en développant un conteneur Singleton qui a accès au volume de données WorkflowGen. Dans Kubernetes, vous déploieriez ce conteneur à l'intérieur d'un pod qui n'a qu'une seule réplique pour éviter les problèmes de concurrence.

    Journaux des services Windows WorkflowGen

    Ces journaux sont écrits dans l'API d'événements Windows et sont récupérés par le conteneur WorkflowGen uniquement lorsque le mode de démarrage est win_services, dir_sync ou engine. Dans tous les autres cas, ce sont les journaux IIS qui sont redirigés vers la sortie standard et les logs des services Windows sont ignorés.

    Pour obtenir tous les journaux de WorkflowGen, vous devez utiliser l'architecture qui sépare chaque mode de démarrage dans son propre conteneur. Pour plus d'informations, consultez la section Architectures recommandées.

    Journaux IIS

    Les journaux IIS sont écrits dans plusieurs fichiers dans le conteneur WorkflowGen. Vous n'avez pas à les gérer manuellement. Le conteneur lit les journaux et les dirige vers la sortie standard du conteneur. La sortie standard de chaque conteneur est récupérée par le système de journalisation Docker.

    Il existe de nombreux pilotes de journalisation Docker pour indiquer à Docker où placer ces journaux. Par défaut, ils sont écrits sur l'hôte au format JSON par le chemin C:\ProgramData\Docker\logs. Le reste de cette section fournit des informations supplémentaires sur le système de journalisation Docker et sur son utilisation pour centraliser les journaux.

    Dans Kubernetes, vous pouvez configurer votre propre agent de journalisation ou utiliser celui par défaut fourni. Pour plus de détails sur la journalisation dans Kubernetes, consultez la page Logging Architectures. De nombreux fournisseurs de cloud proposent un service centralisé pour visualiser les journaux des pods dans leur service Kubernetes. Consultez la documentation de votre fournisseur de cloud pour plus de détails.

    Journaux iisnode

    Ces journaux sont désactivés par défaut et peuvent être activés en définissant les variables d'environnement suivantes pour le conteneur WorkflowGen :

    Il est recommandé d'activer ces journaux dans un environnement de développement uniquement, car ils peuvent être exposés via HTTP.

    Comme vous pouvez le constater, la journalisation s'effectue par application et par conteneur. Pour extraire ces journaux du conteneur, vous devez utiliser des volumes et une application personnalisée pour les centraliser ou créer votre propre image basée sur l'image WorkflowGen qui redirigera ces journaux d'une manière ou d'une autre vers la sortie standard du conteneur. Pour plus d'informations sur la création d'une image WorkflowGen personnalisée, consultez la section Image WorkflowGen personnalisée.

    Capture des journaux et des métriques

    Afin de centraliser les journaux en dehors d'un hôte Docker, vous devez d'abord choisir un système ou un service de journalisation. Une fois cette opération effectuée, vous devez utiliser la méthode spécifique de votre orchestrateur pour lier le service aux journaux.

    Kubernetes

    Kubernetes dispose d'une fonctionnalité similaire pour gérer les journaux des conteneurs. Consultez la page suivante pour plus d'informations :

    • Logging Architecture

    Vous pouvez également utiliser Azure Monitor avec votre cluster Kubernetes. Consultez la page suivante pour plus d'informations :

    • Superviser les performances de votre cluster Kubernetes avec Container Insights

    Service Azure Kubernetes

    La documentation du service Azure Kubernetes recommande l'utilisation d'Azure Monitor pour les conteneurs. Consultez sa page de documentation pour plus de détails :

    • Fonctionnalités d’Azure Monitor pour la supervision Kubernetes

    Autres services de surveillance

    Prometheus

    Ce logiciel peut vous aider à réduire les coûts liés à la surveillance des applications utilisant un service cloud. Prometheus peut être déployé en tant que conteneur dans votre cluster, parallèlement à WorkflowGen. Vous devez ajouter un utilitaire au conteneur WorkflowGen. Vous devez donc créer une image WorkflowGen personnalisée. Pour plus d'informations sur la création d'une image WorkflowGen personnalisée, consultez la section Image WorkflowGen personnalisée.

    Voici quelques liens vers la documentation Prometheus et des exemples Dockerfile pour vous aider à démarrer avec les métriques d'application avec Prometheus :

    • dockersamples/aspnet-monitoring

    • Installation

    Grafana

    Grafana est un concurrent direct de Prometheus et vous pouvez également utiliser ce logiciel de la même manière. Il dispose également d'un service cloud payant. Voici quelques liens pour vous aider à démarrer :

    • dockersamples/aspnet-monitoring

    • Installing using Docker

    Collecte de journaux IIS dans le conteneur

    Si vous préférez collecter uniquement les journaux IIS directement à partir du conteneur, Azure Application Insights fournit un outil PowerShell appelé Application Insights Agent, installé directement dans le conteneur. Consultez l'article Microsoft Déployer Azure Monitor Application Insights Agent pour les serveurs locaux pour plus d'informations. Vous devrez créer votre propre image qui intègre cet outil dans le conteneur. Pour plus d'informations sur les images personnalisées WorkflowGen, consultez la section Image WorkflowGen personnalisée.

    Cette approche ne doit être envisagée que si votre cluster Kubernetes n'est pas géré par Azure Kubernetes Service et que vous souhaitez qu'Application Insights collecte les journaux. Sinon, utilisez l'agent de journalisation par défaut ou quelque chose comme une pile ELK (ElasticSearch, Logstash et Kibana) ou une pile EFK (ElasticSearch, fluentd et Kibana).

    Étapes de mise à jour

    La première chose à savoir sur le conteneur de mise à jour est la procédure à suivre pour mettre à jour votre installation. Chaque étape, à l'exception de l'acquisition du package de mise à jour, est effectuée au sein d'une transaction, ce qui signifie que toute erreur annulera toutes les modifications précédemment apportées. Dans le cas de fichiers, ils seront restaurés à partir d'une sauvegarde effectuée avant l'opération.

    Étape 1 : Obtenez le package de mise à jour

    Selon que le conteneur de mise à jour est en ligne ou hors ligne, cette étape obtient le package de mise à jour du paramètre ToVersion. Si le conteneur est en ligne, il essaiera d'abord d'obtenir le package de mise à jour à partir du volume updatepackages. S'il n'est pas trouvé, le conteneur le téléchargera à partir du référentiel GitHub workflowgen-releases. Si le conteneur est hors ligne, il essaiera d'obtenir le package de mise à jour à partir du volume updatepackages. Si ce n'est pas le cas, il écrira un message d'erreur et quittera.

    Vous devez fournir vos propres packages de mise à jour WorkflowGen lorsque vous utilisez le conteneur hors ligne. Par défaut, lorsque vous montez le volume des packages de mise à jour, le conteneur attend la structure de fichiers suivante :

    Comme vous pouvez le voir, la structure attendue n'a que des dossiers au niveau supérieur avec la version exacte de WorkflowGen. À l'intérieur d'eux se trouve une archive appelée update.zip, qui est le package de mise à jour officiel de WorkflowGen. Vous n'avez besoin que du package de mise à jour ToVersion lorsque vous exécutez le conteneur.

    Facultativement, si le package de mise à jour se trouve ailleurs dans le volume, vous pouvez spécifier le nom de fichier et le chemin d'accès dans la variable d'environnement WFGEN_UPGRADE_UPDATE_PACKAGE_FILE_NAME. Par exemple, vous pouvez spécifier la valeur 7.15.2.zip si ToVersion est 7.15.2 et la structure du répertoire est plate. Vous pouvez également spécifier la valeur workflowgen/updates/7.15.2/update.zip si le package de mise à jour se trouve plus loin dans l'arborescence de répertoires.

    Pour plus d'informations sur les variables d'environnement, voir la page Configuration de cette section.

    Étape 2 : Fusionnez les nouveaux fichiers App_Data dans le dossierApp_Data existant

    Avant cette opération, une sauvegarde sera effectuée de tous les dossiers et fichiers à l'intérieur du montage de liaison et copiée temporairement dans un chemin à l'intérieur du conteneur. À tout moment, les dossiers Files, LogFiles et Ws sont ignorés, y compris pendant l'opération de fusion. Le conteneur fusionnera ensuite les fichiers App_Data du package de mise à jour dans votre dossier App_Data que vous avez lié au conteneur via le montage de liaison de données. La fusion est uniquement additive, ce qui signifie que tout fichier qui n'existe pas dans le package de mise à jour sera conservé tel quel.

    Étape 3 : Fusionnez les nouveaux fichiers wfapps dans le dossier wfapps existant

    De la même manière que l'opération de fusion App_Data, le dossier wfapps sera également fusionné avec vos wfapps fournis dans le montage de liaison de données. Cette opération est également additive uniquement.

    Étape 4 : Migrez la base de données si nécessaire

    Le conteneur de mise à niveau appliquera ensuite tous les fichiers de migration SQL trouvés dans le package de mise à jour qui satisfont à la condition fv<x≤tvfv < x \le tvfv<x≤tv où xxx est la version du fichier de migration SQL, fvfvfv est la valeur FromVersion et tvtvtv est la valeur ToVersion.

    Exemple en ligne

    Cet exemple s'agit de l'utilisation la plus simple du conteneur de mise à jour. Par exemple, si vous souhaitez mettre à jour WorkflowGen de la version 7.14.6 vers 7.18.2 et que le conteneur a accès à Internet, vous l'appellerez comme ceci :

    Dans cet exemple, le conteneur télécharge le package de mise à jour à partir de la version 7.18.2, fusionne les fichiers App_Data et wfapps dans /mnt/data/appdata et /mnt/data/wfapps respectivement et applique toutes les migrations de base de données à l'aide des scripts SQL dans le package de mise à jour.

    Vous pouvez ignorer les fichiers et dossiers avec des variables d'environnement lorsque le conteneur fusionne des fichiers. Pour plus d'informations, voir la page Configuration de cette section.

    Exemple hors ligne

    Si le conteneur n'a pas accès à Internet, vous pouvez transmettre le package de mise à jour WorkflowGen vous-même. Assurez-vous qu'il s'agit de la version exacte de l'argument ToVersion passé au conteneur. Vous appelleriez le conteneur comme ceci :

    Dans cet exemple, il y a deux changements par rapport à l'exemple en ligne. Tout d'abord, un montage de liaison a été ajouté pour l'approvisionnement des packages de mise à jour. Le conteneur y cherchera d'abord un package de mise à jour. Deuxièmement, l'indicateur -Offline a été transmis au conteneur. Cet indicateur indique au conteneur de ne pas essayer de télécharger le package de mise à jour s'il ne trouve pas le package dans le montage de liaison. En d'autres termes, le conteneur ne tentera aucun accès lié au réseau.

    Le chemin et le nom du package de mise à jour peuvent être modifiés avec des variables d'environnement. Pour plus d'informations, voir la page Configuration de cette section.

    "wfgdata", "licenses" | ForEach-Object { docker volume create $_ }
    Copy-Item C:\Path\To\WorkflowGen.lic $(docker volume inspect -f "{{.Mountpoint}}" licenses)
    docker container run `
        # ...
        --mount "type=volume,src=wfgdata,dst=C:\wfgen\data" `
        --mount "type=volume,src=licenses,dst=C:\wfgen\licenses,readonly" `
        # ...
        advantys/workflowgen:7.18.3-win-ltsc2019
    docker container run `
        # ...
        --mount "type=bind,src=C:\some\path\to\wfgdata,dst=C:\wfgen\data" `
        --mount "type=bind,src=C:\some\path\to\wfgen\licenses,dst=C:\wfgen\licenses,readonly" `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: wfgdata-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile
      resources:
        requests:
          storage: 50Gi
    
    docker volume create pickup
    docker container run `
        # ...
        --env WFGEN_APP_SETTING_ApplicationSmtpDeliveryMethod=PickupDirectory `
        --env WFGEN_APP_SETTING_ApplicationSmtpPickupDirectory=C:\inetpub\mailroot\Pickup `
        --mount "type=volume,src=pickup,dst=C:\inetpub\mailroot\Pickup" `
        # ...
        advantys/workflowgen:7.18.3-win-ltsc2019
    WFGEN_IISNODE_AUTH_loggingEnabled=true
    WFGEN_IISNODE_GRAPHQL_loggingEnabled=true
    WFGEN_IISNODE_SCIM_loggingEnabled=true
    WFGEN_IISNODE_HOOKS_loggingEnabled=true
    
    # Also specify these values to expose the logs through HTTP
    WFGEN_ENABLE_IISNODE_OPTION_AUTH=exposelogs
    WFGEN_ENABLE_IISNODE_OPTION_GRAPHQL=exposelogs
    WFGEN_ENABLE_IISNODE_OPTION_SCIM=exposelogs
    WFGEN_ENABLE_IISNODE_OPTION_HOOKS=exposelogs
    # "wfgdata" groups appdata and wfapps folders
    docker container run -i --name wfgen-upgrade `
        --env 'WFGEN_DATABASE_CONNECTION_STRING=Server=someserver,1433;...' `
        --mount "type=bind,src=C:\path\to\your\wfgdata,dst=/mnt/data" `
        advantys/workflowgen-upgrade:latest-ubuntu-18.04 `
        -FromVersion 7.14.6 -ToVersion 7.18.2
    
    # When has terminated, you can analyse the container or review the logs.
    # Then, remove the container.
    docker container rm wfgen-upgrade
    # "wfgdata" groups appdata and wfapps folders
    docker container run -i --name wfgen-upgrade \
        --env 'WFGEN_DATABASE_CONNECTION_STRING=Server=someserver,1433;...' \
        --mount type=bind,src=C:\path\to\your\wfgdata,dst=/mnt/data \
        advantys/workflowgen-upgrade:latest-ubuntu-18.04 \
        -FromVersion 7.14.6 -ToVersion 7.18.2
    
    # When has terminated, you can analyse the container or review the logs.
    # Then, remove the container.
    docker container rm wfgen-upgrade
    # "wfgdata" groups appdata and wfapps folders
    docker container run -i --name wfgen-upgrade `
        --env 'WFGEN_DATABASE_CONNECTION_STRING=Server=someserver,1433;...' `
        --mount "type=bind,src=C:\path\to\your\wfgdata,dst=/mnt/data" `
        --mount "type=bind,src=C:\path\to\packages,dst=/mnt/updatepackages" `
        advantys/workflowgen-upgrade:latest-ubuntu-18.04 `
        -FromVersion 7.14.6 -ToVersion 7.18.2 -Offline
    # "wfgdata" groups appdata and wfapps folders
    docker container run -i --name wfgen-upgrade \
        --env 'WFGEN_DATABASE_CONNECTION_STRING=Server=someserver,1433;...' \
        --mount type=bind,src=C:\path\to\your\wfgdata,dst=/mnt/data \
        --mount type=bind,src=C:\path\to\packages,dst=/mnt/updatepackages \
        advantys/workflowgen-upgrade:latest-ubuntu-18.04 \
        -FromVersion 7.14.6 -ToVersion 7.18.2 -Offline
    updatepackages/
        7.14.0/
            update.zip
        7.15.0/
            update.zip
    Prérequis
    • Une machine Linux avec Docker installé. Consultez les instructions spécifiques à votre distribution pour installer et configurer le moteur Docker. Consultez l'article Install Docker Engine pour les instructions d'installation. Il pourrait ne pas avoir toutes les distributions prises en charge.

    • Un Mac avec Docker Desktop pour Mac installé.

    • Une machine Windows 10 Pro avec Docker Desktop pour Windows installé et les conteneurs Linux activés. Il est recommandé d'utiliser le backend WSL 2 (sous-système Windows pour Linux) s'il est disponible. Sinon, utilisez la valeur par défaut.

    Exemple simple

    La création de votre propre image WorkflowGen est aussi simple que la création d'un fichier Dockerfile. Créez un répertoire de contexte et ajoutez-y un fichier vide appelé Dockerfile :

    Arborescence des fichiers :

    Vous allez ensuite ouvrir le Dockerfile et y ajouter du code :

    Cette instruction indique que vous souhaitez baser votre image sur l'image de la base de données WorkflowGen. À partir d'ici, vous pouvez ajouter d'autres instructions pour ajouter des fichiers ou des scripts à exécuter et effectuer l'initialisation personnalisée que vous souhaitez. Par exemple, vous pouvez ajouter un script SQL personnalisé et l'exécuter :

    Arborescence des fichiers :

    Dockerfile :

    Comme vous pouvez le voir, PowerShell est disponible dans le conteneur Linux afin que les scripts puissent être effectués facilement entre Windows et Linux. Si vous préférez les scripts Bash, vous pouvez l'utiliser tout aussi facilement en remplaçant le script .ps1 par votre propre script .sh.

    customcode.ps1 :

    Ce script ressemble beaucoup mais est en fait simple. Il commence par importer les bibliothèques SqlServer, Utils et Crypto, puis obtient des informations de l'environnement et initialise les variables en fonction de cela. Ensuite, il vérifie si la base de données a déjà été créée en vérifiant l'existence d'un fichier .mdf avant de hacher et saler un secret personnalisé, en créant une base de données personnalisée et en exécutant un script avec une variable préparée. Si aucun argument n'est transmis au script, il redémarre le processus SQL Server afin que ses journaux soient écrits dans la sortie standard. S'il y a des arguments, il exécute ce qui est passé.

    La condition pour vérifier si la base de données est déjà créée est là car le script sera exécuté après chaque redémarrage et exécution du conteneur. Par conséquent, les fichiers d'état, y compris les fichiers .mdf et .ldf de toutes les bases de données à l'intérieur de SQL Server seront déjà là. Il ne sera pas nécessaire de recréer la base de données.

    La dernière partie est une bonne pratique générale dans un conteneur Docker. Par exemple, si vous déboguez le conteneur et que vous souhaitez uniquement inviter une ligne de commande PowerShell après la séquence de démarrage, vous passerez PowerShell comme argument à la commande d'exécution comme suit :

    L'argument powershell sera exécuté par la commande Invoke-Expression et une nouvelle invite de commandes PowerShell s'affichera.

    Maintenant, tout ce que vous avez à faire est de construire le conteneur :

    Scripts disponibles dans l'image

    Advantys a développé certains scripts et modules PowerShell pour prendre en charge certaines fonctionnalités. Voici une liste de ces scripts avec leurs descriptions :

    • docker-entrypoint.ps1 : Le script principal qui s'exécute lorsque vous exécutez un conteneur. Il gère l'analyse des variables d'environnement, l'initialisation de la base de données WorkflowGen, etc.

      • Chemin Windows : C:\docker-entrypoint.ps1

      • Chemin Linux : /usr/local/bin/docker-entrypoint.ps1

    • C:\monitor-database.ps1 (version Windows uniquement) : Ce script gère la surveillance du processus de base de données, ainsi que la collecte des journaux de conteneur et leur redirection vers la sortie standard. La version Linux n'a pas besoin de ce script car le processus SQL Server s'exécute au premier plan et écrit ses journaux dans la sortie standard.

    • /usr/local/bin/healthcheck.ps1 (version Linux uniquement) : Ce script gère la vérification périodique qui indique si la base de données fonctionne correctement ou non. Ceci est défini dans le Dockerfile et est géré par le moteur Docker. La version Windows a également un bilan de santé défini. C'est une commande simple qui n'a pas besoin de son propre script. Dans Kubernetes, il est ignoré, vous devez donc fournir une sonde liveness (« liveness probe »). Pour plus d'informations, consultez l'article Kubernetes (disponible en anglais uniquement).

    • *.psm1: Divers modules PowerShell développés disponibles dans l'image.

      • Chemin Windows : C:\

      • Chemin Linux : /usr/local/lib/

    • /usr/local/bin/set-state.ps1 (version Linux uniquement) : Définit l'état du conteneur, par exemple en mettant la base de données WorkflowGen hors ligne ou en ligne.

      • Chemin Windows : C:\

      • Chemin Linux : /usr/local/bin/

     docker container run -it `
         # ...
         mycorporation/workflowgen-sql:7.18.3-ubuntu-18.04 /usr/local/bin/customcode.ps1 pwsh
     docker container run -it \
         # ...
         mycorporation/workflowgen-sql:7.18.3-ubuntu-18.04 /usr/local/bin/customcode.ps1 pwsh
    Set-Location path/to/context-dir
    docker container build `
        -t mycorporation/workflowgen-sql:7.18.3-ubuntu-18.04 `
        .
    cd path/to/context-dir
    docker container build \
        -t mycorporation/workflowgen-sql:7.18.3-ubuntu-18.04 \
        .
    context-dir/
        Dockerfile
    FROM advantys/workflowgen-sql:7.18.3-ubuntu-18.04
    context-dir/
        Dockerfile
        myscript.sql
        customcode.ps1
    FROM advantys/workflowgen-sql:7.18.3-ubuntu-18.04
    
    COPY ./myscript.sql /usr/local/mycorporation/scripts/
    COPY ./customcode.ps1 /usr/local/bin/
    CMD /usr/local/bin/customcode.ps1
    <#
    .SYNOPSIS
        Custom script that creates a new database if not exists and executes
        a custom SQL script with a prepared variable.
    .NOTES
        File name: customcode.ps1
    #>
    #requires -Version 7.0
    
    Import-Module SqlServer
    Import-Module /usr/local/lib/Utils.psm1 -Function "Get-EnvVar"
    Import-Module /usr/local/lib/Crypto.psm1
    
    $saPassword = Get-EnvVar "SA_PASSWORD"
    $aSecret = Get-EnvVar "MYCORPORATION_SECRET"
    
    $myCustomDatabaseName = "MYDB"
    $myDatabasePath = Join-Path "/" "var" "opt" "mssql" "data" "$myCustomDatabaseName.mdf"
    $myScriptPath = Join-Path "/" "usr" "local" "mycorporation" "scripts" "myscript.sql"
    $commonArgs = @{
        ServerInstance = "localhost"
        Username = "sa"
        Password = $saPassword
    }
    
    # MYDB not created
    if (-not (Test-Path $myDatabasePath)) {
        $secretSalt = Get-Salt # from Crypto.psm1
        $secretPassHash = Get-PasswordHash ($salt + $aSecret)
    
        Invoke-Sqlcmd "CREATE DATABASE [`$(DATABASE_NAME)] CONTAINMENT = PARTIAL" `
            -Variable ,"DATABASE_NAME=$myCustomDatabaseName" `
            @commonArgs
        Invoke-Sqlcmd -InputFile $myScriptPath `
            -Variable ,"A_SECRET=$secretPassHash" `
            @commonArgs
    }
    
    if ($args.Count -gt 0 {
        Invoke-Expression $args
    } else {
        # Restart the SQL Server process so that the logs
        # are written in the standard output file
        Stop-Process -Name sqlservr -Force
        Start-Process -FilePath /opt/mssql/bin/sqlservr -Wait
    }
    Configure Liveness, Readiness and Startup Probes

    Image personnalisée

    Aperçu

    Cette section explique comment créer votre propre image WorkflowGen personnalisée afin de personnaliser les fichiers et les DLL de WorkflowGen.

    Prérequis

    • Windows 10 Pro avec Docker pour Windows installé et les conteneurs Windows activés OU

    • Windows Server 2019 avec Docker Enterprise installé

    Description

    L'image WorkflowGen fournit une variante utile nommée advantys/workflowgen:7.18.3-win-ltsc2019-onbuild qui permet de personnaliser facilement tout fichier contenu dans C:\inetpub\wwwroot ou C: Program Files\Advantys\WorkflowGen. Tout ce que vous avez à faire est de créer votre propre image avec un fichier Docker héritant de la variante onbuild et de placer les fichiers personnalisés dans le contexte de build de Docker.

    Exemple simple

    Voici un exemple simple qui remplace le fichier web.config, personnalise la bannière et ajoute une bibliothèque personnalisée.

    Les chemins .\inetpub\wwwroot et .\Program Files\Advantys\WorkflowGen doivent exister pour que la build réussisse. Ils ne doivent pas nécessairement contenir de fichiers, ils peuvent donc être vides.

    Étape 1 : Ajoutez vos fichiers modifiés à la racine du contexte

    Voici l'arborescence de fichiers du répertoire de contexte à partir duquel vous allez générer votre image WorkflowGen personnalisée :

    Étape 2 : Ajoutez un Dockerfile dans le répertoire de contexte

    Arborescence des fichiers :

    Voici le contenu du Dockerfile :

    Étape 3 : Générez votre image WorkflowGen personnalisée

    Génération avec Docker Compose

    Avec Docker Compose, vous pouvez spécifier les paramètres de build dans un format déclaratif afin d’intégrer le processus de génération de Docker à l’exécution. Par exemple, vous pourriez avoir le fichier Compose suivant nommé docker-compose.yml dans votre répertoire de contexte :

    (Ce fichier provient de la section .)

    La section importante est l'objet build dans l'objet de service workflowgen.

    Ensuite, pour générer et baliser automatiquement, vous pouvez exécuter la commande suivante :

    Docker Compose va alors générer et baliser votre image avec la balise présente dans la propriété image. Si vous souhaitez mettre à jour immédiatement votre déploiement Compose sur votre ordinateur local ou exécuter immédiatement ce déploiement après la génération, exécutez la commande suivante, qui générera votre conteneur en plus de l'exécution des services après la génération :

    Pour pousser l'image à l'aide de Docker Compose, exécutez la commande suivante :

    Vous avez maintenant une image WorkflowGen personnalisée. Pour en savoir plus sur la mise à jour de votre conteneur lorsqu'une nouvelle version de WorkflowGen est disponible, voir la section .

    Exemple avec une application / procédure Web WorkflowGen personnalisée patrimoniale

    Supposons qu'en plus des DLLs et des bannières personnalisées, vous ayez une application Web ASP.NET 2.0 à ajouter au dossier wfapps et à configurer dans IIS. Vous devez suivre les mêmes étapes que précédemment, mais ajouter un script Docker CMD personnalisé qui configurera l'application dans IIS.

    Plusieurs scripts PowerShell sont fournis avec l'image WorkflowGen et ont des objectifs différents :

    • docker-entrypoint.ps1 : Le script principal à exécuter lorsque vous exécutez un conteneur. Il gère l'analyse des variables d'environnement, la configuration des méthodes d'authentification, etc.

    • monitor-services.ps1 : Ce script gère la surveillance des processus (services IIS et Windows), ainsi que la collecte des logs du conteneur et leur redirection vers la sortie standard.

    • healthcheck.ps1 : Ce script gère la vérification périodique qui indique si WorkflowGen fonctionne correctement ou non. Ceci est défini dans le Dockerfile WorkflowGen et est géré par le moteur Docker.

    En créant votre propre image WorkflowGen dans Docker, vous pouvez remplacer n'importe quel script par le vôtre qui fait complètement autre chose, et il est recommandé de le faire si les scripts de stock ne font pas ce que vous voulez. Dans le cas de cet exemple, les scripts de stock ne se chargent pas de définir l'application Web ajoutée comme dans IIS; vous devez développer votre propre script pour cela. Voici celui que vous utiliserez dans cet exemple :

    Remplacez <YOUR_WEB_SERVICE_NAME> par le nom du service Web que vous avez ajouté dans le dossier wfapps.

    Dans ce script, notez ce qui suit :

    1. Vous vérifiez le type de service de démarrage et vérifiez si vous avez déjà ajouté le service Web en tant qu'application Web dans IIS. Raisonnement En effet, le script de point d'entrée est réexécuté entre les redémarrages du conteneur. Par conséquent, ce script sera également réexécuté après un redémarrage. Lors du redémarrage d'un conteneur, la configuration IIS est conservée et la commande ConvertTo-WebApplication provoque l'échec de la procédure de démarrage lors de la tentative d'ajout d'une application Web déjà ajoutée. Par conséquent, vous devez vérifier que vous n'avez pas déjà ajouté l'application. En outre, vous vérifiez si le conteneur s'exécute en mode applications Web. Dans le cas contraire, vous n'avez pas besoin d'ajouter votre service Web dans IIS car seuls les services Windows seront exécutés.

    2. Vous vérifiez les arguments et les exécutez s'il y en a. Sinon, vous commencez à surveiller les services du conteneur.

      Raisonnement

    Votre Dockerfile sera alors comme suit :

    Après cela, vous effectuerez les mêmes étapes de génération et de poussée que dans l'exemple précédent.

  • *.psm1 : Différents modules PowerShell développés et disponibles dans l'image.

  • ServiceMonitor.exe : exécutable binaire fourni par Microsoft. Il s'agit du principal fichier exécutable utilisé par le script de surveillance pour vérifier l'état d'un service. (Pour plus d'informations sur ServiceMonitor, consultez sa page GitHub à l'adresse microsoft/IIS.ServiceMonitor.)

  • set-state.ps1: Définit l'état du conteneur, comme mettre le site Web hors ligne ou en ligne.

  • Ceci est une bonne pratique générale dans un conteneur Docker. Par exemple, si vous déboguez le conteneur et souhaitez uniquement inviter une ligne de commande PowerShell après la séquence de démarrage, vous transmettez powershell en tant qu'argument à la commande d'exécution, comme suit :

    L'argument powershell sera exécuté par la commande Invoke-Expression et une nouvelle invite de commande PowerShell s'affichera. Si aucun argument n'est transmis, le comportement par défaut consiste à commencer à surveiller les services. Comme l'image contient déjà un script pour cela, il vous suffit de l'exécuter.

    Démarrer
    Gestion des mises à jour
    context-dir\
          inetpub\
              wwwroot\
                  web.config
                  wfgen\
                      web.config
                      bin\
                          MyCustomLib.dll
                      ws\
                          bin\
                              MyCustomLib.dll
                      App_Themes\
                          Default\
                              portal\
                                  banner\
                                      banner.htm
          Program Files\
              Advantys\
                  WorkflowGen\
                      Services\
                          Bin\
                              MyCustomLib.dll
    context-dir\
          Dockerfile
          inetpub\
              wwwroot\
                  web.config
                  wfgen\
                      web.config
                      bin\
                          MyCustomLib.dll
                      ws\
                          bin\
                              MyCustomLib.dll
                      App_Themes\
                          Default\
                              portal\
                                  banner\
                                      banner.htm
          Program Files\
              Advantys\
                  WorkflowGen\
                      Services\
                          Bin\
                              MyCustomLib.dll
     #escape=`
     FROM advantys/workflowgen:7.18.3-win-ltsc2019-onbuild
    
     # You can add any instructions in order to install other services or tools, etc.
     # You also can add other files at any other location in the container.
     Set-Location C:\Path\To\context-dir
     docker image build -t mycorporation/workflowgen:7.18.3-win-ltsc2019 .
    
     # Optionally, you can push your custom image to your container registry
     docker image push mycorporation/workflowgen:7.18.3-win-ltsc2019
    version: '3.7'
     services:
       workflowgen:
         build:
           context: .
           dockerfile: .\Dockerfile
         image: mycorporation/workflowgen:7.18.3-win-ltsc2019
         restart: always
         env_file:
           - '.\workflowgen.env'
         ports:
           - '8080:80'
         volumes:
           - 'wfgdata:C:\wfgen\data'
           - 'licenses:C:\wfgen\licenses:RO'
         depends_on:
           - database
       database:
         image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
         env_file:
           - '.\database.env'
         volumes:
           - 'sqldata:C:\wfgen\sql'
     
     volumes:
       wfgdata:
       licenses:
         external: true
       sqldata:
     
     docker-compose build workflowgen
     docker-compose up --build
     docker-compose push workflowgen
    <#
    .SYNOPSIS
        Add the custom web application to IIS.
    .NOTES
        File name: custom-web-app-install.ps1
    #>
    #requires -Version 5.1
    Import-Module IISAdministration
    Import-Module C:\Const.psm1 -Variable Constants
    Import-Module C:\Utils.psm1 -Fonction "Get-EnvVar"
    
    $wfgenStartService = (Get-EnvVar "WFGEN_START_SERVICE" -DefaultValue "all").ToLower()
    $isWebServices = $wfgenStartService -eq $Constants.SERVICE_ALL -or
        $wfgenStartService -eq $Constants.SERVICE_WEB_APPS
    
    if ($isWebServices -and (Get-WebApplication -Site "wfgenroot" -Name "wfgen/wfapps/<YOUR_WEB_SERVICE_NAME>").Count -le 0) {
        Write-Host "CONFIG: Adding mywebapp to IIS ... " -NoNewLine
        ConvertTo-WebApplication -PSPath "IIS:\Sites\wfgenroot\wfgen\WfApps\<YOUR_WEB_SERVICE_NAME>" | Out-Null
        Write-Host "done" -ForegroundColor Green
    }
    
    if ($args.Count -gt 0) {
        Invoke-Expression ($args -join " ")
    } else {
        . C:\monitor-services.ps1
    }
    #escape=`
    FROM advantys/workflowgen:7.18.3-win-ltsc2019-onbuild
    
    SHELL ["powershell", "-Command"] 
    
    COPY .\custom-web-app-install.ps1 C:\
    CMD C:\custom-web-app-install.ps1
     docker container run -it `
         # ...
         mycorporation/workflowgen:7.18.3-win-ltsc2019 C:\custom-web-app-install.ps1 powershell

    Configuration

    Aperçu

    Cette section explique comment configurer complètement un conteneur de mise à jour WorkflowGen. Certaines options sont configurées en tant que variables d'environnement et d'autres sont transmises directement au script du point d'entrée. Il est disponible sous forme d'images Linux et Windows.

    Cette image n'est pas conçue pour être prise comme image de base.

    Variables d'environnement

    Dans le cas de l'image de mise à niveau, les variables d'environnement sont des arguments que vous ne devriez pas avoir à changer souvent lors de la mise à jour de WorkflowGen. De cette façon, vous pouvez facilement passer un fichier qui définit ces variables et le réutiliser entre les exécutions. Voici la liste des variables d'environnement disponibles avec leurs descriptions :

    Paramètres de script

    Les paramètres de script définissent des options à transmettre en tant qu'arguments directement au conteneur de mise à jour. Ces arguments sont plus susceptibles d'être définis chaque fois que vous exécutez le conteneur, c'est pourquoi ils ne sont pas dans des variables d'environnement. Voici le fichier d'aide du script de point d'entrée. Il décrit tous les paramètres et leurs regroupements et fournit quelques exemples :

    Utilisation d'un gestionnaire de configuration externe

    Certains gestionnaires de configuration populaires supportent les conteneurs Docker prêts à l'emploi. Vous utiliseriez un gestionnaire de configuration externe uniquement pour la définition des variables d'environnement. Voici quelques liens vers leur documentation spécifique pour vous aider à démarrer :

    Chef

    Ansible

    Puppet

    Fichiers exclus globalement lors de la copie de fichiers App_Data du package de mise à jour vers votre volume App_Data. Les éléments de cette liste doivent être séparés par des virgules (p.ex. monfichier.txt,monfichier2.txt).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    WFGEN_UPGRADE_WFAPPS_EXCLUDE_FILES

    Fichiers exclus globalement lors de la copie de fichiers wfapps du package de mise à jour vers votre volume wfapps. Les éléments de cette liste doivent être séparés par des virgules (p.ex. monfichier.txt,monfichier2.txt).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    WFGEN_UPGRADE_APPDATA_EXCLUDE_FOLDERS

    Dossiers exclus globalement lors de la copie de fichiers App_Data du package de mise à jour vers votre volume App_Data. Les éléments de cette liste doivent être séparés par des virgules (p.ex. mon dossier,mon dossier).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    WFGEN_UPGRADE_WFAPPS_EXCLUDE_FOLDERS

    Dossiers exclus globalement lors de la copie de fichiers wfapps du package de mise à jour vers votre volume wfapps. Les éléments de cette liste doivent être séparés par des virgules (p.ex. mon dossier,mon dossier).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    Variables

    Description et valeurs

    WFGEN_UPGRADE_UPDATE_PACKAGES_PATH

    Chemin local vers le conteneur où se trouvent les packages de mise à jour. Voir la page Usage de cette section pour plus d'informations.

    Valeur par défaut :

    • Windows : C:\wfgen\updatepackages

    • Linux : /mnt/updatepackages

    WFGEN_UPGRADE_UPDATE_PACKAGE_FILE_NAME

    Nom de l'archive du package de mise à jour à sélectionner dans le chemin des packages de mise à jour pour cette mise à niveau. Si aucune valeur n'est fournie, <ToVersion>/update.zip sera choisi où <ToVersion est passé en argument au conteneur.

    WFGEN_DATABASE_CONNECTION_STRING

    Variable requise

    Chaîne de connexion à la base de données WorkflowGen. L'utilisateur passé doit avoir le droit de modifier le schéma de la base de données.

    WFGEN_UPGRADE_EXCLUDE_FILES

    Fichiers exclus globalement lors de la copie des fichiers App_Data du package de mise à jour vers votre volume App_Data et lors de la copie des fichiers wfapps du package de mise à jour vers votre volume wfapps. Les éléments de cette liste doivent être séparés par des virgules (p.ex. monfichier.txt,monfichier2.txt).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    • Les fichiers exclus dans la version Windows sont récursifs.

    • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

    WFGEN_UPGRADE_EXCLUDE_FOLDERS

    Dossiers exclus globalement lors de la copie de fichiers App_Data du package de mise à jour vers votre volume App_Data et lors de la copie de fichiers wfapps du package de mise à jour vers votre volume wfapps. Les éléments de cette liste doivent être séparés par des virgules (p.ex. mon dossier,mon dossier).

    ✏️ Notes :

    • Il n'y a pas de distinction entre les fichiers et les dossiers dans la version Linux.

    • Les dossiers exclus dans la version Windows sont récursifs.

    • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

    Docker Cookbook - Chef Supermarket
    Chef and Kubernetes
    Ansible and Docker
    k8s – Manage Kubernetes (K8s) objects
    Puppet in Docker: running Puppet on container-centric infrastructure
    Installing Kubernetes with the (certified!) Puppet Kubernetes module

    WFGEN_UPGRADE_APPDATA_EXCLUDE_FILES

    NAME
        /usr/local/bin/docker-entrypoint.ps1
        
    SYNOPSIS
        Entrypoint script for the upgrade container.
        
        
    SYNTAX
        /usr/local/bin/docker-entrypoint.ps1 -FromVersion <String> -ToVersion <String> [-RemainingArgs <Object>] [-Offline] [<CommonParameters>]
        
        /usr/local/bin/docker-entrypoint.ps1 -Command -RemainingArgs <Object> [<CommonParameters>]
        
        /usr/local/bin/docker-entrypoint.ps1 -Help [<CommonParameters>]
        
        
    DESCRIPTION
        This script will merge files for the App_Data and wfapps directory between
        the upgrade package of the destination version and the current installation
        ones (passed as volumes).
        
        It will also launch the required SQL migration scripts in order from lowest
        to highest version. Make sure to use a SQL account that has the proper 
        rights to modify the database tables.
        
        The "Files", "LogFiles" and "Ws" subfolders in App_Data are always ignored.
        You don't have to specify them in the exclusion environment variables.
        
    
    PARAMETERS
        -FromVersion <String>
            The current version of WorkflowGen. The starting version of the 
            migration.
            
            Required?                    true
            Position?                    named
            Default value                
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        -ToVersion <String>
            The version to which you want to migrate the current one.
            
            Required?                    true
            Position?                    named
            Default value                
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        -Command [<SwitchParameter>]
            Indicates to execute a command inside the container. This is used in 
            conjunction with RemainingArgs
            
            Required?                    true
            Position?                    named
            Default value                False
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        -RemainingArgs <Object>
            Commands to execute inside the container. If versions are not passed, it is
            executed at the beginning and then it exits after the execution. If 
            versions are passed, it is executed at the end of the script.
            
            Required?                    false
            Position?                    named
            Default value                
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        -Help [<SwitchParameter>]
            Get full help for this script.
            
            Required?                    true
            Position?                    named
            Default value                False
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        -Offline [<SwitchParameter>]
            If provided, the script will not try to download the update package. 
            This means that you have to provide the update package from a volume.
            
            Required?                    false
            Position?                    named
            Default value                False
            Accept pipeline input?       false
            Accept wildcard characters?  false
            
        <CommonParameters>
            This cmdlet supports the common parameters: Verbose, Debug,
            ErrorAction, ErrorVariable, WarningAction, WarningVariable,
            OutBuffer, PipelineVariable, and OutVariable. 
            For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). 
        
    NOTES
        
        
        File name: docker-entrypoint.ps1
            
        requires -Version 7.0
        
        -------------------------- EXAMPLE 1 --------------------------
        
        PS > docker container run -i "..." advantys/workflowgen-upgrade:latest-ubuntu-18.04 -Help
        
        Displays the full help for the container.
        
        
        
        
        -------------------------- EXAMPLE 2 --------------------------
        
        PS > docker container run -i "..." advantys/workflowgen-upgrade:latest-ubuntu-18.04 -Command dir /mnt/appdata
        
        This executes an arbitrary command inside the container. It can be useful 
        for debugging network issues or other problems prior to the migration.
        
        
        
        
        -------------------------- EXAMPLE 3 --------------------------
        
        PS > docker container run -i "..." advantys/workflowgen-upgrade:latest-ubuntu-18.04 -FromVersion 7.14.10 -ToVersion 7.18.2
        
        This will launch the migration process to upgrade WorkflowGen from version 
        7.14.10 to the 7.18.2 version.
        
        
        
        
        -------------------------- EXAMPLE 4 --------------------------
        
        PS > docker container run -i "..." advantys/workflowgen-upgrade:latest-ubuntu-18.04 -FromVersion 7.14.10 -ToVersion 7.18.2 dir /mnt/appdata
        
        This will launch the migration process to upgrade WorkflowGen from version 
        7.14.10 to the 7.18.2 version. In addition, it will execute an arbitrary command 
        at the end of the migration process.
    Les fichiers exclus dans la version Windows sont récursifs.
  • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

  • Les fichiers exclus dans la version Windows sont récursifs.
  • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

  • Les dossiers exclus dans la version Windows sont récursifs.
  • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

  • Les dossiers exclus dans la version Windows sont récursifs.
  • Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.

  • Configuration

    Aperçu

    Cette section explique comment configurer complètement un conteneur de base de données WorkflowGen. Tout est configurable via une variable d'environnement.

    • Cette image est basée sur (SQL Server 2017) pour la version Windows LTSC 2019 et sur (SQL Server 2019) pour la version Linux (Ubuntu 18.04).

    • Pour supporter Windows LTSC 2019, l'image de base a été reconstruite à l'aide du Dockerfile open source et hébergée sur le référentiel Docker Hub d'Advantys. Par conséquent, l'image de base réelle est .

    • La version Windows de cette image est destinée au développement et aux tests uniquement. Pour les charges de travail de production, utilisez la version Linux.

    Variables d'environnement

    Variables spécifiques aux images de base

    Certaines variables sont disponibles dans les images de base qui fournissent des fonctionnalités liées à SQL Server. Pour la version Linux, consultez la page Docker Hub et l'article Microsoft . Pour la version Windows, consultez la page Docker Hub .

    Certaines variables d'environnement dans les images de base sont requises. Par exemple, vous devez fournir une valeur pour la variable d'environnement SA_PASSWORD.

    Variables spécifiques à WorkflowGen

    Le conteneur de base de données WorkflowGen ajoute des variables d'environnement spéciales pour activer des fonctionnalités supplémentaires liées à WorkflowGen. Le tableau suivant fournit des descriptions pour chacun d'eux :

    Variables d'environnement basées sur le format

    Secrets

    Lorsque vous utilisez un orchestrateur tel que Kubernetes, vous souhaiterez probablement sécuriser des secrets à l'aide de leurs outils de gestion des secrets intégrés. Suivez le guide spécifique de votre orchestrateur pour savoir comment créer un secret.

    Pour Kubernetes, consultez .

    Il est recommandé d'injecter des secrets dans des conteneurs WorkflowGen sous forme de fichiers car ils ne seront pas exposés en tant que variables d'environnement et ils seront supprimés du conteneur lorsqu'il sera arrêté ou supprimé.

    La gestion des secrets est possible uniquement au moyen d'un orchestrateur.

    Afin d'obtenir la valeur secrète dans le fichier, vous devez suffixer toute variable d'environnement dont vous souhaitez obtenir la valeur de cette manière avec _FILE et définir sa valeur sur le chemin du fichier contenant le secret. Le conteneur obtiendra ensuite la valeur dans le fichier au chemin spécifié et définira la variable d'environnement sans le suffixe avec cette valeur.

    Par exemple, supposons que vous souhaitiez définir un mot de passe de compte sa dans SQL Server sur Strong(!)Pass en utilisant la variable d'environnement SA_PASSWORD, mais que vous souhaitez utiliser un secret pour la valeur. Tout ce que vous avez à faire est de suffixer le nom de la variable d'environnement avec _FILE pour qu'il devienne SA_PASSWORD_FILE. Ensuite, définissez la valeur de cette variable sur le chemin du fichier contenant le mot de passe.

    📌 Exemple avec l'orchestrateur Docker Swarm

    Pour Kubernetes, vous créez un ConfigMap qui complète votre secret comme ceci :

    Ensuite, vous devez mapper le ConfigMap en tant que variables d'environnement et monter le secret en tant que volume comme ceci :

    Utilisation d'un orchestrateur

    Kubernetes

    Kubernetes a également un objet intégré appelé ConfigMap pour gérer la configuration des pods (capsules). Consultez l'article Kubernetes pour plus d'informations et comment l'utiliser. Vous devez utiliser cet objet pour configurer les variables d'environnement pour WorkflowGen.

    Vous pouvez également gérer les informations sensibles en les protégeant davantage dans l'orchestrateur dans une zone sécurisée. Consultez l'article Kubernetes pour plus d'informations et d'instructions sur son utilisation. Vous devez utiliser cet objet pour protéger des informations sensibles telles que la clé de licence WorkflowGen, les noms d'utilisateur, les mots de passe, les clés cryptographiques, les clés API, etc...

    Utilisation d'un gestionnaire de configuration externe

    Certains gestionnaires de configuration populaires supportent les conteneurs Docker prêts à l'emploi. Voici quelques liens vers leur documentation spécifique pour vous aider à démarrer :

    Chef

    Ansible

    Puppet

    À propos des fonctions de sécurité

    La version Linux de la base de données possède certaines fonctionnalités de sécurité qui peuvent être utilisées pour améliorer la sécurité globale de la base de données. Pour plus d'informations sur les fonctionnalités de sécurité de SQL Server pour Linux, consultez l'article dans la documentation Microsoft SQL Server.

    La version Windows du conteneur n'a pas les fonctionnalités de sécurité de la version Linux. Il est conseillé d'utiliser la version Windows uniquement à des fins de développement et de test.

    Performance et haute disponibilité

    Vous pouvez configurer la réplication avec ce conteneur, mais vous devrez créer une image personnalisée. Pour plus d'informations sur la création d'une image personnalisée, voir la page de cette section. Pour plus d'informations sur la configuration de la réplication dans SQL Server, consultez l'article dans la documentation Microsoft.

    Utilisation avec Kubernetes

    Vous devez toujours déployer le conteneur de base de données dans un StatefulSet afin que chaque conteneur ait son propre stockage séparé. Il garantit également que chaque conteneur possède un nom DNS unique à l'intérieur du cluster afin qu'il puisse être facilement trouvé par d'autres conteneurs. Vous pouvez également configurer chacune des instances en fonction d'un identifiant incrémentiel afin de pouvoir définir une instance en lecture / écriture et plusieurs instances en lecture seule. Voici un exemple d'un déploiement StatefulSet simple avec le conteneur de base de données WorkflowGen :

    Vous pouvez utiliser cet exemple comme point de départ pour configurer plusieurs conteneurs de base de données. Pour plus d'informations sur StatefulSets, consultez l'article dans la documentation Kubernetes. Vous aurez peut-être besoin d'un code personnalisé pour pouvoir configurer correctement plusieurs instances. Voir la page de cette section pour plus d'informations sur la façon d'ajouter du code personnalisé au conteneur.

    Le nom d'utilisateur de l'utilisateur administratif WorkflowGen

    Valeur par défaut : wfgen_admin

    WFGEN_ADMIN_PASSWORD

    Variable requise

    Le mot de passe de l'utilisateur administratif WorkflowGen

    WFGEN_AUTH_APPLICATION

    Indique si la méthode d'authentification de WorkflowGen est applicative ou non

    Valeurs possibles :Y (par défaut), N

    Variable

    Description et valeurs

    WFGEN_DATABASE_NAME

    Le nom de la base de données WorkflowGen

    Valeur par défaut : WFGEN

    WFGEN_DATABASE_CONTAINMENT

    Définit la base de données WorkflowGen pour contenir les utilisateurs de base de données pour plus de portabilité (consultez l'article Microsoft contained database authentication (option de configuration de serveur) pour plus d'informations)

    Valeurs possibles : Y (par défaut), N

    WFGEN_DATABASE_USER_USERNAME

    Le nom d'utilisateur de l'utilisateur de la base de données qui a accès à la base de données WorkflowGen

    Valeur par défaut :WFGEN_USER

    WFGEN_DATABASE_USER_PASSWORD

    Variable requise

    Le mot de passe de l'utilisateur de la base de données qui a accès à la base de données WorkflowGen

    WFGEN_DATABASE_FILE_PATH

    Ne pas modifier pour la version Linux

    Chemin d'accès interne aux fichiers de base de données .mdf et .ldf à l'intérieur du conteneur

    Valeur par défaut :

    • Windows : C:\wfgen\sql

    • Linux : /var/opt/mssql/data

    microsoft/mssql-server-windows-express
    mcr.microsoft.com/mssql/server
    advantys/mssql-server-windows-express
    mcr.microsoft.com/mssql/server
    Déployer et se connecter à des conteneurs Linux SQL Server
    microsoft/mssql-server-windows-express
    https://kubernetes.io/docs/concepts/configuration/secret/
    Configure a Pod to Use a ConfigMap
    Secrets
    Docker Cookbook
    Chef and Kubernetes
    Ansible and Docker
    How to run Puppet in Docker
    Déployer et se connecter à des conteneurs Linux SQL Server
    Image personnalisée
    Configurer un groupe de disponibilité SQL Server pour l’échelle lecture sur Linux
    StatefulSets
    Image personnalisée

    WFGEN_ADMIN_USERNAME

    # Create the secret for the license serial number
    'strong(!)Pass' | docker secret create SA_PASSWORD -
    
    # Create the container service in Docker Swarm
    docker service create `
        # ...
        --env WFGEN_APP_SETTING_ApplicationSerialNumber_FILE=/run/secrets/SA_PASSWORD `
        --secret SA_PASSWORD `
        # ...
        advantys/workflowgen-sql:7.18.3-ubuntu-18.04
    # Create the secret for the license serial number
    echo 'strong(!)Pass' | docker secret create SA_PASSWORD -
    
    # Create the container service in Docker Swarm
    docker service create \
        # ...
        --env WFGEN_APP_SETTING_ApplicationSerialNumber_FILE=/run/secrets/SA_PASSWORD \
        --secret SA_PASSWORD \
        # ...
        advantys/workflowgen-sql:7.18.3-ubuntu-18.04
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database-config
    data:
      SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
    ---
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: database-secret
    data:
      # "c3Ryb25nKCEpUGFzcwo=" is the base64-encoded value of "strong(!)Pass"
      SA_PASSWORD: 'c3Ryb25nKCEpUGFzcwo='
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: wfgen-database
    spec:
      selector:
        matchLabels:
          # ...
      template:
        metadata:
          labels:
            # ...
        spec:
          containers:
            - name: database
              image: advantys/workflowgen-sql:7.18.3-ubuntu-18.04
              # ...
              envFrom: # ConfigMap as environment variables
                - configMapRef:
                    name: database-config
              # ...
              volumeMounts:
                # ...
                - mountPath: /mnt/secrets # Mount Secret as a volume
                  readOnly: true
                  name: secrets
          volumes:
            # ...
            - name: secrets # Mount Secret as a volume
                secret:
                  secretName: database-secret
    apiVersion: v1
    kind: Service
    metadata:
      name: database
    spec:
      type: ClusterIP
      clusterIP: None
      ports:
        - port: 1433
          targetPort: mssql
          protocol: TCP
          name: mssql
      selector:
        app.kubernetes.io/name: workflowgen
        app.kubernetes.io/component: database
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: database
    spec:
      replicas: 1
      serviceName: database
      selector:
        matchLabels:
          app.kubernetes.io/name: workflowgen
          app.kubernetes.io/component: database
      template:
        metadata:
          labels:
            app.kubernetes.io/name: workflowgen
            app.kubernetes.io/component: database
        spec:
          terminationGracePeriodSeconds: 10
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - name: database
              image: advantys/workflowgen-sql:7.18.3-ubuntu-18.04
              imagePullPolicy: Always
              securityContext:
                runAsUser: 0
                runAsGroup: 0
              resources:
                requests:
                  memory: "1Gi"
                  cpu: "500m"
                limits:
                  memory: "2Gi"
                  cpu: "1"
              envFrom:
                - configMapRef:
                    name: database-config
              ports:
                - name: mssql
                  containerPort: 1433
              livenessProbe:
                initialDelaySeconds: 30
                timeoutSeconds: 5
                exec:
                  command:
                    - pwsh
                    - -NoLogo
                    - -NoProfiles
                    - /usr/local/bin/healthcheck.ps1
              readinessProbe:
                initialDelaySeconds: 20
                timeoutSeconds: 5
                exec:
                  command:
                    - pwsh
                    - -NoLogo
                    - -NoProfiles
                    - /usr/local/bin/healthcheck.ps1
              volumeMounts:
                - mountPath: /var/opt/mssql
                  name: sqldata
                - mountPath: /mnt/secrets
                  readOnly: true
                  name: secrets
          volumes:
            - name: secrets
                secret:
                  secretName: database-sec
      volumeClaimTemplates:
        - metadata:
            name: sqldata
          spec:
            accessModes:
              - ReadWriteOnce
            storageClassName: default
            resources:
              requests:
                storage: 100Gi

    Architectures recommandées

    Aperçu

    Cette section présente l'architecture de conteneur recommandée pour WorkflowGen afin d'exécuter les portails Web et les services Windows. Il y aura de nombreuses références aux propriétés de configuration de l'image; consultez la section Configuration pour plus d'informations.

    Cette section concerne uniquement l'architecture de conteneur. Les données et les volumes SQL doivent toujours être utilisés quelle que soit l'architecture.

    Consultez la section pour plus d'informations sur les déploiements de bases de données SQL et la section pour obtenir des informations sur le déploiement de volumes.

    Conteneur unique

    C'est l'architecture la plus simple que vous puissiez utiliser avec WorkflowGen. Il s'agit d'un conteneur unique sans répliques qui exécute à la fois des applications Web et services Windows. Par conséquent, vous définissez la variable d'environnement WFGEN_START_SERVICE sur all. Cette architecture convient bien aux environnements de développement et de test, mais elle peut également être considérée lorsque les performances avec un seul conteneur correspondent à l'utilisation du produit. Vous ne pouvez pas répliquer le conteneur car il ne devrait y avoir qu'une seule instance de chaque service Windows WorkflowGen en cours d'exécution.

    Exemple Docker Compose

    Voici le même exemple que dans la section . Il contient un conteneur WorkflowGen qui exécute tous les services (applications Web et services Windows).

    Exemple Helm

    Cet exemple est différent de l'exemple dans la section . Cette version de Helm n'est pas évolutive dans le cluster. Il a un pod qui exécute tous les services WorkflowGen (applications Web et services Windows) et un autre pod pour la base de données. Vous pouvez utiliser les étapes de l'exemple dans la section pour générer les valeurs demandées. N'oubliez pas d'obtenir l'adresse IP externe de l'équilibreur de charge une fois qu'il est créé.

    Plusieurs instances d'applications Web, instance unique de services Windows

    Puisqu'il ne peut y avoir qu'une seule instance de chaque service Windows WorkflowGen exécutée à la fois, cette architecture vous permet d'exécuter plusieurs répliques des applications Web afin de faire évoluer WorkflowGen pour répondre à vos besoins en matière de trafic et de traitement sans disposer d'instances supplémentaires des services Windows.

    Vous devez définir la variable d'environnement WFGEN_START_SERVICE sur web_apps pour les conteneurs des applications Web et sur win_services pour le conteneur unique afin d'exécuter tous les services Windows sans applications Web. Cette architecture est idéale pour adapter les portails Web au trafic et aux besoins de traitement, sans trop de pression sur les services Windows.

    Exemple Docker Compose

    Exemple Helm

    Cet exemple est le même que dans la section . Les conteneurs des services Windows seront toujours dans le même pod lorsque vous utilisez la carte Helm WorkflowGen. Vous pouvez utiliser les étapes de l'exemple dans la section pour générer les valeurs demandées. N'oubliez pas d'obtenir l'adresse IP externe de l'équilibreur de charge une fois qu'il est créé.

    Plusieurs instances d'applications Web, conteneurs de services Windows dédiés

    Cette architecture recommandée est la plus évolutive. Il comporte plusieurs conteneurs pour les applications Web pouvant être adaptés à l'augmentation du trafic ou à des besoins de traitement, ainsi que des conteneurs dédiés pour chaque service Windows : un pour le service de synchronisation d'annuaires et un pour le service de moteur. Par conséquent, vous devez définir la variable d'environnement WFGEN_START_SERVICE sur web_apps pour les conteneurs des applications Web, sur dir_sync pour le conteneur de service de synchronisation d'annuaires et sur engine pour le conteneur du service de moteur. Cette architecture convient aux scénarios de haute disponibilité et de performances élevées.

    Exemple Docker Compose

    Exemple Helm

    Cet exemple est le même que dans la section . Les conteneurs des services Windows seront toujours dans le même pod lorsque vous utilisez la carte Helm WorkflowGen. Vous pouvez utiliser les étapes de l'exemple dans la section pour générer les valeurs demandées. N'oubliez pas d'obtenir l'adresse IP externe de l'équilibreur de charge une fois qu'il est créé.

    Options d'hébergement SQL Server
    Gestion des fichiers
    Démarrer
    Démarrer
    Démarrer
    Démarrer
    Démarrer
    Démarrer
    Démarrer
    Architecture à conteneur unique
    Plusieurs instances d'applications Web, instance unique de services Windows
    Plusieurs instances d'application Web, conteneurs de services Windows dédiés
    version: '3.7'
    services:
      workflowgen:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        ports:
          - '8080:80'
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      database:
        image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
        env_file:
          - '.\database.env'
        volumes:
          - 'sqldata:C:\wfgen\sql'
    
    volumes:
      wfgdata:
      licenses:
        external: true
      sqldata:
      
    scalable: false
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
      config:
        WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
        WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
        WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
      secret:
        ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
        ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
        WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
        WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
      license:
        secretName: wfgen-license-secret
        items:
          - key: WorkflowGen.lic
            path: WorkflowGen.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
    
    database:
      fullnameOverride: wfgen-database
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        runAsUser: 0
        runAsGroup: 0
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '500m'
          memory: 1Gi
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    
    ingress:
      enabled: false
    
    version: '3.7'
    services:
      workflowgen-web-apps:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        environment:
          WFGEN_START_SERVICE: web_apps
        ports:
          - '8080:80'
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      workflowgen-win-services:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        environment:
          WFGEN_START_SERVICE: win_services
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      database:
        image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
        env_file:
          - '.\database.env'
        volumes:
          - 'sqldata:C:\wfgen\sql'
    
    volumes:
      wfgdata:
      licenses:
        external: true
      sqldata:
      
    replicaCount: 3
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
      config:
        WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
        WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
        WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
      secret:
        ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
        ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
        WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
        WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
      license:
        secretName: wfgen-license-secret
        items:
          - key: WorkflowGen.lic
            path: WorkflowGen.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
    
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    
    database:
      fullnameOverride: wfgen-database
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        runAsUser: 0
        runAsGroup: 0
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '500m'
          memory: 1Gi
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    
    ingress:
      enabled: false
    
    version: '3.7'
    services:
      workflowgen-web-apps:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        environment:
          WFGEN_START_SERVICE: web_apps
        ports:
          - '8080:80'
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      workflowgen-dir-sync-service:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        environment:
          WFGEN_START_SERVICE: dir_sync
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      workflowgen-engine-service:
        image: advantys/workflowgen:7.18.3-win-ltsc2019
        restart: always
        env_file:
          - '.\workflowgen.env'
        environment:
          WFGEN_START_SERVICE: engine
        volumes:
          - 'wfgdata:C:\wfgen\data'
          - 'licenses:C:\wfgen\licenses:RO'
        depends_on:
          - database
      database:
        image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
        env_file:
          - '.\database.env'
        volumes:
          - 'sqldata:C:\wfgen\sql'
    
    volumes:
      wfgdata:
      licenses:
        external: true
      sqldata:
    
    replicaCount: 3
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
      config:
        WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
        WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
        WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
      secret:
        ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
        ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
        WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
        WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
      license:
        secretName: wfgen-license-secret
        items:
          - key: WorkflowGen.lic
            path: WorkflowGen.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
    
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    
    database:
      fullnameOverride: wfgen-database
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        runAsUser: 0
        runAsGroup: 0
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '500m'
          memory: 1Gi
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    
    ingress:
      enabled: false
    

    Configuration

    Aperçu

    Cette section explique comment configurer complètement un conteneur WorkflowGen, y compris le fichier web.config, la configuration d'iisnode pour les applications Node.js, les chaînes de connexion à la base de données, etc. Tout est configurable via une variable d'environnement, à l'exception du fichier de licence configuré via un volume.

    Variables d'environnement WorkflowGen

    L'image WorkflowGen fournit un certain nombre de variables d'environnement spécifiques permettant des configurations spécifiques. Le tableau suivant décrit chacun d’entre eux :

    Variables d'environnement basées sur le format

    L'image WorkflowGen expose également diverses variables d'environnement basées sur un format spécifique afin de configurer des éléments plus génériques.

    web.config

    Dans WorkflowGen, le fichier web.config est le point principal de la configuration. Dans la mesure où un conteneur est par définition éphémère, toute modification apportée dans le Panneau de configuration ne persisterait pas entre les redémarrages de conteneur.

    Pour définir les propriétés de configuration dans le fichier web.config, vous devez utiliser un format spécifique pour une variable d'environnement qui contiendra la valeur de la propriété que vous souhaitez définir. Ce format est WFGEN_APP_SETTING_<nom>.

    Par exemple, si vous souhaitez définir la propriété ApplicationUrl dans le fichier web.config sur https://macompagnie.fr/wfgen, vous devez définir la variable d'environnement WFGEN_APP_SETTING_ApplicationUrl=https://macompagnie.fr/wfgen dans le conteneur.

    📌 Exemple avec la commande run

    Pour une liste des paramètres web.config, ainsi que leurs descriptions et leurs valeurs possibles, consultez l'annexe du .

    Configuration iisnode pour les applications Node.js

    Vous pouvez également définir des propriétés iisnode spécifiques pour chaque application Node.js. Pour ce faire, vous devez définir une variable d’environnement au format suivant : WFGEN_IISNODE_<nom de l'application NodeJS>_<nom de la propriété>.

    • Remplacez <nom de l'application NodeJS> par le nom de l'application Node.js (AUTH, HOOKS, GRAPHQL ou SCIM).

    • Remplacez <nom de la propriété> par le nom de la propriété que vous souhaitez définir pour le nœud XML <iisnode/> dans le fichier

    Par exemple, si vous souhaitez définir la propriété iisnode loggingEnabled dans l'application Auth sur true, vous devez définir la variable d'environnement WFGEN_IISNODE_AUTH_loggingEnabled=true.

    📌 Exemple avec la commande run

    Options iisnode spéciales pour les applications Node.js

    Il existe des options spéciales que vous pouvez activer pour chaque application Node.js en définissant une variable d'environnement qui a le modèle suivant : WFGEN_ENABLE_IISNODE_OPTION_<nom app NodeJS>. Ensuite, vous remplacez <nom app NodeJS> par le nom de l'application Node.js (AUTH par exemple) et la valeur doit être l'une des suivantes :

    Configuration de trace

    Vous pouvez activer le traçage .NET pour différents composants WorkflowGen à l'aide de variables d'environnement. Utilisez le modèle WFGEN_TRACE_<component>_<option>=<value> avec <component> comme nom du composant sur lequel vous souhaitez définir l'option, <option> comme nom de l'option à définir et <value> comme valeur de l'option.

    Composants disponibles

    • WEB_APPS (applications Web)

    • ENGINE (service de moteur)

    • DIR_SYNC (service de synchronisation d'annuaire)

    Options

    📌 Exemple

    Pour activer le traçage pour les applications Web avec une indentation de 2 et tracer uniquement les erreurs pour le moteur avec une indentation de 0, vous devez configurer les variables d'environnement comme suit :

    Configuration de la base de données

    Chaîne de connexion principale

    La chaîne de connexion principale peut être configurée via la variable d'environnement WFGEN_DATABASE_CONNECTION_STRING. Vous pouvez mettre n'importe quelle chaîne dans cette variable et sa valeur sera placée dans le fichier web.config de WorkflowGen au niveau de la chaîne de connexion MainDbSource.

    Voici comment spécifier la chaîne de connexion à l'aide de la commande run :

    Chaîne de connexion en lecture seule

    Si vous avez un réplica en lecture seule, vous pouvez également le configurer dans le conteneur. Vous pouvez le spécifier avec la variable d'environnement WFGEN_DATABASE_READONLY_CONNECTION_STRING. Il sera ajoutée au fichier web.config de WorkflowGen en tant que nouvelle entrée dans les chaînes de connexion sous le nom ReadOnlyDbSource.

    Voici comment spécifier la chaîne de connexion en lecture seule avec la commande run :

    Chaînes de connexion personnalisées

    Vous pouvez également configurer davantage de connexions aux sources de données personnalisées si vous en avez besoin. Ils peuvent être configurés à l'aide d'un format de variable d'environnement spécifique : WFGEN_CUSTOM_CONNECTION_STRING_<nom>=<chaîne_connexion>.

    Par exemple, si vous souhaitez une source de données nommée MyDataSource avec la valeur de chaîne de connexion MyConnectionString dans le fichier web.config de WorkflowGen, spécifiez la variable d'environnement suivante : WFGEN_CUSTOM_CONNECTION_STRING_MyDataSource=MyConnectionString.

    📌 Exemple avec la commande run

    Secrets

    Lorsque vous utilisez un orchestrateur tel que Kubernetes, vous souhaiterez probablement sécuriser les secrets à l'aide de leurs outils de gestion de secrets intégrés. Suivez le guide spécifique destiné à votre orchestrateur pour savoir comment créer un secret.

    Pour Kubernetes, consultez (disponible en anglais uniquement).

    Il est recommandé d'injecter ces secrets dans les conteneurs WorkflowGen sous forme de fichiers, car ils ne seront pas exposés en tant que variables d'environnement et ils seront supprimés du conteneur lorsqu'il sera arrêté ou supprimé.

    La gestion des secrets n'est possible qu'avec un orchestrateur.

    Pour obtenir la valeur secrète dans le fichier, vous devez suffixer toute variable d'environnement pour laquelle vous voulez obtenir la valeur de cette manière avec _FILE et définir sa valeur sur le chemin du fichier contenant le secret. Le conteneur obtiendra alors la valeur dans le fichier au niveau du chemin spécifié et définira la variable d'environnement sans le suffixe avec cette valeur.

    Par exemple, supposons que vous souhaitiez définir le numéro de série de la licence dans le fichier web.config sur WFG-SOME-LICENSE-KEY à l'aide de la variable d'environnement WFGEN_APP_SETTING_ApplicationSerialNumber, mais que vous souhaitiez utiliser un secret pour la valeur. Il vous suffit de suffixer le nom de la variable d'environnement avec _FILE pour qu'il devienne WFGEN_APP_SETTING_ApplicationSerialNumber_FILE. Définissez ensuite la valeur de cette variable sur le chemin du fichier contenant le numéro de série.

    📌 Exemple avec l'orchestrateur Docker Swarm

    Pour Kubernetes, vous créez un ConfigMap qui complète votre secret comme ceci :

    Ensuite, vous devez mapper le ConfigMap en tant que variables d'environnement et monter le secret en tant que volume comme ceci :

    Configuration du mode d'authentification

    Pour tous les modes d'authentification, vous devez définir WFGEN_APP_SETTING_ApplicationUrl etWFGEN_APP_SETTING_ApplicationSerialNumber afin d'éviter les comportements indésirables.

    Authentification d'application

    Pour laisser WorkflowGen gérer l'authentification et le stockage des mots de passe utilisateur, vous n'avez pas besoin de configurer quoi que ce soit de spécial dans le conteneur. Gardez à l'esprit que le nom d'utilisateur par défaut du compte administratif WorkflowGen est wfgen_admin.

    Authentification Windows et de base

    Pour que les modes d'authentification Windows ou de base fonctionnent, votre hôte doit se trouver dans une forêt Active Directory. La création d'un compte d'utilisateur sur l'hôte pour l'authentification de base ne fonctionnera pas, car le serveur Web IIS à l'intérieur du conteneur tentera de trouver un compte d'utilisateur enregistré dans le conteneur au lieu de l'hôte. Pour cette raison, vous avez besoin d'Active Directory.

    Pour configurer votre hôte Docker pour qu'il fonctionne avec Active Directory pour authentifier les utilisateurs, suivez le guide de de Microsoft dans sa documentation Conteneurs Windows.

    Kubernetes supporte les gMSA pour les pods et conteneurs Windows à partir de la version 1.18. Consultez l'article Kubernetes pour plus de détails sur la façon de le configurer. Gardez à l'esprit que tous les fournisseurs de cloud ne supportent pas les gMSA avec Kubernetes. Par exemple, Azure Kubernetes Service ne supporte pas cette fonctionnalité.

    Vous ne pouvez pas utiliser l'authentification de base avec Kubernetes.

    Azure v1 et Microsoft Identity Platform

    Pour ces fournisseurs, il n'y a pas de configuration spéciale à faire autre que la définition de la variable WFGEN_AUTH_MODE. Pour obtenir des instructions de configuration, consultez le guide .

    Active Directory Federation Services (AD FS), Auth0 et Okta

    Pour ces fournisseurs, il n'y a pas de configuration spéciale à faire autre que la définition de la variable WFGEN_AUTH_MODE. Pour obtenir des instructions de configuration, consultez le .

    Configuration de votre licence

    Pour configurer votre licence, vous devez définir une variable d'environnement spécifique avec votre licence et copier votre fichier de licence dans un volume exposé au conteneur WorkflowGen. Pour ce faire, vous devez d’abord créer un volume de licence ou disposer de votre licence sur un chemin spécifique.

    Créez un volume

    Cela créera un volume sur un chemin spécifique de votre système de fichiers (généralement C:\ProgramData\Docker\volumes\licenses\_data) géré par Docker. Vous pouvez obtenir le chemin du volume en exécutant la commande suivante :

    Ensuite, vous devez copier votre fichier de licence à cet emplacement :

    Maintenant, vous pouvez exécuter le conteneur WorkflowGen comme suit :

    Utilisez un chemin spécifique

    Ici, vous fournissez un chemin que vous contrôlez en tant que volume vers le conteneur. Il vous suffit de passer le chemin lorsque vous exécutez WorkflowGen :

    Mettre le site Web WorkflowGen hors ligne

    Vous pouvez mettre les applications Web dans le conteneur WorkflowGen hors ligne en exécutant un script intégré à l'image. Cela est utile pour garantir que le site est toujours disponible lorsque vous souhaitez effectuer des tâches de maintenance sur ses données sans que rien de nouveau ne soit écrit. Avec des conteneurs purs, vous pouvez exécuter la commande suivante :

    Avec Kubernetes, vous pouvez utiliser kubectl :

    Vous devez effectuer cette opération pour chaque conteneur WorkflowGen en cours d'exécution. L'approche recommandée consiste à réduire le nombre de conteneurs à un et à exécuter le script set-state.ps1 une fois.

    Si vous accédez à votre site Web WorkflowGen, vous verrez la page Web hors ligne par défaut. Vous pouvez personnaliser cette page Web en ajoutant votre propre fichier HTML dans le chemin <wfgen appdata>\Templates\server\offline.htm. Si ce fichier est présent, il sera pris à la place du fichier par défaut. Si vous disposez d'un volume pour les données de WorkflowGen, vous pouvez exécuter le script suivant:

    Vous pouvez remettre le site en ligne en exécutant la commande suivante :

    Utilisation d'un orchestrateur

    Kubernetes

    Kubernetes dispose également d’un outil intégré de gestion de la configuration appelé ConfigMaps. Consultez l'article de Kubernetes (disponible en anglais uniquement) pour plus d'informations. Vous devez utiliser cet objet pour configurer les variables d'environnement pour WorkflowGen.

    Vous pouvez également gérer des informations sensibles en les protégeant davantage dans l'orchestrateur dans une zone sécurisée. Consultez l'article de Kubernetes (disponible en anglais uniquement) pour plus d'informations et des instructions sur son utilisation. Vous devez utiliser cet objet pour protéger des informations sensibles telles que la clé de licence WorkflowGen, les noms d'utilisateur, les mots de passe, les clés cryptographiques, les clés API, etc.

    Utilisation de vos propres fichiers de configuration

    Pour utiliser vos propres fichiers de configuration, vous devez créer votre propre image WorkflowGen à l'aide de la variante d'image WorkflowGen onbuild. Consultez la page dans la section Image WorkflowGen pour plus d'informations.

    Utilisation d'un gestionnaire de configuration externe

    Certains gestionnaires de configuration courants supportent les conteneurs Docker prêts à l'emploi. Voici quelques liens vers leur documentation spécifique (disponible en anglais uniquement) pour vous aider à démarrer :

    Chef

    Ansible

    Puppet

    Nom du fichier (y compris l'extension) de la licence requis dans le volume C:\licences

    Si aucun nom n'est spécifié, le premier fichier trouvé est utilisé.

    WFGEN_START_SERVICE

    Indique ce que le conteneur doit exécuter

    Vous pouvez exécuter l'application Web WorkflowGen ou les services Windows, ou les deux. Dans un cluster, vous souhaiterez probablement avoir plusieurs conteneurs en mode d'application Web et un seul conteneur en mode Windows Services. Vous pouvez également en diviser davantage en exécutant plusieurs conteneurs en mode application Web, un conteneur en mode moteur et un conteneur en mode de synchronisation d'annuaire.

    Valeurs possibles :

    • all (par défaut)

    WFGEN_MACHINE_KEY_VALIDATION_KEY

    Représente la propriété validationKey de l'élément machineKey dans le fichier web.config

    Par défaut, IIS en génère une lorsqu'elle n'y est pas. Il est recommandé d'utiliser cette variable d'environnement pour partager la clé d'ordinateur entre les instances de ce conteneur (par exemple, dans une batterie de serveurs Web). Consultez les articles Microsoft et pour plus de détails.

    WFGEN_MACHINE_KEY_DECRYPTION_KEY

    Représente la propriété decryptionKey de l'élément machineKey dans le fichier web.config

    Par défaut, IIS en génère une lorsqu'elle n'y est pas. Il est recommandé d'utiliser cette variable d'environnement pour partager la clé d'ordinateur entre les instances de ce conteneur (par exemple, dans une batterie de serveurs Web). Consultez les articles Microsoft et pour plus de détails.

    WFGEN_MACHINE_KEY_VALIDATION_ALG

    Représente la propriété de validation de l'élément machineKey dans le fichier web.config

    Le nom de l'algorithme utilisé pour générer la clé de validation. Par défaut : HMACSHA256

    WFGEN_MACHINE_KEY_DECRYPTION_ALG

    Représente la propriété de déchiffrement de l'élément machineKey dans le fichier web.config

    Le nom de l'algorithme utilisé pour générer la clé de déchiffrement. Par défaut : AES

    WFGEN_DEPENDENCY_CHECK_INTERVAL

    Temps entre les tentatives de vérification de dépendance en millisecondes Par défaut : 1000 (1 seconde)

    WFGEN_DEPENDENCY_CHECK_RETRIES

    Nombre de tentatives à effectuer pour chaque vérification de dépendance Par défaut : 10

    WFGEN_DEPENDENCY_CHECK_ENABLED

    Indique si la vérification de dépendance doit être effectué ou non

    Valeurs possibles : Y (par défaut), N

    WFGEN_GRAPHQL_CORS_ENABLED

    Active les en-têtes CORS pour l'API GraphQL Valeurs possibles : Y (par défaut), N

    WFGEN_GRAPHQL_CORS_ALLOWED_ORIGINS

    Liste des origines séparées par des virgules à partir desquelles CORS autorisera les demandes

    Par défaut : *

    web.config
    de l'application Node.js spécifique.

    NODE (composants Node.js)

    Variable

    Description et valeurs

    WFGEN_ADMIN_USERNAME

    Le nom d'utilisateur pour le compte administrateur WorkflowGen

    Changer cette valeur est utile lorsque vous configurez cette image avec un fournisseur OpenID. Vous pouvez le définir sur un nom d'utilisateur existant sur le fournisseur auquel vous avez accès. Ensuite, lorsque vous accédez à WorkflowGen, vous pouvez vous authentifier auprès de celui-ci et il vous connectera en tant qu'administrateur.

    Par exemple, si vous avez un nom d'utilisateur sur votre fournisseur nommé [email protected], vous pouvez définir cette variable d'environnement sur ce nom d'utilisateur et vous en authentifier dans le conteneur pour disposer d'un accès administrateur à WorkflowGen. ✏️ Note : Si vous modifiez cette valeur, veillez également à mettre à jour la base de données.

    Valeur par défaut : wfgen_admin

    WFGEN_DATABASE_CONNECTION_STRING

    Variable requise

    La chaîne de connexion de la source de base de données principale

    Cette variable d'environnement doit être présente ou le conteneur générera une erreur et se fermera.

    WFGEN_DATABASE_READONLY_ CONNECTION_STRING

    La chaîne de connexion de la source de base de données en lecture seule pour une configuration de base de données avec des réplicas

    WFGEN_AUTH_MODE

    Cette variable indique quelle méthode d'authentification doit être utilisée par WorkflowGen

    Valeurs possibles :

    • adfs

    • application (par défaut)

    • auth0

    • azure-v1

    • basic

    • ms-identity-v2

    • okta

    • windows

    WFGEN_GEN_APP_SYM_ENCRYPT_KEY

    Indique si ApplicationSecurityPasswordSymmetricEncryptionKey doit être généré ou non si aucune valeur n'est fournie.

    Si Y, ApplicationSecurityPasswordSymmetricEncryptionKey est régénéré lorsque le conteneur redémarre. Il n'est pas compatible pour une utilisation en production car les secrets seront cryptés avec des clés différentes. Par conséquent, utilisez Y uniquement pour développer ou tester un scénario à conteneur unique.

    Valeurs possibles : Y (par défaut), N

    Nom de la valeur

    Description

    exposelogs

    Expose les journaux de l'application via http. Ils seront ensuite disponibles sur https://example.com/wfgen/auth/iisnode si l'application Node.js choisie est AUTH.

    ✏️ Note : Cette option est uniquement à des fins de débogage. Il n'est pas recommandé de l'utiliser en production.

    Nom

    Description

    LEVEL

    Contrôle la quantité d'informations tracées et donc écrites dans les fichiers

    Valeurs possibles :

    • ActivityTracing

    • All

    • Critical

    • Error

    • Information

    • Off (par défaut)

    • Verbose

    • Warning

    Pour plus d'informations sur les niveaux de traçage .NET, consultez l'article Microsoft .

    INDENT

    Contrôle l'indentation dans les logs de trace

    Valeur par défaut : 4 (maximum : 8)

    Paramètres de configuration Web et d'application
    Guide technique de WorkflowGen
    https://kubernetes.io/docs/concepts/configuration/secret/
    compte de service géré de groupe
    Configure GMSA for Windows Pods and containers
    WorkflowGen pour Azure
    Guide technique de WorkflowGen
    Configure a Pod to Use a ConfigMap
    Secrets
    Image personnalisée
    Docker Cookbook
    Chef and Kubernetes
    Ansible – Getting started with Docker
    Manage Kubernetes (K8s) objects
    How to run Puppet in Docker
    How to Install and Configure Kubernetes with the Puppet Kubernetes Module

    WFGEN_LICENSE_FILE_NAME

    docker container run `
        # ...
        --env 'WFGEN_APP_SETTING_ApplicationUrl=https://macompagnie.fr/wfgen' `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    docker container run `
        # ...
        --env WFGEN_IISNODE_AUTH_loggingEnabled=true `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    WFGEN_TRACE_WEB_APPS_LEVEL=Information
    WFGEN_TRACE_WEB_APPS_INDENT=2
    WFGEN_TRACE_ENGINE_LEVEL=Error
    WFGEN_TRACE_ENGINE_INDENT=0
    docker container run `
        # ...
        --env WFGEN_DATABASE_CONNECTION_STRING=SomeConnectionString `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    docker container run `
        # ...
        --env WFGEN_DATABASE_CONNECTION_STRING=SomeConnectionString `
        --env WFGEN_DATABASE_READONLY_CONNECTION_STRING=SomeReadOnlyConnectionString `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    docker container run `
        # ...
        --env WFGEN_DATABASE_CONNECTION_STRING=SomeConnectionString `
        --env WFGEN_DATABASE_READONLY_CONNECTION_STRING=SomeReadOnlyConnectionString `
        --env WFGEN_CUSTOM_CONNECTION_STRING_MyDataSource=MyConnectionString `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    # Create the secret for the license serial number
    "WFG-SOME-LICENSE-KEY" | docker secret create ApplicationSerialNumber -
    
    # Create the container service in Docker Swarm
    docker service create `
        # ...
        --env WFGEN_APP_SETTING_ApplicationSerialNumber_FILE=C:\ProgramData\Docker\secrets\ApplicationSerialNumber `
        --secret ApplicationSerialNumber `
        # ...
        advantys/workflowgen:7.18.3-win-ltsc2019
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: wfgen-config
    data:
      WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
    ---
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
      name: wfgen-secret
    data:
      # "V0ZHLVNPTUUtTElDRU5TRS1LRVkK" is the base64-encoded value of "WFG-SOME-LICENSE-KEY"
      ApplicationSerialNumber: 'V0ZHLVNPTUUtTElDRU5TRS1LRVkK'
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wfgen
    spec:
      selector:
        matchLabels:
          # ...
      template:
        metadata:
          labels:
            # ...
        spec:
          containers:
            - name: wfgen
              image: advantys/workflowgen:7.18.3-win-ltsc2019
              # ...
              envFrom: # ConfigMap as environment variables
                - configMapRef:
                    name: wfgen-config
              env:
                - name: WFGEN_START_SERVICE
                  value: webapps
              # ...
              volumeMounts:
                # ...
                - mountPath: C:\secrets # Mount Secret as a volume
                  readOnly: true
                  name: secrets
          volumes:
            # ...
            - name: secrets # Mount Secret as a volume
                secret:
                  secretName: wfgen-sec
    docker volume create licenses
    docker volume inspect -f "{{.Mountpoint}}" licenses
    Copy-Item C:\Path\To\WorkflowGen.lic $(docker volume inspect -f "{{.Mountpoint}}" licenses)
    docker container run `
        # ...
        --env WFGEN_APP_SETTING_ApplicationSerialNumber=YOUR-WFG-LIC-NUM `
        --mount "type=volume,src=licenses,dst=C:\wfgen\licenses,readonly" `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    docker container run `
        # ...
        --env WFGEN_APP_SETTING_ApplicationSerialNumber=YOUR-WFG-LIC-NUM `
        --mount "type=bind,src=C:\Path\To\Your\Licenses,dst=C:\wfgen\licenses,readonly" `
        # ...
        advantys/workflowgen:7.16.0-win-ltsc2019
    docker container exec -i wfgen powershell C:\set-state.ps1 Offline
    kubectl exec -i wfgen-pod -- powershell C:\set-state.ps1 Offline
    $offlinePath = ".\offline.htm"
    $serverTemplatePath = [io.path]::Combine(
        $(docker volume inspect --format "{{ .Mountpoint }}" wfgdata),
        "appdata" , "Templates", "server"
    )
    
    if (-not (Test-Path $serverTemplatePath)) {
        New-Item $serverTemplatePath -ItemType Directory -Force
    }
    
    Copy-Item $offlinePath $serverTemplatePath
    
    docker container exec -i wfgen powershell C:\set-state.ps1 Online
    kubectl exec -i wfgen-pod -- powershell C:\set-state.ps1 Online

    dir_sync

  • engine

  • web_apps

  • win_services

  • SourceLevels Énumération
    Résolution des erreurs de code d'authentification de message de l'état d'affichage
    MachineKeySection Class
    Résolution des erreurs de code d'authentification de message de l'état d'affichage
    MachineKeySection Class
    k8s – Manage Kubernetes (K8s) objects
    How to Install and Configure Kubernetes with the Puppet Kubernetes Module

    Démarrer

    Aperçu

    Cette section présente comment exécuter rapidement le conteneur WorkflowGen avec une architecture minimale sur Kubernetes.

    Kubernetes avec AKS

    Cet exemple est conçu pour Azure Kubernetes Service (AKS). Pour commencer avec AKS, consultez l'article Microsoft .

    Aperçu de l'architecture

    À la fin de cette section, vous aurez cette configuration de cluster :

    Chaque conteneur du cluster aura accès à la configuration et aux secrets à l'intérieur de leurs espaces de noms. Plusieurs services Azure seront déployés par Azure Kubernetes Service. Cela ne nécessite aucune étape manuelle autre que l'interaction avec Kubernetes lui-même. L'équilibreur de charge que le service créera répartira les demandes entre les répliques de serveur WorkflowGen.

    Prérequis

    • Vous devez avoir un cluster Kubernetes fonctionnel avec des nœuds Windows Server 2019. Voir la vue des ressources Azure ci-dessus pour une configuration AKS de base. Consultez l'article Microsoft pour commencer à créer un cluster AKS avec le support des nœuds Windows.

    • Vous devez avoir installé l'outil de ligne de commande kubectl et il doit être connecté au cluster. Consultez la section de l'article Microsoft pour obtenir des instructions sur la connexion de kubectl à AKS.

    Notez également que vous ne devez pas créer d'autres ressources dans Azure en dehors du cluster et ses nœuds. Toutes les ressources requises pour les conteneurs seront créées automatiquement par Kubernetes. AKS est une plateforme entièrement gérée.

    Ajoutez un PersistentVolumeClaim pour le stockage partagé

    Maintenant, vous devez ajouter une revendication qui représente le volume de données WorkflowGen qui sera utilisé par votre déploiement. Pour ce faire, appliquez le YAML suivant à votre cluster :

    Ensuite, appliquez-le au cluster à l'aide de la commande suivante :

    Ajoutez votre fichier de licence WorkflowGen au cluster

    Kubernetes vous permet de gérer les et les sous forme de fichiers à l'intérieur du cluster et de les injecter dans des pods. Dans ce cas, vous ajouterez votre fichier de licence en tant que secret et l'injecterez plus tard au module WorkflowGen. Pour ajouter votre licence au cluster, exécutez la commande suivante :

    Ajoutez des ConfigMap pour les services

    Comme mentionné précédemment, il existe un mécanisme dans Kubernetes qui vous permet de gérer les configurations de vos conteneurs. Ici, vous allez en créer un pour WorkflowGen et un autre pour la base de données :

    La valeur WFGEN_APP_SETTING_ApplicationUrl sera remplacée par l'adresse IP de l'équilibreur de charge après la création des services WorkflowGen. Par conséquent, peu importe pour l'instant ce qui y est mis car il sera modifié plus tard dans cet exemple.

    N'oubliez pas d'appliquer cette configuration :

    Ajoutez des secrets pour les services

    Kubernetes gère également des secrets pour vous. Ils sont stockés en toute sécurité et ne sont remis aux conteneurs que sous forme de fichiers.

    Vous avez besoin d'une clé de cryptage pour mettre comme secret :

    Avant de créer les secrets, vous devez les encoder en base64 :

    Remplacez <YOUR_WFG_LIC_KEY> par votre clé de licence WorkflowGen et remplacez <YOUR_NEW_GUID> par le GUID que vous avez généré.

    Ces valeurs encodées iront dans la déclaration des secrets. Pour créer les secrets requis pour les services, appliquez le code YAML suivant :

    Remplacez YOUR_WFG_LIC_KEY_BASE64> par la valeur générée à l'étape précédente pour la clé de licence WorkflowGen et remplacez <YOUR_NEW_GUID_BASE64> par la valeur générée à l'étape précédente pour le nouveau GUID.

    N'oubliez pas d'appliquer ceci :

    Déployez les conteneurs

    Vous êtes maintenant prêt à déployer les services. Vous allez créer deux objets et un objet . Le déploiement créera des ReplicaSet pour tous les services avec différentes configurations. Ces déploiements peuvent ensuite être configurés pour évoluer automatiquement avec l'utilisation des pods. Le ReplicaSet fournira les services nécessaires au conteneur de base de données afin de fonctionner correctement et d'éviter les pertes de données. N'oubliez pas qu'il ne doit y avoir qu'une seule instance de chaque service Windows WorkflowGen en cours d'exécution à tout moment. Ce est appelé Singleton.

    Base de données

    Cette configuration déploiera la base de données StatefulSet avec un service en mode sans affichage (« »). Cet objet créera également une revendication de volume persistante basée sur le modèle fourni dans la déclaration.

    Appliquez d'abord la base de données :

    Applications Web WorkflowGen

    Appliquez ce contrôleur de réplication :

    Déploiement des services Windows

    Appliquez les services Windows :

    Ajoutez un équilibreur de charge

    Maintenant, vous devez ajouter un équilibreur de charge public pour envoyer des demandes à vos pods. Pour ce faire, exécutez la commande suivante :

    Vous devez maintenant attendre que l'IP soit approvisionné. Exécutez périodiquement la commande suivante jusqu'à obtenir l'adresse IP publique de l'équilibreur de charge :

    Une fois que la valeur de EXTERNAL-IP est provisionnée, copiez-la et modifiez la configuration de WorkflowGen pour modifier la valeur WFGEN_APP_SETTING_ApplicationUrl :

    Remplacez <EXTERNAL_IP> par la valeur de EXTERNAL-IP que vous avez.

    Appliquez-le :

    Ensuite, redémarrez tous les pods du déploiement WorkflowGen pour leur appliquer les modifications. Vous devez également le faire pour les services Windows. Pour ce faire, exécutez les commandes suivantes :

    Vous devriez maintenant avoir un WorkflowGen fonctionnel avec un équilibreur de charge et une base de données.

    Kubernetes avec AKS utilisant Helm

    Helm est un outil de type gestionnaire de packages pour Kubernetes. Il gère le partage, le déploiement, les mises à jour et les restaurations des logiciels développés pour Kubernetes. En fonction des valeurs fournies, Helm génère des fichiers de définition pour le cluster avec le moteur de modèle à partir du langage de programmation Go. Pour chaque version, WorkflowGen produit désormais une carte que vous pouvez utiliser avec votre cluster. Pour obtenir les dernières corrections de bogues et fonctionnalités de la carte, assurez-vous de toujours choisir la carte publiée avec la dernière mise à jour de WorkflowGen.

    Aperçu de l'architecture

    À la fin de cette section, vous aurez cette configuration de cluster :

    Chaque conteneur du cluster aura accès à la configuration et aux secrets à l'intérieur de leurs espaces de noms. Plusieurs services Azure seront déployés par Azure Kubernetes Service. Cela ne nécessite aucune étape manuelle autre que l'interaction avec Kubernetes lui-même. L'équilibreur de charge que le service créera répartira les demandes entre les répliques de serveur WorkflowGen.

    Prérequis

    • Vous devez avoir un cluster Kubernetes fonctionnel avec des nœuds Windows Server 2019. Voir la vue des ressources Azure ci-dessus pour une configuration AKS de base. Consultez l'article Microsoft pour commencer à créer un cluster AKS avec le support des nœuds Windows.

    • Vous devez avoir installé l'outil de ligne de commande kubectl et il doit être connecté au cluster. Consultez la section de l'article Microsoft pour obtenir des instructions sur la connexion de kubectl à AKS.

    • Vous devez avoir installé l'outil de ligne de commande Helm. Consultez la section (disponible en anglais uniquement) sur le site Web de Helm pour savoir comment l'installer. Seules les versions Helm 3.0 et ultérieures sont supportées.

    Notez également que vous ne devez pas créer d'autres ressources dans Azure en dehors du cluster et ses nœuds. Toutes les ressources requises pour les conteneurs seront créées automatiquement par Kubernetes. AKS est une plateforme entièrement gérée.

    Créez la clé de chiffrement symétrique

    Cette valeur doit être générée par vous. Un GUID simple suffira car il a une entropie suffisante pour ne pas être deviné :

    Ajoutez votre fichier de licence WorkflowGen au cluster

    Kubernetes vous permet de gérer les et les sous forme de fichiers à l'intérieur du cluster et de les injecter dans des pods. Dans ce cas, vous ajouterez votre fichier de licence en tant que secret et l'injecterez plus tard au module WorkflowGen. Pour ajouter votre licence au cluster, exécutez la commande suivante :

    Créez un fichier avec vos valeurs pour la carte

    Afin de générer les modèles adaptés à vos attentes de configuration, vous devez fournir certaines valeurs à la commande helm lorsque vous installez ou mettez à jour une version. Vous pouvez spécifier ces valeurs à l'aide de l'interface de ligne de commande ou avec un fichier. Dans le cas d'une nouvelle installation, ce sera plus facile avec un fichier. Voici les valeurs dont vous aurez besoin :

    Remplacez <YOUR_WFG_LIC_KEY> par votre clé de licence WorkflowGen et remplacez <YOUR_NEW_GUID> par le GUID que vous avez généré.

    Vous pouvez enregistrer ce fichier sous values.yaml. Le nom n'est pas important.

    Installez la carte WorkflowGen

    Vous devez maintenant installer la carte avec ces valeurs. Pour ce faire, exécutez la commande suivante :

    Helm va générer des fichiers de déploiement Kubernetes pour vous et les installer sur le cluster.

    Mettez à jour l'URL de l'application

    Cette configuration créera un équilibreur de charge devant les conteneurs WorkflowGen. Vous devrez l'attendre pour obtenir une adresse IP publique. Exécutez périodiquement la commande suivante jusqu'à obtenir l'adresse IP publique de l'équilibreur de charge :

    Une fois la valeur de EXTERNAL-IP approvisionnée, copiez-la et modifiez la configuration de WorkflowGen pour modifier la valeur WFGEN_APP_SETTING_ApplicationUrl. Pour ce faire, vous devez d'abord obtenir le nom du ConfigMap associé au déploiement de WorkflowGen. La commande suivante vous donnera tous les objets ConfigMap dans l'espace de noms par défaut :

    Copiez le nom de WorkflowGen ConfigMap et remplacez <WFG_CONFIG_MAP> par la valeur dans la commande suivante :

    Cela fera apparaître un éditeur afin que vous puissiez remplacer la valeur WFGEN_APP_SETTING_ApplicationUrl par l'adresse IP correcte du service d'équilibrage de charge. Enregistrez le fichier et quittez l'éditeur. Pour appliquer les modifications apportées à l'objet ConfigMap, redémarrez tous les pods du déploiement WorkflowGen. Vous devez également le faire pour les services Windows. Obtenez le nom des déploiements avec la commande suivante :

    Remplacez <WEB_APPS_DEPLOYMENT_NAME> et <WIN_SERVICES_DEPLOYMENT_NAME> dans le script suivant par les noms de déploiement corrects pour redémarrer tous les conteneurs :

    Vous devriez maintenant avoir un WorkflowGen fonctionnel avec un équilibreur de charge et une base de données.

    Créer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure CLI
    Déployer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure CLI
    Se connecter au cluster
    Déployer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure CLI
    secrets
    configurations
    Deployment
    ReplicaSet
    modèle de conteneur
    headless service
    Déployer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure CLI
    Se connecter au cluster
    Déployer un conteneur Windows Server sur un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure CLI
    Installing Helm
    secrets
    configurations
    Vue des ressources Azure
    Vue des objets Kubernetes
    Vue des ressources Azure
    Vue des objets Kubernetes
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: wfgdata-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile
      resources:
        requests:
          storage: 50Gi
    kubectl apply -c .\wfgdata-pvc.yml
    kubectl create secret generic wfgen-license-secret --from-file C:\Path\To\WorkflowGen.lic
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: wfgen-config
    data:
      WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
      WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
      WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
      WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
      WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
      WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: database-config
    data:
      ACCEPT_EULA: 'Y'
      SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
      WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
      WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
      WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
    kubectl apply -f .\config.yml
    [guid]::NewGuid().ToString('N')
    # fda7a6a81db2428b8885bd1210522755
    using namespace System.Text
    
    function ConvertTo-Base64String {
        [CmdletBinding()]
        [OutputType([string])]
        param (
            [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
            [ValidateNotNullOrEmpty()]
            [string]$Value
        )
    
        process {
            return [Convert]::ToBase64String([Encoding]::UTF8.GetBytes($Value))
        }
    }
    
    # Database containers
    "strong(!)Pass" | ConvertTo-Base64String # c3Ryb25nKCEpUGFzcw==
    "WFGEN_USER" | ConvertTo-Base64String # V0ZHRU5fVVNFUg==
    
    # WorkflowGen containers
    "<YOUR_WFG_LIC_KEY>" | ConvertTo-Base64String # PFlPVVJfV0ZHX0xJQ19LRVk+
    "<YOU_NEW_GUID>" | ConvertTo-Base64String # PFlPVV9ORVdfR1VJRD4=
    "Server=database-0.database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;" `
        | ConvertTo-Base64String # V0ZHRU5fREFUQUJBU0VfQ09OTkVDVElPTl9TVFJJTkc9RGF0YSBTb3VyY2U9ZGF0YWJhc2UsMTQzMztOZXR3b3JrIExpYnJhcnk9REJNU1NPQ047SW5pdGlhbCBDYXRhbG9nPVdGR0VOO1VzZXIgSUQ9V0ZHRU5fVVNFUjtQYXNzd29yZD1zdHJvbmcoISlQYXNzOw==
    "39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85" | ConvertTo-Base64String # MzlCM0FFOUNDQ0Y5NEFBNDdENzk1RUM4NEY3Q0NCNzkyOEY1RDU5QkUyRUIyQkJBNEZFMkFDMEIzQzhEMEM4NQ==
    "82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9" `
        | ConvertTo-Base64String # ODJGNjI0N0E1REJGODY2NkZCNjBCOEVGRTY0ODMzNjA0MzZGMEVDNDI2Q0MwMzUxQTk1NjlDNjA3QjQ2QzFGQUQ2NDk3NDA2REQ4QjBCNTE5REQ4M0NBQTY3NjQ5MDRDODk5OTlENzQyNjM4RUNFNzU2RTdDMEI4Nzk5QjQ1RTk=
    apiVersion: v1
    kind: Secret
    metadata:
      name: database-sec
    type: Opaque
    data:
      SA_PASSWORD: c3Ryb25nKCEpUGFzcw==
      WFGEN_DATABASE_USER_PASSWORD: c3Ryb25nKCEpUGFzcw==
      WFGEN_ADMIN_PASSWORD: c3Ryb25nKCEpUGFzcw==
      WFGEN_DATABASE_USER_USERNAME: V0ZHRU5fVVNFUg==
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: wfgen-sec
    type: Opaque
    data:
      ApplicationSerialNumber: <YOUR_WFG_LIC_KEY_BASE64>
      ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID_BASE64>
      WFGEN_DATABASE_CONNECTION_STRING: V0ZHRU5fREFUQUJBU0VfQ09OTkVDVElPTl9TVFJJTkc9RGF0YSBTb3VyY2U9ZGF0YWJhc2UsMTQzMztOZXR3b3JrIExpYnJhcnk9REJNU1NPQ047SW5pdGlhbCBDYXRhbG9nPVdGR0VOO1VzZXIgSUQ9V0ZHRU5fVVNFUjtQYXNzd29yZD1zdHJvbmcoISlQYXNzOw==
      WFGEN_MACHINE_KEY_DECRYPTION_KEY: MzlCM0FFOUNDQ0Y5NEFBNDdENzk1RUM4NEY3Q0NCNzkyOEY1RDU5QkUyRUIyQkJBNEZFMkFDMEIzQzhEMEM4NQ==
      WFGEN_MACHINE_KEY_VALIDATION_KEY: ODJGNjI0N0E1REJGODY2NkZCNjBCOEVGRTY0ODMzNjA0MzZGMEVDNDI2Q0MwMzUxQTk1NjlDNjA3QjQ2QzFGQUQ2NDk3NDA2REQ4QjBCNTE5REQ4M0NBQTY3NjQ5MDRDODk5OTlENzQyNjM4RUNFNzU2RTdDMEI4Nzk5QjQ1RTk=
    kubectl apply -f secrets.yml
    apiVersion: v1
    kind: Service
    metadata:
      name: database
    spec:
      type: ClusterIP
      clusterIP: None
      ports:
        - port: 1433
          targetPort: mssql
          protocol: TCP
          name: mssql
      selector:
        app.kubernetes.io/name: workflowgen
        app.kubernetes.io/component: database
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: database
    spec:
      replicas: 1
      serviceName: database
      selector:
        matchLabels:
          app.kubernetes.io/name: workflowgen
          app.kubernetes.io/component: database
      template:
        metadata:
          labels:
            app.kubernetes.io/name: workflowgen
            app.kubernetes.io/component: database
        spec:
          terminationGracePeriodSeconds: 10
          nodeSelector:
            kubernetes.io/os: linux
          containers:
            - name: database
              image: advantys/workflowgen-sql:7.18.3-ubuntu-18.04
              imagePullPolicy: Always
              securityContext:
                runAsUser: 0
                runAsGroup: 0
              resources:
                requests:
                  memory: "1Gi"
                  cpu: "500m"
                limits:
                  memory: "2Gi"
                  cpu: "1"
              envFrom:
                - configMapRef:
                    name: database-config
              ports:
                - name: mssql
                  containerPort: 1433
              livenessProbe:
                initialDelaySeconds: 30
                timeoutSeconds: 5
                exec:
                  command:
                    - pwsh
                    - -NoLogo
                    - -NoProfiles
                    - /usr/local/bin/healthcheck.ps1
              readinessProbe:
                initialDelaySeconds: 20
                timeoutSeconds: 5
                exec:
                  command:
                    - pwsh
                    - -NoLogo
                    - -NoProfiles
                    - /usr/local/bin/healthcheck.ps1
              volumeMounts:
                - mountPath: /var/opt/mssql
                  name: sqldata
                - mountPath: /mnt/secrets
                  readOnly: true
                  name: secrets
          volumes:
            - name: secrets
                secret:
                  secretName: database-sec
      volumeClaimTemplates:
        - metadata:
            name: sqldata
          spec:
            accessModes:
              - ReadWriteOnce
            storageClassName: default
            resources:
              requests:
                storage: 100Gi
    kubectl apply -f database.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wfgen-webapps
    spec:
      replicas: 3
      strategy:
        type: Recreate
      selector:
        matchLabels:
          app.kubernetes.io/name: workflowgen
          app.kubernetes.io/component: webapps
      template:
        metadata:
          labels:
            app.kubernetes.io/name: workflowgen
            app.kubernetes.io/component: webapps
        spec:
          nodeSelector:
            kubernetes.io/os: windows
          containers:
            - name: wfgen
              image: advantys/workflowgen:7.18.3-win-ltsc2019
              imagePullPolicy: Always
              resources:
                requests:
                  memory: "2Gi"
                  cpu: "1"
                limits:
                  memory: "2Gi"
                  cpu: "1"
              ports:
                - name: http
                  containerPort: 80
                  protocol: TCP
              envFrom:
                - configMapRef:
                    name: wfgen-config
              env:
                - name: WFGEN_START_SERVICE
                  value: webapps
              livenessProbe:
                periodSeconds: 30
                timeoutSeconds: 5
                initialDelaySeconds: 60
                exec:
                  command:
                    - powershell
                    - C:\healthcheck.ps1
              livenessProbe:
                timeoutSeconds: 5
                initialDelaySeconds: 60
                exec:
                  command:
                    - powershell
                    - -Command
                    - if (Test-Path "C:\iislog\W3SVC\*log") { return 0 } else { return 1 }
              volumeMounts:
                - mountPath: C:\wfgen\data
                  name: wfgdata
                - mountPath: C:\wfgen\licenses
                  readOnly: true
                  name: licenses
                - mountPath: C:\secrets
                  readOnly: true
                  name: secrets
          volumes:
            - name: wfgdata
              persistentVolumeClaim:
                claimName: wfgdata-pvc
            - name: licenses
              secret:
                secretName: wfgen-license-secret
                items:
                  # The following must match the name of the license item in 
                  # the license secret, e.g. the name of the license file
                  - key: WorkflowGen.lic
                    path: WorkflowGen.lic
            - name: secrets
                secret:
                  secretName: wfgen-sec
    kubectl apply -f wfgen-webapps.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: wfgen-winservices
    spec:
      replicas: 1 # Singleton pattern
      strategy:
        type: Recreate
      selector:
        matchLabels:
          app.kubernetes.io/name: workflowgen
          app.kubernetes.io/component: winservices
      template:
        metadata:
          labels:
            app.kubernetes.io/name: workflowgen
            app.kubernetes.io/component: winservices
        spec:
          nodeSelector:
            kubernetes.io/os: windows
          containers:
            - name: wfgen-dir-sync
              image: advantys/workflowgen:7.18.3-win-ltsc2019
              resources:
                requests:
                  memory: "1Gi"
                  cpu: "500m"
                limits:
                  memory: "1Gi"
                  cpu: "750m"
              envFrom:
                - configMapRef:
                    name: wfgen-config
              env:
                - name: WFGEN_START_SERVICE
                  value: dir_sync
              livenessProbe:
                periodSeconds: 30
                timeoutSeconds: 5
                initialDelaySeconds: 60
                exec:
                  command:
                    - powershell
                    - C:\healthcheck.ps1
              volumeMounts:
                - mountPath: C:\wfgen\data
                  name: wfgdata
                - mountPath: C:\wfgen\licenses
                  readOnly: true
                  name: licenses
                - mountPath: C:\secrets
                  readOnly: true
                  name: secrets
            - name: wfgen-engine
              image: advantys/workflowgen:7.18.3-win-ltsc2019
              resources:
                requests:
                  memory: "1Gi"
                  cpu: "500m"
                limits:
                  memory: "1Gi"
                  cpu: "750m"
              envFrom:
                - configMapRef:
                    name: wfgen-config
              env:
                - name: WFGEN_START_SERVICE
                  value: engine
              livenessProbe:
                periodSeconds: 30
                timeoutSeconds: 5
                initialDelaySeconds: 60
                exec:
                  command:
                    - powershell
                    - C:\healthcheck.ps1
              volumeMounts:
                - mountPath: C:\wfgen\data
                  name: wfgdata
                - mountPath: C:\wfgen\licenses
                  readOnly: true
                  name: licenses
                - mountPath: C:\secrets
                  readOnly: true
                  name: secrets
          volumes:
            - name: wfgdata
              persistentVolumeClaim:
                claimName: wfgdata-pvc
            - name: licenses
              secret:
                secretName: fgen-license-secret
                items:
                  # The following must match the name of the license item in 
                  # the license secret, e.g. the name of the license file
                  - key: WorkflowGen.lic
                    path: WorkflowGen.lic
            - name: secrets
                secret:
                  secretName: wfgen-sec
    kubectl apply -f wfgen-win-services.yml
    kubectl expose deployment wfgen-webapps --type=LoadBalancer --name=wfgen-service
    kubectl get services wfgen-service
    # wfgen-config.yml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: wfgen-config
    data:
      WFGEN_APP_SETTING_ApplicationUrl: 'http://<EXTERNAL_IP>/wfgen'
      WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
      WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
      WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
      WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
      WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
    kubectl apply -f wfgen-config.yml
    kubctl scale deployment wfgen-webapps --replicas 0 -n wfgen-service
    kubctl scale deployment wfgen-winservices --replicas 0 -n wfgen-service
    
    # Wait until the scaling is done and then scale up
    kubctl scale deployment wfgen-webapps --replicas 3 -n wfgen-service
    kubctl scale deployment wfgen-winservices --replicas 1 -n wfgen-service
    [guid]::NewGuid().ToString('N')
    # fda7a6a81db2428b8885bd1210522755
    kubectl create secret generic wfgen-license-secret --from-file C:\Path\To\WorkflowGen.lic
    replicaCount: 3
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
      config:
        WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
        WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
        WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
      secret:
        ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
        ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
        WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
        WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
      license:
        secretName: wfgen-license-secret
        items:
          - key: WorkflowGen.lic
            path: WorkflowGen.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
    
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    
    database:
      fullnameOverride: wfgen-database
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        runAsUser: 0
        runAsGroup: 0
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '500m'
          memory: 1Gi
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    
    ingress:
      enabled: false
    
    helm install -f .\values.yaml wfg https://github.com/advantys/workflowgen-releases/releases/download/7.18.3/workflowgen-0.0.3.tgz
    kubectl get services wfgen-service
    kubectl get configmap
    kubectl edit configmap "<WFGEN_CONFIG_MAP>"
    kubectl get deployment
    kubctl scale deployment "<WEB_APPS_DEPLOYMENT_NAME>" --replicas 0 -n wfgen-service
    kubctl scale deployment "<WIN_SERVICES_DEPLOYMENT NAME>" --replicas 0 -n wfgen-service
    
    # Wait until the scaling is done and then scale up
    kubctl scale deployment "<WEB_APPS_DEPLOYMENT_NAME>" --replicas 3 -n wfgen-service
    kubctl scale deployment "<WIN_SERVICES_DEPLOYMENT NAME>" --replicas 1 -n wfgen-service

    Carte Helm WorkflowGen

    Aperçu

    Cette section présente la carte Helm WorkflowGen, y compris l'utilisation, les options de configuration et des exemples. L'utilisation de la carte WorkflowGen simplifie le déploiement de WorkflowGen dans un cluster Kubernetes en n'ayant pas à gérer de nombreux fichiers de déploiement Kubernetes. Vous n'avez qu'à gérer un seul fichier « values ».

    Prérequis

    • Vous devez avoir un cluster Kubernetes fonctionnel avec des nœuds Windows Server 2019.

    • Vous devez avoir installé l'outil de ligne de commande kubectl et il doit être connecté au cluster.

    • Vous devez avoir installé l'outil de ligne de commande Helm. Consultez la section (disponible en anglais uniquement) sur le site Web de Helm pour savoir comment l'installer. Seules les versions Helm 3.0 et ultérieures sont supportées.

    Introduction aux cartes Helm

    Citation du :

    A chart is a collection of files that describe a related set of Kubernetes resources.

    (Une carte est une collection de fichiers qui décrivent un ensemble connexe de ressources Kubernetes.)

    Ces ressources sont écrites en YAML dans la carte à l'aide du langage de modèles Go. Cela permet au graphique de générer des fichiers de définition de ressources Kubernetes valides en fonction des valeurs fournies par l'utilisateur du graphique. Par conséquent, lorsque vous utilisez la carte pour installer ou mettre à jour WorkflowGen, vous pouvez fournir certaines valeurs qui vous aideront à déployer les ressources appropriées pour WorkflowGen.

    Une carte a un fichier manifeste appelé Chart.yaml. Il a une version pour la carte et une version pour l'application. Par exemple, la version de la carte WorkflowGen pourrait être 0.0.3 et sa version d'application 7.18.3. Une carte a également kubeVersion qui indique quelles versions de Kubernetes sont supportées. Dans le cas de WorkflowGen, seule les versions 1.14 et supérieures sont supportées car c'est la première version à inclure le support des conteneurs Windows.

    Vous installez une carte à l'aide de la ligne de commande. Par exemple :

    Cela installera la carte qui se trouve sur le chemin ./chart-path dans le cluster avec le nom de version release-name. Il définit également la valeur image.tag sur 7.15.5-win-ltsc2019. Vous trouverez plus d'informations sur la commande install, y compris son paramètre --set, dans la page sur le site Web de Helm.

    Bien qu'utile pour quelques paramètres, la définition de valeurs à partir de la ligne de commande peut être lourde et sujette à des erreurs, c'est pourquoi vous pouvez également définir des valeurs à partir d'un fichier YAML ou JSON. La première chose que vous devez faire est de créer le fichier :

    Ensuite, vous pouvez transmettre ce fichier à la commande d'installation :

    Valeurs WorkflowGen

    Voici tous les noms des valeurs supportées par le graphique WorkflowGen et leurs valeurs par défaut. Ils sont accompagnés d'une brève description.

    La carte est divisée en groupes de configuration :

    • Global

    • WorkflowGen

    • WorkflowGen Windows services

    • Database

    Valeurs globales

    Les valeurs globales contrôlent le déploiement global résultant de la génération Helm. Par exemple, la valeur scalable indique si le déploiement résultant doit être évolutif ou non. Si la valeur est true, le déploiement résultant aura un pod distinct pour les services Windows WorkflowGen qui seront déployés à l'aide du modèle de déploiement Singleton. Les services Web WorkflowGen seront déployés avec le nombre de répliques indiqué par la valeur globale replicaCount. Si false, les services Web et Windows WorkflowGen seront déployés dans un seul pod à l'aide du modèle Singleton.

    Services WorkflowGen et Windows

    La partie WorkflowGen regroupe les options de configuration liées aux pods des services Web et Windows de WorkflowGen lors de la configuration du produit WorkflowGen. Pour la configuration liée à l'infrastructure, les options de configuration se trouvent dans des groupes distincts afin de pouvoir déployer correctement chaque partie individuellement mais toujours avec la même configuration spécifique à WorkflowGen.

    Configuration de WorkflowGen

    Il existe deux façons principales de configurer WorkflowGen avec la carte : avec le fichier de valeurs ou en fournissant votre propre ConfigMap ou Secret.

    Dans votre fichier de valeurs, vous pouvez utiliser les sous-objets YAML workflowgen.config et workflowgen.secret pour configurer les variables d'environnement de WorkflowGen. Commençons par un exemple :

    Chaque clé et valeur dans la partie config sera ajoutée comme dans un objet ConfigMap et sera utilisée par les déploiements WorkflowGen. Concrètement, les clés et les valeurs du ConfigMap seront injectées en tant que variables d'environnement dans le conteneur de WorkflowGen. Chaque valeur doit être du type chaîne. Par conséquent, les valeurs booléennes YAML telles que true, yes et Y seront rejetées. Utilisez des guillemets simples (') ou doubles (") si nécessaire, comme dans l'exemple.

    Stockage de fichiers

    La carte génère un objet PersistentVolumeClaim (PVC) basé sur les valeurs que vous avez fournies. Comme pour la configuration WorkflowGen, vous pouvez spécifier votre propre PVC en dehors du graphique et le référencer.

    Dans votre fichier de valeurs, vous pouvez utiliser l'objet sous YAML workflowgen.dataPvcSpec pour configurer le PersistentVolumeClaim pour les données de WorkflowGen (App_Data et wfapps). Commençons par un exemple :

    Le contenu de l'objet correspond exactement à . Ce que vous y écrivez sera pris tel quel dans la définition de l'objet.

    Dans cet exemple, la classe de stockage azurefile est spécifique à Azure Kubernetes Service.

    Licence

    La licence doit être stockée sur le cluster Kubernetes avant d'installer la carte. En effet, il est plus efficace de la stocker dans un secret et de l'injecter en tant que volume dans les pods WorkflowGen au lieu de provisionner un partage de fichiers et de le connecter aux pods. Pour que la carte la gère, vous devez spécifier le nom secret où la licence est stockée et le nom de l'élément de licence dans le secret. Voici un exemple :

    Étape 1 : Stockez votre licence dans le cluster

    L'objet secret doit se trouver dans le même espace de noms que les pods WorkflowGen.

    Cette commande créera un secret nommé wfgen-license-secret avec un élément nommé WFG.lic et sa valeur sera le contenu du fichier.

    Étape 2 : Référencez ce secret dans le fichier de valeurs

    Pour plus d'informations sur la façon d'injecter des fichiers d'un objet Secret dans des pods, consultez la page dans la documentation de Kubernetes.

    Référence d'image personnalisée

    Pour utiliser votre propre image WorkflowGen, vous pouvez modifier la référence par défaut comme ceci :

    Service

    Il existe un service créé par la carte avec le pod WorkflowGen pour sa découverte. Par défaut, le graphique crée un service ClusterIP qui fournit une adresse IP et un nom de domaine à l'échelle du cluster que vous pouvez référencer de n'importe où dans le cluster. Cela fonctionne mieux avec un contrôleur Ingress pour acheminer le trafic externe vers celui-ci. Pour plus d'informations sur les contrôleurs Ingress, consultez la page dans la documentation de Kubernetes.

    Vous pouvez le personnaliser pour créer automatiquement un équilibreur de charge à la place en fournissant la valeur suivante :

    Le type LoadBalancer fonctionne uniquement avec les fournisseurs de cloud. Pour les clusters sur site, vous devez utiliser une autre technique.

    Sécurité

    Il existe de nombreuses fonctionnalités de sécurité qui ne sont pas encore supportées ou qui ne fonctionnent pas sous Windows mais le font sous Linux. Il est important de planifier la sécurité des déploiements. Pour en savoir plus sur les fonctionnalités de sécurité non prises en charge sur les conteneurs Windows dans Kubernetes, consultez la page dans la documentation de Kubernetes.

    Les applications Web du conteneur WorkflowGen s'exécutent en tant qu'utilisateur faisant partie du groupe IIS_IUSRS. Ceci est important pour définir les autorisations pour le stockage de fichiers. Si ce groupe n'a pas l'autorisation MODIFY sur le volume des fichiers, le conteneur ne parviendra pas à écrire sur le volume. En règle générale, vous pouvez définir des options de montage pour un volume persistant en fonction du fournisseur de stockage ou vous pouvez exécuter un conteneur init pour définir les autorisations. Pour Azure Files, consultez la section de l'article Microsoft pour obtenir les options de montage.

    Recommandations liées aux infrastructures

    Il existe de nombreuses autres options pour personnaliser votre version de Helm. La majorité d'entre eux dépendent de votre environnement de cluster. Ce sont tous des termes Kubernetes, vous pouvez donc les rechercher dans un moteur de recherche et obtenir des informations utiles. La seule dont cette section traitera est resources. L'objet YAML resources vous permet de limiter et de demander la consommation de ressources pour un pod donné. Les requêtes doivent aider le planificateur à affecter des pods aux nœuds. Les limites sont pour limiter la quantité de ressources que le pod peut utiliser. Les requêtes et limites suivantes sont connues pour fonctionner correctement pour les pods WorkflowGen :

    Gardez à l'esprit que les conteneurs Windows sont beaucoup plus importants en termes de stockage, de processeur et de consommation de mémoire. Par conséquent, vous aurez probablement besoin de nœuds Windows plus grands que ceux de Linux.

    Base de données

    La partie base de données contient les valeurs utilisées pour générer les fichiers de déploiement pour le StatefulSet de la base de données WorkflowGen et ses objets associés. Il s'agit d'une fonctionnalité facultative pour déployer un pod de base de données avec un pod WorkflowGen. Vous pouvez désactiver la création de StatefulSet en définissant les valeurs suivantes :

    Configuration

    Il existe deux façons principales de configurer la base de données avec la carte : avec le fichier de valeurs ou en fournissant votre propre ConfigMap ou Secret.

    Dans votre fichier de valeurs, vous pouvez utiliser les sous-objets YAML database.config et database.secret pour configurer les variables d'environnement de la base de données. Commençons par un exemple :

    Chaque clé et valeur de la partie config sera ajoutée comme dans un objet ConfigMap. Il sera utilisé par le StatefulSet. Concrètement, les clés et les valeurs du ConfigMap seront injectées en tant que variables d'environnement dans le conteneur de base de données. Chaque valeur doit être du type chaîne. Par conséquent, les valeurs booléennes YAML telles que true, yes et Y seront rejetées. Utilisez des guillemets simples (') ou doubles (") si nécessaire, comme dans l'exemple.

    Stockage de fichiers

    Un StatefulSet a besoin d'un modèle PersistentVolumeClaim pour générer une revendication de volume pour chacune de ses répliques. Vous ne pouvez pas utiliser votre propre PVC cette fois car c'est un modèle, pas un objet concret. Ce modèle fait partie de la spécification StatefulSet. Voici un exemple :

    Le contenu du modèle est exactement . Tout ce que vous écrivez sera ajouté tel quel à la spécification StatefulSet. Dans cet exemple, le mode d'accès est ReadWriteOnly car la classe de stockage par défaut fait référence à un disque Azure. Les disques Azure ne peuvent être liés qu'à un seul nœud et pod à la fois. Les disques physiques sont le moyen préféré de stocker les fichiers de base de données pour de meilleures performances. Pour plus d'informations sur les disques Azure, consultez l'article dans la documentation Azure Kubernetes Service.

    Référence d'image personnalisée

    Pour utiliser votre propre image de base de données WorkflowGen, vous pouvez modifier la référence par défaut comme ceci :

    Service

    Il existe un service créé par la carte avec le pod de base de données pour sa découverte. Par défaut, le graphique crée un service ClusterIP sans adresse IP de cluster (clusterIP: None). C'est ce qu'on appelle un service en mode sans affichage (« »). Il fournit un moyen d'obtenir un nom de domaine à l'échelle du cluster pour chaque module de StatefulSet. Par conséquent, vous pouvez vous référer directement à l'instance de base de données de votre choix. Il est recommandé de ne pas modifier les valeurs par défaut. Ils sont disponibles au cas où vous souhaiteriez personnaliser davantage le service. Pour plus d'informations sur les services en mode sans affichage dans Kubernetes, voir dans sa documentation.

    En outre, pour rendre les noms de domaine prévisibles, vous souhaiterez peut-être remplacer le nom complet du StatefulSet, car le nom est généré en fonction du nom de la carte et du nom de la version, et vous ne connaissez peut-être pas le nom de la version à l'avance. Dans ce cas, vous pouvez effectuer les opérations suivantes :

    Cela garantira que chaque pod du StatefulSet possède un nom de domaine unique basé sur ce nom. Si cette version se trouve dans l'espace de noms default, le premier pod aura le nom de domaine my-database-0.my-database.default.svc.cluster.local. Vous référencez ensuite ce nom de domaine dans la chaîne de connexion de la configuration WorkflowGen au port 1433 et il devrait se connecter avec succès.

    Sécurité

    Étant donné que l'image de base de données utilisée est une image Linux par défaut, toutes les fonctions de sécurité sont disponibles. Vous pouvez exécuter la base de données avec un utilisateur et un groupe non racine. Pour plus d'informations sur l'exécution du conteneur de base de données en tant qu'utilisateur non root, consultez l'article dans la documentation SQL Server. Gardez à l'esprit que vous devez également configurer les autorisations pour le stockage pour pouvoir y lire et y écrire. Vous souhaiterez peut-être utiliser un conteneur init pour configurer les autorisations.

    Pour plus d'informations sur les fonctionnalités de sécurité de Docker, consultez la page dans la documentation Docker. Pour savoir comment configurer ces fonctionnalités de sécurité dans Kubernetes, consultez la page dans la documentation de Kubernetes.

    Recommandations liées aux infrastructures

    Il existe de nombreuses autres options pour personnaliser votre version de Helm. La majorité d'entre eux dépendent de votre environnement de cluster. Ce sont tous des termes Kubernetes, vous pouvez donc les rechercher dans un moteur de recherche et obtenir des informations utiles. La seule dont cette section traitera est resources. L'objet YAML resources vous permet de limiter et de demander la consommation de ressources pour un pod donné. Les requêtes doivent aider le planificateur à affecter des pods aux nœuds. Les limites sont pour limiter la quantité de ressources que le pod peut utiliser. Les requêtes et limites suivantes sont connues pour fonctionner correctement pour les pods WorkflowGen :

    Étant donné que WorkflowGen ne peut gérer qu'une chaîne de connexion principale et une réplique en lecture seule, vous souhaiterez peut-être limiter le nombre de pods dans le StatefulSet à deux et évoluer verticalement si vous avez besoin de plus de performances.

    Ingress

    La section Ingress des valeurs est une vue simplifiée de complète. Il est facultatif de générer l'objet de règle Ingress. Pour le désactiver, vous pouvez ajouter les valeurs suivantes :

    Sinon, voici un exemple d'utilisation de la section Ingress :

    Ceci est un exemple complet sur la façon de l'utiliser. Dans cet exemple, des annotations sont définies pour ajouter des informations sur la façon de les gérer. La classe ingress.class indique à Kubernetes d'utiliser le contrôleur d'entrée (ingress) Nginx pour gérer cette règle d'ingress. Le contrôleur d'entrée Nginx doit être installé dans votre cluster pour que le routage fonctionne. Pour plus d'informations sur le contrôleur d'entrée Nginx, consultez ou . Les deux ont des ensembles de fonctionnalités différents et ne sont pas développés par la même entité. L'annotation cert-manager.io/cluster-issuer est une annotation spécifique à Cert-Manager qui lui indique d'utiliser l'émetteur de cluster letsencrypt pour le certificat TLS. Voir la page de cette section pour plus d'informations sur cert-manager.

    La section hosts est une liste de noms de domaine et où ils mènent dans le conteneur. Dans ce cas, lorsqu'un utilisateur accède à myinstance.example.com, il sera routé vers / sur le conteneur WorkflowGen que IIS gérera. La section tls indique quel secret utiliser pour quel hôte. Les certificats TLS sont stockés dans ce secret.

    Hooks

    Dans Helm, il existe un concept de « hooks » qui permet au développeur de déployer certaines ressources (temporaires ou permanentes) à différents événements du cycle de vie d'un graphique.

    Hook de pré-mise à jour

    Le hook de pré-mise à jour déploie une tâche (« job ») Kubernetes qui ajoutera les éventuels fichiers et modèles manquants à votre volume de base de données WorkflowGen et migrera la base de données automatiquement. Ce déploiement se produit uniquement lorsque vous utilisez la commande helm upgrade. Il attendra que la tâche se termine avec succès avant de mettre à jour les pods de WorkflowGen et de la base de données. Ce hook est facultatif et vous pouvez le désactiver en utilisant les valeurs suivantes :

    Ce hook de pré-mise à jour utilise l'image de mise à jour de WorkflowGen pour effectuer des migrations. Voici un exemple complet de configuration du hook :

    Aucune balise par défaut n'est spécifiée pour l'image car les versions Windows et Linux de celle-ci sont prêtes pour la production. Pour une meilleure expérience et performance, il est recommandé d'utiliser la version Linux. La section secret de cet exemple vous permet de spécifier des valeurs secrètes à placer dans un objet Secret qui sera déployé avec la tâche. L'objet sera supprimé à la fin de la tâche. Le nom du secret est généré à partir du nom de la version. Si le nom de votre version est wfgen, le nom secret sera wfgen-migrations-secret. Le secret WFGEN_DATABASE_CONNECTION_STRING est requis. Il est automatiquement injecté en tant que variable d'environnement dans le conteneur. Pour personnaliser le nom du secret à utiliser pour la variable d'environnement WFGEN_DATABASE_CONNECTION_STRING du conteneur de mise à jour, vous pouvez remplir la valeur hooks.preupgrade.connectionStringSecretKey. Vous pouvez également ajouter vos propres variables d'environnement.

    La dernière partie est constituée des arguments à transmettre au conteneur. Voir la page pour plus d'informations sur la configuration du conteneur de mise à jour de WorkflowGen.

    Scénarios courants

    Déployer un pod WorkflowGen simple

    Aperçu

    Ce déploiement est destiné à une installation simple avec une base de données déployée en dehors du cluster. Il déploiera un seul pod WorkflowGen avec tous ses services, y compris les services Windows WorkflowGen. Ce diagramme montre une vue de haut niveau des objets qui seront créés lors de l'installation de la version avec les valeurs données dans la partie suivante. Cette architecture n'est évolutive que verticalement. Vous pouvez uniquement augmenter les limites du pod pour avoir une instance plus performante.

    Comment déployer

    Créez d'abord le fichier de valeurs :

    • MY-WFG-LIC-NUMBER est une valeur d'espace réservé. Vous devez le remplacer par votre propre numéro de série.

    • Ces valeurs créeront un service de type LoadBalancer. Si vous êtes sur un fournisseur de cloud, il déploiera une ressource dans le service d'équilibrage de charge spécifique du fournisseur de cloud (p.ex. Azure Load Balancer, AWS Elastic Load Balancer, etc...).

    Avant d'installer une version du graphique, vous devez créer l'objet secret de licence WorkflowGen dans votre cluster. Pour cet exemple particulier, le nom du fichier de licence est WFG.lic et le nom de l'objet secret est wfgen-license-secret. Exécutez la commande suivante pour le créer :

    Cela fait, vous pouvez maintenant installer la version :

    Le dernier argument est le chemin (ou l'URL) de la carte WorkflowGen. Vous pouvez utiliser l'URL directement ou la télécharger et utiliser un chemin local. À partir de ce moment, vous devriez avoir un module WorkflowGen fonctionnel dans votre cluster.

    Déploiement d'une architecture WorkflowGen évolutive

    Cette architecture est la mieux adaptée aux charges de travail de production qui ont une base de données externe. Ce déploiement vous permet de faire évoluer les applications Web WorkflowGen horizontalement (en ajoutant des répliques), ce qui présente de nombreux avantages tels qu'une disponibilité et des performances accrues. Les services Windows WorkflowGen doivent être mis à l'échelle verticalement et ne peuvent pas être mis à l'échelle horizontalement. Assurez-vous de déployer ce pod sur un nœud disposant de ressources suffisantes.

    Comment déployer

    • MY-WFG-LIC-NUMBER est une valeur d'espace réservé. Vous devez le remplacer par votre propre numéro de série.

    • Ces valeurs créeront un service de type LoadBalancer. Si vous êtes sur un fournisseur de cloud, il déploiera une ressource dans le service d'équilibrage de charge spécifique du fournisseur de cloud (p.ex. Azure Load Balancer, AWS Elastic Load Balancer, etc...).

    Il s'agit du même exemple que pour le déploiement simple, sauf que la propriété scalable a disparu (true par défaut), le nombre de réplicas est de trois et il existe des requêtes et des limites de ressources pour les services Windows.

    Avant d'installer une version de la carte, vous devez créer l'objet secret de la licence WorkflowGen dans votre cluster. Pour cet exemple particulier, le nom du fichier de licence est WFG.lic et le nom de l'objet secret est wfgen-license-secret. Exécutez la commande suivante pour le créer :

    Cela fait, vous pouvez maintenant installer la version:

    Le dernier argument est le chemin (ou l'URL) de la carte WorkflowGen. Vous pouvez utiliser l'URL directement ou la télécharger et utiliser un chemin local. À partir de ce moment, vous devriez avoir un module WorkflowGen fonctionnel dans votre cluster.

    Déploiement d'une architecture WorkflowGen évolutive avec un conteneur de base de données

    Cette architecture est la mieux adaptée à l'expérience d'automatisation complète et peut aider à réduire les coûts en ayant le conteneur à l'intérieur du cluster plutôt que dans un environnement externe. Il s'agit d'une architecture évolutive dans laquelle les applications Web WorkflowGen peuvent être mises à l'échelle horizontalement et verticalement, les services Windows peuvent être mis à l'échelle verticalement uniquement et la base de données WorkflowGen peut être mise à l'échelle horizontalement jusqu'à deux répliques (lecture / écriture et lecture seule) et verticalement.

    Comment déployer

    • MY-WFG-LIC-NUMBER est une valeur d'espace réservé. Vous devez le remplacer par votre propre numéro de série.

    • Ces valeurs créeront un service de type LoadBalancer. Si vous êtes sur un fournisseur de cloud, il déploiera une ressource dans le service d'équilibrage de charge spécifique du fournisseur de cloud (p.ex. Azure Load Balancer, AWS Elastic Load Balancer, etc...).

    Il s'agit du même exemple que précédemment, sauf qu'une section de base de données a été ajoutée. Le contexte de sécurité spécifie que le conteneur doit s'exécuter en tant que root. Cela devrait être évité en tant que bonne pratique de sécurité générale. C'est là pour la simplicité. Vous devez toujours utiliser un utilisateur différent de root et vérifier les autorisations sur les volumes, par exemple avec un conteneur init.

    Avant d'installer une version de la carte, vous devez créer l'objet secret de la licence WorkflowGen dans votre cluster. Pour cet exemple particulier, le nom du fichier de licence est WFG.lic et le nom de l'objet secret est wfgen-license-secret. Exécutez la commande suivante pour le créer :

    Cela fait, vous pouvez maintenant installer la version :

    Le dernier argument est le chemin (ou l'URL) de la carte WorkflowGen. Vous pouvez utiliser l'URL directement ou la télécharger et utiliser un chemin local. À partir de ce moment, vous devriez avoir un pod WorkflowGen fonctionnel dans votre cluster.

    Ingress

  • Hooks

  • Pour les valeurs secrètes, vous pouvez faire exactement comme la partie config. Vous n'avez qu'à fournir le nom du secret et sa valeur concrète. La carte les ajoutera à un objet Secret et encodera la valeur en Base64. L'objet Secret sera ensuite injecté en tant que volume à l'intérieur du conteneur de WorkflowGen. Chaque clé deviendra un fichier avec sa valeur concrète écrite à l'intérieur. Par conséquent, vous avez besoin d'une valeur de configuration correspondante qui indiquera au conteneur de récupérer la valeur dans un fichier spécifique à l'aide du suffixe _FILE. Pour plus d'informations sur la configuration de WorkflowGen, y compris les secrets, consultez la page Configuration de la section Image WorkflowGen. L'emplacement par défaut des secrets à l'intérieur du conteneur est C:\secrets. Vous pouvez personnaliser ce chemin en fournissant la valeur workflowgen.secretMountPath.

    Vous avez également la possibilité d'utiliser vos propres objets ConfigMap et Secret. Gardez à l'esprit que ces objets ne seront pas gérés par Helm ou la carte WorkflowGen. Voici le même exemple que pour la méthode « Helm » :

    Étape 1 : Créez des fichiers ConfigMap et Secret

    Dans le cas du secret, vous devez encoder vous-même les valeurs en base64. Pour cela, vous pouvez utiliser l'exemple de code suivant :

    PowerShell

    Bash

    Étape 2 : Créez les objets à partir des fichiers

    Ensuite, vous devez déployer les objets à l'aide de la commande suivante :

    Étape 3 : Référencez les noms des objets dans la carte

    La dernière étape consiste à référencer les objets que vous venez de déployer dans votre fichier de valeurs avant d'installer :

    Vous avez également la possibilité d'utiliser votre propre objet PVC. Gardez à l'esprit que cet objet ne sera pas géré par Helm ou la carte WorkflowGen. Voici un exemple :

    Étape 1 : Créez le fichier de définition PersistentVolumeClaim

    Étape 2 : Déployez la définition dans le cluster

    Étape 3 : Référencez l'objet dans vos valeurs

    La dernière étape consiste à référencer les objets que vous venez de déployer dans votre fichier de valeurs avant d'installer :

    Pour les valeurs secrètes, vous pouvez faire exactement comme la partie config. Vous n'avez qu'à fournir le nom du secret et sa valeur concrète. La carte les ajoutera à un objet Secret et encodera la valeur en Base64. L'objet Secret sera ensuite injecté en tant que volume à l'intérieur du conteneur de WorkflowGen. Chaque clé deviendra un fichier avec sa valeur concrète écrite à l'intérieur. Par conséquent, vous avez besoin d'une valeur de configuration correspondante qui indiquera au conteneur de récupérer la valeur dans un fichier spécifique à l'aide du suffixe _FILE. Pour plus d'informations sur la configuration de WorkflowGen, y compris les secrets, consultez la page Configuration de la section Image de base de données WorkflowGen. L'emplacement par défaut des secrets à l'intérieur du conteneur est C:\secrets. Vous pouvez personnaliser ce chemin en fournissant la valeur database.secretMountPath.

    L'image de la base de données WorkflowGen est basée sur l'image SQL Server Linux. Il s'agit de l'image recommandée à utiliser pour les charges de travail de production. La version Windows de l'image ne doit être utilisée que pour les environnements de développement et de test.

    Vous avez également la possibilité d'utiliser vos propres objets ConfigMap et Secret. Gardez à l'esprit que ces objets ne seront pas gérés par Helm ou la carte WorkflowGen. Voici le même exemple que pour la méthode « Helm » :

    Étape 1 : Créez des fichiers ConfigMap et Secret

    Dans le cas du secret, vous devez encoder vous-même les valeurs en base64. Pour cela, vous pouvez utiliser l'exemple de code suivant :

    PowerShell

    Bash

    Étape 2 : Créez les objets à partir des fichiers

    Ensuite, vous devez déployer les objets à l'aide de la commande suivante :

    Étape 3 : Référencez les noms des objets dans la carte

    La dernière étape consiste à référencer les objets que vous venez de déployer dans votre fichier de valeurs avant d'installer :

    Ces valeurs supposent que vous êtes propriétaire du nom de domaine example.com et qu'il pointe vers l'adresse IP publique de l'équilibreur de charge. Dans ce cas particulier, le HTTPS signifie que l'équilibreur de charge doit fonctionner au niveau de la couche réseau 7 et fournir une terminaison TLS. Pour plus d'informations sur la gestion TLS dans Kubernetes, consultez la page TLS / SSL de cette section.

  • La revendication de volume persistant qui sera créée suppose que vous avez déjà une classe de stockage dans le cluster nommé azurefile. Il est présent par défaut sur un cluster Azure Kubernetes Service. Consultez l'article Microsoft Créer et utiliser un volume avec Azure Files dans Azure Kubernetes Service (AKS) pour plus d'informations.

  • Ces valeurs supposent que vous êtes propriétaire du nom de domaine example.com et qu'il pointe vers l'adresse IP publique de l'équilibreur de charge. Dans ce cas particulier, le HTTPS signifie que l'équilibreur de charge doit fonctionner au niveau de la couche réseau 7 et fournir une terminaison TLS. Pour plus d'informations sur la gestion TLS dans Kubernetes, consultez la page TLS / SSL de cette section.

  • La revendication de volume persistant qui sera créée suppose que vous avez déjà une classe de stockage dans le cluster nommé azurefile. Il est présent par défaut sur un cluster Azure Kubernetes Service. Voir l'article Microsoft Créer et utiliser un volume avec Azure Files dans Azure Kubernetes Service (AKS) pour plus d'informations.

  • Ces valeurs supposent que vous êtes propriétaire du nom de domaine example.com et qu'il pointe vers l'adresse IP publique de l'équilibreur de charge. Dans ce cas particulier, le HTTPS signifie que l'équilibreur de charge doit fonctionner au niveau de la couche réseau 7 et fournir une terminaison TLS. Pour plus d'informations sur la gestion TLS dans Kubernetes, consultez la page TLS / SSL de cette section.

  • La revendication de volume persistant qui sera créée suppose que vous avez déjà une classe de stockage dans le cluster nommé azurefile. Il est présent par défaut sur un cluster Azure Kubernetes Service. Consultez l'article Microsoft Créer et utiliser un volume avec Azure Files dans Azure Kubernetes Service (AKS) pour plus d'informations.

  • Le modèle de revendication de volume persistant utilisé dans la partie base de données utilise une classe de stockage appelée default. Il est présent par défaut sur un cluster Azure Kubernetes Service et représente le service Azure Disks. Consultez l'article Microsoft Créer et utiliser un volume avec des disques Azure dans Azure Kubernetes Service (AKS) pour plus d'informations.

  • Installing Helm
    site Web Helm
    Helm Install
    la spécification Kubernetes PersistentVolumeClaim
    Secrets
    Ingress Controllers
    Intro to Windows support in Kubernetes (section Security)
    Options de montage
    Créer et utiliser un volume avec Azure Files dans Azure Kubernetes Service (AKS)
    la spécification Kubernetes PersistentVolumeClaim
    headless service
    Service
    Déployer et se connecter à des conteneurs Linux SQL Server
    Docker Security
    Configure a Security Context for a Pod or Container
    la spécification d'objet Ingress
    la page du projet de communauté open source
    la page commerciale
    TLS / SSL
    Configuration
    Déploiement de pod WorkflowGen simple
    Déploiement évolutif de pod WorkflowGen
    Architecture évolutive avec un conteneur de base de données
    Créer et utiliser un volume avec des disques Azure dans Azure Kubernetes Service (AKS)
    my-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
      WFGEN_APP_SETTING_ApplicationUrl: https://example.com/wfgen
      WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSerialNumber
      WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
      WFGEN_GEN_APP_SYM_ENCRYPT_KEY: 'N'
      WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey
    my-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      WFGEN_DATABASE_CONNECTION_STRING: U2VydmVyPXNvbWUuc3FsLnNlcnZlci5jb20sMTQzMzsuLi4K
      WFGEN_APP_SETTING_ApplicationSerialNumber: TVktV0ZHLUxJQy1OVU1CRVIK
      WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey: MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgK
    using namespace System.Text
    
    function ConvertTo-Base64String {
        [CmdletBinding()]
        [OutputType([string])]
        param (
            [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
            [ValidateNotNullOrEmpty()]
            [string]$Value
        )
    
        process {
            return [Convert]::ToBase64String([Encoding]::UTF8.GetBytes($Value))
        }
    }
    
    'Server=some.sql.server.com,1433;...' | ConvertTo-Base64String # U2VydmVyPXNvbWUuc3FsLnNlcnZlci5jb20sMTQzMzsuLi4K
    'MY-WFG-LIC-NUMBER' | ConvertTo-Base64String # TVktV0ZHLUxJQy1OVU1CRVIK
    '1f73c842692f436b92411641c46fb338' | ConvertTo-Base64String # MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgK
    echo 'Server=some.sql.server.com,1433;...' | base64 # U2VydmVyPXNvbWUuc3FsLnNlcnZlci5jb20sMTQzMzsuLi4K
    echo 'MY-WFG-LIC-NUMBER' | base64 # TVktV0ZHLUxJQy1OVU1CRVIK
    echo '1f73c842692f436b92411641c46fb338' | base64 # MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgK
    my-wfg-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-wfg-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile
      resources:
        requests:
          storage: 50Gi
    my-db-configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-db-configmap
    data:
      ACCEPT_EULA: 'Y'
      SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
      WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
      WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
      WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
    my-db-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-db-secret
    type: Opaque
    data:
      SA_PASSWORD: c3Ryb25nKCEpUGFzcwo=
      WFGEN_DATABASE_USER_PASSWORD: c3Ryb25nKCEpUGFzcwo=
      WFGEN_ADMIN_PASSWORD: c3Ryb25nKCEpUGFzcwo=
      WFGEN_DATABASE_USER_USERNAME: V0ZHRU5fVVNFUgo=
    using namespace System.Text
    
    function ConvertTo-Base64String {
        [CmdletBinding()]
        [OutputType([string])]
        param (
            [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
            [ValidateNotNullOrEmpty()]
            [string]$Value
        )
    
        process {
            return [Convert]::ToBase64String([Encoding]::UTF8.GetBytes($Value))
        }
    }
    
    'strong(!)Pass' | ConvertTo-Base64String # c3Ryb25nKCEpUGFzcwo=
    'WFGEN_USER' | ConvertTo-Base64String # V0ZHRU5fVVNFUgo=
    echo 'strong(!)Pass' | base64 # c3Ryb25nKCEpUGFzcwo=
    echo 'WFGEN_USER' | base64 # V0ZHRU5fVVNFUgo=
    helm install --set image.tag=7.15.5-win-ltsc2019 release-name ./chart-path
    image:
      tag: 7.15.5-win-ltsc2019
    {
        "image": {
            "tag": "7.15.5-win-ltsc2019"
        }
    }
    # YAML
    helm install --set-file ./my-values.yaml release-name ./chart-path
    
    # JSON
    helm install --set-file ./my-values.json release-name ./chart-path
    # Default values for WorkflowGen.
    # This is a YAML-formatted file.
    # Declare variables to be passed into your templates.
    
    # replicaCount Number of replicas to create per deployment of WorkflowGen. Doesn't impact database.
    replicaCount: 1
    # scalable Deploy WorkflowGen and its database in a scalable architecture.
    scalable: true
    # tenantName For multi-tenancy, it is recommended to populate this value in a multi-tenant architecture. This name will be put as a prefix for resources' name and the label "workflowgen.com/tenant: tenantName" will be added as a selector label.
    tenantName: ""
    
    # workflowgen Configuration related to the WorkflowGen pod.
    workflowgen:
      # image Configuration related to the image to be used for the WorkflowGen pod.
      image:
        # repository The repository to use to pull the image.
        repository: advantys/workflowgen
        # tag The image tag to use.
        tag: ""
        # pullPolicy The pull policy to adopt for this image.
        pullPolicy: Always
      # nameOverride Override the name of the chart.
      nameOverride: ""
      # fullnameOverride Override the name of the WorkflowGen deployment. It is based on the name by default.
      fullnameOverride: ""
      # runtimeClassName Runtime class to use with the deployment.
      runtimeClassName: ""
      # strategy The update strategy for the WorkflowGen deployment.
      strategy:
        type: Recreate
      # nodeSelector Node selectors to use for the WorkflowGen pod. WorkflowGen only works on Windows Server.
      nodeSelector:
        kubernetes.io/os: windows
      # annotations Annotations to attach to the WorkflowGen deployment. You can attach annotations to the deployment itself or its template.
      annotations: {}
        # deployment: {}
        # template: {}
      # tolerations Tolerations to apply to the WorkflowGen pod.
      tolerations: []
      # affinity Affinities to apply to the WorkflowGen pod.
      affinity: {}
      # createConfigMap Create a ConfigMap for WorkflowGen's configuration.
      createConfigMap: true
      # configMapNameOverride Override the name of WorkflowGen's ConfigMap.
      configMapNameOverride: ""
      # config The configuration to put in the ConfigMap.
      config: {}
      # createSecret Create a Secret for WorkflowGen's secret values.
      createSecret: true
      # secretNameOverride Override the name of WorkflowGen's Secret.
      secretNameOverride: ""
      # secretMountPath The mount path inside WorkflowGen's containers where to put the secret files.
      secretMountPath: C:\secrets
      # secret The secret values to put in the Secret object. Values will be automatically endoded in base64.
      secret: {}
      # license Configuration related to WorkflowGen's license.
      license:
        # volumeNameOverride Override the name of the license's volume.
        volumeNameOverride: ""
        # secretName The name of the secret that contains WorkfowGen's license.
        secretName: ""
        # items The specific items to use from the secret to inject in WorkflowGen's containers.
        items: []
          # - key: ""
          #   path: ""
      # createDataPvc Create a PersistentVolumeClaim for the data volume of WorkflowGen.
      createDataPvc: true
      # dataPvcNameOverride Override the name of data's PersistentVolumeClaim.
      dataPvcNameOverride: ""
      # dataVolumeNameOverride Override the volume name associated to the PersistentVolumeClaim.
      dataVolumeNameOverride: ""
      # dataPvcSpec The data PersistentVolumeClaim specifications.
      dataPvcSpec: {}
        # accessModes:
        #   - ReadWriteMany
        # storageClassName: storageclass
        # resources:
        #   requests:
        #     storage: 4Gi
      # additionalVolumes Additional volumes to attach to WorkflowGen's deployment.
      additionalVolumes: []
      # additionalVolumeMounts Additional volumes to mount in WorkflowGen's container.
      additionalVolumeMounts: []
      # podSecurityContext The security context of the pod.
      podSecurityContext: {}
        # fsGroup: 2000
      # securityContext The security context of WorkflowGen's container.
      securityContext: {}
        # capabilities:
        #   drop:
        #   - ALL
        # readOnlyRootFilesystem: true
        # runAsNonRoot: true
        # runAsUser: 1000
        # runAsUserName: ContainerUser
      # resources Configuration related to the resources of the container.
      resources: {}
        # limits:
        #   cpu: '1'
        #   memory: 2Gi
        # requests:
        #   cpu: '1'
        #   memory: 2Gi
      # service Configuration related to the service associated with WorkflowGen's deployment.
      service:
        # type The type of the service.
        type: ClusterIP
        # port The port exposed from the service.
        port: 80
        # clusterIP The cluster IP address to use.
        clusterIP: ""
    
    # winServices Configuration related to WorkflowGen's Windows Services deployment. Ignored when release not scalable.
    winServices:
      # nameOverride Override the chart name of this deployment.
      nameOverride: ""
      # runtimeClassName Runtime class to use with the deployment.
      runtimeClassName: ""
      # nodeSelector Node selectors to use for the WorkflowGen Windows Services pod. WorkflowGen only works on Windows Server.
      nodeSelector:
        kubernetes.io/os: windows
      # annotations Annotations to attach to the WorkflowGen Windows services deployment.
      annotations: {}
      # fullnameOverride Override the name of the Windows services deployment.
      fullnameOverride: ""
      # tolerations Tolerations to apply to the WorkflowGen Windows services pod.
      tolerations: []
      # affinity Affinities to apply to the WorkflowGen Windows services pod.
      affinity: {}
      # podSecurityContext The security context of the pod.
      podSecurityContext: {}
        # fsGroup: 2000
      # dirSync Configuration related to the directory synchronization Windows service container.
      dirSync:
        # securityContext The security context of the directory synchronization Windows service container.
        securityContext: {}
          # capabilities:
          #   drop:
          #   - ALL
          # readOnlyRootFilesystem: true
          # runAsNonRoot: true
          # runAsUser: 1000
          # runAsUserName: ContainerUser
        # resources Configuration related to the resources of the container.
        resources: {}
          # limits:
          #   cpu: '1'
          #   memory: 2Gi
          # requests:
          #   cpu: '1'
          #   memory: 2Gi
      # engine Configuration related to the engine Windows service container.
      engine:
        # securityContext The security context of the engine Windows service container.
        securityContext: {}
          # capabilities:
          #   drop:
          #   - ALL
          # readOnlyRootFilesystem: true
          # runAsNonRoot: true
          # runAsUser: 1000
          # runAsUserName: ContainerUser
        # resources Configuration related to the resources of the container.
        resources: {}
          # limits:
          #   cpu: '1'
          #   memory: 2Gi
          # requests:
          #   cpu: '1'
          #   memory: 2Gi
    
    # database Configuration related to the database deployment.
    database:
      # image Configuration related to the image to be used for the database pod.
      image:
        # repository The repository to use to pull the image.
        repository: advantys/workflowgen-sql
        # tag The image tag to use.
        tag: ""
        # pullPolicy The pull policy to adopt for this image.
        pullPolicy: Always
      # create Create a database deployment to be used with the WorkflowGen deployment.
      create: true
      # createConfigMap Create a ConfigMap for the database configuration.
      createConfigMap: true
      # configMapNameOverride Override the name of the database ConfigMap.
      configMapNameOverride: ""
      # config The configuration to put in the ConfigMap.
      config: {}
      # createSecret Create a Secret for the database secret values.
      createSecret: true
      # secretNameOverride Override the name of the database Secret.
      secretNameOverride: ""
      # secretMountPath The mount path inside the database container where to put the secret files.
      secretMountPath: /mnt/secrets
      # secret The secret values to put in the Secret object. Values will be automatically endoded in base64.
      secret: {}
      # useEnv Indicates to use additional environement variables.
      useEnv: false
      # env Definition of the environment variables.
      env: []
        # - name: test
        #   value: value
        # - name: test2
        #   valueFrom:
        #     secretKeyRef:
        #       key: test-key
        #       name: secret-name
        # For MSSQL Linux, you may want to put this here or in the config section:
        # - name: MSSQL_PID
        #   value: Express # You can replace with the edition you want: "Enterprise" or "Developer" or "Express"
      # fullnameOverride Override the name of the database deployment.
      fullnameOverride: ""
      # nameOverride Override the chart name of this deployment.
      nameOverride: ""
      # args The arguments to pass to the database container.
      args: []
      # tolerations Tolerations to apply to the database pod.
      tolerations: []
      # affinity Affinities to apply to the database pod.
      affinity: {}
      # runtimeClassName Runtime class to use with the stateful set.
      runtimeClassName: ""
      # nodeSelector Node selectors to use for the database pod.
      nodeSelector: {}
        # kubernetes.io/os: linux
      # annotations Annotations to attach to the database deployment. You can add annotations for the StatefulSet or its template.
      annotations: {}
        # statefulset: {}
        # template: {}
      # podSecurityContext The security context of the pod.
      podSecurityContext: {}
        # fsGroup: 2000
      # securityContext The security context of the database container.
      securityContext: {}
        # capabilities:
        #   drop:
        #   - ALL
        # readOnlyRootFilesystem: true
        # runAsNonRoot: true
        # runAsUser: 1000
        # runAsUserName: ContainerUser
        # With MSSQL, you may want to use the mssql (10001) account
        # runAsUser: 10001
        # runAsGroup: 0
        # If you can't configure the volumes with the correct permissions for mssql, you may want to run the container as root:
        # runAsUser: 0
        # runAsGroup: 0
      # resources Configuration related to the resources of the container.
      resources: {}
        # limits:
        #   cpu: '1'
        #   memory: 2Gi
        # requests:
        #   cpu: '1'
        #   memory: 2Gi
      # volumeClaimTemplateSpec PersistentVolumeClaim specification for the StatefulSet PersistentVolumeClaimTemplate.
      volumeClaimTemplateSpec: {}
        # accessModes:
        #   - ReadWriteOnce
        # storageClassName: default
        # resources:
        #   requests:
        #     storage: 4Gi
      # service Configuration related to the database cluster service.
      service:
        # type The type of the service.
        type: ClusterIP
        # port The port exposed from the service.
        port: 1433
        # clusterIP The cluster IP address to use.
        clusterIP: None
    
    # imagePullSecrets Secrets to inject in order to pull images from private repositories.
    imagePullSecrets: []
    
    # ingress Configuration related to the ingress rules.
    ingress:
      # enabled Whether or not to enable the ingress rules defined here.
      enabled: true
      # annotations Additional annotations to put on the Ingress object.
      annotations: {}
        # kubernetes.io/ingress.class: nginx
        # cert-manager.io/cluster-issuer: letsencrypt
        # kubernetes.io/tls-acme: "true"
      # hosts List of hosts and routes for routing purposes.
      hosts:
        - host: chart-example.local
          paths: []
        # - host: example
        #   paths: []
      # tls List of TLS hosts associated with a secret containing the proper TLS certificates.
      tls: []
      #  - secretName: chart-example-tls
      #    hosts:
      #      - chart-example.local
    
    # hooks Configuration related to the Helm hooks of this chart
    hooks:
      # preupgrade
      preupgrade:
        # enabled Enables the use of the pre-upgrade hook which will migrate WorkflowGen's data when upgrading.
        enabled: true
        # image Configuration related to the image to be used for the pre-upgrade pod.
        image:
          # repository The repository to use to pull the image.
          repository: advantys/workflowgen-upgrade
          # tag The image tag to use.
          tag: ""
        # args The arguments to pass to the migration container.
        args: []
        # env Definition of the environment variables.
        env: []
        # - name: test
        #   value: value
        # - name: test2
        #   valueFrom:
        #     secretKeyRef:
        #       key: test-key
        #       name: secret-name
        # connectionStringSecretKey The key to pick for the WFGEN_DATABASE_CONNECTION_STRING environment variable. Defaults to WFGEN_DATABASE_CONNECTION_STRING.
        connectionStringSecretKey: ""
        # secret The secret values to put in the Secret object for this hook. Values will be automatically endoded in base64.
        secret: {}
        # runtimeClassName The name of the RuntimeClass to use with this pod.
        runtimeClassName: ""
        # podSecurityContext The security context for the pod specification.
        podSecurityContext: {}
        # nodeSelector Node selectors to use for the pre-upgrade pod.
        nodeSelector:
          kubernetes.io/os: linux
        # affinity Affinities to apply to the pre-upgrade pod.
        affinity: {}
        # tolerations Tolerations to apply to the pre-upgrade pod.
        tolerations: []
    workflowgen:  
      config:
        WFGEN_APP_SETTING_ApplicationUrl: https://example.com/wfgen
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSerialNumber
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_GEN_APP_SYM_ENCRYPT_KEY: 'N'
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey
      secret:
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=some.sql.server.com,1433;...'
        WFGEN_APP_SETTING_ApplicationSerialNumber: MY-WFG-LIC-NUMBER
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey: 1f73c842692f436b92411641c46fb338
    workflowgen:
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
    kubectl create secret generic wfgen-license-secret --from-file ./WFG.lic
    workflowgen:
      license:
        secretName: wfgen-license-secret
        items:
          - key: WFG.lic
            path: WFG.lic
    workflowgen:
      image:
        reference: mycorporation/workflowgen
        tag: 7.18.3-win-ltsc2019
    workflowgen:
      service:
        kind: LoadBalancer
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
    
    # Used when "scalable: true"
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    database:
      create: false
    database:  
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
    database:
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    database:
      image:
        reference: mycorporation/workflowgen-sql
        tag: 7.18.3-ubuntu-18.04
    database:
      fullnameOverride: my-database
    database:
      resources:
        limits:
          cpu: '2'
          memory: 4Gi
        requests:
          cpu: '1'
          memory: 2Gi
    ingress:
      enabled: false
    ingress:
      annotations:
        kubernetes.io/ingress.class: nginx
        cert-manager.io/cluster-issuer: letsencrypt
      hosts:
        - host: &wfgenHost myinstance.example.com
          paths:
            - /
      tls:
        - secretName: tls-secret
          hosts:
            - *wfgenHost
    hooks:
      preupgrade:
        enabled: false
    hooks:
      preupgrade:
        image:
          tag: latest-ubuntu-18.04
        secret:
          WFGEN_DATABASE_CONNECTION_STRING: 'Server=some.sql.server.com,1433;...'
          mysecret: something secret
        env:
          - name: WFGEN_UPGRADE_EXCLUDE_FILES
            value: file1,file2
          - name: MY_SECRET_ENV
            valueFrom:
              secretKeyRef:
                name: wfgen-migrations-secret # If release name is "wfgen"
                key: mysecret
        args:
          - "-FromVersion"
          - "7.14.10"
          - "-ToVersion"
          - "7.18.2"
    my-values.yaml
    scalable: false
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: '2Gi'
        requests:
          cpu: '1'
          memory: '2Gi'
      config:
        WFGEN_APP_SETTING_ApplicationUrl: https://example.com/wfgen
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSerialNumber
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_GEN_APP_SYM_ENCRYPT_KEY: 'N'
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey
      secret:
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=some.sql.server.com,1433;...'
        WFGEN_APP_SETTING_ApplicationSerialNumber: MY-WFG-LIC-NUMBER
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey: 1f73c842692f436b92411641c46fb338
      license:
        secretName: wfgen-license-secret
        items:
          - key: WFG.lic
            path: WFG.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
      
    database:
      create: false
      
    ingress:
      enabled: false
    
    kubectl create secret generic wfgen-license-secret --from-file ./WFG.lic
    helm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgz
    my-values.yaml
    replicaCount: 3
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: '2Gi'
        requests:
          cpu: '1'
          memory: '2Gi'
      config:
        WFGEN_APP_SETTING_ApplicationUrl: https://example.com/wfgen
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSerialNumber
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_GEN_APP_SYM_ENCRYPT_KEY: 'N'
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey
      secret:
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=some.sql.server.com,1433;...'
        WFGEN_APP_SETTING_ApplicationSerialNumber: MY-WFG-LIC-NUMBER
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey: 1f73c842692f436b92411641c46fb338
      license:
        secretName: wfgen-license-secret
        items:
          - key: WFG.lic
            path: WFG.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
        
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    
    database:
      create: false
      
    ingress:
      enabled: false
    kubectl create secret generic wfgen-license-secret --from-file ./WFG.lic
    helm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgz
    replicaCount: 3
    
    workflowgen:
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '1'
          memory: 2Gi
      config:
        WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
        WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
        WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
        WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
        WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
        WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
      secret:
        ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
        ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
        WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
        WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
        WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
      license:
        secretName: wfgen-license-secret
        items:
          - key: WorkflowGen.lic
            path: WorkflowGen.lic
      dataPvcSpec:
        accessModes:
          - ReadWriteMany
        storageClassName: azurefile
        resources:
          requests:
            storage: 50Gi
      service:
        type: LoadBalancer
    
    winServices:
      dirSync:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
      engine:
        resources:
          limits:
            cpu: '1'
            memory: 1Gi
          requests:
            cpu: '500M'
            memory: 1Gi
    
    database:
      fullnameOverride: wfgen-database
      nodeSelector:
        kubernetes.io/os: linux
      securityContext:
        runAsUser: 0
        runAsGroup: 0
      resources:
        limits:
          cpu: '1'
          memory: 2Gi
        requests:
          cpu: '500m'
          memory: 1Gi
      config:
        ACCEPT_EULA: 'Y'
        SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
        WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
        WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
        WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
      secret:
        SA_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
        WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
        WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
      volumeClaimTemplateSpec:
        accessModes:
          - ReadWriteOnce
        storageClassName: default
        resources:
          requests:
            storage: 100Gi
    
    ingress:
      enabled: false
    
    kubectl create secret generic wfgen-license-secret --from-file ./WFG.lic
    helm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgz
    kubectl apply -f ./my-configmap.yaml
    kubectl apply -f ./my-secret.yaml
    my-values.yaml
    workflowgen:
      createConfigMap: false
      configMapNameOverride: my-configmap
      createSecret: false
      secretNameOverride: my-secret
    kubectl apply -f ./my-wfg-pvc.yaml
    workflowgen:
      createDataPvc: false
      dataPvcNameOverride: my-wfg-pvc
    kubectl apply -f ./my-db-configmap.yaml
    kubectl apply -f ./my-db-secret.yaml
    my-values.yaml
    database:
      createConfigMap: false
      configMapNameOverride: my-db-configmap
      createSecret: false
      secretNameOverride: my-db-secret