Applies to version: 2026.1.x and above; authors: Jakub Kawa, Tomasz Błach
This is an updated version of the original article: Containerization of WEBCON BPS
Introduction
With the release of version 2023.1.x of the system, the ability to containerize WEBCON components was introduced. Starting with version 2026.1.x, the container startup model has been simplified — instead of separate images for the Portal and the Service, a single bootstrapper image is provided, which, depending on the STARTUP_MODE environment variable passed to it, starts as either WEBCON Portal or WEBCON Workflow Service. Search Server (Solr) remains a separate image, because it is built on Linux.
Containerization is an alternative to the standard installation of WEBCON components and is particularly useful when using cloud services, significantly simplifying the installation of the system in such an environment.
This article provides a step-by-step guide to preparing an installation of WEBCON in which the core components run in independent containers (Portal and Service in separate containers).
Note: running WEBCON components in containers is possible only for users holding subscription licenses. Starting an additional container will consume another license. If a container is shut down correctly, the license is released. A report on license usage is available in WEBCON Designer Studio.
In addition, an external authentication provider will be required, e.g. Microsoft Entra ID or OpenID Connect, since Windows authentication does not work correctly inside containers.
Choosing a containerization platform
Thanks to the use of Docker images, WEBCON can be installed and run in containers on many platforms (most containerization platforms use Docker images).
In this article, containers will be created and run using Docker Desktop. This program must be installed beforehand, and all installation steps must be performed on the same computer.
Following the same approach as in the example described here, WEBCON can be installed in containers on any containerization platform (e.g. Azure Container Instances or Azure Kubernetes Service).
One image — startup modes
The Portal and the Workflow Service are started from the same webconbps/bootstrapper image. The role of the container is determined solely by the STARTUP_MODE environment variable:
| STARTUP_MODE | Container role | Disabled modules |
| portal | WEBCON Portal | modulesOrchestration |
| service | WEBCON Workflow Service | designerDesk, designerStudio, portal |
When the container starts, the entrypoint script reads STARTUP_MODE, sets the enabled flags in the module configuration files, and starts the WebCon.WorkFlow.Bootstrapper.exe process. There is no need to manually edit the configuration files inside the image.
Image location
The images are published in the Docker Hub registry:
bootstrapper (Portal and Workflow Service): https://hub.docker.com/r/webconbps/bootstrapper
Search Server (Solr): https://hub.docker.com/r/webconbps/search
A list of available versions can be found under the Tags tab in both repositories.
Image tag
The tag of the bootstrapper image consists of the WEBCON version number and the name of the base operating system image:
webconbps/bootstrapper:<version>-windowsservercore-ltsc2022
In this article, version 2026.2.2.121 is used, i.e. the image:
webconbps/bootstrapper:2026.2.2.121-windowsservercore-ltsc2022
The bootstrapper image is built on top of mcr.microsoft.com/dotnet/aspnet:10.0-windowsservercore-ltsc2022, and therefore requires Docker Desktop to be running in Windows container mode with process isolation (--isolation=process). The Search Server image is a Linux image, so it must be created while Linux container mode is switched on.
Installation plan
During the installation of WEBCON in containers, only the database is created using the installer. The remaining system components must be downloaded as Docker images and started in containers using the appropriate commands.
For this reason, it is good practice to plan the environment in advance, listing the system components, their network addresses, and the communication between them.
The diagram below shows the installation described in this article together with the addresses of the individual services.

In this article we use Docker Desktop. All the core WEBCON components can be installed in it. Only the system databases must be created on an existing Microsoft SQL Server instance accessible from the computer on which WEBCON is running in containers.
Installation steps:
Data storage
The platform uses two types of databases. All data entered by users, as well as configuration data, is stored in relational Microsoft SQL Server databases. In addition, a large part of this data feeds the Solr search indexes handled by Search Server.
Creating the Search Server container




Creating the SQL databases

Note: the Solr user is the administrator of this Solr instance. Make sure not to lose its password, as it is not stored anywhere else.
While performing this step, the Search Server container must be running, since the installer will connect to it in order to change the passwords and verify that the container’s contents are correct.

