Categories

Versions

Upgrade the Docker version of AI Hub from 2025.1.1 to 2026.0.0

As part of the upgrade please create the nginx-custom-locations.conf file in a new proxy subfolder with the content below and apply the following changes in your .env and docker-compose.yml files:

As usual with patch files, the first character in every line has a meaning:

  • Lines starting with + need to be added
  • Lines starting with - need to be removed
  • Lines starting with a space ` ` are just for context and should not be changed
  • Lines starting with @@ indicate the line numbers in the original file and should not be changed

nginx-custom-locations.conf

@@ -0,0 +1,16 @@
+#       # This is a configuration sample nginx location configuration routing traffic to ActiveMQ web console
+#       # You can extend the configuration if you want to route external traffic to AI Hub docker-networks
+#
+#       set $amq_webui_backend_service http://aihub-activemq:8161;
+#       location ~ ^/console(.*)$ {
+#           client_max_body_size 100M;
+#           proxy_set_header Host               $http_host;
+#           proxy_set_header X-Forwarded-Proto  $original_scheme;
+#           proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
+#           proxy_set_header X-Forwarded-Host   $http_host;
+#           proxy_set_header X-Forwarded-Server $host;
+#           proxy_set_header X-Forwarded-Port   $server_port;
+#
+#           proxy_read_timeout    300;
+#           proxy_pass            $amq_webui_backend_service/console$1$is_args$args;
+#       }

.env

@@ -75,7 +75,7 @@ COMPOSE_HTTP_TIMEOUT=600
 REGISTRY=rapidminer/

 # Version of the Init container
-INIT_VERSION=2025.1.1
+INIT_VERSION=2026.0.0

 # Enable configuring server settings for Python Scripting extension
 INIT_SHARED_CONDA_SETTINGS=true
@@ -86,7 +86,7 @@ INIT_SHARED_CONDA_SETTINGS=true
 #
 # ############################################

-PROXY_VERSION=2025.1.1
+PROXY_VERSION=2026.0.0

 # Deprecated, please use HTTP_PORT and HTTPS_PORT
 UNPRIVILEGED_PORTS=false
@@ -162,10 +162,10 @@ DEBUG_CONF_INIT=false
 # ############################################

 # Keycloak container version
-KEYCLOAK_VERSION=2025.1.1
+KEYCLOAK_VERSION=2026.0.0

 # Keycloak database parameters
-KEYCLOAK_POSTGRES_VERSION=2025.1.1
+KEYCLOAK_POSTGRES_VERSION=2026.0.0
 KEYCLOAK_DBSCHEMA=kcdb
 KEYCLOAK_DBUSER=kcdbuser
 KEYCLOAK_DBPASS=changeit
@@ -193,7 +193,7 @@ KC_HEALTH_ENABLED="true"

 SKIP_LICENSE_CHECK=false
 LICENSE_PROXY_PROFILES_ACTIVE=default,prometheus
-LICENSE_PROXY_VERSION=2025.1.1
+LICENSE_PROXY_VERSION=2026.0.0
 # License Proxy url with protocol and port
 LICENSE_PROXY_INTERNAL_URL=http://license-proxy:9898
 # Unique machine id of the deployment
@@ -207,7 +207,7 @@ LICENSE_PROXY_MODE=on_prem
 # must be set if mode is 'on_prem'
 ALTAIR_LICENSE_PATH=
 # ##
-
+MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=health
 # ## settings for 'altair_one' mode ###
 # Authentication type while connecting to the license server
 # possible values are 'credentials', 'auth_code' and 'static_token'
@@ -268,9 +268,9 @@ ALM_HHWU_PROXY_PASSWORD=
 # ############################################

 AIHUB_BACKEND_PROFILES_ACTIVE=default,prometheus
-AIHUB_FRONTEND_VERSION=2025.1.1
-AIHUB_BACKEND_VERSION=2025.1.1
-AIHUB_POSTGRES_VERSION=2025.1.1
+AIHUB_FRONTEND_VERSION=2026.0.0
+AIHUB_BACKEND_VERSION=2026.0.0
+AIHUB_POSTGRES_VERSION=2026.0.0
 AIHUB_DBHOST=aihub-postgresql
 AIHUB_DBSCHEMA=aihub-db
 AIHUB_DBUSER=aihub-db-user
