Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Ce guide fournit des instructions sur la configuration, le déploiement et la gestion des intégrations de WorkflowGen avec Docker.
Cette section fournit des instructions sur comment exécuter rapidement le conteneur WorkflowGen avec une architecture minimale sur votre ordinateur local.
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.
À 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.
Assurez-vous d'avoir installé Docker sur votre ordinateur.
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.
N'installez pas Docker pour Windows sur Windows Server. Il est conçu pour le développement seulement.
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.
Pour télécharger l'image de la base de données sur votre ordinateur local, ouvrez PowerShell et entrez ce qui suit :
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 :
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.
Entrez ce qui suit pour télécharger l’image WorkflowGen :
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 :
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.
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.
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.
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).
À 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.
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.
N'installez pas Docker pour Windows sur Windows Server. Il est conçu pour le développement seulement.
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.
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 :
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é :
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.
Utilisez le fichier suivant comme modèle :
Enregistrez-le sous le nom database.env en utilisant le chemin où vous placerez le fichier Compose.
Utilisez le fichier suivant comme modèle :
Enregistrez ce fichier sous le nom workflowgen.env en utilisant le chemin où vous placerez le fichier Compose.
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 :
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.
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)
docker image pull advantys/workflowgen-sql:9.3.1-express-win-ltsc2019docker volume create sqldatadocker volume inspect -f "{{.Mountpoint}}" sqldatadocker 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-ltsc2019docker 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')
# fda7a6a81db2428b8885bd1210522755docker 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 versiondocker volume create licensesdocker volume inspect -f "{{.Mountpoint}}" licensesCopy-Item C:\Path\To\WorkflowGen.lic $(docker volume inspect -f "{{.Mountpoint}}" licenses)[guid]::NewGuid().ToString('N')
# fda7a6a81db2428b8885bd1210522755SA_PASSWORD=strong(!)Pass
WFGEN_DATABASE_USER_USERNAME=WFGEN_USER
WFGEN_DATABASE_USER_PASSWORD=strong(!)Pass
WFGEN_ADMIN_PASSWORD=strong(!)PassWFGEN_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

