From 6ee57c249df2c65ed4a709c77975f65ff520d34f Mon Sep 17 00:00:00 2001 From: Christina Ausley Date: Thu, 4 Dec 2025 12:10:50 -0800 Subject: [PATCH 1/8] apply rdbms support policy --- .../miscellaneous/configuration-variables.md | 2 +- .../concepts/schema-and-migration.md | 2 +- .../configuring-secondary-storage.md | 31 ++++++++++++------- .../concepts/secondary-storage/index.md | 24 ++++++++------ .../database/using-existing-postgres.md | 2 +- .../air-gapped-installation.md | 2 +- .../manual/cloud-providers/amazon/aws-ec2.md | 2 +- .../quickstart/developer-quickstart/c8run.md | 15 ++++++--- 8 files changed, 50 insertions(+), 30 deletions(-) diff --git a/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md b/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md index 1d317d9ec4a..a8a745fc680 100644 --- a/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md +++ b/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md @@ -100,7 +100,7 @@ Identity requires a database to store information about resource authorization a :::note There are no default values for the variables above. See [supported environments](/reference/supported-environments.md#camunda-platform-8-self-managed) for a list of -supported databases. +supported databases. You may also review the [RDBMS support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). ::: ### Running Identity on Amazon Aurora PostgreSQL diff --git a/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md b/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md index c52e01611a9..203f88e2883 100644 --- a/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md +++ b/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md @@ -1,7 +1,7 @@ --- id: schema-and-migration title: Schema and data migration -description: "The orchestration cluster stores data in Elasticsearch and provides tools to manage schema and migrations." +description: "The orchestration cluster reads data from secondary storage and provides tools to manage schema and migrations." --- The orchestration cluster persists runtime and task data in Elasticsearch. On first startup, all required indices and templates are automatically created. diff --git a/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md b/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md index 23d33379b0b..1fceea5665d 100644 --- a/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md +++ b/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md @@ -16,6 +16,11 @@ You can configure secondary storage using Helm charts, Docker Compose, or manual Camunda uses the `data.secondary-storage` configuration to define which database backend supports advanced web applications and APIs. +:::note +For the latest list of supported relational databases and versions, see the +[RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). +::: + + If you’re using Docker Compose, configure your environment variables within the relevant service definition: @@ -72,8 +78,8 @@ For Elasticsearch: ```yaml environment: - - CAMUNDA_DATA_SECONDSTORAGE_TYPE=elasticsearch - - CAMUNDA_DATA_SECONDSTORAGE_ELASTICSEARCH_URL=http://elasticsearch:9200 + - CAMUNDA_DATA_SECONDARYSTORAGE_TYPE=elasticsearch + - CAMUNDA_DATA_SECONDARYSTORAGE_ELASTICSEARCH_URL=http://elasticsearch:9200 ``` To disable secondary storage: @@ -84,6 +90,7 @@ environment: ``` + In Self-Managed or Camunda 8 Run deployments, you can also configure storage directly in the `application.yaml` file: @@ -109,19 +116,21 @@ data: ``` + ## Choosing a storage backend -| Scenario | Recommended backend | Reason | -| :---------------------------------------- | :---------------------------------------------- | :------------------------------------------------------------ | -| Local testing or Camunda 8 Run quickstart | H2 | Fast, lightweight, and runs entirely in memory or file-based. | -| Production workloads | Elasticsearch or supported RDBMS | Scalable and persistent; designed for concurrent queries. | -| Debugging and troubleshooting | H2 or PostgreSQL (for debugging and inspection) | Easier to inspect and visualize data. | +| Scenario | Recommended backend | Reason | +| :---------------------------------------- | :--------------------------------- | :------------------------------------------------------------ | +| Local testing or Camunda 8 Run quickstart | H2 | Fast, lightweight, and runs entirely in memory or file-based. | +| Production workloads | Elasticsearch or a supported RDBMS | Scalable and persistent; designed for concurrent queries. | +| Debugging and troubleshooting | H2 or PostgreSQL | Easier to inspect and visualize data. | :::note H2 is suitable for testing and local development only. -For production use, Operate and Tasklist require a persistent secondary storage backend such as an RDBMS or Elasticsearch. +For production use, Operate and Tasklist require a persistent secondary storage backend such as a supported RDBMS or Elasticsearch. +Consult the [RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md) when choosing a relational database. ::: ## Run without secondary storage @@ -134,4 +143,4 @@ In this mode: - The Zeebe engine and primary storage remain active for process execution. - This configuration is best suited for local development or minimal-resource environments. -See [Run without secondary storage](./no-secondary-storage.md) for configuration examples and limitations. +See [run without secondary storage](./no-secondary-storage.md) for configuration examples and limitations. diff --git a/docs/self-managed/concepts/secondary-storage/index.md b/docs/self-managed/concepts/secondary-storage/index.md index 92fd556d572..cc0fbd2124f 100644 --- a/docs/self-managed/concepts/secondary-storage/index.md +++ b/docs/self-managed/concepts/secondary-storage/index.md @@ -12,10 +12,10 @@ Camunda uses a layered storage model that separates workflow execution data from Secondary storage is one of the two complementary layers in Camunda’s data model: -| Layer | Purpose | Typical technologies | -| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- | -| Primary storage | Persists real-time workflow execution state managed by [Zeebe](/self-managed/components/orchestration-cluster/zeebe/overview.md). | RocksDB (embedded in Zeebe) | -| Secondary storage | Stores workflow, decision, and task data for querying, visualization, and API access. | Elasticsearch / OpenSearch, RDBMS (H2, PostgreSQL, MariaDB) | +| Layer | Purpose | Typical technologies | +| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | +| Primary storage | Persists real-time workflow execution state managed by [Zeebe](/self-managed/components/orchestration-cluster/zeebe/overview.md). | RocksDB (embedded in Zeebe) | +| Secondary storage | Stores workflow, decision, and task data for querying, visualization, and API access. | Elasticsearch / OpenSearch, RDBMS (H2, PostgreSQL, MariaDB, MySQL, SQL Server, Oracle) | :::note Secondary storage is not a duplicate of primary data. It represents the historical workflow and decision data generated by the engine, optimized for querying and visualization. @@ -23,12 +23,18 @@ Secondary storage is not a duplicate of primary data. It represents the historic ### Supported storage options -Camunda supports the following secondary storage backends, depending on the version and use case: +Camunda supports multiple secondary storage backends. +For the latest list of supported database versions, see the +[RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). -| Database type | Availability | Use case | -| :------------------------------ | :------------------- | :------------------------------------------------------------------- | -| Elasticsearch / OpenSearch | General availability | Default for most production installations. | -| RDBMS (H2, PostgreSQL, MariaDB) | 8.9-alpha1+ | Lightweight local testing (H2) or future enterprise-grade RDBMS use. | +| Storage backend | Availability | Primary use cases | +| :--------------------------------------------------------- | :------------------- | :--------------------------------------------------------------------------------------------------- | +| Elasticsearch / OpenSearch | General availability | Default backend for most production installations. | +| RDBMS (H2, PostgreSQL, MariaDB, MySQL, SQL Server, Oracle) | Self-Managed 8.9+ | Lightweight development (H2) and enterprise-grade RDBMS deployments for Operate, Tasklist, and APIs. | + +:::note +Camunda’s RDBMS support depends on the versions defined in the RDBMS support policy. Always consult the policy before choosing a database version. +::: ### Data flow diff --git a/docs/self-managed/deployment/helm/configure/database/using-existing-postgres.md b/docs/self-managed/deployment/helm/configure/database/using-existing-postgres.md index a3fc682131b..82c49f7d6b3 100644 --- a/docs/self-managed/deployment/helm/configure/database/using-existing-postgres.md +++ b/docs/self-managed/deployment/helm/configure/database/using-existing-postgres.md @@ -19,7 +19,7 @@ username: `postgres` password: `examplePassword` ``` -- **Supported versions:**: Check the [supported environments](/reference/supported-environments.md) page to confirm which PostgreSQL versions are supported. +- **Supported versions:**: Check the [supported environments](/reference/supported-environments.md) and [RDBMS support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md) pages to confirm which PostgreSQL versions are supported. - **Database setup:** Ensure the required databases exist in your PostgreSQL instance. For this guide, create the following databases: ```SQL diff --git a/docs/self-managed/deployment/helm/configure/registry-and-images/air-gapped-installation.md b/docs/self-managed/deployment/helm/configure/registry-and-images/air-gapped-installation.md index 5312c0a30a7..0c321d115c2 100644 --- a/docs/self-managed/deployment/helm/configure/registry-and-images/air-gapped-installation.md +++ b/docs/self-managed/deployment/helm/configure/registry-and-images/air-gapped-installation.md @@ -156,7 +156,7 @@ Install the Helm chart by either making it available in a [private repository](h helm install camunda --version $HELM_CHART_VERSION ./camunda-platform-11.1.0.tgz ``` -For supported versions, see [supported environments](/reference/supported-environments.md#camunda-8-self-managed). +For supported versions, see [supported environments](/reference/supported-environments.md#camunda-8-self-managed) and the [RDBMS support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). ### Dependency overview diff --git a/docs/self-managed/deployment/manual/cloud-providers/amazon/aws-ec2.md b/docs/self-managed/deployment/manual/cloud-providers/amazon/aws-ec2.md index 34519202d69..7e1587cf6d6 100644 --- a/docs/self-managed/deployment/manual/cloud-providers/amazon/aws-ec2.md +++ b/docs/self-managed/deployment/manual/cloud-providers/amazon/aws-ec2.md @@ -89,7 +89,7 @@ With the reference architecture in place, you can proceed with the remaining ste ### Terraform prerequisites -To manage Camunda 8 infrastructure on AWS using Terraform, you need to configure Terraform's backend to store the state file remotely in an S3 bucket. This provides secure, persistent state storage for your infrastructure. +To manage Camunda 8 infrastructure on AWS using Terraform, you need to configure Terraform's backend to store the state file remotely in an S3 bucket. This provides secure, persistent primary storage for your infrastructure. :::note Advanced users may choose to configure a different backend. The setup described here is a recommended starting point for new users. diff --git a/docs/self-managed/quickstart/developer-quickstart/c8run.md b/docs/self-managed/quickstart/developer-quickstart/c8run.md index c0b494debc9..271b09054b1 100644 --- a/docs/self-managed/quickstart/developer-quickstart/c8run.md +++ b/docs/self-managed/quickstart/developer-quickstart/c8run.md @@ -21,6 +21,11 @@ Camunda 8 Run includes the following: Camunda 8 Run also supports document storage and management with [document handling](/self-managed/concepts/document-handling/overview.md). +:::note +For the latest list of supported relational databases and versions, see the +[RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). +::: + ## Prerequisites - **OpenJDK 21–23**: Required for running Camunda 8 as a Java application. @@ -242,11 +247,11 @@ For more information, see the [metrics](/self-managed/operational-guides/monitor ### Configure or switch secondary storage (Elasticsearch or H2) Camunda 8 Run supports multiple secondary-storage options. -By default, it uses **Elasticsearch**, but you can switch to **H2** for lightweight local development or testing. +By default, it uses **Elasticsearch**, but you can switch to an RDBMS backend such as **H2** for lightweight local development or testing. #### Default: Elasticsearch -In version 8.9-alpha1 and later, Camunda 8 Run starts with **Elasticsearch** as the default secondary storage. +Camunda 8 Run starts with **Elasticsearch** as the default secondary storage. ```yaml data: @@ -367,10 +372,10 @@ Camunda 8 uses two layers of storage: For more details on how these layers interact, see [secondary storage architecture](/self-managed/concepts/secondary-storage/index.md). Camunda 8 Run uses v2 APIs by default, so no additional configuration is required when H2 becomes the default in a future release. -### Known limitations (8.9-alpha1) +### Known limitations -- Operate and Tasklist are **not yet supported** when using H2. -- H2 is intended for **testing only** in this alpha release. +- Operate and Tasklist do not currently support running against H2. +- H2 is intended for testing and local development only. - Data stored in H2 is ephemeral unless configured as file-based. - Performance and memory use may vary depending on local environment. From b8477ca5f89166e209f99d510872049e1f8412e4 Mon Sep 17 00:00:00 2001 From: Christina Ausley Date: Thu, 4 Dec 2025 12:20:46 -0800 Subject: [PATCH 2/8] fix typo --- sidebars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sidebars.js b/sidebars.js index be82a677a2c..65e3743cb0b 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1426,7 +1426,7 @@ module.exports = { "self-managed/deployment/helm/configure/database/using-external-opensearch", "self-managed/deployment/helm/configure/database/using-existing-postgres", "self-managed/deployment/helm/configure/database/configure-db-custom-headers", - "self-manages/deployment/helm/configure/database/rdbms-support-policy", + "self-managed/deployment/helm/configure/database/rdbms-support-policy", { Troubleshooting: [ "self-managed/deployment/helm/configure/database/all-shards-failed", From 453c04ca83f1dcc48ba6c27c1461cd2faa666271 Mon Sep 17 00:00:00 2001 From: Christina Ausley <84338309+christinaausley@users.noreply.github.com> Date: Thu, 4 Dec 2025 13:29:54 -0700 Subject: [PATCH 3/8] Update index.md --- docs/self-managed/concepts/secondary-storage/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/self-managed/concepts/secondary-storage/index.md b/docs/self-managed/concepts/secondary-storage/index.md index cc0fbd2124f..1e26f1b8cd5 100644 --- a/docs/self-managed/concepts/secondary-storage/index.md +++ b/docs/self-managed/concepts/secondary-storage/index.md @@ -15,7 +15,7 @@ Secondary storage is one of the two complementary layers in Camunda’s data mod | Layer | Purpose | Typical technologies | | :---------------- | :-------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | | Primary storage | Persists real-time workflow execution state managed by [Zeebe](/self-managed/components/orchestration-cluster/zeebe/overview.md). | RocksDB (embedded in Zeebe) | -| Secondary storage | Stores workflow, decision, and task data for querying, visualization, and API access. | Elasticsearch / OpenSearch, RDBMS (H2, PostgreSQL, MariaDB, MySQL, SQL Server, Oracle) | +| Secondary storage | Stores workflow, decision, and task data for querying, visualization, and API access. | Elasticsearch / OpenSearch, RDBMS (H2, PostgreSQL, MariaDB) | :::note Secondary storage is not a duplicate of primary data. It represents the historical workflow and decision data generated by the engine, optimized for querying and visualization. @@ -30,7 +30,7 @@ For the latest list of supported database versions, see the | Storage backend | Availability | Primary use cases | | :--------------------------------------------------------- | :------------------- | :--------------------------------------------------------------------------------------------------- | | Elasticsearch / OpenSearch | General availability | Default backend for most production installations. | -| RDBMS (H2, PostgreSQL, MariaDB, MySQL, SQL Server, Oracle) | Self-Managed 8.9+ | Lightweight development (H2) and enterprise-grade RDBMS deployments for Operate, Tasklist, and APIs. | +| RDBMS (H2, PostgreSQL, MariaDB) | Self-Managed 8.9+ | Lightweight development (H2) and enterprise-grade RDBMS deployments for Operate, Tasklist, and APIs. | :::note Camunda’s RDBMS support depends on the versions defined in the RDBMS support policy. Always consult the policy before choosing a database version. From e2986aefe67c8fe3ec9d3ced4bbba9d1b5b11c5c Mon Sep 17 00:00:00 2001 From: Christina Ausley Date: Mon, 8 Dec 2025 09:52:01 -0800 Subject: [PATCH 4/8] adjust links --- .../helm/configure/database/rdbms.md | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 docs/self-managed/deployment/helm/configure/database/rdbms.md diff --git a/docs/self-managed/deployment/helm/configure/database/rdbms.md b/docs/self-managed/deployment/helm/configure/database/rdbms.md new file mode 100644 index 00000000000..643d11a00f1 --- /dev/null +++ b/docs/self-managed/deployment/helm/configure/database/rdbms.md @@ -0,0 +1,229 @@ +--- +id: rdbms +sidebar_label: Configure RDBMS +title: Configure RDBMS in Helm chart +description: "Configure an external relational database (RDBMS) as secondary storage for Camunda 8 Self-Managed using the Helm chart." +--- + +Camunda 8 Self-Managed supports using an external relational database (RDBMS) as the Orchestration Cluster’s secondary storage instead of Elasticsearch or OpenSearch. + +## Prerequisites + +Provide a supported relational database that is reachable by the Camunda components. + +See the [RDBMS support policy](/self-managed/concepts/rdbms-support-policy.md) for the complete list of supported databases and versions. + +Ensure that: + +- Your network allows traffic from Camunda pods to the database. +- Required JDBC parameters (SSL/TLS, authentication, failover) are configured as needed. +- The database user has permissions to create and modify schema objects if `autoDDL` is enabled. + +## Configuration + +### Parameters + +| Parameter | Type | Default | Description | +| -------------------------------------------------------------------------------------------------- | ----------------- | ------- | ---------------------------------------------------------------------------------- | +| `orchestration.data.secondaryStorage.type` | string | `""` | Sets the secondary storage type. Must be `rdbms` when using a relational database. | +| `orchestration.data.secondaryStorage.rdbms.url` | string | `""` | JDBC connection URL for the external database. | +| `orchestration.data.secondaryStorage.rdbms.username` | string | `""` | Username used to authenticate to the database. | +| `orchestration.data.secondaryStorage.rdbms.secret.existingSecret` | string | `""` | Name of an existing Kubernetes secret containing the password. | +| `orchestration.data.secondaryStorage.rdbms.secret.existingSecretKey` | string | `""` | Key within the Kubernetes secret that stores the password. | +| `orchestration.data.secondaryStorage.rdbms.secret.inlineSecret` | string | `""` | Inline password value. Use only for testing environments. | +| `orchestration.data.secondaryStorage.rdbms.flushInterval` | ISO-8601 duration | `""` | How often the exporter flushes events to the database. | +| `orchestration.data.secondaryStorage.rdbms.autoDDL` | boolean | `true` | Enables Liquibase-powered auto-creation of database schema. | +| `orchestration.data.secondaryStorage.rdbms.prefix` | string | `""` | Table name prefix added to all RDBMS tables. | +| `orchestration.data.secondaryStorage.rdbms.queueSize` | integer | `1000` | Size of the exporter queue. Larger values buffer more events. | +| `orchestration.data.secondaryStorage.rdbms.queueMemoryLimit` | integer | `20` | Memory limit (MB) for the exporter queue. | +| `orchestration.data.secondaryStorage.rdbms.history.defaultHistoryTTL` | ISO-8601 duration | `""` | Default TTL for historic process data. | +| `orchestration.data.secondaryStorage.rdbms.history.defaultBatchOperationHistoryTTL` | ISO-8601 duration | `""` | TTL for batch operation history. | +| `orchestration.data.secondaryStorage.rdbms.history.batchOperationCancelProcessInstanceHistoryTTL` | ISO-8601 duration | `""` | TTL for cancel-process-instance history data. | +| `orchestration.data.secondaryStorage.rdbms.history.batchOperationMigrateProcessInstanceHistoryTTL` | ISO-8601 duration | `""` | TTL for migrate-process-instance history. | +| `orchestration.data.secondaryStorage.rdbms.history.batchOperationModifyProcessInstanceHistoryTTL` | ISO-8601 duration | `""` | TTL for modify-process-instance history. | +| `orchestration.data.secondaryStorage.rdbms.history.batchOperationResolveIncidentHistoryTTL` | ISO-8601 duration | `""` | TTL for resolve-incident history. | +| `orchestration.data.secondaryStorage.rdbms.history.minHistoryCleanupInterval` | ISO-8601 duration | `""` | Minimum interval for periodic history cleanup. | +| `orchestration.data.secondaryStorage.rdbms.history.maxHistoryCleanupInterval` | ISO-8601 duration | `""` | Maximum interval for periodic history cleanup. | +| `orchestration.data.secondaryStorage.rdbms.history.historyCleanupBatchSize` | integer | `1000` | Batch size when deleting history data. | +| `orchestration.data.secondaryStorage.rdbms.history.usageMetricsCleanup` | string | `""` | Cleanup configuration for usage metrics. | +| `orchestration.data.secondaryStorage.rdbms.history.processCache.maxSize` | string | `""` | Cache size for historic process definitions. | +| `orchestration.data.secondaryStorage.rdbms.history.batchOperationCache.maxSize` | integer | `10000` | Cache size for batch operation history. | +| `orchestration.data.secondaryStorage.rdbms.history.connectionPool.maximumPoolSize` | integer | `""` | Maximum number of JDBC connections. | +| `orchestration.data.secondaryStorage.rdbms.history.connectionPool.minimumIdle` | integer | `""` | Minimum number of idle JDBC connections. | +| `orchestration.data.secondaryStorage.rdbms.history.connectionPool.idleTimeout` | ISO-8601 duration | `""` | Maximum time a connection may remain idle. | +| `orchestration.data.secondaryStorage.rdbms.history.connectionPool.maxLifetime` | ISO-8601 duration | `""` | Maximum lifetime of a JDBC connection. | +| `orchestration.data.secondaryStorage.rdbms.history.connectionPool.connectionTimeout` | ISO-8601 duration | `""` | Timeout for acquiring a connection from the pool. | + +### Example usage + +:::warning Important +Operate does not support RDBMS until **Camunda 8.9.0-alpha3**. +::: + +```yaml +orchestration: + exporters: + camunda: + enabled: false + rdbms: + enabled: true + data: + secondaryStorage: + type: rdbms + rdbms: + url: jdbc:postgresql://hostname:5432/camunda + username: camunda + secret: + existingSecret: camunda-db-secret + existingSecretKey: password +``` + +## Loading JDBC drivers into pods + +Some databases—such as Oracle—require JDBC drivers that cannot be included in the Camunda image due to licensing restrictions. You must provide these drivers at runtime using one of the following approaches: + +1. **Init container**: Download JDBC drivers at pod startup. +2. **Custom Docker image**: Build an image that bundles the driver. +3. **Mounted volume**: Mount a persistent volume or secret that contains the driver. + +### Option 1: Using an init container + +:::note +This example uses `/driver-lib`, which the Orchestration Cluster automatically adds to the classpath. If you use a different directory, additional override configuration may be required (command, entrypoint). +::: + +```yaml +orchestration: + exporters: + camunda: + enabled: false + rdbms: + enabled: true + data: + secondaryStorage: + type: rdbms + rdbms: + url: jdbc:oracle:thin:@//hostname:1521/FREEPDB1 + username: myuser + secret: + inlineSecret: mypassword + extraVolumeMounts: + - name: jdbcdrivers + mountPath: /driver-lib + extraVolumes: + - name: jdbcdrivers + emptyDir: {} + initContainers: + - name: fetch-jdbc-drivers + image: alpine:3.19 + imagePullPolicy: Always + command: + - sh + - -c + - > + wget https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc11/23.9.0.25.07/ojdbc11-23.9.0.25.07.jar + -O /driver-lib/ojdbc.jar + volumeMounts: + - name: jdbcdrivers + mountPath: /driver-lib + securityContext: + runAsUser: 1001 +``` + +### Option 2: Using a custom Docker image + +:::warning Important +This approach has not yet been validated in production. +::: + +```dockerfile +FROM camunda/camunda-platform:8.8.0 +ADD ojdbc8.jar /driver-lib/ojdbc8.jar +``` + +```sh +docker build -t internal-registry/orchestration:8.8.0 . +docker push internal-registry/orchestration:8.8.0 +``` + +To use this custom image: + +```yaml +orchestration: + exporters: + camunda: + enabled: false + rdbms: + enabled: true + image: + repository: internal-registry/orchestration + tag: 8.8.0 + data: + secondaryStorage: + type: rdbms + rdbms: + url: jdbc:oracle:thin:@//hostname:1521/FREEPDB1 + username: myuser + secret: + inlineSecret: mypassword +``` + +### Option 3: Mounting a JDBC driver from a volume + +:::warning Important +Mounting an `emptyDir volume` does not persist across pod restarts. Use a ConfigMap, PersistentVolume, or custom image for production. +::: + +```yaml +orchestration: + exporters: + camunda: + enabled: false + rdbms: + enabled: true + data: + secondaryStorage: + type: rdbms + rdbms: + url: jdbc:oracle:thin:@//hostname:1521/FREEPDB1 + username: myuser + secret: + inlineSecret: mypassword + extraVolumeMounts: + - name: jdbcdrivers + mountPath: /driver-lib + extraVolumes: + - name: jdbcdrivers +``` + +Copy the driver manually to the pod: + +```sh +kubectl cp /path/to/ojdbc8.jar :/driver-lib/ojdbc8.jar +``` + +## Verifying connectivity + +To confirm that the Orchestration Cluster is successfully writing to the database: + +1. Verify that tables were created (for example, `\dt` or `\d` in PostgreSQL). +2. Deploy a process model and start a process instance using Web Modeler. +3. Query the database directly: + +```sql +SELECT * FROM process_instances; +``` + +4. Review logs for messages such as: + +``` +io.camunda.application.commons.rdbms.MyBatisConfiguration - Initializing Liquibase for RDBMS with global table trimmedPrefix ''. +... + +io.camunda.exporter.rdbms.RdbmsExporter - [RDBMS Exporter[] RdbmsExporter created with Configuration: flushInterval=PT0.5S, queueSize=1000 +io.camunda.exporter.rdbms.RdbmsExporter - [RDBMS Exporter[] Exporter opened with last exported position 3318 +... +org.springframework.web.servlet.DispatcherServlet - Completed initialization in 0 ms +``` + +If the flush interval is long or the queue size is large, exported data may take several seconds to appear in the database. From d77eb586051c95d001e053b18a10cbb205ace1c9 Mon Sep 17 00:00:00 2001 From: Christina Ausley <84338309+christinaausley@users.noreply.github.com> Date: Mon, 8 Dec 2025 10:54:41 -0700 Subject: [PATCH 5/8] Update docs/self-managed/quickstart/developer-quickstart/c8run.md --- docs/self-managed/quickstart/developer-quickstart/c8run.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/self-managed/quickstart/developer-quickstart/c8run.md b/docs/self-managed/quickstart/developer-quickstart/c8run.md index 271b09054b1..cf712adb17d 100644 --- a/docs/self-managed/quickstart/developer-quickstart/c8run.md +++ b/docs/self-managed/quickstart/developer-quickstart/c8run.md @@ -374,7 +374,7 @@ Camunda 8 Run uses v2 APIs by default, so no additional configuration is require ### Known limitations -- Operate and Tasklist do not currently support running against H2. +- Tasklist can use H2 through the v2 APIs. Operate support for H2 is under active development and may have limitations in current alpha versions. - H2 is intended for testing and local development only. - Data stored in H2 is ephemeral unless configured as file-based. - Performance and memory use may vary depending on local environment. From b16b9c07140ab229503bbe511c273a342f7e5805 Mon Sep 17 00:00:00 2001 From: Christina Ausley Date: Mon, 8 Dec 2025 10:00:31 -0800 Subject: [PATCH 6/8] resolve comments --- .../core-settings/concepts/schema-and-migration.md | 2 +- docs/self-managed/concepts/secondary-storage/index.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md b/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md index 203f88e2883..f65c2b13591 100644 --- a/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md +++ b/docs/self-managed/components/orchestration-cluster/core-settings/concepts/schema-and-migration.md @@ -1,7 +1,7 @@ --- id: schema-and-migration title: Schema and data migration -description: "The orchestration cluster reads data from secondary storage and provides tools to manage schema and migrations." +description: "The orchestration cluster stores data with secondary storage and provides tools to manage schema and migrations." --- The orchestration cluster persists runtime and task data in Elasticsearch. On first startup, all required indices and templates are automatically created. diff --git a/docs/self-managed/concepts/secondary-storage/index.md b/docs/self-managed/concepts/secondary-storage/index.md index 8f1b84ce207..64a857e1233 100644 --- a/docs/self-managed/concepts/secondary-storage/index.md +++ b/docs/self-managed/concepts/secondary-storage/index.md @@ -27,10 +27,10 @@ Camunda supports multiple secondary storage backends. For the latest list of supported database versions, see the [RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). -| Database type | Availability | Use case | -| :------------------------------ | :------------------- | :------------------------------------------------------------------- | -| Elasticsearch/OpenSearch | General availability | Default for most production installations. | -| RDBMS (H2, PostgreSQL, MariaDB) | 8.9-alpha1+ | Lightweight local testing (H2) or future enterprise-grade RDBMS use. | +| Database type | Availability | Use case | +| :----------------------- | :------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Elasticsearch/OpenSearch | General availability | Default for most production installations. | +| RDBMS | 8.9-alpha1+ | Supports relational databases for secondary storage. See the [RDBMS release policy](/self-managed/concepts/rdbms-release-policy.md) for supported vendors and versions. | :::info OpenSearch support Camunda 8 supports both [Amazon OpenSearch](https://aws.amazon.com/opensearch-service) and the open-source [OpenSearch](https://opensearch.org/) distribution. From 08ed2cc58d1cdbc76556b8cef5e8739c4139171b Mon Sep 17 00:00:00 2001 From: Christina Ausley Date: Mon, 8 Dec 2025 10:04:06 -0800 Subject: [PATCH 7/8] repair links --- .../miscellaneous/configuration-variables.md | 2 +- .../secondary-storage/configuring-secondary-storage.md | 4 ++-- docs/self-managed/concepts/secondary-storage/index.md | 2 +- .../helm/configure/database/using-existing-postgres.md | 2 +- .../configure/registry-and-images/air-gapped-installation.md | 2 +- docs/self-managed/quickstart/developer-quickstart/c8run.md | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md b/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md index cac52e24532..660c75d039b 100644 --- a/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md +++ b/docs/self-managed/components/management-identity/miscellaneous/configuration-variables.md @@ -101,7 +101,7 @@ Identity requires a database to store information about resource authorization a :::note There are no default values for the variables above. See [supported environments](/reference/supported-environments.md#camunda-platform-8-self-managed) for a list of -supported databases. You may also review the [RDBMS support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). +supported databases. You may also review the [RDBMS support policy](/self-managed/concepts/rdbms-support-policy.md). ::: ### Running Identity on Amazon Aurora PostgreSQL diff --git a/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md b/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md index 1fceea5665d..a486dbc9f33 100644 --- a/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md +++ b/docs/self-managed/concepts/secondary-storage/configuring-secondary-storage.md @@ -18,7 +18,7 @@ Camunda uses the `data.secondary-storage` configuration to define which database :::note For the latest list of supported relational databases and versions, see the -[RDBMS version support policy](/self-managed/deployment/helm/configure/database/rdbms-support-policy.md). +[RDBMS version support policy](/self-managed/concepts/rdbms-support-policy.md). ::: Date: Mon, 8 Dec 2025 10:11:02 -0800 Subject: [PATCH 8/8] fix link --- docs/self-managed/concepts/secondary-storage/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/self-managed/concepts/secondary-storage/index.md b/docs/self-managed/concepts/secondary-storage/index.md index eb76f1d30ab..ad5dcbd3a0b 100644 --- a/docs/self-managed/concepts/secondary-storage/index.md +++ b/docs/self-managed/concepts/secondary-storage/index.md @@ -30,7 +30,7 @@ For the latest list of supported database versions, see the | Database type | Availability | Use case | | :----------------------- | :------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Elasticsearch/OpenSearch | General availability | Default for most production installations. | -| RDBMS | 8.9-alpha1+ | Supports relational databases for secondary storage. See the [RDBMS release policy](/self-managed/concepts/rdbms-release-policy.md) for supported vendors and versions. | +| RDBMS | 8.9-alpha1+ | Supports relational databases for secondary storage. See the [RDBMS support policy](/self-managed/concepts/rdbms-support-policy.md) for supported vendors and versions. | :::info OpenSearch support Camunda 8 supports both [Amazon OpenSearch](https://aws.amazon.com/opensearch-service) and the open-source [OpenSearch](https://opensearch.org/) distribution.