@@ -330,7 +330,7 @@ RAPIDMINER_PYTHON_SDK_EXTENSION_DIR=/aihub/home/resources/python-sdk-extensions
 #
 # ############################################

-JOBAGENT_VERSION=2025.1.1
+JOBAGENT_VERSION=2026.0.0
 JOBAGENT_SPRING_PROFILES_ACTIVE=default,prometheus
 JOBAGENT_QUEUE_ACTIVEMQ_URI=failover:(tcp://aihub-activemq:61616)
 JOBAGENT_CONTAINER_COUNT=2
@@ -353,7 +353,7 @@ JOBAGENT_CONTAINER_PYTHON_SDK_EXTENSIONS_DIR=/home/rapidminer/resources/python-s
 #
 # ############################################

-ACTIVEMQ_VERSION=2025.1.1
+ACTIVEMQ_VERSION=2026.0.0
 BROKER_ACTIVEMQ_USERNAME=amq-user
 BROKER_ACTIVEMQ_PASSWORD="<SERVER-AMQ-PASS-PLACEHOLDER>"
 ENABLE_JMX_EXPORTER=true
@@ -364,7 +364,7 @@ ENABLE_JMX_EXPORTER=true
 #
 # ############################################

-JUPYTERHUB_VERSION=2025.1.1
+JUPYTERHUB_VERSION=2026.0.0
 JUPYTERHUB_DBHOST=jupyterhub-db
 JUPYTERHUB_DBSCHEMA=jupyterhub
 JUPYTERHUB_DBUSER=jupyterhubdbuser
@@ -396,7 +396,7 @@ JUPYTERHUB_DOCKER_DISABLE_NOTEBOOK_IMAGE_PULL_AT_STARTUP=False
 #
 # ############################################

-JUPYTERHUB_NOTEBOOK_VERSION=2025.1.1
+JUPYTERHUB_NOTEBOOK_VERSION=2026.0.0

 JUPYTERHUB_NOTEBOOK_SSO_NB_UID_KEY=X_NB_UID
 JUPYTERHUB_NOTEBOOK_SSO_NB_GID_KEY=X_NB_GID
@@ -429,7 +429,7 @@ JUPYTERHUB_NOTEBOOK_SHARED_ENV_VOLUME_NAME_DOCKERSPAWNER=coding-shared-vol
 #
 # ############################################

-PLATFORM_ADMIN_VERSION=2025.1.1
+PLATFORM_ADMIN_VERSION=2026.0.0
 PLATFORM_ADMIN_SSO_CLIENT_ID=platform-admin
 PLATFORM_ADMIN_SSO_CLIENT_SECRET=
 PLATFORM_ADMIN_DISABLE_PYTHON=false
@@ -441,7 +441,7 @@ PLATFORM_ADMIN_DISABLE_RTS=false
 #
 # ############################################

-CES_VERSION=2025.1.1
+CES_VERSION=2026.0.0
 DISABLE_DEFAULT_CHANNELS=True
 CONDA_CHANNEL_PRIORITY=strict
 HTTP_PROXY=
@@ -455,7 +455,7 @@ NO_PROXY=platform-admin
 # ############################################

 SCORING_AGENT_SPRING_PROFILES_ACTIVE=default,prometheus
-SCORING_AGENT_VERSION=2025.1.1
+SCORING_AGENT_VERSION=2026.0.0
 SCORING_AGENT_CACHE_REPOSITORY_CLEAR_ON_COLLECTION=false
 SCORING_AGENT_CACHE_REPOSITORY_MAXIMUM_SIZE=50
 # Maximum age in milliseconds of entries held in the cache
@@ -516,7 +516,7 @@ WEBAPI_REGISTRY_PASSWORD=secret
 WEBAPI_AIHUB_CONNECTION_PROTOCOL=http
 WEBAPI_AIHUB_CONNECTION_HOST=aihub-backend
 WEBAPI_AIHUB_CONNECTION_PORT=8080
-WEBAPI_AGENT_VERSION=2025.1.1
+WEBAPI_AGENT_VERSION=2026.0.0
 WEBAPI_GROUP_NAME=DEFAULT
 #WEBAPI_1_GROUP_NAME=
 #WEBAPI_2_GROUP_NAME=
@@ -539,7 +539,7 @@ SCORING_AGENT_RAPIDMINER_LOAD_USER_CERTIFICATES=true
 # ############################################

 WEBAPI_GATEWAY_PROFILES_ACTIVE=default,prometheus
-WEBAPI_GATEWAY_VERSION=2025.1.1
+WEBAPI_GATEWAY_VERSION=2026.0.0
 # The connect timeout in milliseconds
 WEBAPI_GATEWAY_SPRING_CLOUD_GATEWAY_HTTPCLIENT_CONNECT_TIMEOUT=15000
 WEBAPI_GATEWAY_SPRING_CLOUD_GATEWAY_HTTPCLIENT_RESPONSE_TIMEOUT=5m
@@ -563,11 +563,13 @@ WEBAPI_GATEWAY_LOADBALANCER_METRIC_STYLE=CPU_MEMORY
 # ############################################

 # Official grafana image from: https://hub.docker.com/r/grafana/grafana/
-OFFICIAL_GRAFANA_IMAGE=docker.io/grafana/grafana:11.6.2-ubuntu
+OFFICIAL_GRAFANA_IMAGE=docker.io/grafana/grafana:12.1.1-ubuntu
 GF_SECURITY_ANGULAR_SUPPORT_ENABLED=true
 # Image tag used by grafana-proxy and grafana-init
-GRAFANA_UTILS_VERSION=2025.1.1
+GRAFANA_UTILS_VERSION=2026.0.0
 GF_AUTH_GENERIC_OAUTH_SCOPES=email,openid
+GRAFANA_PROXY_REQUEST_TIMEOUT=60 # seconds
+GF_DATAPROXY_TIMEOUT=60 # seconds

 #
 # Grafana Proxy
@@ -599,7 +601,7 @@ GF_SERVER_ROOT_URL=
 #
 # ############################################

-LETSENCRYPT_VERSION=2025.1.1
+LETSENCRYPT_VERSION=2026.0.0

 # ############################################
 #
@@ -607,7 +609,7 @@ LETSENCRYPT_VERSION=2025.1.1
 #
 # ############################################

-DDM_VERSION=2025.1.1
+DDM_VERSION=2026.0.0

 # ############################################
 #
@@ -615,7 +617,7 @@ DDM_VERSION=2025.1.1
 #
 # ############################################

-LANDING_PAGE_VERSION=2025.1.1
+LANDING_PAGE_VERSION=2026.0.0
 LANDING_PAGE_SSO_CLIENT_ID=landing-page
 LANDING_PAGE_SSO_CLIENT_SECRET=
 LANDING_PAGE_DEBUG=false
@@ -651,10 +653,10 @@ DEPLOYED_PANOPTICON=false
 #
 # ############################################

-PANOPTICON_VIZAPP_VERSION=2025.1.1
-PANOPTICON_VIZAPP_PYTHON_VERSION=2025.1.1
-PANOPTICON_MONETDB_IMAGE_VERSION=2025.1.1
-PANOPTICON_RSERVE_IMAGE_VERSION=2025.1.1
+PANOPTICON_VIZAPP_VERSION=2026.0.0
+PANOPTICON_VIZAPP_PYTHON_VERSION=2026.0.0
+PANOPTICON_MONETDB_IMAGE_VERSION=2026.0.0
+PANOPTICON_RSERVE_IMAGE_VERSION=2026.0.0

 PANOPTICON_SSO_CLIENT_ID=panopticon
 PANOPTICON_SSO_CLIENT_SECRET=

docker-compose.yml

@@ -77,6 +77,7 @@ services:
     volumes:
       - ./ssl:/etc/nginx/ssl
       - platform-admin-uploaded-vol:/rapidminer/platform-admin/uploaded/
+      - ./proxy/nginx-custom-locations.conf:/etc/nginx/nginx-custom-locations.conf
     profiles:
       - proxy
       - deployment-init
@@ -111,7 +112,7 @@ services:
       retries: 5
       start_period: 5s
   keycloak-db:
-    image: "${REGISTRY}postgres-14:${KEYCLOAK_POSTGRES_VERSION}"
+    image: "${REGISTRY}postgres-17:${KEYCLOAK_POSTGRES_VERSION}"
     restart: always
     hostname: keycloak-db
     environment:
@@ -222,6 +223,7 @@ services:
       - SPRING_PROFILES_ACTIVE=${LICENSE_PROXY_PROFILES_ACTIVE}
       - KEYCLOAK_AUTH_SERVER_URL=${SSO_PUBLIC_URL}/auth/
       - KEYCLOAK_REALM=${SSO_IDP_REALM}
+      - MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE=${MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE:-health}
       - LICENSE_PROXY_MODE=${LICENSE_PROXY_MODE}
       - LICENSE_UNIT_MANAGER_AUTHENTICATION_TYPE=${LICENSE_UNIT_MANAGER_AUTHENTICATION_TYPE}
       - LICENSE_UNIT_MANAGER_AUTH_CODE=${LICENSE_UNIT_MANAGER_AUTH_CODE}
@@ -248,13 +250,13 @@ services:
     profiles:
       - altair-license
     healthcheck:
-      test: curl -s http://localhost:9898/actuator/health
+      test: curl -s http://localhost:9191/actuator/health
       interval: 60s
       timeout: 30s
       retries: 5
       start_period: 15s
   aihub-postgresql:
-    image: "${REGISTRY}postgres-14:${AIHUB_POSTGRES_VERSION}"
+    image: "${REGISTRY}postgres-17:${AIHUB_POSTGRES_VERSION}"
     hostname: aihub-postgresql
     restart: always
     environment:
@@ -343,7 +345,7 @@ services:
       retries: 5
       start_period: 15s
   aihub-activemq-volume-fix:
-    image: docker.io/library/busybox:stable
+    image: ${REGISTRY}busybox:${ACTIVEMQ_VERSION}
     hostname: aihub-activemq-volume-fix
     restart: "no"
     entrypoint: ["/bin/sh", "-c", "chown -R 1001:0 /var/lib/artemis-instance/data && chmod -R 2775 /var/lib/artemis-instance/data"]
@@ -987,7 +989,7 @@ services:
       - GF_PANELS_DISABLE_SANITIZE_HTML=${GF_PANELS_DISABLE_SANITIZE_HTML:-true}
       - GF_SERVER_SERVE_FROM_SUB_PATH=${GF_SERVER_SERVE_FROM_SUB_PATH:-true}
       - GF_AUTH_DISABLE_LOGIN_FORM=${GF_AUTH_DISABLE_LOGIN_FORM:-true}
-      - GF_AUTH_OAUTH_AUTO_LOGIN=${GF_AUTH_OAUTH_AUTO_LOGIN:-true}
+      - GF_AUTH_AUTO_LOGIN=${GF_AUTH_AUTO_LOGIN:-true}
       - GF_AUTH_BASIC_ENABLED=${GF_AUTH_BASIC_ENABLED:-false}
       - GF_AUTH_GENERIC_OAUTH_ENABLED=${GF_AUTH_GENERIC_OAUTH_ENABLED:-true}
       - GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP=${GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP:-true}
@@ -996,6 +998,7 @@ services:
       - GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH=${GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH:-contains(grafana_roles[*], 'admin') && 'Admin' || contains(grafana_roles[*], 'editor') && 'Editor' || 'Viewer'}
       - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=${GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS:-rapidminer-aihub-datasource}
       - GF_AUTH_GENERIC_OAUTH_SCOPES=${GF_AUTH_GENERIC_OAUTH_SCOPES:-email}
+      - GF_DATAPROXY_TIMEOUT=${GF_DATAPROXY_TIMEOUT:-60}
       - TZ=${TZ}
     volumes:
       - grafana-home-vol:/var/lib/grafana
@@ -1029,6 +1032,7 @@ services:
       - ENPOINTS_GATEWAY_INTERNAL_URL=${REACT_APP_WEBAPI_GATEWAY_URL}
       - GRAFANA_PROXY_LOGGING_LEVEL=${GRAFANA_PROXY_LOGGING_LEVEL}
       - LOG_RESPONSE_DATA=${GRAFANA_PROXY_LOG_RESPONSE_DATA}
+      - REQUEST_TIMEOUT=${GRAFANA_PROXY_REQUEST_TIMEOUT}
       - TZ=${TZ}
     depends_on:
       aihub-backend: