diff --git a/AWS/ecs-fargate/README.md b/AWS/ecs-fargate/README.md index 20524fe..7c371df 100644 --- a/AWS/ecs-fargate/README.md +++ b/AWS/ecs-fargate/README.md @@ -24,7 +24,7 @@ git clone https://github.com/dbeaver/team-edition-deploy.git - Navigate to `team-edition-deploy/AWS/ecs-fargate` - Copy `variables.tf.example` to `variables.tf` - Open `variables.tf`. - - Update `variables.tf` file. Modify `POSTGRES_PASSWORD` field in `cloudbeaver-db-env` vatiables. + - Update `variables.tf` file. You must set `POSTGRES_PASSWORD` field in `cloudbeaver-db-env` variables. The password are empty by default and the service will not start without them. - If you plan to use an RDS-based database: **Note:** only [Amazon RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/) is supported. @@ -43,7 +43,7 @@ git clone https://github.com/dbeaver/team-edition-deploy.git ![Region](images/region.png) - - Ensure that the `alb_certificate_Identifier` variable contains the ID from [AWS Certificate Manager](#importing-an-ssl-certificate-in-aws) corresponding to the domain name specified in the `CLOUDBEAVER_PUBLIC_URL` variable within `variables.tf`. The domain name in `CLOUDBEAVER_PUBLIC_URL` must match the domain for which the certificates have been issued. + - Ensure that the `alb_certificate_Identifier` variable contains the ID from [AWS Certificate Manager](#importing-an-ssl-certificate-in-aws) corresponding to your domain name. The domain name must match the domain for which the certificates have been issued. - You can customize the deployment version by updating the `dbeaver_te_version` environment variable. 7. Run `terraform init` and then `terraform apply` in `ecs-fargate` directory to create the ECS cluster and complete the deployment. diff --git a/AWS/ecs-fargate/main.tf b/AWS/ecs-fargate/main.tf index 8d6c5ae..a2971ee 100644 --- a/AWS/ecs-fargate/main.tf +++ b/AWS/ecs-fargate/main.tf @@ -225,7 +225,7 @@ resource "aws_ecs_task_definition" "dbeaver_db" { } container_definitions = jsonencode([{ name = "${var.deployment_id}-postgres" - image = "dbeaver/cloudbeaver-postgres:16" + image = "${var.image_source}/cloudbeaver-postgres:16" essential = true environment = var.cloudbeaver-db-env mountPoints = [{ @@ -306,9 +306,18 @@ resource "aws_ecs_task_definition" "kafka" { container_definitions = jsonencode([{ name = "${var.deployment_id}-kafka" - image = "dbeaver/cloudbeaver-kafka:3.9" + image = "${var.image_source}/cloudbeaver-kafka:3.9" essential = true - environment = var.cloudbeaver-kafka-env + environment = concat(var.cloudbeaver-kafka-env, [ + { + name = "KAFKA_CFG_CONTROLLER_QUORUM_VOTERS" + value = "0@localhost:9093" + }, + { + name = "KAFKA_CFG_ADVERTISED_LISTENERS" + value = "PLAINTEXT://${var.deployment_id}-kafka:9092" + } + ]) logConfiguration = { logDriver = "awslogs" options = { @@ -409,7 +418,7 @@ resource "aws_ecs_task_definition" "dbeaver_dc" { } container_definitions = jsonencode([{ name = "${var.deployment_id}-cloudbeaver-dc" - image = "dbeaver/cloudbeaver-dc:${var.dbeaver_te_version}" + image = "${var.image_source}/cloudbeaver-dc:${var.dbeaver_te_version}" essential = true environment = local.updated_cloudbeaver_dc_env mountPoints = [{ @@ -526,7 +535,7 @@ resource "aws_ecs_task_definition" "dbeaver_rm" { container_definitions = jsonencode([{ name = "${var.deployment_id}-cloudbeaver-rm" - image = "dbeaver/cloudbeaver-rm:${var.dbeaver_te_version}" + image = "${var.image_source}/cloudbeaver-rm:${var.dbeaver_te_version}" essential = true environment = local.cloudbeaver_shared_env_modified mountPoints = [{ @@ -629,7 +638,7 @@ resource "aws_ecs_task_definition" "dbeaver_qm" { } container_definitions = jsonencode([{ name = "${var.deployment_id}-cloudbeaver-qm" - image = "dbeaver/cloudbeaver-qm:${var.dbeaver_te_version}" + image = "${var.image_source}/cloudbeaver-qm:${var.dbeaver_te_version}" essential = true environment = local.cloudbeaver_shared_env_modified mountPoints = [ @@ -739,7 +748,7 @@ resource "aws_ecs_task_definition" "dbeaver_tm" { } container_definitions = jsonencode([{ name = "${var.deployment_id}-cloudbeaver-tm" - image = "dbeaver/cloudbeaver-tm:${var.dbeaver_te_version}" + image = "${var.image_source}/cloudbeaver-tm:${var.dbeaver_te_version}" essential = true environment = local.cloudbeaver_shared_env_modified mountPoints = [{ @@ -845,7 +854,7 @@ resource "aws_ecs_task_definition" "dbeaver_te" { } container_definitions = jsonencode([{ name = "${var.deployment_id}-cloudbeaver-te" - image = "dbeaver/cloudbeaver-te:${var.dbeaver_te_version}" + image = "${var.image_source}/cloudbeaver-te:${var.dbeaver_te_version}" essential = true environment = local.cloudbeaver_shared_env_modified mountPoints = [{ diff --git a/AWS/ecs-fargate/variables.tf.example b/AWS/ecs-fargate/variables.tf.example index 9417484..53ef239 100644 --- a/AWS/ecs-fargate/variables.tf.example +++ b/AWS/ecs-fargate/variables.tf.example @@ -13,7 +13,13 @@ variable "aws_region" { variable "dbeaver_te_version" { description = "The version of the cluster you want to deploy" type = string - default = "25.3.0" + default = "26.0.0" +} + +variable "image_source" { + description = "Docker image source" + type = string + default = "dbeaver" } variable "alb_certificate_Identifier" { @@ -64,7 +70,7 @@ variable "cloudbeaver-db-env" { # type = map(string) default = [ { "name": "POSTGRES_PASSWORD", - "value": "postgres"}, + "value": ""}, { "name": "POSTGRES_USER", "value": "postgres"}, { "name": "POSTGRES_DB", @@ -157,19 +163,15 @@ variable "cloudbeaver-dc-env" { }, { "name": "CLOUDBEAVER_DC_BACKEND_DB_PASSWORD", - "value": "DCpassword" + "value": "" }, { "name": "CLOUDBEAVER_TM_BACKEND_DB_PASSWORD", - "value": "TMpassword" + "value": "" }, { "name": "CLOUDBEAVER_QM_BACKEND_DB_PASSWORD", - "value": "QMpassword" - }, - { - "name": "CLOUDBEAVER_PUBLIC_URL", - "value": "https://cloudbeaver.io" + "value": "" }, { "name": "CLOUDBEAVER_KAFKA_BROKERS", diff --git a/README.md b/README.md index ca58da5..41bd785 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## DBeaver Team Edition -#### Version 25.3 +#### Version 26.0 DBeaver Team Edition is a client-server application. It requires server deployment. You can deploy it on a single host (e.g. your local computer) @@ -38,7 +38,7 @@ DBeaver Team Edition works in conjunction with a desktop client application. Aft - **Web interface** – accessible directly through your browser - **Desktop client** – provides enhanced features and better performance -Download the desktop client for your platform: [**DBeaver Team Edition Desktop**](https://dbeaver.com/downloads-team/25.3.0/) +Download the desktop client for your platform: [**DBeaver Team Edition Desktop**](https://dbeaver.com/downloads-team/26.0.0/) ### Server version update Version update is handled differently for different deployment methods. To update the Team Edition version, follow these instructions: @@ -60,6 +60,7 @@ To change an internal PostgreSQL password use [this instruction](CHANGEPWD.md#ho - [Early access](https://github.com/dbeaver/team-edition-deploy/tree/devel) ### Older versions: +- [25.3.0](https://github.com/dbeaver/team-edition-deploy/tree/25.3.0) - [25.2.0](https://github.com/dbeaver/team-edition-deploy/tree/25.2.0) - [25.1.0](https://github.com/dbeaver/team-edition-deploy/tree/25.1.0) - [25.0.0](https://github.com/dbeaver/team-edition-deploy/tree/25.0.0) diff --git a/compose/README.md b/compose/README.md index f8b2831..c8587eb 100644 --- a/compose/README.md +++ b/compose/README.md @@ -67,6 +67,15 @@ environment: ``` This step is only required for Nginx, as HAProxy resolves service names via Docker DNS automatically. +### Java tool options + +Java does not read system environment variables. To pass Java parameters to the Java process, use the `JAVA_TOOL_OPTIONS` variable in your `.env` file. + +Example for proxy configuration: +``` +JAVA_TOOL_OPTIONS="-Dhttp.proxy.host= -Dhttps.proxy.host= -Dhttp.proxy.port= -Dhttps.proxy.port=" +``` + ## Configuring and starting Team Edition cluster 1. Clone Git repository to your local machine by running the following command in your terminal: @@ -77,6 +86,7 @@ This step is only required for Nginx, as HAProxy resolves service names via Dock - Navigate to `team-edition-deploy/compose/cbte` - Copy `.env.example` to `.env` - Edit `.env` file to set configuration properties + - You must set the `CLOUDBEAVER_DB_PASSWORD` variable before starting the cluster. The database password is empty by default and the service will not start without it. 3. [Configure SSL and domain](../SSL/README.md#ssl-certificate-configuration) 4. Start the cluster: - `docker-compose up -d` or `docker compose up -d` @@ -157,6 +167,23 @@ You might need to add additional parameters to the `CLOUDBEAVER_DB_URL`: `CLOUDBEAVER_DB_URL=jdbc:mariadb://127.0.0.1:3306/cloudbeaver?autoReconnect=true&allowPublicKeyRetrieval=true` +#### Configure SQL Server database + +To use SQL Server as an internal database, set the driver to `microsoft` and configure the connection URL. + +Connect to your SQL Server database and run: +```sql + CREATE DATABASE cloudbeaver; + CREATE SCHEMA dc; + CREATE SCHEMA qm; + CREATE SCHEMA tm; +``` + +##### Example: + +`CLOUDBEAVER_DB_DRIVER=microsoft` +`CLOUDBEAVER_DB_URL=jdbc:sqlserver://127.0.0.1:1433;databaseName=cloudbeaver` + #### PostgreSQL update procedure If you want to update the internal PostgreSQL to version 17, follow these steps: @@ -193,7 +220,7 @@ For detailed instructions on how to use the script manager, refer to [manager do 2. Stop the cluster: `docker-compose down` or `docker compose down` 3. Update your deployment files: - Fetch latest changes: `git fetch` - - Switch to new release version: `git checkout ` (e.g., `git checkout 25.2.0`) + - Switch to new release version: `git checkout ` (e.g., `git checkout 26.0.0`) - Change value of `CLOUDBEAVER_VERSION_TAG` in `.env` with a preferred version (skip if tag `latest` is set) 4. Pull new docker images: `docker-compose pull` or `docker compose pull` 5. Start the cluster: `docker-compose up -d` or `docker compose up -d` diff --git a/compose/cbte/.env.example b/compose/cbte/.env.example index 7b7f36b..d567ab1 100644 --- a/compose/cbte/.env.example +++ b/compose/cbte/.env.example @@ -1,15 +1,12 @@ # CloudBeaver TE server version. Based on DockerHub images tag # -CLOUDBEAVER_VERSION_TAG=25.3.0 +CLOUDBEAVER_VERSION_TAG=26.0.0 IMAGE_SOURCE=dbeaver PODMAN_IMAGE_SOURCE=docker.io/dbeaver # Domain name of cluster endpoint. eg. dbeaver-te.example.com # COMPOSE_PROJECT_NAME=dbeaver -CLOUDBEAVER_PUBLIC_URL=http://localhost - - # Type of web server. Supported values: nginx, haproxy PROXY_TYPE=nginx @@ -27,9 +24,13 @@ REPLICA_COUNT_RM=1 # - for postgresql use 'postgres-jdbc' driver. # - for mysql or mariadb use 'mariaDB' driver. # - for oracle use 'oracle_thin' driver. +# - for sql server use 'microsoft' driver. # USE_EXTERNAL_DB=false CLOUDBEAVER_DB_DRIVER=postgres-jdbc CLOUDBEAVER_DB_URL=jdbc:postgresql://postgres:5432/cloudbeaver CLOUDBEAVER_DB_USER=postgres -CLOUDBEAVER_DB_PASSWORD=StR0NgP2sSw0rD +CLOUDBEAVER_DB_PASSWORD= + +# Java tool options for JVM configuration +JAVA_TOOL_OPTIONS= diff --git a/compose/cbte/docker-compose-nethost.yml b/compose/cbte/docker-compose-nethost.yml index 738427d..dba1786 100644 --- a/compose/cbte/docker-compose-nethost.yml +++ b/compose/cbte/docker-compose-nethost.yml @@ -48,6 +48,7 @@ services: - POSTGRES_DB=cloudbeaver - POSTGRES_USER=${CLOUDBEAVER_DB_USER} - POSTGRES_PASSWORD=${CLOUDBEAVER_DB_PASSWORD} + - NETWORK_MODE=host network_mode: host cloudbeaver-dc: @@ -72,6 +73,8 @@ services: - CLOUDBEAVER_QM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_DC_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_TM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} + - NETWORK_MODE=host + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} -Dserver.address=127.0.0.1 volumes: - dc_data:/opt/domain-controller/workspace - ./cert/private/:/opt/domain-controller/conf/certificates/ @@ -90,6 +93,8 @@ services: - trusted_cacerts:/opt/cloudbeaver/conf/certificates/custom/ environment: - CLOUDBEAVER_DC_SERVER_URL=http://127.0.0.1:8970/dc + - NETWORK_MODE=host + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} expose: - ${CLOUDBEAVER_WEB_SERVER_PORT:-8978} depends_on: @@ -105,6 +110,8 @@ services: replicas: ${REPLICA_COUNT_RM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://127.0.0.1:8970/dc + - NETWORK_MODE=host + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} -Dserver.address=127.0.0.1 volumes: - rm_data:/opt/resource-manager/workspace - ./cert/public/:/opt/resource-manager/conf/certificates/ @@ -120,6 +127,8 @@ services: replicas: ${REPLICA_COUNT_QM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://127.0.0.1:8970/dc + - NETWORK_MODE=host + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} -Dserver.address=127.0.0.1 volumes: - ./cert/public/:/opt/query-manager/conf/certificates/ - trusted_cacerts:/opt/query-manager/conf/certificates/custom/ @@ -134,6 +143,8 @@ services: replicas: ${REPLICA_COUNT_TM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://127.0.0.1:8970/dc + - NETWORK_MODE=host + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} -Dserver.address=127.0.0.1 volumes: - tm_data:/opt/task-manager/workspace - ./cert/public/:/opt/task-manager/conf/certificates/ diff --git a/compose/cbte/docker-compose.yml b/compose/cbte/docker-compose.yml index f04a101..3d9bf87 100644 --- a/compose/cbte/docker-compose.yml +++ b/compose/cbte/docker-compose.yml @@ -10,6 +10,7 @@ volumes: api_tokens: {} networks: cloudbeaver-te-private-net: null + cloudbeaver-te-common-net: null services: web-proxy: restart: unless-stopped @@ -22,7 +23,7 @@ services: - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-dbeaver} - CLOUDBEAVER_WEB_SERVER_PORT=${CLOUDBEAVER_WEB_SERVER_PORT:-8978} networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net volumes: - nginx_conf_data:/etc/${PROXY_TYPE:-nginx}/product-conf/ - nginx_ssl_data:/etc/${PROXY_TYPE:-nginx}/ssl/ @@ -39,7 +40,7 @@ services: expose: - 9092 networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net postgres: restart: unless-stopped hostname: postgres @@ -59,7 +60,6 @@ services: image: ${IMAGE_SOURCE:-dbeaver}/cloudbeaver-dc:${CLOUDBEAVER_VERSION_TAG} hostname: cloudbeaver-dc environment: - - CLOUDBEAVER_PUBLIC_URL=${CLOUDBEAVER_PUBLIC_URL} - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc - CLOUDBEAVER_RM_SERVER_URL=http://cloudbeaver-rm:8971/rm - CLOUDBEAVER_QM_SERVER_URL=http://cloudbeaver-qm:8972/qm @@ -76,6 +76,7 @@ services: - CLOUDBEAVER_QM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_DC_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_TM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - dc_data:/opt/domain-controller/workspace - ./cert/private/:/opt/domain-controller/conf/certificates/ @@ -86,6 +87,7 @@ services: - 8970 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-te: restart: unless-stopped hostname: cloudbeaver-te @@ -97,6 +99,7 @@ services: - trusted_cacerts:/opt/cloudbeaver/conf/certificates/custom/ environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} expose: - ${CLOUDBEAVER_WEB_SERVER_PORT:-8978} depends_on: @@ -104,7 +107,7 @@ services: - cloudbeaver-rm - cloudbeaver-qm networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-rm: restart: unless-stopped image: ${IMAGE_SOURCE:-dbeaver}/cloudbeaver-rm:${CLOUDBEAVER_VERSION_TAG} @@ -113,6 +116,7 @@ services: replicas: ${REPLICA_COUNT_RM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - rm_data:/opt/resource-manager/workspace - ./cert/public/:/opt/resource-manager/conf/certificates/ @@ -122,7 +126,7 @@ services: expose: - 8971 networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-qm: restart: unless-stopped image: ${IMAGE_SOURCE:-dbeaver}/cloudbeaver-qm:${CLOUDBEAVER_VERSION_TAG} @@ -131,6 +135,7 @@ services: replicas: ${REPLICA_COUNT_QM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - ./cert/public/:/opt/query-manager/conf/certificates/ - trusted_cacerts:/opt/query-manager/conf/certificates/custom/ @@ -140,6 +145,7 @@ services: - 8972 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-tm: restart: unless-stopped image: ${IMAGE_SOURCE:-dbeaver}/cloudbeaver-tm:${CLOUDBEAVER_VERSION_TAG} @@ -148,6 +154,7 @@ services: replicas: ${REPLICA_COUNT_TM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - tm_data:/opt/task-manager/workspace - ./cert/public/:/opt/task-manager/conf/certificates/ @@ -158,3 +165,4 @@ services: - 8973 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net diff --git a/compose/cbte/podman-compose.yml b/compose/cbte/podman-compose.yml index c528dc9..a94d5b9 100644 --- a/compose/cbte/podman-compose.yml +++ b/compose/cbte/podman-compose.yml @@ -15,6 +15,7 @@ volumes: api_tokens: {} networks: cloudbeaver-te-private-net: null + cloudbeaver-te-common-net: null services: web-proxy: restart: unless-stopped @@ -44,7 +45,7 @@ services: expose: - 9092 networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net postgres: restart: unless-stopped hostname: postgres @@ -64,7 +65,6 @@ services: image: ${PODMAN_IMAGE_SOURCE:-docker.io/dbeaver}/cloudbeaver-dc:${CLOUDBEAVER_VERSION_TAG} hostname: cloudbeaver-dc environment: - - CLOUDBEAVER_PUBLIC_URL=${CLOUDBEAVER_PUBLIC_URL} - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc - CLOUDBEAVER_RM_SERVER_URL=http://cloudbeaver-rm:8971/rm - CLOUDBEAVER_QM_SERVER_URL=http://cloudbeaver-qm:8972/qm @@ -81,6 +81,7 @@ services: - CLOUDBEAVER_QM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_DC_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} - CLOUDBEAVER_TM_BACKEND_DB_DRIVER=${CLOUDBEAVER_DB_DRIVER} + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - dc_data:/opt/domain-controller/workspace:z - ./cert/private/:/opt/domain-controller/conf/certificates/:z @@ -91,6 +92,7 @@ services: - 8970 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-te: restart: unless-stopped hostname: cloudbeaver-te @@ -102,6 +104,7 @@ services: - trusted_cacerts:/opt/cloudbeaver/conf/certificates/custom/:z environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} expose: - ${CLOUDBEAVER_WEB_SERVER_PORT:-8978} depends_on: @@ -109,7 +112,7 @@ services: - cloudbeaver-rm - cloudbeaver-qm networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-rm: restart: unless-stopped image: ${PODMAN_IMAGE_SOURCE:-docker.io/dbeaver}/cloudbeaver-rm:${CLOUDBEAVER_VERSION_TAG} @@ -118,6 +121,7 @@ services: replicas: ${REPLICA_COUNT_RM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - rm_data:/opt/resource-manager/workspace:z - ./cert/public/:/opt/resource-manager/conf/certificates/:z @@ -127,7 +131,7 @@ services: expose: - 8971 networks: - - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-qm: restart: unless-stopped image: ${PODMAN_IMAGE_SOURCE:-docker.io/dbeaver}/cloudbeaver-qm:${CLOUDBEAVER_VERSION_TAG} @@ -136,6 +140,7 @@ services: replicas: ${REPLICA_COUNT_QM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - ./cert/public/:/opt/query-manager/conf/certificates/:z - trusted_cacerts:/opt/query-manager/conf/certificates/custom/:z @@ -145,6 +150,7 @@ services: - 8972 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net cloudbeaver-tm: restart: unless-stopped image: ${PODMAN_IMAGE_SOURCE:-docker.io/dbeaver}/cloudbeaver-tm:${CLOUDBEAVER_VERSION_TAG} @@ -153,6 +159,7 @@ services: replicas: ${REPLICA_COUNT_TM:-1} environment: - CLOUDBEAVER_DC_SERVER_URL=http://cloudbeaver-dc:8970/dc + - JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS:-} volumes: - tm_data:/opt/task-manager/workspace:z - ./cert/public/:/opt/task-manager/conf/certificates/:z @@ -163,3 +170,4 @@ services: - 8973 networks: - cloudbeaver-te-private-net + - cloudbeaver-te-common-net diff --git a/k8s/README.md b/k8s/README.md index c0a48ab..4b4f28f 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -41,6 +41,7 @@ Previously, the volumes were owned by the ‘root’ user, but now they are owne 2. `cd team-edition-deploy/k8s/cbte` 3. `cp ./values.yaml.example ./values.yaml` 4. Edit chart values in `values.yaml` (use any text editor). + - You must set the `cloudbeaver_db_password` variable before deploying the cluster. The database password is empty by default and the deployment will fail without it. 5. Configure domain and SSL certificate: - Add an A record in your DNS hosting for a value of `cloudbeaverBaseDomain` variable with load balancer IP address. - Generate internal services certificates: diff --git a/k8s/cbte/Chart.yaml b/k8s/cbte/Chart.yaml index 9449a26..10c07ec 100644 --- a/k8s/cbte/Chart.yaml +++ b/k8s/cbte/Chart.yaml @@ -3,4 +3,4 @@ name: cbte description: A Helm chart for CloudBeaver TE application type: application version: 0.0.1 -appVersion: 25.3.0 +appVersion: 26.0.0 diff --git a/k8s/cbte/templates/deployment/cloudbeaver-dc.yaml b/k8s/cbte/templates/deployment/cloudbeaver-dc.yaml index bb6283d..a74cb67 100644 --- a/k8s/cbte/templates/deployment/cloudbeaver-dc.yaml +++ b/k8s/cbte/templates/deployment/cloudbeaver-dc.yaml @@ -62,8 +62,6 @@ spec: value: "http://cloudbeaver-rm:8971/rm" - name: CLOUDBEAVER_QM_SERVER_URL value: "http://cloudbeaver-qm:8972/qm" - - name: CLOUDBEAVER_PUBLIC_URL - value: "{{ .Values.httpScheme }}://{{ .Values.cloudbeaverBaseDomain }}" ports: - containerPort: 8970 resources: {} diff --git a/k8s/cbte/templates/secrets/db-passwords.yaml b/k8s/cbte/templates/secrets/db-passwords.yaml index 3408e47..f02f0b3 100644 --- a/k8s/cbte/templates/secrets/db-passwords.yaml +++ b/k8s/cbte/templates/secrets/db-passwords.yaml @@ -2,10 +2,6 @@ {{- fail "Error: backend.cloudbeaver_db_password is missing or empty" }} {{- end }} -{{- if eq .Values.backend.cloudbeaver_db_password "StR0NgP2sSw0rD" }} - {{- fail "Error: Default password 'StR0NgP2sSw0rD' is insecure! Please change it before deployment." }} -{{- end }} - apiVersion: v1 kind: Secret metadata: diff --git a/k8s/cbte/values.yaml.example b/k8s/cbte/values.yaml.example index 51bc338..705f3d0 100644 --- a/k8s/cbte/values.yaml.example +++ b/k8s/cbte/values.yaml.example @@ -4,7 +4,7 @@ # cloudbeaver general values for all TE services cloudbeaver: - imageTag: "25.3.0" + imageTag: "26.0.0" pullPolicy: Always # pullCredsName - name of a secret config map that contains docker repo auths # pullCredsName: regcred @@ -66,4 +66,4 @@ backend: cloudbeaver_db_driver: postgres-jdbc cloudbeaver_db_url: jdbc:postgresql://postgres:5432/cloudbeaver cloudbeaver_db_user: postgres - cloudbeaver_db_password: StR0NgP2sSw0rD + cloudbeaver_db_password: "" diff --git a/manager/dbeaver-te b/manager/dbeaver-te index d8216dd..13887e8 100755 --- a/manager/dbeaver-te +++ b/manager/dbeaver-te @@ -39,6 +39,13 @@ done < "$TEAM_EDITION_COMPOSE_DIR/.env" TEAM_EDITION_TAG="$CLOUDBEAVER_VERSION_TAG" +if [ "$DBEAVER_TEAM_EDITION_AMI" ] && [ -z "$COMPOSE_FILE" ] && grep -q '127\.0\.0\.1' "$TEAM_EDITION_COMPOSE_DIR/.env"; then + echo "COMPOSE_FILE=docker-compose-nethost.yml" >> "$TEAM_EDITION_COMPOSE_DIR/.env" + export COMPOSE_FILE="docker-compose-nethost.yml" +fi + +COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" + case $(uname -m) in "x86_64") @@ -221,7 +228,7 @@ startCloudbeaver() { if [ "$TEAM_EDITION_STATUS" == false ] then docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ up -d \ @@ -249,7 +256,7 @@ startCloudbeaver() { stopCloudbeaver() { checkCloudBeaverStatus - docker compose -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" down + docker compose -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" down echo "DBeaver Team Edition Server stopped." } @@ -258,13 +265,22 @@ rollbackCloudBeaver() { BACKUP_VERSION="$2" docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ down \ --remove-orphans - rsync -av --exclude='cert' --exclude='nginx' "$BACKUP_DIR/" "$TEAM_EDITION_BASE_DIR/" + cd "$TEAM_EDITION_BASE_DIR/" + git checkout --force "$BACKUP_VERSION" || { + echo "===============================================================================" + echo "Error: Failed to checkout version $BACKUP_VERSION." + echo "===============================================================================" + printSupportMessage + exit 1 + } + + rsync -av --exclude='cert' --exclude='nginx' "$BACKUP_DIR/" "$TEAM_EDITION_COMPOSE_DIR/" sed -i \ "s/CLOUDBEAVER_VERSION_TAG=$TEAM_EDITION_NEW_TAG/CLOUDBEAVER_VERSION_TAG=$BACKUP_VERSION/g" \ @@ -272,7 +288,7 @@ rollbackCloudBeaver() { export CLOUDBEAVER_VERSION_TAG=$BACKUP_VERSION docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ up -d \ @@ -290,6 +306,9 @@ rollbackCloudBeaver() { sleep 1 done + echo -e "ERROR: Failed to start after rollback." + printSupportMessage + exit 1 } updateCloudbeaver() { @@ -337,7 +356,7 @@ updateCloudbeaver() { # Stop team-edition-deploy docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ down \ @@ -345,9 +364,20 @@ updateCloudbeaver() { # Backup current configuration mkdir -p "$BACKUP_DIR" - rsync -av --exclude='cert' --exclude='nginx' "$TEAM_EDITION_COMPOSE_DIR/" "$BACKUP_DIR" - echo "Preveous team-edition-deploy configuration copied to $BACKUP_DIR" + rsync -av --exclude='cert' --exclude='nginx' "$TEAM_EDITION_COMPOSE_DIR/" "$BACKUP_DIR/" + echo "Previous team-edition-deploy configuration copied to $BACKUP_DIR" + git config user.name "DBeaver Support" + git config user.email "support@dbeaver.com" + + USER_BACKUP_BRANCH="user-backup/${TEAM_EDITION_TAG}_${TIMESTAMP}" + if [ -n "$(git status --porcelain)" ]; then + git checkout -b "$USER_BACKUP_BRANCH" + git add -A + git commit -m "Auto-backup before update from $TEAM_EDITION_TAG to $TEAM_EDITION_NEW_TAG" + echo "Your local changes have been saved in branch: $USER_BACKUP_BRANCH" + fi + # Checkout new version git checkout --force $TEAM_EDITION_NEW_TAG || { echo "===============================================================================" @@ -355,18 +385,18 @@ updateCloudbeaver() { echo "===============================================================================" rollbackCloudBeaver "$BACKUP_DIR" "$TEAM_EDITION_TAG" printSupportMessage + exit 1 } sed -i \ "s/CLOUDBEAVER_VERSION_TAG=$TEAM_EDITION_TAG/CLOUDBEAVER_VERSION_TAG=$TEAM_EDITION_NEW_TAG/g" \ "$TEAM_EDITION_COMPOSE_DIR/.env" export CLOUDBEAVER_VERSION_TAG=$TEAM_EDITION_NEW_TAG - - # Update docker-compose volumes - if [ "$DBEAVER_TEAM_EDITION_AMI" ]; then + # Update docker-compose volumes for AMI + if [ "$DBEAVER_TEAM_EDITION_AMI" ]; then "$HOME/.local/bin/dbeaver-compose-config-editor.py" \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ -e "$TEAM_EDITION_COMPOSE_DIR/.env" || { echo "===============================================================================" echo "Error: Failed to patch docker-compose.yml using dbeaver-compose-config-editor.py." @@ -379,7 +409,7 @@ updateCloudbeaver() { # Start team-edition-deploy with new version and check status docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ up -d \ @@ -402,6 +432,7 @@ updateCloudbeaver() { echo -e "\nERROR: CloudBeaver failed to start. Rolling back to previous version..." rollbackCloudBeaver "$BACKUP_DIR" "$TEAM_EDITION_TAG" printSupportMessage + exit 1 fi } @@ -423,7 +454,7 @@ createBackup(){ if [ "$USE_EXTERNAL_DB" = false ]; then PG_SERVICE="postgres" DB_NAME="cloudbeaver" - docker exec $PROJECT_NAME-"$PG_SERVICE"-1 pg_dump $DB_NAME --username $CLOUDBEAVER_DB_USER --format c > $BACKUP_PATH/"$PG_SERVICE".backup + docker exec -e PGPASSWORD="$CLOUDBEAVER_DB_PASSWORD" $PROJECT_NAME-"$PG_SERVICE"-1 pg_dump -h localhost $DB_NAME --username $CLOUDBEAVER_DB_USER --format c > $BACKUP_PATH/"$PG_SERVICE".backup fi CERT_VOLUME_PATH="/opt/domain-controller/conf/certificates" @@ -471,7 +502,7 @@ restoreBackup(){ DB_BACKUP="$BACKUP_DIR/postgres.backup" if [ -f "$DB_BACKUP" ]; then echo "Restoring PostgreSQL database..." - docker exec -i $PROJECT_NAME-"postgres"-1 pg_restore --dbname cloudbeaver --username $CLOUDBEAVER_DB_USER --clean --if-exists < "$DB_BACKUP" + docker exec -i -e PGPASSWORD="$CLOUDBEAVER_DB_PASSWORD" $PROJECT_NAME-"postgres"-1 pg_restore -h localhost --dbname cloudbeaver --username $CLOUDBEAVER_DB_USER --clean --if-exists < "$DB_BACKUP" else echo "PostgreSQL backup file not found." printSupportMessage @@ -499,9 +530,9 @@ restoreBackup(){ fi rm -rf $TEMP_DIR - docker compose -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" down + docker compose -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" down docker compose \ - -f "$TEAM_EDITION_COMPOSE_DIR/docker-compose.yml" \ + -f "$TEAM_EDITION_COMPOSE_DIR/$COMPOSE_FILE" \ --env-file "$TEAM_EDITION_COMPOSE_DIR/.env" \ --project-directory "$TEAM_EDITION_COMPOSE_DIR/" \ up -d diff --git a/manager/install-manager.sh b/manager/install-manager.sh index 352e895..00be84a 100755 --- a/manager/install-manager.sh +++ b/manager/install-manager.sh @@ -2,19 +2,17 @@ set -e +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) INSTALL_DIR="$HOME/bin" -CURRENT_DIR=$(pwd) -mkdir -p "$INSTALL_DIR" -# Determine the actual base directory and compose directory -BASE_DIR=$(realpath "$CURRENT_DIR/..") -CBTE_DIR=$(realpath "$CURRENT_DIR/../compose/cbte") +BASE_DIR=$(realpath "$SCRIPT_DIR/..") +CBTE_DIR=$(realpath "$SCRIPT_DIR/../compose/cbte") + +mkdir -p "$INSTALL_DIR" -# Copy the script to install directory -cp "$CURRENT_DIR/dbeaver-te" "$INSTALL_DIR/dbeaver-te" +cp "$SCRIPT_DIR/dbeaver-te" "$INSTALL_DIR/dbeaver-te" chmod +x "$INSTALL_DIR/dbeaver-te" -# Replace the hardcoded paths with actual paths sed -i "s|^TEAM_EDITION_BASE_DIR=.*|TEAM_EDITION_BASE_DIR=\"$BASE_DIR\"|g" "$INSTALL_DIR/dbeaver-te" sed -i "s|^TEAM_EDITION_COMPOSE_DIR=.*|TEAM_EDITION_COMPOSE_DIR=\"$CBTE_DIR\"|g" "$INSTALL_DIR/dbeaver-te"