Indicium setup
Indicium is a .NET Core application, which means that it is capable of hosting itself with a built-in web server. However, for security and management reasons, we do not recommend exposing the built-in web server in production environments. Instead, we recommend hosting Indicium behind an IIS proxy, since IIS is rich in features and offers great management tools.
This guide explains how to integrate Indicium in an IIS proxy.
When you are using Automated Machine Learning in your environment, you need to install and configure an additional component. For more information, see the AutoML guide.
About Indicium
Two types of the Thinkwise Indicium Application Tier are available:
- Indicium Basic: for use with the Windows GUI. This basic version does not support, for example, system flows and OpenID.
- Indicium: for use with the Universal GUI and via API's. This version uses the full range of Indicium functionality.
Quick reference guide Indicium setup
Instead of using the Deployment Center, this document describes how to deploy Indicium manually (on premise).
To deploy Indicium in the cloud:
- Microsoft Azure
- Amazon AWS
- Google Cloud
Follow these steps to manually deploy Indicium on premise (using IIS): |
---|
1. Check - Before you start, check if your systems meet the prerequisites. |
2. Download - Download Indicium and save the files. |
3. Application pool - Create an application pool in IIS. |
4. Web application - Create the web application. |
If necessary: Troubleshooting or Monitoring Indicium live. |
For a video explanation on how to manually deploy Indicium (including troubleshooting), see: Masterclass Indicium. It is an extensive video that also covers:
- the deployment of Universal GUI (1:13:00)
- the deployment of Windows GUI (1:19:00)
- API's in Indicium (1:28:00).
Prerequisites
Make sure to meet the following prerequisites before you install Indicium on IIS:
- Current
- 2024.1.14 and older
- Indicium Basic and older than 2021.1.17
Required | More information |
---|---|
IIS | Check if IIS has been installed. See: Configuring IIS. |
.NET 8 | Indicium is built using ASP.NET Core. The ASP.NET Core 8 runtime must be installed on the web server. If you also need to run Indicium on IIS, you must install the ASP.NET Core Runtime 8 Hosting Bundle. This module enables IIS to take control of starting and stopping Indicium, amongst other things. To check if the module has already been installed, open Modules on a website in the IIS Manager. |
![]() | |
URL Rewrite Module | Microsoft's URL Rewrite Module for IIS is not available in IIS by default, but necessary to facilitate the integration of Indicium. You can check whether it is already available in the IIS Manager, much like the previous module. If it has not been installed yet, use this link to install it: https://www.iis.net/downloads/microsoft/url-rewrite. |
![]() | |
WebSocket Protocol | Indicium makes use of SignalR to provide clients the option to subscribe for asynchronous updates on features such as:
To enable IIS to run SignalR the WebSocket Protocol feature must be installed on the server. |
![]() |
Optional | More information |
---|---|
.NET Framework | Some features of Indicium currently cannot be ported to run on .NET 8. Therefore, they are run as plugins in separate .NET Framework processes. The minimum .NET Framework version to run the plugin processes is 4.7.2. To check which version has been installed: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed. If the web server has no .NET Framework or a lower version, then use the following link to install the latest version: https://www.microsoft.com/net/download/thank-you/net472. This affects the following features:
|
DB2 Core driver | See: IBM i DB2 drivers for the Universal GUI with Indicium Note: Using DB2 with any of the reporting types mentioned in the .NET Framework section above, still require the old iSeries DB2 driver. |
Required | More information |
---|---|
IIS | Check if IIS has been installed. See: Configuring IIS. |
.NET 6 | Indicium is built using ASP.NET Core. The ASP.NET Core 6 runtime must be installed on the web server. If you also need to run Indicium on IIS, you must install the ASP.NET Core Runtime 6 Hosting Bundle. This module enables IIS to take control of starting and stopping Indicium, amongst other things. To check if the module has already been installed, open Modules on a website in the IIS Manager. |
![]() | |
URL Rewrite Module | Microsoft's URL Rewrite Module for IIS is not available in IIS by default, but necessary to facilitate the integration of Indicium. You can check whether it is already available in the IIS Manager, much like the previous module. If it has not been installed yet, use this link to install it: https://www.iis.net/downloads/microsoft/url-rewrite. |
![]() |
Optional | More information |
---|---|
.NET Framework | Some features of Indicium currently cannot be ported to run on .NET 6. Therefore, they are run as plugins in separate .NET Framework processes. The minimum .NET Framework version to run the plugin processes is 4.7.2. To check which version has been installed: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed. If the web server has no .NET Framework or a lower version, then use the following link to install the latest version: https://www.microsoft.com/net/download/thank-you/net472. This affects the following features:
|
DB2 Core driver | See: IBM i DB2 drivers for the Universal GUI with Indicium Note: Using DB2 with any of the reporting types mentioned in the .NET Framework section above, still require the old iSeries DB2 driver. |
Required | More information |
---|---|
IIS | Check if IIS has been installed. See: Configuring IIS. |
.NET Framework | Indicium is built with version 4.7.2 of the .NET Framework. This is the minimum version of the .NET Framework that needs to be installed on the web server. To check which version has been installed: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed. If the web server has no .NET Framework or a lower version, use the following link to install the latest version: https://www.microsoft.com/net/download/thank-you/net472. |
.NET Core Windows Server Hosting Module | The integration of Indicium in IIS requires Microsoft's .NET Core Windows Server Hosting Module on the web server. This module enables IIS to take control of starting and stopping Indicium, amongst other things. To check if it has already been installed, open Modules on a website in the IIS Manager. If it has not been installed yet, use this link to install it: https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-aspnetcore-5.0.4-windows-hosting-bundle-installer. |
![]() | |
URL Rewrite Module | Microsoft's URL Rewrite Module for IIS is a feature that is not available in IIS by default, but necessary to facilitate the integration of Indicium. You can check the availability in the IIS Manager, much like the previous module. If the module has not been installed yet, use this link to install it: https://www.iis.net/downloads/microsoft/url-rewrite. |
![]() |
Download and save Indicium
When all prerequisites mentioned above are met:
-
Download the Indicium software in TCP - Thinkwise products and save it.
-
If necessary, remove the security block in the zip file's Properties. (This won't be necessary if you use 7-ZIP.)
-
Extract the files.
-
In IIS, right-click on the site where you wish to install Indicium and select Explore. Typically, this location will be something like
C:\inetpub\wwwroot\indicium
. -
Add a folder and give it a name, eg 'indicium_universal'.
-
Copy all the extracted files to this folder.
Create an application pool
Always create a separate pool for each Indicium. Several Indiciums in one pool will not work. Moreover, it ensures that each Indicium can operate separately from the others and can be independently stopped and restarted.
To create a separate application pool in IIS for each Indicium:
-
Right-click Application Pools and choose Add Application Pool.
-
Name: name the application pool the same as the folder you created (eg, as in the example above: 'indicium_universal').
-
.NET CLR version: Indicium is capable of hosting itself and IIS is merely used as a proxy to expose Indicium to the network and/or the internet. As such, all the heavy lifting is performed by Indicium's own web server and the Application Pool in IIS does not even need to initialize a .NET runtime. Because of this, select No Managed Code when creating an Application Pool for Indicium, as it will positively affect the start up time.
-
Configuring pool users
When configuring the Database Pool User in the appsettings.json
file, you can only use database accounts and no domain accounts.
Domain accounts in the appsettings.json
file are not supported because they can cause severe performance degradation
and are considered a potentially dangerous security breach.
After creating the application pool in IIS, you can configure pool users:
-
Open the Advanced Settings (under the Actions menu) of the application pool.
-
Now configure an Identity (click the ...). This is the Application Pool Identity. Use, for example, a dedicated service account. The identity requires the following permissions:
- Full access (read, write, delete, list, execute) to the Indicium folder so, for example, logs and caches can be written.
- Read/write/modify control for all file system storage locations so files can be written, read, and deleted.
What these disk locations are depends on where the application stores its images and other files, and to which locations the application can upload files.
Indicium handles authentication and authorization internally and will perform all database traffic with a single user, the Database Pool User.
By default, the Application Pool Identity (as set in IIS) is used as Database Pool User.
To deviate from this, you can choose to override it by adding the PoolUserName and PoolPassword properties in the appsettings.json
file.
{
"MetaSourceConnection": {
"PoolUserName": "[username]",
"PoolPassword": "[password]"
}
}
Make sure the Database Pool User only has the minimal required permissions:
- It should only facilitate the communication with the database.
- It needs full access to all the databases present in IAM, including the IAM database itself. Therefore, it should have the role 'db_owner' for the IAM database and all end application databases.
- There is no need to add the Database Pool User as a user to IAM, since it does not need to log in to the end application.
None of the end users accessing the applications requires any physical permissions on any database, as this is regulated by the pool user.
Store pool user credentials encrypted
Indicium Universal GUI main administrator application administratorWhen using the Software Factory in Universal GUI, you can also store the pool user credentials in IAM or the Software Factory.
These credentials will be safely encrypted and used instead of the credentials stored in Indicium's appsettings.json
file.
To store the pool user credentials in IAM:
menu Authorization > Applications
-
Execute the task Set pool user credentials
.
-
Enter the user name and password.
-
Click Execute.
Store pool user credentials in IAM
In tab Form, the checkbox Custom pool user set will be selected automatically. This indicates that a pool user has been set for this application.
You can reset the credentials and use the ones stored in Indicium's appsettings.json file instead with task Reset pool user credentials
.
To store the pool user credentials in the Software Factory:
- For a runtime configuration: menu Maintenance > Runtime configurations.
- For an IAM configuration: menu Maintenance > IAM configurations.
Azure Active Directory as pool user
It is possible to use Azure Active Directory users as the database pool user for Indicium.
This cannot be used to create a new database using the Creation screen in the Software Factory.
To use an Azure Active Directory user, add the following settings to the appsettings.json
file:
{
"MetaSourceConnection": {
"UseAzureActiveDirectory": true,
"PoolUserName": "[username]",
"PoolPassword": "[password]"
}
}
The PoolUserName
and PoolPassword
are optional.
If not set, Indicium will use the managed identity that is running the App Service in Azure as the pool user
(similar to how it would use the Application Pool Identity for IIS).
To enable this, add the App Service as a user to the database using the following statements:
CREATE USER {APP_SERVICE_NAME} FROM EXTERNAL PROVIDER;
ALTER ROLE db_owner ADD MEMBER {APP_SERVICE_NAME};
Idle time-out
Check in IIS in the application pool's Advanced Settings that the Idle Time-out (minutes) is set to 0 (disabled) instead of 20. This ensures that scheduled process flows will continue running without user activity.
Start mode
Check in IIS in the application pool's Advanced Settings that the StartMode is set to AlwaysRunning instead of OnDemand. This ensures that Indicium will be active even if no web requests have been made yet.
If you change the StartMode setting to AlwaysRunning, you must enable the Application Initialization feature.
Create the web application
Main administrator-
Open the
appsettings.json
file with a text editor to configure the connection to the IAM database.For more information about PoolUserName and PoolPassword and whether you should use it or not, see above.
noteDouble quotes (
"
) and backslashes (\
) in theappsettings.json
file, for instance in the server address, need to be escaped by an extra backslash. For example:server\instance
should beserver\\instance
.{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Warning",
"Indicium": "Debug"
}
},
"MetaSourceConnection": {
"Server": "[server]",
"Database": "[iam_database]",
"PoolUserName": "[username]",
"PoolPassword": "[password]"
}
} -
Create a new web application: right click on the folder (e.g., 'indicium_universal') and select Convert to application.
-
Choose an Alias, the created Application Pool and the Physical path to Indicium.
-
The web application will attempt to listen on port 80 by default. If this port is already in use, choose another one: right-click Default Web Site and select Edit bindings.
-
In addition to the AlwaysRunning setting on the application pool, ensure Indicium is activated properly after the application pool has been (re)started. In the Advanced settings of the Indicium web application, enable the Preload option.
Note that the Preload feature of IIS will not work correctly if the website only accepts traffic via https, as the preload request is fired on http. A resolution for this situation can be found here.
-
Start the web application to verify that Indicium is running and has been configured correctly. This is possible in two ways:
- Open a browser and navigate to
https://server/indicium/
. - Or: select the application in IIS and choose Browse :80 (http) (depending on the set port).
- Open a browser and navigate to
If you do not get a result like the image above, refer to Troubleshooting issues.
Troubleshooting startup errors
If the root URL of Indicium (for example, https://server/indicium/
) gives an error,
it will most likely state "An error occurred while starting the application" and/or show error code 502.21.
With version 2.0.6+ of the AspNetCoreModuleV2 for IIS, the error page should include the cause of the error.
This is usually informative enough to point you in the right direction.
If not, follow the steps below in their stated order.
When Indicium encounters a database connection failure during start-up, it retries every two minutes for up to 10 minutes. The cause of the connection failure can be a temporary issue with the database server or network that resolves itself.
1. Database connection and version mismatch
Check Indicium's Logs folder for more information about what could be wrong:
- Incorrect version of Indicium or IAM.
- Incorrect database connection settings. Ensure that the information in the
appsettings.json
file is correct. Double-check the server address and the database. See: Create the web application. - Database Pool User lacks permission. Ensure that the Database Pool User has access to the configured IAM database and product databases. See: Configuring pool users.
2. Configuration and system requirements issues
Check Indicium's Logs folder for more information about what could be wrong.
If it is empty, start Indicium.exe (from the root folder) as the Database Pool User
(make sure that it is not overruled by the Application Pool User in the appsettings.json
file).
See if it runs successfully or displays an error. If so, take a screen shot because it disappears quickly.
-
Syntax error in
appsettings.json
. Ensure that the JSON in theappsettings.json
file is valid. The most common mistakes are forgetting to escape backslashes either in the server address or the pool username, or forgetting a comma after a property which is not the last one.If you want to be certain that the JSON is valid, you could use this website to validate it (clear any sensitive information first): https://jsonlint.com/.
-
Wrong version of the .NET Framework or .NET Core runtime installed. Double-check if your system meets the required versions as mentioned in Prerequisites.
-
Indicium's files are blocked by file security properties.
3. IIS hosting issues
-
Wrong version of the .NET Core Windows Hosting bundle installed. Double-check that your system meets the required versions as mentioned in Prerequisites.
-
No IIS Rewrite module. Double-check if your system meets the required versions as mentioned in Prerequisites.
-
The Application Pool User has no access to Indicium's folder. See: Configuring pool users.
-
The Application Pool user has no access to the certificate store. The following error indicates insufficient access rights to the Windows certificate store for the application pool identity:
System.Security.Cryptography.CryptographicException: The system cannot find the file specified.
Right-click on your Application Pool, open the Advanced Settings and make sure that the correct Identity is set. Note that Load User Profile should be set to True.
-
Multiple applications on one Application Pool (Indicium). Make sure you use a separate Application Pool for each Indicium.
4. Log files
If none of the above-mentioned solutions solves Indicium's startup problems, gather the log files and send them to your Thinkwise representative for further assistance.
See Indicium log files for more information.