Categories

Versions

Upgrade the Docker version of AI Hub from 2025.1.1 to 2026.0.0

As part of the upgrade, please create two new files in the indicated subfolders, 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

proxy/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;
+#       }

panopticon/python/requirements.txt

@@ -1,4 +1,10 @@
+uvicorn[standard]==0.34.0
+gunicorn==23.0.0
+fastapi[all]==0.115.9
+pandas==2.2.3
+scikit-learn==1.5.2
+pyarrow==19.0.1
 python-string-utils==1.0.0
-requests==2.28.1
-beautifulsoup4==4.12.2
-lxml==4.9.2
+requests==2.32.3
+beautifulsoup4==4.13.1
+lxml==5.3.0

.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: