Recommended Architectures

Overview

This section presents the recommended container architecture for WorkflowGen in order to run the web portals and Windows services. There will be many references to the image configuration properties; see the Configuration section for information on these.
This section is only about container architecture. SQL data and volumes should always be used regardless of the architecture.
See the SQL Server Hosting Options section for information on SQL database deployments, and the File Management section for information on volume deployment.

Single container

Single container architecture
This is the simplest architecture you can run with WorkflowGen: a single container without replicas that runs both web applications and Windows Services. Therefore, you would set the WFGEN_START_SERVICE environment variable to all. This architecture is well suited to development and test environments, but it can also be considered when the performance with a single container fits the product usage. You can't replicate the container because there should only be one instance of each WorkflowGen Windows Service running.

Docker Compose example

This is the same example as in the Getting Started section. It has one WorkflowGen container that runs every service (web applications and Windows Services).
1
version: '3.7'
2
services:
3
workflowgen:
4
image: advantys/workflowgen:7.18.3-win-ltsc2019
5
restart: always
6
env_file:
7
- '.\workflowgen.env'
8
ports:
9
- '8080:80'
10
volumes:
11
- 'wfgdata:C:\wfgen\data'
12
- 'licenses:C:\wfgen\licenses:RO'
13
depends_on:
14
- database
15
database:
16
image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
17
env_file:
18
- '.\database.env'
19
volumes:
20
- 'sqldata:C:\wfgen\sql'
21
22
volumes:
23
wfgdata:
24
licenses:
25
external: true
26
sqldata:
27
Copied!

Helm example

This example is different from the Getting Started example. This Helm release is not scalable in the cluster. It has a pod that runs all of the WorkflowGen services (web applications and Windows services) and another pod for the database. You can use the steps in the Getting Started example to generate the requested values. Don't forget to get the external IP address of the load balancer once it's created.
1
scalable: false
2
3
workflowgen:
4
resources:
5
limits:
6
cpu: '1'
7
memory: 2Gi
8
requests:
9
cpu: '1'
10
memory: 2Gi
11
config:
12
WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
13
WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
14
WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
15
WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
16
WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
17
WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
18
secret:
19
ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
20
ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
21
WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
22
WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
23
WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
24
license:
25
secretName: wfgen-license-secret
26
items:
27
- key: WorkflowGen.lic
28
path: WorkflowGen.lic
29
dataPvcSpec:
30
accessModes:
31
- ReadWriteMany
32
storageClassName: azurefile
33
resources:
34
requests:
35
storage: 50Gi
36
service:
37
type: LoadBalancer
38
39
database:
40
fullnameOverride: wfgen-database
41
nodeSelector:
42
kubernetes.io/os: linux
43
securityContext:
44
runAsUser: 0
45
runAsGroup: 0
46
resources:
47
limits:
48
cpu: '1'
49
memory: 2Gi
50
requests:
51
cpu: '500m'
52
memory: 1Gi
53
config:
54
ACCEPT_EULA: 'Y'
55
SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
56
WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
57
WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
58
WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
59
secret:
60
SA_PASSWORD: 'strong(!)Pass'
61
WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
62
WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
63
WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
64
volumeClaimTemplateSpec:
65
accessModes:
66
- ReadWriteOnce
67
storageClassName: default
68
resources:
69
requests:
70
storage: 100Gi
71
72
ingress:
73
enabled: false
74
Copied!

Multiple web application instances, single Windows Services instance

Multiple web application instances, single Windows services instance
Since there can be only one instance of each WorkflowGen Windows Service running at a time, this architecture lets you run multiple replicas of the web applications in order to scale WorkflowGen to meet your traffic and processing needs without having more instances of the Windows Services.
You'll need to set the WFGEN_START_SERVICE environment variable to web_apps for the web applications' containers, and to win_services for the single container to run all of the Windows Services without web applications. This architecture is good for scaling the web portals to the traffic and processing needs, without too much pressure on the Windows Services.

Docker Compose example

1
version: '3.7'
2
services:
3
workflowgen-web-apps:
4
image: advantys/workflowgen:7.18.3-win-ltsc2019
5
restart: always
6
env_file:
7
- '.\workflowgen.env'
8
environment:
9
WFGEN_START_SERVICE: web_apps
10
ports:
11
- '8080:80'
12
volumes:
13
- 'wfgdata:C:\wfgen\data'
14
- 'licenses:C:\wfgen\licenses:RO'
15
depends_on:
16
- database
17
workflowgen-win-services:
18
image: advantys/workflowgen:7.18.3-win-ltsc2019
19
restart: always
20
env_file:
21
- '.\workflowgen.env'
22
environment:
23
WFGEN_START_SERVICE: win_services
24
volumes:
25
- 'wfgdata:C:\wfgen\data'
26
- 'licenses:C:\wfgen\licenses:RO'
27
depends_on:
28
- database
29
database:
30
image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
31
env_file:
32
- '.\database.env'
33
volumes:
34
- 'sqldata:C:\wfgen\sql'
35
36
volumes:
37
appdata:
38
licenses:
39
external: true
40
sqldata:
41
Copied!

Helm example

This is the same example as in the Getting Started section. The Windows Services containers will always be in the same pod when you use the WorkflowGen Helm chart. You can use the steps in the Getting Started example to generate the requested values. Don't forget to get the external IP address of the load balancer once it's created.
1
replicaCount: 3
2
3
workflowgen:
4
resources:
5
limits:
6
cpu: '1'
7
memory: 2Gi
8
requests:
9
cpu: '1'
10
memory: 2Gi
11
config:
12
WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
13
WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
14
WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
15
WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
16
WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
17
WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
18
secret:
19
ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
20
ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
21
WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
22
WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
23
WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
24
license:
25
secretName: wfgen-license-secret
26
items:
27
- key: WorkflowGen.lic
28
path: WorkflowGen.lic
29
dataPvcSpec:
30
accessModes:
31
- ReadWriteMany
32
storageClassName: azurefile
33
resources:
34
requests:
35
storage: 50Gi
36
service:
37
type: LoadBalancer
38
39
winServices:
40
dirSync:
41
resources:
42
limits:
43
cpu: '1'
44
memory: 1Gi
45
requests:
46
cpu: '500M'
47
memory: 1Gi
48
engine:
49
resources:
50
limits:
51
cpu: '1'
52
memory: 1Gi
53
requests:
54
cpu: '500M'
55
memory: 1Gi
56
57
database:
58
fullnameOverride: wfgen-database
59
nodeSelector:
60
kubernetes.io/os: linux
61
securityContext:
62
runAsUser: 0
63
runAsGroup: 0
64
resources:
65
limits:
66
cpu: '1'
67
memory: 2Gi
68
requests:
69
cpu: '500m'
70
memory: 1Gi
71
config:
72
ACCEPT_EULA: 'Y'
73
SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
74
WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
75
WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
76
WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
77
secret:
78
SA_PASSWORD: 'strong(!)Pass'
79
WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
80
WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
81
WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
82
volumeClaimTemplateSpec:
83
accessModes:
84
- ReadWriteOnce
85
storageClassName: default
86
resources:
87
requests:
88
storage: 100Gi
89
Copied!

Multiple web application instances, dedicated Windows services containers

Multiple web application instances, dedicated Windows services containers
This recommended architecture is the most scalable. It has multiple containers for the web applications that can be scaled for increased traffic or processing needs, and has dedicated containers for each Windows Service: one for the directory synchronization service and one for the engine service. Therefore, you would set the WFGEN_START_SERVICE environment variable to web_apps for the web applications' containers, to dir_sync for the directory synchronization service container, and to engine for the engine service container. This architecture is good for high availability and high performance scenarios.

Docker Compose example

1
version: '3.7'
2
services:
3
workflowgen-web-apps:
4
image: advantys/workflowgen:7.18.3-win-ltsc2019
5
restart: always
6
env_file:
7
- '.\workflowgen.env'
8
environment:
9
WFGEN_START_SERVICE: web_apps
10
ports:
11
- '8080:80'
12
volumes:
13
- 'wfgdata:C:\wfgen\data'
14
- 'licenses:C:\wfgen\licenses:RO'
15
depends_on:
16
- database
17
workflowgen-dir-sync-service:
18
image: advantys/workflowgen:7.18.3-win-ltsc2019
19
restart: always
20
env_file:
21
- '.\workflowgen.env'
22
environment:
23
WFGEN_START_SERVICE: dir_sync
24
volumes:
25
- 'wfgdata:C:\wfgen\data'
26
- 'licenses:C:\wfgen\licenses:RO'
27
depends_on:
28
- database
29
workflowgen-engine-service:
30
image: advantys/workflowgen:7.18.3-win-ltsc2019
31
restart: always
32
env_file:
33
- '.\workflowgen.env'
34
environment:
35
WFGEN_START_SERVICE: engine
36
volumes:
37
- 'wfgdata:C:\wfgen\data'
38
- 'licenses:C:\wfgen\licenses:RO'
39
depends_on:
40
- database
41
database:
42
image: advantys/workflowgen-sql:7.18.3-express-win-ltsc2019
43
env_file:
44
- '.\database.env'
45
volumes:
46
- 'sqldata:C:\wfgen\sql'
47
48
volumes:
49
wfgdata:
50
licenses:
51
external: true
52
sqldata:
53
Copied!

Helm example

This is the same example as in the Getting Started section. The Windows services containers will always be in the same pod when you use the WorkflowGen Helm chart. You can use the steps in the Getting Started example to generate the requested values. Don't forget to get the external IP address of the load balancer once it's created.
1
replicaCount: 3
2
3
workflowgen:
4
resources:
5
limits:
6
cpu: '1'
7
memory: 2Gi
8
requests:
9
cpu: '1'
10
memory: 2Gi
11
config:
12
WFGEN_APP_SETTING_ApplicationUrl: http://10.0.1.1/wfgen
13
WFGEN_DATABASE_CONNECTION_STRING_FILE: C:\secrets\WFGEN_DATABASE_CONNECTION_STRING
14
WFGEN_APP_SETTING_ApplicationSerialNumber_FILE: C:\secrets\ApplicationSerialNumber
15
WFGEN_APP_SETTING_ApplicationSecurityPasswordSymmetricEncryptionKey_FILE: C:\secrets\ApplicationSecurityPasswordSymmetricEncryptionKey
16
WFGEN_MACHINE_KEY_DECRYPTION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_DECRYPTION_KEY
17
WFGEN_MACHINE_KEY_VALIDATION_KEY_FILE: C:\secrets\WFGEN_MACHINE_KEY_VALIDATION_KEY
18
secret:
19
ApplicationSerialNumber: <YOUR_WFG_LIC_KEY>
20
ApplicationSecurityPasswordSymmetricEncryptionKey: <YOUR_NEW_GUID>
21
WFGEN_DATABASE_CONNECTION_STRING: 'Server=wfgen-database-0.wfgen-database.default.svc.cluster.local,1433;Database=WFGEN;User ID=WFGEN_USER;Password=strong(!)Pass;'
22
WFGEN_MACHINE_KEY_DECRYPTION_KEY: '39B3AE9CCCF94AA47D795EC84F7CCB7928F5D59BE2EB2BBA4FE2AC0B3C8D0C85'
23
WFGEN_MACHINE_KEY_VALIDATION_KEY: '82F6247A5DBF8666FB60B8EFE6483360436F0EC426CC0351A9569C607B46C1FAD6497406DD8B0B519DD83CAA6764904C89999D742638ECE756E7C0B8799B45E9'
24
license:
25
secretName: wfgen-license-secret
26
items:
27
- key: WorkflowGen.lic
28
path: WorkflowGen.lic
29
dataPvcSpec:
30
accessModes:
31
- ReadWriteMany
32
storageClassName: azurefile
33
resources:
34
requests:
35
storage: 50Gi
36
service:
37
type: LoadBalancer
38
39
winServices:
40
dirSync:
41
resources:
42
limits:
43
cpu: '1'
44
memory: 1Gi
45
requests:
46
cpu: '500M'
47
memory: 1Gi
48
engine:
49
resources:
50
limits:
51
cpu: '1'
52
memory: 1Gi
53
requests:
54
cpu: '500M'
55
memory: 1Gi
56
57
database:
58
fullnameOverride: wfgen-database
59
nodeSelector:
60
kubernetes.io/os: linux
61
securityContext:
62
runAsUser: 0
63
runAsGroup: 0
64
resources:
65
limits:
66
cpu: '1'
67
memory: 2Gi
68
requests:
69
cpu: '500m'
70
memory: 1Gi
71
config:
72
ACCEPT_EULA: 'Y'
73
SA_PASSWORD_FILE: /mnt/secrets/SA_PASSWORD
74
WFGEN_DATABASE_USER_USERNAME_FILE: /mnt/secrets/WFGEN_DATABASE_USER_USERNAME
75
WFGEN_DATABASE_USER_PASSWORD_FILE: /mnt/secrets/WFGEN_DATABASE_USER_PASSWORD
76
WFGEN_ADMIN_PASSWORD_FILE: /mnt/secrets/WFGEN_ADMIN_PASSWORD
77
secret:
78
SA_PASSWORD: 'strong(!)Pass'
79
WFGEN_DATABASE_USER_PASSWORD: 'strong(!)Pass'
80
WFGEN_ADMIN_PASSWORD: 'strong(!)Pass'
81
WFGEN_DATABASE_USER_USERNAME: WFGEN_USER
82
volumeClaimTemplateSpec:
83
accessModes:
84
- ReadWriteOnce
85
storageClassName: default
86
resources:
87
requests:
88
storage: 100Gi
89
Copied!
Last modified 1yr ago