mirror of https://github.com/langgenius/dify.git
revert:public schema (#64)
* config adapt revert * ci test * fix mysql migration test * fix * fix * lint fix * fix ob config * fix * fix * fix * test over
This commit is contained in:
parent
eceaea68b1
commit
84935b9169
|
|
@ -84,10 +84,14 @@ jobs:
|
|||
# downgrade
|
||||
uv run --directory api flask db downgrade 'head:base' --sql
|
||||
|
||||
- name: Prepare middleware env
|
||||
- name: Prepare middleware env for MySQL
|
||||
run: |
|
||||
cd docker
|
||||
cp middleware.env.example middleware.env
|
||||
sed -i 's/DB_TYPE=postgresql/DB_TYPE=mysql/' middleware.env
|
||||
sed -i 's/DB_HOST=db_postgres/DB_HOST=db_mysql/' middleware.env
|
||||
sed -i 's/DB_PORT=5432/DB_PORT=3306/' middleware.env
|
||||
sed -i 's/DB_USERNAME=postgres/DB_USERNAME=mysql/' middleware.env
|
||||
|
||||
- name: Set up Middlewares
|
||||
uses: hoverkraft-tech/compose-action@v2.0.2
|
||||
|
|
@ -103,6 +107,8 @@ jobs:
|
|||
cd api
|
||||
cp .env.example .env
|
||||
sed -i 's/DB_TYPE=postgresql/DB_TYPE=mysql/' .env
|
||||
sed -i 's/DB_PORT=5432/DB_PORT=3306/' .env
|
||||
sed -i 's/DB_USERNAME=postgres/DB_USERNAME=root/' .env
|
||||
|
||||
- name: Run DB Migration
|
||||
env:
|
||||
|
|
|
|||
|
|
@ -75,30 +75,11 @@ CELERY_BACKEND=redis
|
|||
|
||||
# Database configuration
|
||||
DB_TYPE=postgresql
|
||||
|
||||
# PostgreSQL configuration
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=difyai123456
|
||||
POSTGRES_HOST=localhost
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_DATABASE=dify
|
||||
|
||||
# MySQL configuration
|
||||
MYSQL_USER=mysql
|
||||
MYSQL_PASSWORD=difyai123456
|
||||
MYSQL_HOST=localhost
|
||||
MYSQL_PORT=3306
|
||||
MYSQL_DATABASE=dify
|
||||
|
||||
# OceanBase configuration
|
||||
OCEANBASE_USER=root@test
|
||||
OCEANBASE_PASSWORD=difyai123456
|
||||
OCEANBASE_HOST=localhost
|
||||
OCEANBASE_PORT=2881
|
||||
OCEANBASE_DATABASE=test
|
||||
OCEANBASE_MEMORY_LIMIT=6G
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH=false
|
||||
OCEANBASE_FULLTEXT_PARSER=ik
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=difyai123456
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=dify
|
||||
|
||||
SQLALCHEMY_POOL_PRE_PING=true
|
||||
SQLALCHEMY_POOL_TIMEOUT=30
|
||||
|
|
@ -187,7 +168,6 @@ COOKIE_DOMAIN=
|
|||
|
||||
# Vector database configuration
|
||||
# Supported values are `weaviate`, `oceanbase`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `opengauss`, `tablestore`,`vastbase`,`tidb`,`tidb_on_qdrant`,`baidu`,`lindorm`,`huawei_cloud`,`upstash`, `matrixone`.
|
||||
# The configuration of the oceanbase is in the Database Configuration column.
|
||||
VECTOR_STORE=weaviate
|
||||
# Prefix used to create collection name in vector database
|
||||
VECTOR_INDEX_NAME_PREFIX=Vector_index
|
||||
|
|
@ -198,6 +178,16 @@ WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
|
|||
WEAVIATE_GRPC_ENABLED=false
|
||||
WEAVIATE_BATCH_SIZE=100
|
||||
|
||||
# OceanBase Vector configuration
|
||||
OCEANBASE_VECTOR_HOST=127.0.0.1
|
||||
OCEANBASE_VECTOR_PORT=2881
|
||||
OCEANBASE_VECTOR_USER=root@test
|
||||
OCEANBASE_VECTOR_PASSWORD=difyai123456
|
||||
OCEANBASE_VECTOR_DATABASE=test
|
||||
OCEANBASE_MEMORY_LIMIT=6G
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH=false
|
||||
OCEANBASE_FULLTEXT_PARSER=ik
|
||||
|
||||
# Qdrant configuration, use `http://localhost:6333` for local mode or `https://your-qdrant-cluster-url.qdrant.io` for remote mode
|
||||
QDRANT_URL=http://localhost:6333
|
||||
QDRANT_API_KEY=difyai123456
|
||||
|
|
|
|||
|
|
@ -111,145 +111,31 @@ class DatabaseConfig(BaseSettings):
|
|||
default="postgresql",
|
||||
)
|
||||
|
||||
# PostgreSQL configuration
|
||||
POSTGRES_HOST: str = Field(
|
||||
description="PostgreSQL hostname or IP address.",
|
||||
DB_HOST: str = Field(
|
||||
description="Hostname or IP address of the database server.",
|
||||
default="localhost",
|
||||
)
|
||||
|
||||
POSTGRES_PORT: PositiveInt = Field(
|
||||
description="PostgreSQL port number.",
|
||||
DB_PORT: PositiveInt = Field(
|
||||
description="Port number for database connection.",
|
||||
default=5432,
|
||||
)
|
||||
|
||||
POSTGRES_USER: str = Field(
|
||||
description="PostgreSQL username.",
|
||||
DB_USERNAME: str = Field(
|
||||
description="Username for database authentication.",
|
||||
default="postgres",
|
||||
)
|
||||
|
||||
POSTGRES_PASSWORD: str = Field(
|
||||
description="PostgreSQL password.",
|
||||
default="difyai123456",
|
||||
DB_PASSWORD: str = Field(
|
||||
description="Password for database authentication.",
|
||||
default="",
|
||||
)
|
||||
|
||||
POSTGRES_DATABASE: str = Field(
|
||||
description="PostgreSQL database name.",
|
||||
DB_DATABASE: str = Field(
|
||||
description="Name of the database to connect to.",
|
||||
default="dify",
|
||||
)
|
||||
|
||||
# MySQL configuration
|
||||
MYSQL_HOST: str = Field(
|
||||
description="MySQL hostname or IP address.",
|
||||
default="localhost",
|
||||
)
|
||||
|
||||
MYSQL_PORT: PositiveInt = Field(
|
||||
description="MySQL port number.",
|
||||
default=3306,
|
||||
)
|
||||
|
||||
MYSQL_USER: str = Field(
|
||||
description="MySQL username.",
|
||||
default="root",
|
||||
)
|
||||
|
||||
MYSQL_PASSWORD: str = Field(
|
||||
description="MySQL password.",
|
||||
default="difyai123456",
|
||||
)
|
||||
|
||||
MYSQL_DATABASE: str = Field(
|
||||
description="MySQL database name.",
|
||||
default="dify",
|
||||
)
|
||||
|
||||
# OceanBase configuration(MySQL-compatible)
|
||||
OCEANBASE_HOST: str = Field(
|
||||
description="OceanBase hostname or IP address.",
|
||||
default="localhost",
|
||||
)
|
||||
|
||||
OCEANBASE_PORT: PositiveInt = Field(
|
||||
description="OceanBase port number.",
|
||||
default=2881,
|
||||
)
|
||||
|
||||
OCEANBASE_USER: str = Field(
|
||||
description="OceanBase username.",
|
||||
default="root@test",
|
||||
)
|
||||
|
||||
OCEANBASE_PASSWORD: str = Field(
|
||||
description="OceanBase password.",
|
||||
default="difyai123456",
|
||||
)
|
||||
|
||||
OCEANBASE_DATABASE: str = Field(
|
||||
description="OceanBase database name.",
|
||||
default="test",
|
||||
)
|
||||
|
||||
# Dynamic properties based on DB_TYPE
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def DB_HOST(self) -> str:
|
||||
if self.DB_TYPE == "postgresql":
|
||||
return self.POSTGRES_HOST
|
||||
elif self.DB_TYPE == "mysql":
|
||||
return self.MYSQL_HOST
|
||||
elif self.DB_TYPE == "oceanbase":
|
||||
return self.OCEANBASE_HOST
|
||||
else:
|
||||
raise ValueError(f"Unsupported DB_TYPE: {self.DB_TYPE}")
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def DB_PORT(self) -> int:
|
||||
if self.DB_TYPE == "postgresql":
|
||||
return self.POSTGRES_PORT
|
||||
elif self.DB_TYPE == "mysql":
|
||||
return self.MYSQL_PORT
|
||||
elif self.DB_TYPE == "oceanbase":
|
||||
return self.OCEANBASE_PORT
|
||||
else:
|
||||
raise ValueError(f"Unsupported DB_TYPE: {self.DB_TYPE}")
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def DB_USERNAME(self) -> str:
|
||||
if self.DB_TYPE == "postgresql":
|
||||
return self.POSTGRES_USER
|
||||
elif self.DB_TYPE == "mysql":
|
||||
return self.MYSQL_USER
|
||||
elif self.DB_TYPE == "oceanbase":
|
||||
return self.OCEANBASE_USER
|
||||
else:
|
||||
raise ValueError(f"Unsupported DB_TYPE: {self.DB_TYPE}")
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def DB_PASSWORD(self) -> str:
|
||||
if self.DB_TYPE == "postgresql":
|
||||
return self.POSTGRES_PASSWORD
|
||||
elif self.DB_TYPE == "mysql":
|
||||
return self.MYSQL_PASSWORD
|
||||
elif self.DB_TYPE == "oceanbase":
|
||||
return self.OCEANBASE_PASSWORD
|
||||
else:
|
||||
raise ValueError(f"Unsupported DB_TYPE: {self.DB_TYPE}")
|
||||
|
||||
@computed_field # type: ignore[prop-decorator]
|
||||
@property
|
||||
def DB_DATABASE(self) -> str:
|
||||
if self.DB_TYPE == "postgresql":
|
||||
return self.POSTGRES_DATABASE
|
||||
elif self.DB_TYPE == "mysql":
|
||||
return self.MYSQL_DATABASE
|
||||
elif self.DB_TYPE == "oceanbase":
|
||||
return self.OCEANBASE_DATABASE
|
||||
else:
|
||||
raise ValueError(f"Unsupported DB_TYPE: {self.DB_TYPE}")
|
||||
|
||||
DB_CHARSET: str = Field(
|
||||
description="Character set for database connection.",
|
||||
default="",
|
||||
|
|
|
|||
|
|
@ -7,29 +7,29 @@ class OceanBaseVectorConfig(BaseSettings):
|
|||
Configuration settings for OceanBase Vector database
|
||||
"""
|
||||
|
||||
OCEANBASE_HOST: str = Field(
|
||||
description="OceanBase hostname or IP address.",
|
||||
default="localhost",
|
||||
OCEANBASE_VECTOR_HOST: str | None = Field(
|
||||
description="Hostname or IP address of the OceanBase Vector server (e.g. 'localhost')",
|
||||
default=None,
|
||||
)
|
||||
|
||||
OCEANBASE_PORT: PositiveInt = Field(
|
||||
description="OceanBase port number.",
|
||||
OCEANBASE_VECTOR_PORT: PositiveInt | None = Field(
|
||||
description="Port number on which the OceanBase Vector server is listening (default is 2881)",
|
||||
default=2881,
|
||||
)
|
||||
|
||||
OCEANBASE_USER: str = Field(
|
||||
description="OceanBase username.",
|
||||
default="root@test",
|
||||
OCEANBASE_VECTOR_USER: str | None = Field(
|
||||
description="Username for authenticating with the OceanBase Vector database",
|
||||
default=None,
|
||||
)
|
||||
|
||||
OCEANBASE_PASSWORD: str = Field(
|
||||
description="OceanBase password.",
|
||||
default="difyai123456",
|
||||
OCEANBASE_VECTOR_PASSWORD: str | None = Field(
|
||||
description="Password for authenticating with the OceanBase Vector database",
|
||||
default=None,
|
||||
)
|
||||
|
||||
OCEANBASE_DATABASE: str = Field(
|
||||
description="OceanBase database name.",
|
||||
default="test",
|
||||
OCEANBASE_VECTOR_DATABASE: str | None = Field(
|
||||
description="Name of the OceanBase Vector database to connect to",
|
||||
default=None,
|
||||
)
|
||||
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH: bool = Field(
|
||||
|
|
|
|||
|
|
@ -37,13 +37,13 @@ class OceanBaseVectorConfig(BaseModel):
|
|||
@classmethod
|
||||
def validate_config(cls, values: dict):
|
||||
if not values["host"]:
|
||||
raise ValueError("config OCEANBASE_HOST is required")
|
||||
raise ValueError("config OCEANBASE_VECTOR_HOST is required")
|
||||
if not values["port"]:
|
||||
raise ValueError("config OCEANBASE_PORT is required")
|
||||
raise ValueError("config OCEANBASE_VECTOR_PORT is required")
|
||||
if not values["user"]:
|
||||
raise ValueError("config OCEANBASE_USER is required")
|
||||
raise ValueError("config OCEANBASE_VECTOR_USER is required")
|
||||
if not values["database"]:
|
||||
raise ValueError("config OCEANBASE_DATABASE is required")
|
||||
raise ValueError("config OCEANBASE_VECTOR_DATABASE is required")
|
||||
return values
|
||||
|
||||
|
||||
|
|
@ -316,11 +316,11 @@ class OceanBaseVectorFactory(AbstractVectorFactory):
|
|||
return OceanBaseVector(
|
||||
collection_name,
|
||||
OceanBaseVectorConfig(
|
||||
host=dify_config.OCEANBASE_HOST or "",
|
||||
port=dify_config.OCEANBASE_PORT or 0,
|
||||
user=dify_config.OCEANBASE_USER or "",
|
||||
password=(dify_config.OCEANBASE_PASSWORD or ""),
|
||||
database=dify_config.OCEANBASE_DATABASE or "",
|
||||
host=dify_config.OCEANBASE_VECTOR_HOST or "",
|
||||
port=dify_config.OCEANBASE_VECTOR_PORT or 0,
|
||||
user=dify_config.OCEANBASE_VECTOR_USER or "",
|
||||
password=(dify_config.OCEANBASE_VECTOR_PASSWORD or ""),
|
||||
database=dify_config.OCEANBASE_VECTOR_DATABASE or "",
|
||||
enable_hybrid_search=dify_config.OCEANBASE_ENABLE_HYBRID_SEARCH or False,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ def test_dify_config(monkeypatch: pytest.MonkeyPatch):
|
|||
monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
|
||||
monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
|
||||
monkeypatch.setenv("HTTP_REQUEST_MAX_WRITE_TIMEOUT", "30") # Custom value for testing
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
monkeypatch.setenv("HTTP_REQUEST_MAX_READ_TIMEOUT", "300") # Custom value for testing
|
||||
|
||||
# load dotenv file with pydantic-settings
|
||||
|
|
@ -51,11 +51,11 @@ def test_http_timeout_defaults(monkeypatch: pytest.MonkeyPatch):
|
|||
os.environ.clear()
|
||||
|
||||
# Set minimal required env vars
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
|
||||
config = DifyConfig()
|
||||
|
||||
|
|
@ -75,11 +75,11 @@ def test_flask_configs(monkeypatch: pytest.MonkeyPatch):
|
|||
# Set environment variables using monkeypatch
|
||||
monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
|
||||
monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
monkeypatch.setenv("WEB_API_CORS_ALLOW_ORIGINS", "http://127.0.0.1:3000,*")
|
||||
monkeypatch.setenv("CODE_EXECUTION_ENDPOINT", "http://127.0.0.1:8194/")
|
||||
|
||||
|
|
@ -120,78 +120,15 @@ def test_flask_configs(monkeypatch: pytest.MonkeyPatch):
|
|||
assert str(URL(str(config["CODE_EXECUTION_ENDPOINT"])) / "v1") == "http://127.0.0.1:8194/v1"
|
||||
|
||||
|
||||
def test_flask_configs_mysql(monkeypatch: pytest.MonkeyPatch):
|
||||
"""Test Flask configuration with MySQL database type"""
|
||||
flask_app = Flask("app")
|
||||
# clear system environment variables
|
||||
os.environ.clear()
|
||||
|
||||
# Set environment variables using monkeypatch for MySQL
|
||||
monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
|
||||
monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
|
||||
monkeypatch.setenv("DB_TYPE", "mysql")
|
||||
monkeypatch.setenv("MYSQL_USER", "root")
|
||||
monkeypatch.setenv("MYSQL_PASSWORD", "mysql123")
|
||||
monkeypatch.setenv("MYSQL_HOST", "mysql-host")
|
||||
monkeypatch.setenv("MYSQL_PORT", "3306")
|
||||
monkeypatch.setenv("MYSQL_DATABASE", "dify_mysql")
|
||||
monkeypatch.setenv("WEB_API_CORS_ALLOW_ORIGINS", "http://127.0.0.1:3000,*")
|
||||
monkeypatch.setenv("CODE_EXECUTION_ENDPOINT", "http://127.0.0.1:8194/")
|
||||
|
||||
flask_app.config.from_mapping(DifyConfig().model_dump()) # pyright: ignore
|
||||
config = flask_app.config
|
||||
|
||||
# configs read from pydantic-settings
|
||||
assert config["LOG_LEVEL"] == "INFO"
|
||||
assert config["COMMIT_SHA"] == ""
|
||||
assert config["EDITION"] == "SELF_HOSTED"
|
||||
assert config["API_COMPRESSION_ENABLED"] is False
|
||||
assert config["SENTRY_TRACES_SAMPLE_RATE"] == 1.0
|
||||
|
||||
# value from env file
|
||||
assert config["CONSOLE_API_URL"] == "https://example.com"
|
||||
# fallback to alias choices value as CONSOLE_API_URL
|
||||
assert config["FILES_URL"] == "https://example.com"
|
||||
|
||||
# Test MySQL database configuration
|
||||
assert config["DB_TYPE"] == "mysql"
|
||||
assert config["SQLALCHEMY_DATABASE_URI"] == "mysql+pymysql://root:mysql123@mysql-host:3306/dify_mysql"
|
||||
assert config["SQLALCHEMY_DATABASE_URI_SCHEME"] == "mysql+pymysql"
|
||||
assert config["SQLALCHEMY_ENGINE_OPTIONS"] == {
|
||||
"connect_args": {}, # MySQL doesn't have PostgreSQL-specific options
|
||||
"max_overflow": 10,
|
||||
"pool_pre_ping": False,
|
||||
"pool_recycle": 3600,
|
||||
"pool_size": 30,
|
||||
"pool_use_lifo": False,
|
||||
"pool_reset_on_return": None,
|
||||
"pool_timeout": 30,
|
||||
}
|
||||
|
||||
# Test computed fields for MySQL
|
||||
assert config["DB_HOST"] == "mysql-host"
|
||||
assert config["DB_PORT"] == 3306
|
||||
assert config["DB_USERNAME"] == "root"
|
||||
assert config["DB_PASSWORD"] == "mysql123"
|
||||
assert config["DB_DATABASE"] == "dify_mysql"
|
||||
|
||||
assert config["CONSOLE_WEB_URL"] == "https://example.com"
|
||||
assert config["CONSOLE_CORS_ALLOW_ORIGINS"] == ["https://example.com"]
|
||||
assert config["WEB_API_CORS_ALLOW_ORIGINS"] == ["http://127.0.0.1:3000", "*"]
|
||||
|
||||
assert str(config["CODE_EXECUTION_ENDPOINT"]) == "http://127.0.0.1:8194/"
|
||||
assert str(URL(str(config["CODE_EXECUTION_ENDPOINT"])) / "v1") == "http://127.0.0.1:8194/v1"
|
||||
|
||||
|
||||
def test_inner_api_config_exist(monkeypatch: pytest.MonkeyPatch):
|
||||
# Set environment variables using monkeypatch
|
||||
monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
|
||||
monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
monkeypatch.setenv("INNER_API_KEY", "test-inner-api-key")
|
||||
|
||||
config = DifyConfig()
|
||||
|
|
@ -203,11 +140,11 @@ def test_inner_api_config_exist(monkeypatch: pytest.MonkeyPatch):
|
|||
def test_db_extras_options_merging(monkeypatch: pytest.MonkeyPatch):
|
||||
"""Test that DB_EXTRAS options are properly merged with default timezone setting"""
|
||||
# Set environment variables
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_EXTRAS", "options=-c search_path=myschema")
|
||||
|
||||
# Create config
|
||||
|
|
@ -262,11 +199,11 @@ def test_celery_broker_url_with_special_chars_password(
|
|||
# Set up basic required environment variables (following existing pattern)
|
||||
monkeypatch.setenv("CONSOLE_API_URL", "https://example.com")
|
||||
monkeypatch.setenv("CONSOLE_WEB_URL", "https://example.com")
|
||||
monkeypatch.setenv("POSTGRES_USER", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("POSTGRES_HOST", "localhost")
|
||||
monkeypatch.setenv("POSTGRES_PORT", "5432")
|
||||
monkeypatch.setenv("POSTGRES_DATABASE", "dify")
|
||||
monkeypatch.setenv("DB_USERNAME", "postgres")
|
||||
monkeypatch.setenv("DB_PASSWORD", "postgres")
|
||||
monkeypatch.setenv("DB_HOST", "localhost")
|
||||
monkeypatch.setenv("DB_PORT", "5432")
|
||||
monkeypatch.setenv("DB_DATABASE", "dify")
|
||||
|
||||
# Set the CELERY_BROKER_URL to test
|
||||
monkeypatch.setenv("CELERY_BROKER_URL", broker_url)
|
||||
|
|
|
|||
|
|
@ -224,22 +224,32 @@ NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX=false
|
|||
|
||||
# ------------------------------
|
||||
# Database Configuration
|
||||
# The database uses PostgreSQL,MySQL or OceanBase. Please use the public schema.
|
||||
# The database uses PostgreSQL or MySQL. Please use the public schema.
|
||||
# It is consistent with the configuration in the databse service below.
|
||||
# ------------------------------
|
||||
# Database type, supported values are `postgresql`, `mysql` and `oceanbase`
|
||||
# According to the `DB_TYPE`, the project will use the corresponding database configuration.
|
||||
|
||||
DB_TYPE=postgresql
|
||||
|
||||
# PostgreSQL Default Configuration
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_PASSWORD=difyai123456
|
||||
POSTGRES_HOST=db_postgres
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_DATABASE=dify
|
||||
|
||||
# PostgreSQL data directory
|
||||
PGDATA=/var/lib/postgresql/data/pgdata
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=difyai123456
|
||||
DB_HOST=db_postgres
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=dify
|
||||
# The size of the database connection pool.
|
||||
# The default is 30 connections, which can be appropriately increased.
|
||||
SQLALCHEMY_POOL_SIZE=30
|
||||
# The default is 10 connections, which allows temporary overflow beyond the pool size.
|
||||
SQLALCHEMY_MAX_OVERFLOW=10
|
||||
# Database connection pool recycling time, the default is 3600 seconds.
|
||||
SQLALCHEMY_POOL_RECYCLE=3600
|
||||
# Whether to print SQL, default is false.
|
||||
SQLALCHEMY_ECHO=false
|
||||
# If True, will test connections for liveness upon each checkout
|
||||
SQLALCHEMY_POOL_PRE_PING=false
|
||||
# Whether to enable the Last in first out option or use default FIFO queue if is false
|
||||
SQLALCHEMY_POOL_USE_LIFO=false
|
||||
# Number of seconds to wait for a connection from the pool before raising a timeout error.
|
||||
# Default is 30
|
||||
SQLALCHEMY_POOL_TIMEOUT=30
|
||||
|
||||
# Maximum number of connections to the database
|
||||
# Default is 100
|
||||
|
|
@ -285,16 +295,6 @@ POSTGRES_STATEMENT_TIMEOUT=0
|
|||
# A value of 0 prevents the server from terminating idle sessions.
|
||||
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT=0
|
||||
|
||||
|
||||
# MySQL Default Configuration
|
||||
MYSQL_USER=mysql
|
||||
MYSQL_PASSWORD=difyai123456
|
||||
MYSQL_HOST=db_mysql
|
||||
MYSQL_PORT=3306
|
||||
MYSQL_DATABASE=dify
|
||||
# MySQL data directory
|
||||
MYSQL_HOST_VOLUME=./volumes/mysql/data
|
||||
|
||||
# MySQL Performance Configuration
|
||||
# Maximum number of connections to MySQL
|
||||
#
|
||||
|
|
@ -318,41 +318,6 @@ MYSQL_INNODB_LOG_FILE_SIZE=128M
|
|||
# Reference: https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
|
||||
MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT=2
|
||||
|
||||
# For OceanBase metadata database configuration, available when `DB_TYPE` is `oceanbase`
|
||||
# For OceanBase vector database configuration, available when `VECTOR_STORE` is `oceanbase`
|
||||
# If you want to use OceanBase as both vector database and metadata database, you need to set both `DB_TYPE` and `VECTOR_STORE` to `oceanbase`.
|
||||
OCEANBASE_USER=root@test
|
||||
OCEANBASE_PASSWORD=difyai123456
|
||||
OCEANBASE_HOST=oceanbase
|
||||
OCEANBASE_PORT=2881
|
||||
OCEANBASE_DATABASE=test
|
||||
# The cluster name for the OceanBase database, the default is difyai
|
||||
OCEANBASE_CLUSTER_NAME=difyai
|
||||
# The memory limit for the OceanBase database, the default is 6G
|
||||
OCEANBASE_MEMORY_LIMIT=6G
|
||||
# Whether to enable hybrid search for the OceanBase database, the default is false
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH=false
|
||||
# For OceanBase vector database, built-in fulltext parsers are `ngram`, `beng`, `space`, `ngram2`, `ik`
|
||||
# For OceanBase vector database, external fulltext parsers (require plugin installation) are `japanese_ftparser`, `thai_ftparser`
|
||||
OCEANBASE_FULLTEXT_PARSER=ik
|
||||
|
||||
# The size of the database connection pool.
|
||||
# The default is 30 connections, which can be appropriately increased.
|
||||
SQLALCHEMY_POOL_SIZE=30
|
||||
# The default is 10 connections, which allows temporary overflow beyond the pool size.
|
||||
SQLALCHEMY_MAX_OVERFLOW=10
|
||||
# Database connection pool recycling time, the default is 3600 seconds.
|
||||
SQLALCHEMY_POOL_RECYCLE=3600
|
||||
# Whether to print SQL, default is false.
|
||||
SQLALCHEMY_ECHO=false
|
||||
# If True, will test connections for liveness upon each checkout
|
||||
SQLALCHEMY_POOL_PRE_PING=false
|
||||
# Whether to enable the Last in first out option or use default FIFO queue if is false
|
||||
SQLALCHEMY_POOL_USE_LIFO=false
|
||||
# Number of seconds to wait for a connection from the pool before raising a timeout error.
|
||||
# Default is 30
|
||||
SQLALCHEMY_POOL_TIMEOUT=30
|
||||
|
||||
# ------------------------------
|
||||
# Redis Configuration
|
||||
# This Redis configuration is used for caching and for pub/sub during conversation.
|
||||
|
|
@ -549,7 +514,6 @@ SUPABASE_URL=your-server-url
|
|||
|
||||
# The type of vector store to use.
|
||||
# Supported values are `weaviate`, `oceanbase`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `opengauss`, `tablestore`,`vastbase`,`tidb`,`tidb_on_qdrant`,`baidu`,`lindorm`,`huawei_cloud`,`upstash`, `matrixone`, `clickzetta`, `alibabacloud_mysql`.
|
||||
# The configuration of the oceanbase is in the Database Configuration column.
|
||||
VECTOR_STORE=weaviate
|
||||
# Prefix used to create collection name in vector database
|
||||
VECTOR_INDEX_NAME_PREFIX=Vector_index
|
||||
|
|
@ -559,6 +523,21 @@ WEAVIATE_ENDPOINT=http://weaviate:8080
|
|||
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
|
||||
WEAVIATE_GRPC_ENDPOINT=grpc://weaviate:50051
|
||||
|
||||
# For OceanBase metadata database configuration, available when `DB_TYPE` is `mysql` and `COMPOSE_PROFILES` includes `oceanbase`
|
||||
# For OceanBase vector database configuration, available when `VECTOR_STORE` is `oceanbase`
|
||||
# If you want to use OceanBase as both vector database and metadata database, you need to set `DB_TYPE` to `mysql` and `COMPOSE_PROFILES` is `oceanbase`.
|
||||
OCEANBASE_VECTOR_HOST=oceanbase
|
||||
OCEANBASE_VECTOR_PORT=2881
|
||||
OCEANBASE_VECTOR_USER=root@test
|
||||
OCEANBASE_VECTOR_PASSWORD=difyai123456
|
||||
OCEANBASE_VECTOR_DATABASE=test
|
||||
OCEANBASE_CLUSTER_NAME=difyai
|
||||
OCEANBASE_MEMORY_LIMIT=6G
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH=false
|
||||
# For OceanBase vector database, built-in fulltext parsers are `ngram`, `beng`, `space`, `ngram2`, `ik`
|
||||
# For OceanBase vector database, external fulltext parsers (require plugin installation) are `japanese_ftparser`, `thai_ftparser`
|
||||
OCEANBASE_FULLTEXT_PARSER=ik
|
||||
|
||||
# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.
|
||||
QDRANT_URL=http://qdrant:6333
|
||||
QDRANT_API_KEY=difyai123456
|
||||
|
|
@ -1086,6 +1065,29 @@ ALLOW_UNSAFE_DATA_SCHEME=false
|
|||
# Maximum number of tree depth in the workflow
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
# ------------------------------
|
||||
# Environment Variables for sandbox Service
|
||||
# ------------------------------
|
||||
|
|
@ -1249,7 +1251,6 @@ SSRF_POOL_KEEPALIVE_EXPIRY=5.0
|
|||
# (based on the vector db and metadata db type, the corresponding docker
|
||||
# compose profile will be used)
|
||||
# if you want to use unstructured, add ',unstructured' to the end
|
||||
# if you want to use mysql as metadata db, change ',postgres' to ',mysql' to the end
|
||||
# ------------------------------
|
||||
COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}
|
||||
|
||||
|
|
@ -1419,4 +1420,4 @@ WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE=100
|
|||
WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK=0
|
||||
|
||||
# Tenant isolated task queue configuration
|
||||
TENANT_ISOLATED_TASK_CONCURRENCY=1
|
||||
TENANT_ISOLATED_TASK_CONCURRENCY=1
|
||||
|
|
@ -132,7 +132,7 @@ services:
|
|||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
|
||||
POSTGRES_DB: ${DB_DATABASE:-dify}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-dify}
|
||||
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
|
||||
command: >
|
||||
postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
|
||||
|
|
@ -170,7 +170,7 @@ services:
|
|||
- ./middleware.env
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456}
|
||||
MYSQL_DATABASE: ${DB_DATABASE:-dify}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-dify}
|
||||
command: >
|
||||
--max_connections=1000
|
||||
--innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
|
||||
|
|
@ -178,8 +178,6 @@ services:
|
|||
--innodb_flush_log_at_trx_commit=${MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT:-2}
|
||||
volumes:
|
||||
- ${MYSQL_HOST_VOLUME:-./volumes/mysql/data}:/var/lib/mysql
|
||||
ports:
|
||||
- "${MYSQL_PORT:-3306}:3306"
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
|
|
@ -431,19 +429,19 @@ services:
|
|||
- ./volumes/oceanbase/init.d:/root/boot/init.d
|
||||
environment:
|
||||
OB_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
|
||||
OB_SYS_PASSWORD: ${OCEANBASE_PASSWORD:-difyai123456}
|
||||
OB_TENANT_PASSWORD: ${OCEANBASE_PASSWORD:-difyai123456}
|
||||
OB_SYS_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
|
||||
OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
|
||||
OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
|
||||
OB_SERVER_IP: 127.0.0.1
|
||||
MODE: mini
|
||||
LANG: en_US.UTF-8
|
||||
ports:
|
||||
- "${OCEANBASE_PORT:-2881}:2881"
|
||||
- "${OCEANBASE_VECTOR_PORT:-2881}:2881"
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h127.0.0.1 -P2881 -uroot@test -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
'obclient -h127.0.0.1 -P2881 -uroot@test -p${OCEANBASE_VECTOR_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 10s
|
||||
retries: 30
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ services:
|
|||
"CMD",
|
||||
"pg_isready",
|
||||
"-h",
|
||||
"db-postgres",
|
||||
"db_postgres",
|
||||
"-U",
|
||||
"${PGUSER:-postgres}",
|
||||
"-d",
|
||||
|
|
@ -49,7 +49,7 @@ services:
|
|||
- ./middleware.env
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456}
|
||||
MYSQL_DATABASE: ${MYSQL_DB:-dify}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-dify}
|
||||
command: >
|
||||
--max_connections=1000
|
||||
--innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
|
||||
|
|
|
|||
|
|
@ -54,38 +54,11 @@ x-shared-env: &shared-api-worker-env
|
|||
ENABLE_WEBSITE_WATERCRAWL: ${ENABLE_WEBSITE_WATERCRAWL:-true}
|
||||
NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX: ${NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX:-false}
|
||||
DB_TYPE: ${DB_TYPE:-postgresql}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
|
||||
POSTGRES_HOST: ${POSTGRES_HOST:-db_postgres}
|
||||
POSTGRES_PORT: ${POSTGRES_PORT:-5432}
|
||||
POSTGRES_DATABASE: ${POSTGRES_DATABASE:-dify}
|
||||
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
|
||||
POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100}
|
||||
POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB}
|
||||
POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB}
|
||||
POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}
|
||||
POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}
|
||||
POSTGRES_STATEMENT_TIMEOUT: ${POSTGRES_STATEMENT_TIMEOUT:-0}
|
||||
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT: ${POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT:-0}
|
||||
MYSQL_USER: ${MYSQL_USER:-mysql}
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-difyai123456}
|
||||
MYSQL_HOST: ${MYSQL_HOST:-db_mysql}
|
||||
MYSQL_PORT: ${MYSQL_PORT:-3306}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-dify}
|
||||
MYSQL_HOST_VOLUME: ${MYSQL_HOST_VOLUME:-./volumes/mysql/data}
|
||||
MYSQL_MAX_CONNECTIONS: ${MYSQL_MAX_CONNECTIONS:-1000}
|
||||
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
|
||||
MYSQL_INNODB_LOG_FILE_SIZE: ${MYSQL_INNODB_LOG_FILE_SIZE:-128M}
|
||||
MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT: ${MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT:-2}
|
||||
OCEANBASE_USER: ${OCEANBASE_USER:-root@test}
|
||||
OCEANBASE_PASSWORD: ${OCEANBASE_PASSWORD:-difyai123456}
|
||||
OCEANBASE_HOST: ${OCEANBASE_HOST:-oceanbase}
|
||||
OCEANBASE_PORT: ${OCEANBASE_PORT:-2881}
|
||||
OCEANBASE_DATABASE: ${OCEANBASE_DATABASE:-test}
|
||||
OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
|
||||
OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH: ${OCEANBASE_ENABLE_HYBRID_SEARCH:-false}
|
||||
OCEANBASE_FULLTEXT_PARSER: ${OCEANBASE_FULLTEXT_PARSER:-ik}
|
||||
DB_USERNAME: ${DB_USERNAME:-postgres}
|
||||
DB_PASSWORD: ${DB_PASSWORD:-difyai123456}
|
||||
DB_HOST: ${DB_HOST:-db_postgres}
|
||||
DB_PORT: ${DB_PORT:-5432}
|
||||
DB_DATABASE: ${DB_DATABASE:-dify}
|
||||
SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30}
|
||||
SQLALCHEMY_MAX_OVERFLOW: ${SQLALCHEMY_MAX_OVERFLOW:-10}
|
||||
SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600}
|
||||
|
|
@ -93,6 +66,17 @@ x-shared-env: &shared-api-worker-env
|
|||
SQLALCHEMY_POOL_PRE_PING: ${SQLALCHEMY_POOL_PRE_PING:-false}
|
||||
SQLALCHEMY_POOL_USE_LIFO: ${SQLALCHEMY_POOL_USE_LIFO:-false}
|
||||
SQLALCHEMY_POOL_TIMEOUT: ${SQLALCHEMY_POOL_TIMEOUT:-30}
|
||||
POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100}
|
||||
POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB}
|
||||
POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB}
|
||||
POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}
|
||||
POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}
|
||||
POSTGRES_STATEMENT_TIMEOUT: ${POSTGRES_STATEMENT_TIMEOUT:-0}
|
||||
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT: ${POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT:-0}
|
||||
MYSQL_MAX_CONNECTIONS: ${MYSQL_MAX_CONNECTIONS:-1000}
|
||||
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
|
||||
MYSQL_INNODB_LOG_FILE_SIZE: ${MYSQL_INNODB_LOG_FILE_SIZE:-128M}
|
||||
MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT: ${MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT:-2}
|
||||
REDIS_HOST: ${REDIS_HOST:-redis}
|
||||
REDIS_PORT: ${REDIS_PORT:-6379}
|
||||
REDIS_USERNAME: ${REDIS_USERNAME:-}
|
||||
|
|
@ -180,6 +164,15 @@ x-shared-env: &shared-api-worker-env
|
|||
WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080}
|
||||
WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
|
||||
WEAVIATE_GRPC_ENDPOINT: ${WEAVIATE_GRPC_ENDPOINT:-grpc://weaviate:50051}
|
||||
OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase}
|
||||
OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881}
|
||||
OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test}
|
||||
OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
|
||||
OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test}
|
||||
OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
|
||||
OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH: ${OCEANBASE_ENABLE_HYBRID_SEARCH:-false}
|
||||
OCEANBASE_FULLTEXT_PARSER: ${OCEANBASE_FULLTEXT_PARSER:-ik}
|
||||
QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333}
|
||||
QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456}
|
||||
QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20}
|
||||
|
|
@ -459,6 +452,14 @@ 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_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}
|
||||
SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15}
|
||||
|
|
@ -763,7 +764,7 @@ services:
|
|||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
|
||||
POSTGRES_DB: ${DB_DATABASE:-dify}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-dify}
|
||||
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
|
||||
command: >
|
||||
postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
|
||||
|
|
@ -801,7 +802,7 @@ services:
|
|||
- ./middleware.env
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD:-difyai123456}
|
||||
MYSQL_DATABASE: ${DB_DATABASE:-dify}
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-dify}
|
||||
command: >
|
||||
--max_connections=1000
|
||||
--innodb_buffer_pool_size=${MYSQL_INNODB_BUFFER_POOL_SIZE:-512M}
|
||||
|
|
@ -809,8 +810,6 @@ services:
|
|||
--innodb_flush_log_at_trx_commit=${MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT:-2}
|
||||
volumes:
|
||||
- ${MYSQL_HOST_VOLUME:-./volumes/mysql/data}:/var/lib/mysql
|
||||
ports:
|
||||
- "${MYSQL_PORT:-3306}:3306"
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
|
|
@ -1062,19 +1061,19 @@ services:
|
|||
- ./volumes/oceanbase/init.d:/root/boot/init.d
|
||||
environment:
|
||||
OB_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
|
||||
OB_SYS_PASSWORD: ${OCEANBASE_PASSWORD:-difyai123456}
|
||||
OB_TENANT_PASSWORD: ${OCEANBASE_PASSWORD:-difyai123456}
|
||||
OB_SYS_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
|
||||
OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
|
||||
OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
|
||||
OB_SERVER_IP: 127.0.0.1
|
||||
MODE: mini
|
||||
LANG: en_US.UTF-8
|
||||
ports:
|
||||
- "${OCEANBASE_PORT:-2881}:2881"
|
||||
- "${OCEANBASE_VECTOR_PORT:-2881}:2881"
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h127.0.0.1 -P2881 -uroot@test -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
'obclient -h127.0.0.1 -P2881 -uroot@test -p${OCEANBASE_VECTOR_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 10s
|
||||
retries: 30
|
||||
|
|
|
|||
|
|
@ -4,33 +4,22 @@
|
|||
# Database Configuration
|
||||
# Database type, supported values are `postgresql` and `mysql`
|
||||
DB_TYPE=postgresql
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=difyai123456
|
||||
DB_HOST=db_postgres
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=dify
|
||||
|
||||
# PostgreSQL Configuration
|
||||
POSTGRES_USER=postgres
|
||||
POSTGRES_USER=${DB_USERNAME}
|
||||
# The password for the default postgres user.
|
||||
POSTGRES_PASSWORD=difyai123456
|
||||
# PostgreSQL host
|
||||
POSTGRES_HOST=db_postgres
|
||||
# PostgreSQL port
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||
# The name of the default postgres database.
|
||||
POSTGRES_DB=dify
|
||||
POSTGRES_DB=${DB_DATABASE}
|
||||
# postgres data directory
|
||||
PGDATA=/var/lib/postgresql/data/pgdata
|
||||
PGDATA_HOST_VOLUME=./volumes/db/data
|
||||
|
||||
# MySQL Configuration
|
||||
MYSQL_USER=mysql
|
||||
# MySQL password
|
||||
MYSQL_PASSWORD=difyai123456
|
||||
# MySQL database name
|
||||
MYSQL_DB=dify
|
||||
# MySQL host
|
||||
MYSQL_HOST=db_mysql
|
||||
# MySQL port
|
||||
MYSQL_PORT=3306
|
||||
# MySQL data directory host volume
|
||||
MYSQL_HOST_VOLUME=./volumes/mysql/data
|
||||
|
||||
# Maximum number of connections to the database
|
||||
# Default is 100
|
||||
#
|
||||
|
|
@ -75,6 +64,15 @@ POSTGRES_STATEMENT_TIMEOUT=0
|
|||
# A value of 0 prevents the server from terminating idle sessions.
|
||||
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
|
||||
|
||||
# MySQL Performance Configuration
|
||||
# Maximum number of connections to MySQL
|
||||
# Default is 1000
|
||||
|
|
|
|||
Loading…
Reference in New Issue