Cette section explique les configurations recommandées pour la base de données en production.
Consultez la documentation suivante pour l'installation d'Azure SQL:
Consultez la documentation suivante sur la configuration requise pour les bases de données sur site :
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.
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.
Les données persistantes sont différentes selon que vous utilisez la version Linux ou la version Windows.
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.
É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.
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 .
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) :
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é.
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.
Pour Azure Files, consultez la documentation Microsoft suivante sur les sauvegardes et les restaurations :
Pour les disques Azure, consultez la documentation Microsoft suivante sur les sauvegardes et les restaurations :
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.
Consultez la documentation Microsoft suivante sur la continuité des opérations pour Azure SQL :
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 :
Il existe deux outils principaux pour la sauvegarde et la récupération :
Comme d'autres services Azure, Microsoft fournit des guides pour les sauvegardes et les restaurations :
Nom
Description
C:\wfgen\sql
Ce chemin contient les fichier .mdf et .ldf de la base de données WorkflowGen
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.
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.
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.
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
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.
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 .
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é.
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 :
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.
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.
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.
Cette section présente quelques outils que vous pouvez utiliser pour administrer un cluster de conteneurs.
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.
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.
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.
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 :
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).
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.
Pour plus d'informations et de recommandations sur la gestion TLS / SSL dans Kubernetes, consultez la page dans la section Kubernetes.
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

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 :
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.
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.
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-ltsc2019En général, vous devez toujours refuser tout trafic entrant, sauf si vous en avez explicitement besoin.
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.
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.
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 :
Ignorez cette étape si vous n'avez pas d'image WorkflowGen personnalisée. Consultez la section Image WorkflowGen personnalisée pour plus d'informations.
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.
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 :
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 :
Tirez la nouvelle version du conteneur.
Supprimez les conteneurs avec l'ancienne version.
Exécutez les conteneurs avec la nouvelle version.
Par exemple, si vous souhaitez mettre à jour vers WorkflowGen version 7.16.1 :
- 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-ltsc2019Set-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-ltsc2019Cette 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.
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).
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.
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.
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.
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 :
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 :
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.
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 dispose d'une fonctionnalité similaire pour gérer les journaux des conteneurs. Consultez la page suivante pour plus d'informations :
Vous pouvez également utiliser Azure Monitor avec votre cluster Kubernetes. Consultez la page suivante pour plus d'informations :
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 :
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 :
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 :
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.
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.
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.
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.
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.
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 où est la version du fichier de migration SQL, est la valeur FromVersion et est la valeur ToVersion.
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.
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-ltsc2019docker 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-ltsc2019apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wfgdata-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile
resources:
requests:
storage: 50Gi
docker volume create pickupdocker 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-ltsc2019WFGEN_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 -Offlineupdatepackages/
7.14.0/
update.zip
7.15.0/
update.zipUne 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.
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 :
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 pwshSet-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/
DockerfileFROM advantys/workflowgen-sql:7.18.3-ubuntu-18.04context-dir/
Dockerfile
myscript.sql
customcode.ps1FROM 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
}
Cette section explique comment créer votre propre image WorkflowGen personnalisée afin de personnaliser les fichiers et les DLL de WorkflowGen.
Windows 10 Pro avec Docker pour Windows installé et les conteneurs Windows activés OU
Windows Server 2019 avec Docker Enterprise installé
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.
Voici un exemple simple qui remplace le fichier web.config, personnalise la bannière et ajoute une bibliothèque personnalisée.
Voici l'arborescence de fichiers du répertoire de contexte à partir duquel vous allez générer votre image WorkflowGen personnalisée :
Arborescence des fichiers :
Voici le contenu du Dockerfile :
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 .)
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 .
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 :
Dans ce script, notez ce qui suit :
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.
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.
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.
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.dllcontext-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-ltsc2019version: '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 powershellCette 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.
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 :
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 :
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 :
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.
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.Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.
Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.
Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.
Vous ne pouvez pas utiliser de sous-chemins dans la version Windows.
Cette section explique comment configurer complètement un conteneur de base de données WorkflowGen. Tout est configurable via une variable d'environnement.
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 .
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 :
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é.
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.
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 :
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...
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 :
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.
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.
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
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.04apiVersion: 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-secretapiVersion: 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: 100GiCette 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.
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.
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.
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).
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éé.
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.
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éé.
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.
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éé.
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

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.
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 :
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.configDans 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.
run Pour une liste des paramètres web.config, ainsi que leurs descriptions et leurs valeurs possibles, consultez l'annexe du .
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.
run 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 :
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.
WEB_APPS (applications Web)
ENGINE (service de moteur)
DIR_SYNC (service de synchronisation d'annuaire)
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 :
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 :
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 :
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.
run 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é.
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.
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 :
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.
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.
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 .
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 .
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.
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 :
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 :
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 :
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.
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.
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 :
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.configNODE (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)
WFGEN_LICENSE_FILE_NAME
docker container run `
# ...
--env 'WFGEN_APP_SETTING_ApplicationUrl=https://macompagnie.fr/wfgen' `
# ...
advantys/workflowgen:7.16.0-win-ltsc2019docker container run `
# ...
--env WFGEN_IISNODE_AUTH_loggingEnabled=true `
# ...
advantys/workflowgen:7.16.0-win-ltsc2019WFGEN_TRACE_WEB_APPS_LEVEL=Information
WFGEN_TRACE_WEB_APPS_INDENT=2
WFGEN_TRACE_ENGINE_LEVEL=Error
WFGEN_TRACE_ENGINE_INDENT=0docker container run `
# ...
--env WFGEN_DATABASE_CONNECTION_STRING=SomeConnectionString `
# ...
advantys/workflowgen:7.16.0-win-ltsc2019docker container run `
# ...
--env WFGEN_DATABASE_CONNECTION_STRING=SomeConnectionString `
--env WFGEN_DATABASE_READONLY_CONNECTION_STRING=SomeReadOnlyConnectionString `
# ...
advantys/workflowgen:7.16.0-win-ltsc2019docker 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-ltsc2019apiVersion: 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-secdocker volume create licensesdocker volume inspect -f "{{.Mountpoint}}" licensesCopy-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-ltsc2019docker 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-ltsc2019docker container exec -i wfgen powershell C:\set-state.ps1 Offlinekubectl 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 Onlinekubectl exec -i wfgen-pod -- powershell C:\set-state.ps1 Onlinedir_sync
engine
web_apps
win_services


Cette section présente comment exécuter rapidement le conteneur WorkflowGen avec une architecture minimale sur Kubernetes.
Cet exemple est conçu pour Azure Kubernetes Service (AKS). Pour commencer avec AKS, consultez l'article Microsoft .
À 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.
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.
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 :
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 :
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 :
N'oubliez pas d'appliquer cette configuration :
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 :
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 :
N'oubliez pas d'appliquer ceci :
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.
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 :
Appliquez ce contrôleur de réplication :
Appliquez les services Windows :
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 :
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.
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.
À 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.
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.
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é :
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 :
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 :
Vous pouvez enregistrer ce fichier sous values.yaml. Le nom n'est pas important.
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.
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.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wfgdata-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile
resources:
requests:
storage: 50Gikubectl apply -c .\wfgdata-pvc.ymlkubectl create secret generic wfgen-license-secret --from-file C:\Path\To\WorkflowGen.licapiVersion: 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_PASSWORDkubectl apply -f .\config.yml[guid]::NewGuid().ToString('N')
# fda7a6a81db2428b8885bd1210522755using 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.ymlapiVersion: 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: 100Gikubectl apply -f database.ymlapiVersion: 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-seckubectl apply -f wfgen-webapps.ymlapiVersion: 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-seckubectl apply -f wfgen-win-services.ymlkubectl expose deployment wfgen-webapps --type=LoadBalancer --name=wfgen-servicekubectl 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_KEYkubectl apply -f wfgen-config.ymlkubctl 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')
# fda7a6a81db2428b8885bd1210522755kubectl create secret generic wfgen-license-secret --from-file C:\Path\To\WorkflowGen.licreplicaCount: 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.tgzkubectl get services wfgen-servicekubectl get configmapkubectl edit configmap "<WFGEN_CONFIG_MAP>"kubectl get deploymentkubctl 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



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 ».
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.
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 :
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
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.
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.
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.
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.
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
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.
Pour utiliser votre propre image WorkflowGen, vous pouvez modifier la référence par défaut comme ceci :
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 :
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.
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 :
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 :
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.
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.
Pour utiliser votre propre image de base de données WorkflowGen, vous pouvez modifier la référence par défaut comme ceci :
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.
É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.
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.
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.
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.
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.
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.
Créez d'abord le fichier de valeurs :
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.
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.
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.
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.
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
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 » :
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
Ensuite, vous devez déployer les objets à l'aide de la commande suivante :
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 :
La dernière étape consiste à référencer les objets que vous venez de déployer dans votre fichier de valeurs avant d'installer :
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 » :
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
Ensuite, vous devez déployer les objets à l'aide de la commande suivante :
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.



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_ApplicationSecurityPasswordSymmetricEncryptionKeyapiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
WFGEN_DATABASE_CONNECTION_STRING: U2VydmVyPXNvbWUuc3FsLnNlcnZlci5jb20sMTQzMzsuLi4K
WFGEN_APP_SETTING_ApplicationSerialNumber: TVktV0ZHLUxJQy1OVU1CRVIK
WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey: MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgKusing 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 # MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgKecho 'Server=some.sql.server.com,1433;...' | base64 # U2VydmVyPXNvbWUuc3FsLnNlcnZlci5jb20sMTQzMzsuLi4K
echo 'MY-WFG-LIC-NUMBER' | base64 # TVktV0ZHLUxJQy1OVU1CRVIK
echo '1f73c842692f436b92411641c46fb338' | base64 # MWY3M2M4NDI2OTJmNDM2YjkyNDExNjQxYzQ2ZmIzMzgKapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-wfg-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile
resources:
requests:
storage: 50GiapiVersion: 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_PASSWORDapiVersion: 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-pathimage:
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: 1f73c842692f436b92411641c46fb338workflowgen:
dataPvcSpec:
accessModes:
- ReadWriteMany
storageClassName: azurefile
resources:
requests:
storage: 50Gikubectl create secret generic wfgen-license-secret --from-file ./WFG.licworkflowgen:
license:
secretName: wfgen-license-secret
items:
- key: WFG.lic
path: WFG.licworkflowgen:
image:
reference: mycorporation/workflowgen
tag: 7.18.3-win-ltsc2019workflowgen:
service:
kind: LoadBalancerworkflowgen:
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: 1Gidatabase:
create: falsedatabase:
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_USERdatabase:
volumeClaimTemplateSpec:
accessModes:
- ReadWriteOnce
storageClassName: default
resources:
requests:
storage: 100Gidatabase:
image:
reference: mycorporation/workflowgen-sql
tag: 7.18.3-ubuntu-18.04database:
fullnameOverride: my-databasedatabase:
resources:
limits:
cpu: '2'
memory: 4Gi
requests:
cpu: '1'
memory: 2Giingress:
enabled: falseingress:
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt
hosts:
- host: &wfgenHost myinstance.example.com
paths:
- /
tls:
- secretName: tls-secret
hosts:
- *wfgenHosthooks:
preupgrade:
enabled: falsehooks:
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"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.lichelm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgzreplicaCount: 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: falsekubectl create secret generic wfgen-license-secret --from-file ./WFG.lichelm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgzreplicaCount: 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.lichelm install -f ./my-values.yaml wfgen https://github.com/advantys/workflowgen-releases/releases/download/7.18.2/workflowgen-0.0.3.tgzkubectl apply -f ./my-configmap.yaml
kubectl apply -f ./my-secret.yamlworkflowgen:
createConfigMap: false
configMapNameOverride: my-configmap
createSecret: false
secretNameOverride: my-secretkubectl apply -f ./my-wfg-pvc.yamlworkflowgen:
createDataPvc: false
dataPvcNameOverride: my-wfg-pvckubectl apply -f ./my-db-configmap.yaml
kubectl apply -f ./my-db-secret.yamldatabase:
createConfigMap: false
configMapNameOverride: my-db-configmap
createSecret: false
secretNameOverride: my-db-secret