Docker network and environment variable files
The Portal, Service, and reverse proxy containers communicate with each other by host name, so they must operate on a shared Docker network. Create it before starting the containers:
docker network create webcon_net
In the following steps, the containers are given the following host names on this network: Portal – webcon, Service – webcon_service, reverse proxy – caddy_proxy.
Container configuration is passed via environment variable files. These are exactly the same values that can be set using the appsettings.json file in a standard WEBCON installation. Prepare three files in the current folder:
• user.env — a shared file with database connection details, used by both the Service and the Portal. Replace <SERVER>, <DBNAME>, <USER>, and <PASS> with your own values; for <DBNAME>, provide the name of the configuration database copied during database creation:
ConnectionStrings__ConfigDb=Server=<SERVER>;Database=<DBNAME>;User ID=<USER>;Password=<PASS>;Trust Server Certificate=True;
ConnectionStrings__LogsDb=Server=<SERVER>;Database=<DBNAME>;User ID=<USER>;Password=<PASS>;Trust Server Certificate=True;
Serilog__MinimumLevel__Default='Information'
Keep in mind that the container is not part of a domain, so it is necessary to define a database user name and password as an alternative to the more commonly used domain-based login.
• service_env.env — Workflow Service container variables:
STARTUP_MODE=service
ExternalWebService__Port=58002
ExternalWebService__LicenseServicePort=8002
Kestrel__Endpoints__Http__Url=http://*:48442
modulesOrchestration__webconWorkflowServicePort=48443
modulesOrchestration__serviceModuleRunnerPort=48450
DOTNET_gcServer=1
DOTNET_GCDynamicAdaptationMode=1
ASPNETCORE_FORWARDEDHEADERS_ENABLED=True
Service__Config__InitServiceRoles__BasicFeatures=true
Service__Config__InitServiceRoles__LicenseService=true
• portal_env.env — Portal container variables:
STARTUP_MODE=portal
Kestrel__Endpoints__Http__Url=http://*:48441
DOTNET_gcServer=1
DOTNET_GCDynamicAdaptationMode=1
DataProtection__ApplicationName='bps_container'
ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
Meaning of the most important variables:
If the containers need to resolve host names from the corporate network (e.g. the name of the SQL server), add the --dns <DNS server address> parameter to the docker run commands.
Creating the Workflow Service container
docker run -d --name webcon_service_container --hostname webcon_service --network webcon_net --isolation=process -p 48442:48442 -p 48443:48443 -p 48450:48450 -e ExternalWebService__Host=webcon_service -e ServiceName=webcon_service -e Hostname=webcon_service --env-file service_env.env --env-file user.env webconbps/bootstrapper:2026.2.2.121-windowsservercore-ltsc2022
where:
You can verify that the Service started correctly by opening http://localhost:48442/health. The running container can be viewed under the Containers tab, and the startup logs (including the selected STARTUP_MODE mode) can be viewed with the command:
docker logs webcon_service_container
In this configuration, ports 58002 (ExternalWebService__Port) and 8002 (ExternalWebService__LicenseServicePort) are not published on the host – within the webcon_net network, the Portal communicates directly with the Service. If these services need to be used by clients outside the container network, add the parameters -p 58002:58002 -p 8002:8002 to the docker run command.
Starting the BPS Portal container
docker volume create hotfolder
docker run -d --name webcon_portal_container --hostname webcon --network webcon_net --isolation=process -p 48441:48441 -v hotfolder:C:/hotfolder -e ServiceName=webcon -e Hostname=webcon --env-file portal_env.env --env-file user.env webconbps/bootstrapper:2026.2.2.121-windowsservercore-ltsc2022
where:
Preparing the reverse proxy container for the Portal
Running the Portal in a container is often intended to make it easy to scale the web application by starting additional containers. In such a configuration, the Portal container is usually not exposed directly to users, but instead requires the use of a load balancer.
In the test installation described here, this configuration will be simulated by creating a container with a reverse proxy server for the Portal. Any server with this functionality can be used. This article uses the Caddy server, running on a Windows-based image.
The Caddy server container can be prepared as follows:
{
https_port 48440
}
https://localhost:48440 {
header {
X-Content-Type-Options nosniff
X-Frame-Options SAMEORIGIN
-Server
}
reverse_proxy {
to webcon:48441
stream_timeout 24h
stream_close_delay 5m
}
tls C:\etc\caddy\cert.pem C:\etc\caddy\key.pem
}
The stream_timeout and stream_close_delay parameters are important for correctly handling long-lived Portal connections (e.g. notifications). The X-Content-Type-Options and X-Frame-Options headers improve application security, while -Server removes the header that identifies the server.
Create a Dockerfile with the Caddy image, with the following content:
FROM caddy:windowsservercore-ltsc2022
COPY Caddyfile /etc/caddy/Caddyfile
COPY cert.pem /etc/caddy/cert.pem
COPY key.pem /etc/caddy/key.pem
docker build -t caddy/reverse.proxy .
docker run -d --name caddy_proxy --hostname caddy_proxy --network webcon_net --isolation=process -p 48440:48440 caddy/reverse.proxy
The reverse proxy container must be connected to the same webcon_net network the Portal is running on – only then will the webcon name from the Caddyfile be resolved correctly.
Environment configuration
The architecture of the configured solution is based on the following components:
Ports used:
| Port | Role |
| 48440 | reverse proxy (Caddy), HTTPS |
| 48441 | Portal – HTTP server (Kestrel__Endpoints__Http__Url) |
| 48442 | Workflow Service – HTTP server and /health endpoint |
| 48443 | Workflow Service – workflow service (modulesOrchestration__webconWorkflowServicePort) |
| 48450 | Workflow Service – communication with modules (modulesOrchestration__serviceModuleRunnerPort) |
| 58002 | Workflow Service – external service (ExternalWebService__Port) |
| 8002 | Workflow Service – license service (ExternalWebService__LicenseServicePort) |
| 8983 | Search Server (Solr) |
Accordingly, to start the Portal running in a container, open the link: https://nbdemo.webcon.pl:48440/.
Below is a list of steps to complete the configuration of the installed WEBCON platform. These are configuration steps required for every installation, not only one performed in Docker containers.