mirror of
https://github.com/langgenius/dify.git
synced 2026-05-09 04:36:31 +08:00
Add an optional S3_PUBLIC_BASE_URL setting that, when configured, lets file controllers 302-redirect signed previews to the object store / CDN instead of streaming bytes through the Dify API. Works with any S3-compatible backend exposing a public domain (Cloudflare R2 custom domain, MinIO public endpoint, Aliyun OSS public domain, etc.) so that egress and request handling for images, attachments, tool outputs, and webapp logos no longer go through the API container. Signature verification is preserved: the API still validates the HMAC before issuing the redirect. When S3_PUBLIC_BASE_URL is unset the behavior is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1640 lines
58 KiB
Plaintext
1640 lines
58 KiB
Plaintext
# ------------------------------
|
|
# Environment Variables for API service & worker
|
|
# ------------------------------
|
|
|
|
# ------------------------------
|
|
# Common Variables
|
|
# ------------------------------
|
|
|
|
# The backend URL of the console API,
|
|
# used to concatenate the authorization callback.
|
|
# If empty, it is the same domain.
|
|
# Example: https://api.console.dify.ai
|
|
CONSOLE_API_URL=
|
|
|
|
# The front-end URL of the console web,
|
|
# used to concatenate some front-end addresses and for CORS configuration use.
|
|
# If empty, it is the same domain.
|
|
# Example: https://console.dify.ai
|
|
CONSOLE_WEB_URL=
|
|
|
|
# Service API Url,
|
|
# used to display Service API Base Url to the front-end.
|
|
# If empty, it is the same domain.
|
|
# Example: https://api.dify.ai
|
|
SERVICE_API_URL=
|
|
|
|
# Trigger external URL
|
|
# used to display trigger endpoint API Base URL to the front-end.
|
|
# Example: https://api.dify.ai
|
|
TRIGGER_URL=http://localhost
|
|
|
|
# WebApp API backend Url,
|
|
# used to declare the back-end URL for the front-end API.
|
|
# If empty, it is the same domain.
|
|
# Example: https://api.app.dify.ai
|
|
APP_API_URL=
|
|
|
|
# WebApp Url,
|
|
# used to display WebAPP API Base Url to the front-end.
|
|
# If empty, it is the same domain.
|
|
# Example: https://app.dify.ai
|
|
APP_WEB_URL=
|
|
|
|
# File preview or download Url prefix.
|
|
# used to display File preview or download Url to the front-end or as Multi-model inputs;
|
|
# Url is signed and has expiration time.
|
|
# Setting FILES_URL is required for file processing plugins.
|
|
# - For https://example.com, use FILES_URL=https://example.com
|
|
# - For http://example.com, use FILES_URL=http://example.com
|
|
# Recommendation: use a dedicated domain (e.g., https://upload.example.com).
|
|
# Alternatively, use http://<your-ip>:5001 or http://api:5001,
|
|
# ensuring port 5001 is externally accessible (see docker-compose.yaml).
|
|
FILES_URL=
|
|
|
|
# INTERNAL_FILES_URL is used for plugin daemon communication within Docker network.
|
|
# Set this to the internal Docker service URL for proper plugin file access.
|
|
# Example: INTERNAL_FILES_URL=http://api:5001
|
|
INTERNAL_FILES_URL=
|
|
|
|
# Ensure UTF-8 encoding
|
|
LANG=C.UTF-8
|
|
LC_ALL=C.UTF-8
|
|
PYTHONIOENCODING=utf-8
|
|
|
|
# Set UV cache directory to avoid permission issues with non-existent home directory
|
|
UV_CACHE_DIR=/tmp/.uv-cache
|
|
|
|
# ------------------------------
|
|
# Server Configuration
|
|
# ------------------------------
|
|
|
|
# The log level for the application.
|
|
# Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
|
|
LOG_LEVEL=INFO
|
|
# Log output format: text or json
|
|
LOG_OUTPUT_FORMAT=text
|
|
# Log file path
|
|
LOG_FILE=/app/logs/server.log
|
|
# Log file max size, the unit is MB
|
|
LOG_FILE_MAX_SIZE=20
|
|
# Log file max backup count
|
|
LOG_FILE_BACKUP_COUNT=5
|
|
# Log dateformat
|
|
LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S
|
|
# Log Timezone
|
|
LOG_TZ=UTC
|
|
|
|
# Debug mode, default is false.
|
|
# It is recommended to turn on this configuration for local development
|
|
# to prevent some problems caused by monkey patch.
|
|
DEBUG=false
|
|
|
|
# Flask debug mode, it can output trace information at the interface when turned on,
|
|
# which is convenient for debugging.
|
|
FLASK_DEBUG=false
|
|
|
|
# Enable request logging, which will log the request and response information.
|
|
# And the log level is DEBUG
|
|
ENABLE_REQUEST_LOGGING=False
|
|
|
|
# A secret key that is used for securely signing the session cookie
|
|
# and encrypting sensitive information on the database.
|
|
# You can generate a strong key using `openssl rand -base64 42`.
|
|
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
|
|
|
|
# Password for admin user initialization.
|
|
# If left unset, admin user will not be prompted for a password
|
|
# when creating the initial admin account.
|
|
# The length of the password cannot exceed 30 characters.
|
|
INIT_PASSWORD=
|
|
|
|
# Deployment environment.
|
|
# Supported values are `PRODUCTION`, `TESTING`. Default is `PRODUCTION`.
|
|
# Testing environment. There will be a distinct color label on the front-end page,
|
|
# indicating that this environment is a testing environment.
|
|
DEPLOY_ENV=PRODUCTION
|
|
|
|
# Whether to enable the version check policy.
|
|
# If set to empty, https://updates.dify.ai will be called for version check.
|
|
CHECK_UPDATE_URL=https://updates.dify.ai
|
|
|
|
# Used to change the OpenAI base address, default is https://api.openai.com/v1.
|
|
# When OpenAI cannot be accessed in China, replace it with a domestic mirror address,
|
|
# or when a local model provides OpenAI compatible API, it can be replaced.
|
|
OPENAI_API_BASE=https://api.openai.com/v1
|
|
|
|
# When enabled, migrations will be executed prior to application startup
|
|
# and the application will start after the migrations have completed.
|
|
MIGRATION_ENABLED=true
|
|
|
|
# File Access Time specifies a time interval in seconds for the file to be accessed.
|
|
# The default value is 300 seconds.
|
|
FILES_ACCESS_TIMEOUT=300
|
|
|
|
# Collaboration mode toggle
|
|
# To open collaboration features, you also need to set SERVER_WORKER_CLASS=geventwebsocket.gunicorn.workers.GeventWebSocketWorker
|
|
ENABLE_COLLABORATION_MODE=false
|
|
|
|
# Access token expiration time in minutes
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=60
|
|
|
|
# Refresh token expiration time in days
|
|
REFRESH_TOKEN_EXPIRE_DAYS=30
|
|
|
|
# The default number of active requests for the application, where 0 means unlimited, should be a non-negative integer.
|
|
APP_DEFAULT_ACTIVE_REQUESTS=0
|
|
# The maximum number of active requests for the application, where 0 means unlimited, should be a non-negative integer.
|
|
APP_MAX_ACTIVE_REQUESTS=0
|
|
APP_MAX_EXECUTION_TIME=1200
|
|
|
|
# ------------------------------
|
|
# Container Startup Related Configuration
|
|
# Only effective when starting with docker image or docker-compose.
|
|
# ------------------------------
|
|
|
|
# API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed.
|
|
DIFY_BIND_ADDRESS=0.0.0.0
|
|
|
|
# API service binding port number, default 5001.
|
|
DIFY_PORT=5001
|
|
|
|
# The number of API server workers, i.e., the number of workers.
|
|
# Formula: number of cpu cores x 2 + 1 for sync, 1 for Gevent
|
|
# Reference: https://docs.gunicorn.org/en/stable/design.html#how-many-workers
|
|
SERVER_WORKER_AMOUNT=1
|
|
|
|
# Defaults to gevent. If using windows, it can be switched to sync or solo.
|
|
#
|
|
# Warning: Changing this parameter requires disabling patching for
|
|
# psycopg2 and gRPC (see `gunicorn.conf.py` and `celery_entrypoint.py`).
|
|
# Modifying it may also decrease throughput.
|
|
#
|
|
# It is strongly discouraged to change this parameter.
|
|
# If enable collaboration mode, it must be set to geventwebsocket.gunicorn.workers.GeventWebSocketWorker
|
|
SERVER_WORKER_CLASS=gevent
|
|
|
|
# Default number of worker connections, the default is 10.
|
|
SERVER_WORKER_CONNECTIONS=10
|
|
|
|
# Similar to SERVER_WORKER_CLASS.
|
|
# If using windows, it can be switched to sync or solo.
|
|
#
|
|
# Warning: Changing this parameter requires disabling patching for
|
|
# psycopg2 and gRPC (see `gunicorn_conf.py` and `celery_entrypoint.py`).
|
|
# Modifying it may also decrease throughput.
|
|
#
|
|
# It is strongly discouraged to change this parameter.
|
|
CELERY_WORKER_CLASS=
|
|
|
|
# Request handling timeout. The default is 200,
|
|
# it is recommended to set it to 360 to support a longer sse connection time.
|
|
GUNICORN_TIMEOUT=360
|
|
|
|
# The number of Celery workers. The default is 4 for development environments
|
|
# to allow parallel processing of workflows, document indexing, and other async tasks.
|
|
# Adjust based on your system resources and workload requirements.
|
|
CELERY_WORKER_AMOUNT=4
|
|
|
|
# Flag indicating whether to enable autoscaling of Celery workers.
|
|
#
|
|
# Autoscaling is useful when tasks are CPU intensive and can be dynamically
|
|
# allocated and deallocated based on the workload.
|
|
#
|
|
# When autoscaling is enabled, the maximum and minimum number of workers can
|
|
# be specified. The autoscaling algorithm will dynamically adjust the number
|
|
# of workers within the specified range.
|
|
#
|
|
# Default is false (i.e., autoscaling is disabled).
|
|
#
|
|
# Example:
|
|
# CELERY_AUTO_SCALE=true
|
|
CELERY_AUTO_SCALE=false
|
|
|
|
# The maximum number of Celery workers that can be autoscaled.
|
|
# This is optional and only used when autoscaling is enabled.
|
|
# Default is not set.
|
|
CELERY_MAX_WORKERS=
|
|
|
|
# The minimum number of Celery workers that can be autoscaled.
|
|
# This is optional and only used when autoscaling is enabled.
|
|
# Default is not set.
|
|
CELERY_MIN_WORKERS=
|
|
|
|
# API Tool configuration
|
|
API_TOOL_DEFAULT_CONNECT_TIMEOUT=10
|
|
API_TOOL_DEFAULT_READ_TIMEOUT=60
|
|
|
|
# -------------------------------
|
|
# Datasource Configuration
|
|
# --------------------------------
|
|
ENABLE_WEBSITE_JINAREADER=true
|
|
ENABLE_WEBSITE_FIRECRAWL=true
|
|
ENABLE_WEBSITE_WATERCRAWL=true
|
|
|
|
# Enable inline LaTeX rendering with single dollar signs ($...$) in the web frontend
|
|
# Default is false for security reasons to prevent conflicts with regular text
|
|
NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX=false
|
|
|
|
# ------------------------------
|
|
# Database Configuration
|
|
# The database uses PostgreSQL or MySQL. OceanBase and seekdb are also supported. Please use the public schema.
|
|
# It is consistent with the configuration in the database service below.
|
|
# You can adjust the database configuration according to your needs.
|
|
# ------------------------------
|
|
|
|
# Database type, supported values are `postgresql`, `mysql`, `oceanbase`, `seekdb`
|
|
DB_TYPE=postgresql
|
|
# For MySQL, only `root` user is supported for now
|
|
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
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS
|
|
POSTGRES_MAX_CONNECTIONS=200
|
|
|
|
# Sets the amount of shared memory used for postgres's shared buffers.
|
|
# Default is 128MB
|
|
# Recommended value: 25% of available memory
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS
|
|
POSTGRES_SHARED_BUFFERS=128MB
|
|
|
|
# Sets the amount of memory used by each database worker for working space.
|
|
# Default is 4MB
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM
|
|
POSTGRES_WORK_MEM=4MB
|
|
|
|
# Sets the amount of memory reserved for maintenance activities.
|
|
# Default is 64MB
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM
|
|
POSTGRES_MAINTENANCE_WORK_MEM=64MB
|
|
|
|
# Sets the planner's assumption about the effective cache size.
|
|
# Default is 4096MB
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE
|
|
POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB
|
|
|
|
# Sets the maximum allowed duration of any statement before termination.
|
|
# Default is 0 (no timeout).
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT
|
|
# A value of 0 prevents the server from timing out statements.
|
|
POSTGRES_STATEMENT_TIMEOUT=0
|
|
|
|
# Sets the maximum allowed duration of any idle in-transaction session before termination.
|
|
# Default is 0 (no timeout).
|
|
#
|
|
# Reference: https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT
|
|
# A value of 0 prevents the server from terminating idle sessions.
|
|
POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT=0
|
|
|
|
# MySQL Performance Configuration
|
|
# Maximum number of connections to MySQL
|
|
#
|
|
# Default is 1000
|
|
MYSQL_MAX_CONNECTIONS=1000
|
|
|
|
# InnoDB buffer pool size
|
|
# Default is 512M
|
|
# Recommended value: 70-80% of available memory for dedicated MySQL server
|
|
# Reference: https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size
|
|
MYSQL_INNODB_BUFFER_POOL_SIZE=512M
|
|
|
|
# InnoDB log file size
|
|
# Default is 128M
|
|
# Reference: https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size
|
|
MYSQL_INNODB_LOG_FILE_SIZE=128M
|
|
|
|
# InnoDB flush log at transaction commit
|
|
# Default is 2 (flush to OS cache, sync every second)
|
|
# Options: 0 (no flush), 1 (flush and sync), 2 (flush to OS cache)
|
|
# 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
|
|
|
|
# ------------------------------
|
|
# Redis Configuration
|
|
# This Redis configuration is used for caching and for pub/sub during conversation.
|
|
# ------------------------------
|
|
|
|
REDIS_HOST=redis
|
|
REDIS_PORT=6379
|
|
REDIS_USERNAME=
|
|
REDIS_PASSWORD=difyai123456
|
|
REDIS_USE_SSL=false
|
|
# SSL configuration for Redis (when REDIS_USE_SSL=true)
|
|
REDIS_SSL_CERT_REQS=CERT_NONE
|
|
# Options: CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
|
|
REDIS_SSL_CA_CERTS=
|
|
# Path to CA certificate file for SSL verification
|
|
REDIS_SSL_CERTFILE=
|
|
# Path to client certificate file for SSL authentication
|
|
REDIS_SSL_KEYFILE=
|
|
# Path to client private key file for SSL authentication
|
|
REDIS_DB=0
|
|
# Optional global prefix for Redis keys, topics, streams, and Celery Redis transport artifacts.
|
|
# Leave empty to preserve current unprefixed behavior.
|
|
REDIS_KEY_PREFIX=
|
|
# Optional: limit total Redis connections used by API/Worker (unset for default)
|
|
# Align with API's REDIS_MAX_CONNECTIONS in configs
|
|
REDIS_MAX_CONNECTIONS=
|
|
|
|
# Whether to use Redis Sentinel mode.
|
|
# If set to true, the application will automatically discover and connect to the master node through Sentinel.
|
|
REDIS_USE_SENTINEL=false
|
|
|
|
# List of Redis Sentinel nodes. If Sentinel mode is enabled, provide at least one Sentinel IP and port.
|
|
# Format: `<sentinel1_ip>:<sentinel1_port>,<sentinel2_ip>:<sentinel2_port>,<sentinel3_ip>:<sentinel3_port>`
|
|
REDIS_SENTINELS=
|
|
REDIS_SENTINEL_SERVICE_NAME=
|
|
REDIS_SENTINEL_USERNAME=
|
|
REDIS_SENTINEL_PASSWORD=
|
|
REDIS_SENTINEL_SOCKET_TIMEOUT=0.1
|
|
|
|
# List of Redis Cluster nodes. If Cluster mode is enabled, provide at least one Cluster IP and port.
|
|
# Format: `<Cluster1_ip>:<Cluster1_port>,<Cluster2_ip>:<Cluster2_port>,<Cluster3_ip>:<Cluster3_port>`
|
|
REDIS_USE_CLUSTERS=false
|
|
REDIS_CLUSTERS=
|
|
REDIS_CLUSTERS_PASSWORD=
|
|
|
|
# Redis connection and retry configuration
|
|
# max redis retry
|
|
REDIS_RETRY_RETRIES=3
|
|
# Base delay (in seconds) for exponential backoff on retries
|
|
REDIS_RETRY_BACKOFF_BASE=1.0
|
|
# Cap (in seconds) for exponential backoff on retries
|
|
REDIS_RETRY_BACKOFF_CAP=10.0
|
|
# Timeout (in seconds) for Redis socket operations
|
|
REDIS_SOCKET_TIMEOUT=5.0
|
|
# Timeout (in seconds) for establishing a Redis connection
|
|
REDIS_SOCKET_CONNECT_TIMEOUT=5.0
|
|
# Interval (in seconds) for Redis health checks
|
|
REDIS_HEALTH_CHECK_INTERVAL=30
|
|
|
|
# ------------------------------
|
|
# Celery Configuration
|
|
# ------------------------------
|
|
|
|
# Use standalone redis as the broker, and redis db 1 for celery broker. (redis_username is usually set by default as empty)
|
|
# Format as follows: `redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>`.
|
|
# Example: redis://:difyai123456@redis:6379/1
|
|
# If use Redis Sentinel, format as follows: `sentinel://<redis_username>:<redis_password>@<sentinel_host1>:<sentinel_port>/<redis_database>`
|
|
# For high availability, you can configure multiple Sentinel nodes (if provided) separated by semicolons like below example:
|
|
# Example: sentinel://:difyai123456@localhost:26379/1;sentinel://:difyai12345@localhost:26379/1;sentinel://:difyai12345@localhost:26379/1
|
|
CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1
|
|
CELERY_BACKEND=redis
|
|
BROKER_USE_SSL=false
|
|
|
|
# If you are using Redis Sentinel for high availability, configure the following settings.
|
|
CELERY_USE_SENTINEL=false
|
|
CELERY_SENTINEL_MASTER_NAME=
|
|
CELERY_SENTINEL_PASSWORD=
|
|
CELERY_SENTINEL_SOCKET_TIMEOUT=0.1
|
|
# e.g. {"tasks.add": {"rate_limit": "10/s"}}
|
|
CELERY_TASK_ANNOTATIONS=null
|
|
|
|
# ------------------------------
|
|
# CORS Configuration
|
|
# Used to set the front-end cross-domain access policy.
|
|
# ------------------------------
|
|
|
|
# Specifies the allowed origins for cross-origin requests to the Web API,
|
|
# e.g. https://dify.app or * for all origins.
|
|
WEB_API_CORS_ALLOW_ORIGINS=*
|
|
|
|
# Specifies the allowed origins for cross-origin requests to the console API,
|
|
# e.g. https://cloud.dify.ai or * for all origins.
|
|
CONSOLE_CORS_ALLOW_ORIGINS=*
|
|
# When the frontend and backend run on different subdomains, set COOKIE_DOMAIN to the site's top-level domain (e.g., `example.com`). Leading dots are optional.
|
|
COOKIE_DOMAIN=
|
|
# When the frontend and backend run on different subdomains, set NEXT_PUBLIC_COOKIE_DOMAIN=1.
|
|
NEXT_PUBLIC_COOKIE_DOMAIN=
|
|
# WebSocket server URL.
|
|
NEXT_PUBLIC_SOCKET_URL=ws://localhost
|
|
NEXT_PUBLIC_BATCH_CONCURRENCY=5
|
|
|
|
# ------------------------------
|
|
# File Storage Configuration
|
|
# ------------------------------
|
|
|
|
# The type of storage to use for storing user files.
|
|
STORAGE_TYPE=opendal
|
|
|
|
# Apache OpenDAL Configuration
|
|
# The configuration for OpenDAL consists of the following format: OPENDAL_<SCHEME_NAME>_<CONFIG_NAME>.
|
|
# You can find all the service configurations (CONFIG_NAME) in the repository at: https://github.com/apache/opendal/tree/main/core/src/services.
|
|
# Dify will scan configurations starting with OPENDAL_<SCHEME_NAME> and automatically apply them.
|
|
# The scheme name for the OpenDAL storage.
|
|
OPENDAL_SCHEME=fs
|
|
# Configurations for OpenDAL Local File System.
|
|
OPENDAL_FS_ROOT=storage
|
|
|
|
# ClickZetta Volume Configuration (for storage backend)
|
|
# To use ClickZetta Volume as storage backend, set STORAGE_TYPE=clickzetta-volume
|
|
# Note: ClickZetta Volume will reuse the existing CLICKZETTA_* connection parameters
|
|
|
|
# Volume type selection (three types available):
|
|
# - user: Personal/small team use, simple config, user-level permissions
|
|
# - table: Enterprise multi-tenant, smart routing, table-level + user-level permissions
|
|
# - external: Data lake integration, external storage connection, volume-level + storage-level permissions
|
|
CLICKZETTA_VOLUME_TYPE=user
|
|
|
|
# External Volume name (required only when TYPE=external)
|
|
CLICKZETTA_VOLUME_NAME=
|
|
|
|
# Table Volume table prefix (used only when TYPE=table)
|
|
CLICKZETTA_VOLUME_TABLE_PREFIX=dataset_
|
|
|
|
# Dify file directory prefix (isolates from other apps, recommended to keep default)
|
|
CLICKZETTA_VOLUME_DIFY_PREFIX=dify_km
|
|
|
|
# S3 Configuration
|
|
#
|
|
S3_ENDPOINT=
|
|
S3_REGION=us-east-1
|
|
S3_BUCKET_NAME=difyai
|
|
S3_ACCESS_KEY=
|
|
S3_SECRET_KEY=
|
|
S3_ADDRESS_STYLE=auto
|
|
# Whether to use AWS managed IAM roles for authenticating with the S3 service.
|
|
# If set to false, the access key and secret key must be provided.
|
|
S3_USE_AWS_MANAGED_IAM=false
|
|
# Optional public base URL for objects in the bucket. When set, signed file
|
|
# previews are served by 302-redirecting to "<base>/<object-key>" so that bytes
|
|
# are delivered directly by the object store / CDN. Examples:
|
|
# Cloudflare R2 custom domain: https://cdn.example.com
|
|
# MinIO public endpoint: https://minio.example.com/your-bucket
|
|
# Aliyun OSS public domain: https://your-bucket.oss-cn-hangzhou.aliyuncs.com
|
|
# Leave empty to keep the default API-streamed behavior.
|
|
S3_PUBLIC_BASE_URL=
|
|
|
|
# Workflow run and Conversation archive storage (S3-compatible)
|
|
ARCHIVE_STORAGE_ENABLED=false
|
|
ARCHIVE_STORAGE_ENDPOINT=
|
|
ARCHIVE_STORAGE_ARCHIVE_BUCKET=
|
|
ARCHIVE_STORAGE_EXPORT_BUCKET=
|
|
ARCHIVE_STORAGE_ACCESS_KEY=
|
|
ARCHIVE_STORAGE_SECRET_KEY=
|
|
ARCHIVE_STORAGE_REGION=auto
|
|
|
|
# Azure Blob Configuration
|
|
#
|
|
AZURE_BLOB_ACCOUNT_NAME=difyai
|
|
AZURE_BLOB_ACCOUNT_KEY=difyai
|
|
AZURE_BLOB_CONTAINER_NAME=difyai-container
|
|
AZURE_BLOB_ACCOUNT_URL=https://<your_account_name>.blob.core.windows.net
|
|
|
|
# Google Storage Configuration
|
|
#
|
|
GOOGLE_STORAGE_BUCKET_NAME=your-bucket-name
|
|
GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64=
|
|
|
|
# The Alibaba Cloud OSS configurations,
|
|
#
|
|
ALIYUN_OSS_BUCKET_NAME=your-bucket-name
|
|
ALIYUN_OSS_ACCESS_KEY=your-access-key
|
|
ALIYUN_OSS_SECRET_KEY=your-secret-key
|
|
ALIYUN_OSS_ENDPOINT=https://oss-ap-southeast-1-internal.aliyuncs.com
|
|
ALIYUN_OSS_REGION=ap-southeast-1
|
|
ALIYUN_OSS_AUTH_VERSION=v4
|
|
# Don't start with '/'. OSS doesn't support leading slash in object names.
|
|
ALIYUN_OSS_PATH=your-path
|
|
# Optional CloudBox ID for Aliyun OSS, DO NOT enable it if you are not using CloudBox.
|
|
#ALIYUN_CLOUDBOX_ID=your-cloudbox-id
|
|
|
|
# Tencent COS Configuration
|
|
#
|
|
TENCENT_COS_BUCKET_NAME=your-bucket-name
|
|
TENCENT_COS_SECRET_KEY=your-secret-key
|
|
TENCENT_COS_SECRET_ID=your-secret-id
|
|
TENCENT_COS_REGION=your-region
|
|
TENCENT_COS_SCHEME=your-scheme
|
|
TENCENT_COS_CUSTOM_DOMAIN=your-custom-domain
|
|
|
|
# Oracle Storage Configuration
|
|
#
|
|
OCI_ENDPOINT=https://your-object-storage-namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com
|
|
OCI_BUCKET_NAME=your-bucket-name
|
|
OCI_ACCESS_KEY=your-access-key
|
|
OCI_SECRET_KEY=your-secret-key
|
|
OCI_REGION=us-ashburn-1
|
|
|
|
# Huawei OBS Configuration
|
|
#
|
|
HUAWEI_OBS_BUCKET_NAME=your-bucket-name
|
|
HUAWEI_OBS_SECRET_KEY=your-secret-key
|
|
HUAWEI_OBS_ACCESS_KEY=your-access-key
|
|
HUAWEI_OBS_SERVER=your-server-url
|
|
HUAWEI_OBS_PATH_STYLE=false
|
|
|
|
# Volcengine TOS Configuration
|
|
#
|
|
VOLCENGINE_TOS_BUCKET_NAME=your-bucket-name
|
|
VOLCENGINE_TOS_SECRET_KEY=your-secret-key
|
|
VOLCENGINE_TOS_ACCESS_KEY=your-access-key
|
|
VOLCENGINE_TOS_ENDPOINT=your-server-url
|
|
VOLCENGINE_TOS_REGION=your-region
|
|
|
|
# Baidu OBS Storage Configuration
|
|
#
|
|
BAIDU_OBS_BUCKET_NAME=your-bucket-name
|
|
BAIDU_OBS_SECRET_KEY=your-secret-key
|
|
BAIDU_OBS_ACCESS_KEY=your-access-key
|
|
BAIDU_OBS_ENDPOINT=your-server-url
|
|
|
|
# Supabase Storage Configuration
|
|
#
|
|
SUPABASE_BUCKET_NAME=your-bucket-name
|
|
SUPABASE_API_KEY=your-access-key
|
|
SUPABASE_URL=your-server-url
|
|
|
|
# ------------------------------
|
|
# Vector Database Configuration
|
|
# ------------------------------
|
|
|
|
# The type of vector store to use.
|
|
# Supported values are `weaviate`, `oceanbase`, `seekdb`, `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`, `iris`, `hologres`.
|
|
VECTOR_STORE=weaviate
|
|
# Prefix used to create collection name in vector database
|
|
VECTOR_INDEX_NAME_PREFIX=Vector_index
|
|
|
|
# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`.
|
|
WEAVIATE_ENDPOINT=http://weaviate:8080
|
|
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
|
|
WEAVIATE_GRPC_ENDPOINT=grpc://weaviate:50051
|
|
WEAVIATE_TOKENIZATION=word
|
|
|
|
# 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`, and set Database Configuration is the same as the vector database.
|
|
# seekdb is the lite version of OceanBase and shares the connection configuration with 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
|
|
SEEKDB_MEMORY_LIMIT=2G
|
|
|
|
# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.
|
|
QDRANT_URL=http://qdrant:6333
|
|
QDRANT_API_KEY=difyai123456
|
|
QDRANT_CLIENT_TIMEOUT=20
|
|
QDRANT_GRPC_ENABLED=false
|
|
QDRANT_GRPC_PORT=6334
|
|
QDRANT_REPLICATION_FACTOR=1
|
|
|
|
# Milvus configuration. Only available when VECTOR_STORE is `milvus`.
|
|
# The milvus uri.
|
|
MILVUS_URI=http://host.docker.internal:19530
|
|
MILVUS_DATABASE=
|
|
MILVUS_TOKEN=
|
|
MILVUS_USER=
|
|
MILVUS_PASSWORD=
|
|
MILVUS_ENABLE_HYBRID_SEARCH=False
|
|
MILVUS_ANALYZER_PARAMS=
|
|
|
|
# MyScale configuration, only available when VECTOR_STORE is `myscale`
|
|
# For multi-language support, please set MYSCALE_FTS_PARAMS with referring to:
|
|
# https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters
|
|
MYSCALE_HOST=myscale
|
|
MYSCALE_PORT=8123
|
|
MYSCALE_USER=default
|
|
MYSCALE_PASSWORD=
|
|
MYSCALE_DATABASE=dify
|
|
MYSCALE_FTS_PARAMS=
|
|
|
|
# Couchbase configurations, only available when VECTOR_STORE is `couchbase`
|
|
# The connection string must include hostname defined in the docker-compose file (couchbase-server in this case)
|
|
COUCHBASE_CONNECTION_STRING=couchbase://couchbase-server
|
|
COUCHBASE_USER=Administrator
|
|
COUCHBASE_PASSWORD=password
|
|
COUCHBASE_BUCKET_NAME=Embeddings
|
|
COUCHBASE_SCOPE_NAME=_default
|
|
|
|
# Hologres configurations, only available when VECTOR_STORE is `hologres`
|
|
# access_key_id is used as the PG username, access_key_secret is used as the PG password
|
|
HOLOGRES_HOST=
|
|
HOLOGRES_PORT=80
|
|
HOLOGRES_DATABASE=
|
|
HOLOGRES_ACCESS_KEY_ID=
|
|
HOLOGRES_ACCESS_KEY_SECRET=
|
|
HOLOGRES_SCHEMA=public
|
|
HOLOGRES_TOKENIZER=jieba
|
|
HOLOGRES_DISTANCE_METHOD=Cosine
|
|
HOLOGRES_BASE_QUANTIZATION_TYPE=rabitq
|
|
HOLOGRES_MAX_DEGREE=64
|
|
HOLOGRES_EF_CONSTRUCTION=400
|
|
|
|
# pgvector configurations, only available when VECTOR_STORE is `pgvector`
|
|
PGVECTOR_HOST=pgvector
|
|
PGVECTOR_PORT=5432
|
|
PGVECTOR_USER=postgres
|
|
PGVECTOR_PASSWORD=difyai123456
|
|
PGVECTOR_DATABASE=dify
|
|
PGVECTOR_MIN_CONNECTION=1
|
|
PGVECTOR_MAX_CONNECTION=5
|
|
PGVECTOR_PG_BIGM=false
|
|
PGVECTOR_PG_BIGM_VERSION=1.2-20240606
|
|
|
|
# vastbase configurations, only available when VECTOR_STORE is `vastbase`
|
|
VASTBASE_HOST=vastbase
|
|
VASTBASE_PORT=5432
|
|
VASTBASE_USER=dify
|
|
VASTBASE_PASSWORD=Difyai123456
|
|
VASTBASE_DATABASE=dify
|
|
VASTBASE_MIN_CONNECTION=1
|
|
VASTBASE_MAX_CONNECTION=5
|
|
|
|
# pgvecto-rs configurations, only available when VECTOR_STORE is `pgvecto-rs`
|
|
PGVECTO_RS_HOST=pgvecto-rs
|
|
PGVECTO_RS_PORT=5432
|
|
PGVECTO_RS_USER=postgres
|
|
PGVECTO_RS_PASSWORD=difyai123456
|
|
PGVECTO_RS_DATABASE=dify
|
|
|
|
# analyticdb configurations, only available when VECTOR_STORE is `analyticdb`
|
|
ANALYTICDB_KEY_ID=your-ak
|
|
ANALYTICDB_KEY_SECRET=your-sk
|
|
ANALYTICDB_REGION_ID=cn-hangzhou
|
|
ANALYTICDB_INSTANCE_ID=gp-ab123456
|
|
ANALYTICDB_ACCOUNT=testaccount
|
|
ANALYTICDB_PASSWORD=testpassword
|
|
ANALYTICDB_NAMESPACE=dify
|
|
ANALYTICDB_NAMESPACE_PASSWORD=difypassword
|
|
ANALYTICDB_HOST=gp-test.aliyuncs.com
|
|
ANALYTICDB_PORT=5432
|
|
ANALYTICDB_MIN_CONNECTION=1
|
|
ANALYTICDB_MAX_CONNECTION=5
|
|
|
|
# TiDB vector configurations, only available when VECTOR_STORE is `tidb_vector`
|
|
TIDB_VECTOR_HOST=tidb
|
|
TIDB_VECTOR_PORT=4000
|
|
TIDB_VECTOR_USER=
|
|
TIDB_VECTOR_PASSWORD=
|
|
TIDB_VECTOR_DATABASE=dify
|
|
|
|
# Matrixone vector configurations.
|
|
MATRIXONE_HOST=matrixone
|
|
MATRIXONE_PORT=6001
|
|
MATRIXONE_USER=dump
|
|
MATRIXONE_PASSWORD=111
|
|
MATRIXONE_DATABASE=dify
|
|
|
|
# Tidb on qdrant configuration, only available when VECTOR_STORE is `tidb_on_qdrant`
|
|
TIDB_ON_QDRANT_URL=http://127.0.0.1
|
|
TIDB_ON_QDRANT_API_KEY=dify
|
|
TIDB_ON_QDRANT_CLIENT_TIMEOUT=20
|
|
TIDB_ON_QDRANT_GRPC_ENABLED=false
|
|
TIDB_ON_QDRANT_GRPC_PORT=6334
|
|
TIDB_PUBLIC_KEY=dify
|
|
TIDB_PRIVATE_KEY=dify
|
|
TIDB_API_URL=http://127.0.0.1
|
|
TIDB_IAM_API_URL=http://127.0.0.1
|
|
TIDB_REGION=regions/aws-us-east-1
|
|
TIDB_PROJECT_ID=dify
|
|
TIDB_SPEND_LIMIT=100
|
|
|
|
# Chroma configuration, only available when VECTOR_STORE is `chroma`
|
|
CHROMA_HOST=127.0.0.1
|
|
CHROMA_PORT=8000
|
|
CHROMA_TENANT=default_tenant
|
|
CHROMA_DATABASE=default_database
|
|
CHROMA_AUTH_PROVIDER=chromadb.auth.token_authn.TokenAuthClientProvider
|
|
CHROMA_AUTH_CREDENTIALS=
|
|
|
|
# Oracle configuration, only available when VECTOR_STORE is `oracle`
|
|
ORACLE_USER=dify
|
|
ORACLE_PASSWORD=dify
|
|
ORACLE_DSN=oracle:1521/FREEPDB1
|
|
ORACLE_CONFIG_DIR=/app/api/storage/wallet
|
|
ORACLE_WALLET_LOCATION=/app/api/storage/wallet
|
|
ORACLE_WALLET_PASSWORD=dify
|
|
ORACLE_IS_AUTONOMOUS=false
|
|
|
|
# AlibabaCloud MySQL configuration, only available when VECTOR_STORE is `alibabcloud_mysql`
|
|
ALIBABACLOUD_MYSQL_HOST=127.0.0.1
|
|
ALIBABACLOUD_MYSQL_PORT=3306
|
|
ALIBABACLOUD_MYSQL_USER=root
|
|
ALIBABACLOUD_MYSQL_PASSWORD=difyai123456
|
|
ALIBABACLOUD_MYSQL_DATABASE=dify
|
|
ALIBABACLOUD_MYSQL_MAX_CONNECTION=5
|
|
ALIBABACLOUD_MYSQL_HNSW_M=6
|
|
|
|
# relyt configurations, only available when VECTOR_STORE is `relyt`
|
|
RELYT_HOST=db
|
|
RELYT_PORT=5432
|
|
RELYT_USER=postgres
|
|
RELYT_PASSWORD=difyai123456
|
|
RELYT_DATABASE=postgres
|
|
|
|
# open search configuration, only available when VECTOR_STORE is `opensearch`
|
|
OPENSEARCH_HOST=opensearch
|
|
OPENSEARCH_PORT=9200
|
|
OPENSEARCH_SECURE=true
|
|
OPENSEARCH_VERIFY_CERTS=true
|
|
OPENSEARCH_AUTH_METHOD=basic
|
|
OPENSEARCH_USER=admin
|
|
OPENSEARCH_PASSWORD=admin
|
|
# If using AWS managed IAM, e.g. Managed Cluster or OpenSearch Serverless
|
|
OPENSEARCH_AWS_REGION=ap-southeast-1
|
|
OPENSEARCH_AWS_SERVICE=aoss
|
|
|
|
# tencent vector configurations, only available when VECTOR_STORE is `tencent`
|
|
TENCENT_VECTOR_DB_URL=http://127.0.0.1
|
|
TENCENT_VECTOR_DB_API_KEY=dify
|
|
TENCENT_VECTOR_DB_TIMEOUT=30
|
|
TENCENT_VECTOR_DB_USERNAME=dify
|
|
TENCENT_VECTOR_DB_DATABASE=dify
|
|
TENCENT_VECTOR_DB_SHARD=1
|
|
TENCENT_VECTOR_DB_REPLICAS=2
|
|
TENCENT_VECTOR_DB_ENABLE_HYBRID_SEARCH=false
|
|
|
|
# ElasticSearch configuration, only available when VECTOR_STORE is `elasticsearch`
|
|
ELASTICSEARCH_HOST=0.0.0.0
|
|
ELASTICSEARCH_PORT=9200
|
|
ELASTICSEARCH_USERNAME=elastic
|
|
ELASTICSEARCH_PASSWORD=elastic
|
|
KIBANA_PORT=5601
|
|
|
|
# Using ElasticSearch Cloud Serverless, or not.
|
|
ELASTICSEARCH_USE_CLOUD=false
|
|
ELASTICSEARCH_CLOUD_URL=YOUR-ELASTICSEARCH_CLOUD_URL
|
|
ELASTICSEARCH_API_KEY=YOUR-ELASTICSEARCH_API_KEY
|
|
|
|
ELASTICSEARCH_VERIFY_CERTS=False
|
|
ELASTICSEARCH_CA_CERTS=
|
|
ELASTICSEARCH_REQUEST_TIMEOUT=100000
|
|
ELASTICSEARCH_RETRY_ON_TIMEOUT=True
|
|
ELASTICSEARCH_MAX_RETRIES=10
|
|
|
|
# baidu vector configurations, only available when VECTOR_STORE is `baidu`
|
|
BAIDU_VECTOR_DB_ENDPOINT=http://127.0.0.1:5287
|
|
BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS=30000
|
|
BAIDU_VECTOR_DB_ACCOUNT=root
|
|
BAIDU_VECTOR_DB_API_KEY=dify
|
|
BAIDU_VECTOR_DB_DATABASE=dify
|
|
BAIDU_VECTOR_DB_SHARD=1
|
|
BAIDU_VECTOR_DB_REPLICAS=3
|
|
BAIDU_VECTOR_DB_INVERTED_INDEX_ANALYZER=DEFAULT_ANALYZER
|
|
BAIDU_VECTOR_DB_INVERTED_INDEX_PARSER_MODE=COARSE_MODE
|
|
BAIDU_VECTOR_DB_AUTO_BUILD_ROW_COUNT_INCREMENT=500
|
|
BAIDU_VECTOR_DB_AUTO_BUILD_ROW_COUNT_INCREMENT_RATIO=0.05
|
|
BAIDU_VECTOR_DB_REBUILD_INDEX_TIMEOUT_IN_SECONDS=300
|
|
|
|
# VikingDB configurations, only available when VECTOR_STORE is `vikingdb`
|
|
VIKINGDB_ACCESS_KEY=your-ak
|
|
VIKINGDB_SECRET_KEY=your-sk
|
|
VIKINGDB_REGION=cn-shanghai
|
|
VIKINGDB_HOST=api-vikingdb.xxx.volces.com
|
|
VIKINGDB_SCHEMA=http
|
|
VIKINGDB_CONNECTION_TIMEOUT=30
|
|
VIKINGDB_SOCKET_TIMEOUT=30
|
|
|
|
# Lindorm configuration, only available when VECTOR_STORE is `lindorm`
|
|
LINDORM_URL=http://localhost:30070
|
|
LINDORM_USERNAME=admin
|
|
LINDORM_PASSWORD=admin
|
|
LINDORM_USING_UGC=True
|
|
LINDORM_QUERY_TIMEOUT=1
|
|
|
|
# opengauss configurations, only available when VECTOR_STORE is `opengauss`
|
|
OPENGAUSS_HOST=opengauss
|
|
OPENGAUSS_PORT=6600
|
|
OPENGAUSS_USER=postgres
|
|
OPENGAUSS_PASSWORD=Dify@123
|
|
OPENGAUSS_DATABASE=dify
|
|
OPENGAUSS_MIN_CONNECTION=1
|
|
OPENGAUSS_MAX_CONNECTION=5
|
|
OPENGAUSS_ENABLE_PQ=false
|
|
|
|
# huawei cloud search service vector configurations, only available when VECTOR_STORE is `huawei_cloud`
|
|
HUAWEI_CLOUD_HOSTS=https://127.0.0.1:9200
|
|
HUAWEI_CLOUD_USER=admin
|
|
HUAWEI_CLOUD_PASSWORD=admin
|
|
|
|
# Upstash Vector configuration, only available when VECTOR_STORE is `upstash`
|
|
UPSTASH_VECTOR_URL=https://xxx-vector.upstash.io
|
|
UPSTASH_VECTOR_TOKEN=dify
|
|
|
|
# TableStore Vector configuration
|
|
# (only used when VECTOR_STORE is tablestore)
|
|
TABLESTORE_ENDPOINT=https://instance-name.cn-hangzhou.ots.aliyuncs.com
|
|
TABLESTORE_INSTANCE_NAME=instance-name
|
|
TABLESTORE_ACCESS_KEY_ID=xxx
|
|
TABLESTORE_ACCESS_KEY_SECRET=xxx
|
|
TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE=false
|
|
|
|
# Clickzetta configuration, only available when VECTOR_STORE is `clickzetta`
|
|
CLICKZETTA_USERNAME=
|
|
CLICKZETTA_PASSWORD=
|
|
CLICKZETTA_INSTANCE=
|
|
CLICKZETTA_SERVICE=api.clickzetta.com
|
|
CLICKZETTA_WORKSPACE=quick_start
|
|
CLICKZETTA_VCLUSTER=default_ap
|
|
CLICKZETTA_SCHEMA=dify
|
|
CLICKZETTA_BATCH_SIZE=100
|
|
CLICKZETTA_ENABLE_INVERTED_INDEX=true
|
|
CLICKZETTA_ANALYZER_TYPE=chinese
|
|
CLICKZETTA_ANALYZER_MODE=smart
|
|
CLICKZETTA_VECTOR_DISTANCE_FUNCTION=cosine_distance
|
|
|
|
# InterSystems IRIS configuration, only available when VECTOR_STORE is `iris`
|
|
IRIS_HOST=iris
|
|
IRIS_SUPER_SERVER_PORT=1972
|
|
IRIS_WEB_SERVER_PORT=52773
|
|
IRIS_USER=_SYSTEM
|
|
IRIS_PASSWORD=Dify@1234
|
|
IRIS_DATABASE=USER
|
|
IRIS_SCHEMA=dify
|
|
IRIS_CONNECTION_URL=
|
|
IRIS_MIN_CONNECTION=1
|
|
IRIS_MAX_CONNECTION=3
|
|
IRIS_TEXT_INDEX=true
|
|
IRIS_TEXT_INDEX_LANGUAGE=en
|
|
IRIS_TIMEZONE=UTC
|
|
|
|
# ------------------------------
|
|
# Knowledge Configuration
|
|
# ------------------------------
|
|
|
|
# Upload file size limit, default 15M.
|
|
UPLOAD_FILE_SIZE_LIMIT=15
|
|
|
|
# The maximum number of files that can be uploaded at a time, default 5.
|
|
UPLOAD_FILE_BATCH_LIMIT=5
|
|
|
|
# Comma-separated list of file extensions blocked from upload for security reasons.
|
|
# Extensions should be lowercase without dots (e.g., exe,bat,sh,dll).
|
|
# Empty by default to allow all file types.
|
|
# Recommended: exe,bat,cmd,com,scr,vbs,ps1,msi,dll
|
|
UPLOAD_FILE_EXTENSION_BLACKLIST=
|
|
|
|
# Maximum number of files allowed in a single chunk attachment, default 10.
|
|
SINGLE_CHUNK_ATTACHMENT_LIMIT=10
|
|
|
|
# Maximum number of files allowed in a image batch upload operation
|
|
IMAGE_FILE_BATCH_LIMIT=10
|
|
|
|
# Maximum allowed image file size for attachments in megabytes, default 2.
|
|
ATTACHMENT_IMAGE_FILE_SIZE_LIMIT=2
|
|
|
|
# Timeout for downloading image attachments in seconds, default 60.
|
|
ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT=60
|
|
|
|
|
|
# ETL type, support: `dify`, `Unstructured`
|
|
# `dify` Dify's proprietary file extraction scheme
|
|
# `Unstructured` Unstructured.io file extraction scheme
|
|
ETL_TYPE=dify
|
|
|
|
# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured
|
|
# Or using Unstructured for document extractor node for pptx.
|
|
# For example: http://unstructured:8000/general/v0/general
|
|
UNSTRUCTURED_API_URL=
|
|
UNSTRUCTURED_API_KEY=
|
|
SCARF_NO_ANALYTICS=true
|
|
|
|
# ------------------------------
|
|
# Model Configuration
|
|
# ------------------------------
|
|
|
|
# The maximum number of tokens allowed for prompt generation.
|
|
# This setting controls the upper limit of tokens that can be used by the LLM
|
|
# when generating a prompt in the prompt generation tool.
|
|
# Default: 512 tokens.
|
|
PROMPT_GENERATION_MAX_TOKENS=512
|
|
|
|
# The maximum number of tokens allowed for code generation.
|
|
# This setting controls the upper limit of tokens that can be used by the LLM
|
|
# when generating code in the code generation tool.
|
|
# Default: 1024 tokens.
|
|
CODE_GENERATION_MAX_TOKENS=1024
|
|
|
|
# Enable or disable plugin based token counting. If disabled, token counting will return 0.
|
|
# This can improve performance by skipping token counting operations.
|
|
# Default: false (disabled).
|
|
PLUGIN_BASED_TOKEN_COUNTING_ENABLED=false
|
|
|
|
# ------------------------------
|
|
# Multi-modal Configuration
|
|
# ------------------------------
|
|
|
|
# The format of the image/video/audio/document sent when the multi-modal model is input,
|
|
# the default is base64, optional url.
|
|
# The delay of the call in url mode will be lower than that in base64 mode.
|
|
# It is generally recommended to use the more compatible base64 mode.
|
|
# If configured as url, you need to configure FILES_URL as an externally accessible address so that the multi-modal model can access the image/video/audio/document.
|
|
MULTIMODAL_SEND_FORMAT=base64
|
|
# Upload image file size limit, default 10M.
|
|
UPLOAD_IMAGE_FILE_SIZE_LIMIT=10
|
|
# Upload video file size limit, default 100M.
|
|
UPLOAD_VIDEO_FILE_SIZE_LIMIT=100
|
|
# Upload audio file size limit, default 50M.
|
|
UPLOAD_AUDIO_FILE_SIZE_LIMIT=50
|
|
|
|
# ------------------------------
|
|
# Sentry Configuration
|
|
# Used for application monitoring and error log tracking.
|
|
# ------------------------------
|
|
SENTRY_DSN=
|
|
|
|
# API Service Sentry DSN address, default is empty, when empty,
|
|
# all monitoring information is not reported to Sentry.
|
|
# If not set, Sentry error reporting will be disabled.
|
|
API_SENTRY_DSN=
|
|
# API Service The reporting ratio of Sentry events, if it is 0.01, it is 1%.
|
|
API_SENTRY_TRACES_SAMPLE_RATE=1.0
|
|
# API Service The reporting ratio of Sentry profiles, if it is 0.01, it is 1%.
|
|
API_SENTRY_PROFILES_SAMPLE_RATE=1.0
|
|
|
|
# Web Service Sentry DSN address, default is empty, when empty,
|
|
# all monitoring information is not reported to Sentry.
|
|
# If not set, Sentry error reporting will be disabled.
|
|
WEB_SENTRY_DSN=
|
|
|
|
# Plugin_daemon Service Sentry DSN address, default is empty, when empty,
|
|
# all monitoring information is not reported to Sentry.
|
|
# If not set, Sentry error reporting will be disabled.
|
|
PLUGIN_SENTRY_ENABLED=false
|
|
PLUGIN_SENTRY_DSN=
|
|
|
|
# ------------------------------
|
|
# Notion Integration Configuration
|
|
# Variables can be obtained by applying for Notion integration: https://www.notion.so/my-integrations
|
|
# ------------------------------
|
|
|
|
# Configure as "public" or "internal".
|
|
# Since Notion's OAuth redirect URL only supports HTTPS,
|
|
# if deploying locally, please use Notion's internal integration.
|
|
NOTION_INTEGRATION_TYPE=public
|
|
# Notion OAuth client secret (used for public integration type)
|
|
NOTION_CLIENT_SECRET=
|
|
# Notion OAuth client id (used for public integration type)
|
|
NOTION_CLIENT_ID=
|
|
# Notion internal integration secret.
|
|
# If the value of NOTION_INTEGRATION_TYPE is "internal",
|
|
# you need to configure this variable.
|
|
NOTION_INTERNAL_SECRET=
|
|
|
|
# ------------------------------
|
|
# Mail related configuration
|
|
# ------------------------------
|
|
|
|
# Mail type, support: resend, smtp, sendgrid
|
|
MAIL_TYPE=resend
|
|
|
|
# Default send from email address, if not specified
|
|
# If using SendGrid, use the 'from' field for authentication if necessary.
|
|
MAIL_DEFAULT_SEND_FROM=
|
|
|
|
# API-Key for the Resend email provider, used when MAIL_TYPE is `resend`.
|
|
RESEND_API_URL=https://api.resend.com
|
|
RESEND_API_KEY=your-resend-api-key
|
|
|
|
|
|
# SMTP server configuration, used when MAIL_TYPE is `smtp`
|
|
SMTP_SERVER=
|
|
SMTP_PORT=465
|
|
SMTP_USERNAME=
|
|
SMTP_PASSWORD=
|
|
SMTP_USE_TLS=true
|
|
SMTP_OPPORTUNISTIC_TLS=false
|
|
# Optional: override the local hostname used for SMTP HELO/EHLO
|
|
SMTP_LOCAL_HOSTNAME=
|
|
|
|
# Sendgid configuration
|
|
SENDGRID_API_KEY=
|
|
|
|
# ------------------------------
|
|
# Others Configuration
|
|
# ------------------------------
|
|
|
|
# Maximum length of segmentation tokens for indexing
|
|
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000
|
|
|
|
# Member invitation link valid time (hours),
|
|
# Default: 72.
|
|
INVITE_EXPIRY_HOURS=72
|
|
|
|
# Reset password token valid time (minutes),
|
|
RESET_PASSWORD_TOKEN_EXPIRY_MINUTES=5
|
|
EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES=5
|
|
CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES=5
|
|
OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES=5
|
|
|
|
# The sandbox service endpoint.
|
|
CODE_EXECUTION_ENDPOINT=http://sandbox:8194
|
|
CODE_EXECUTION_API_KEY=dify-sandbox
|
|
CODE_EXECUTION_SSL_VERIFY=True
|
|
CODE_EXECUTION_POOL_MAX_CONNECTIONS=100
|
|
CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS=20
|
|
CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY=5.0
|
|
CODE_MAX_NUMBER=9223372036854775807
|
|
CODE_MIN_NUMBER=-9223372036854775808
|
|
CODE_MAX_DEPTH=5
|
|
CODE_MAX_PRECISION=20
|
|
CODE_MAX_STRING_LENGTH=400000
|
|
CODE_MAX_STRING_ARRAY_LENGTH=30
|
|
CODE_MAX_OBJECT_ARRAY_LENGTH=30
|
|
CODE_MAX_NUMBER_ARRAY_LENGTH=1000
|
|
CODE_EXECUTION_CONNECT_TIMEOUT=10
|
|
CODE_EXECUTION_READ_TIMEOUT=60
|
|
CODE_EXECUTION_WRITE_TIMEOUT=10
|
|
TEMPLATE_TRANSFORM_MAX_LENGTH=400000
|
|
|
|
# Workflow runtime configuration
|
|
WORKFLOW_MAX_EXECUTION_STEPS=500
|
|
WORKFLOW_MAX_EXECUTION_TIME=1200
|
|
WORKFLOW_CALL_MAX_DEPTH=5
|
|
MAX_VARIABLE_SIZE=204800
|
|
WORKFLOW_FILE_UPLOAD_LIMIT=10
|
|
|
|
# GraphEngine Worker Pool Configuration
|
|
# Minimum number of workers per GraphEngine instance (default: 1)
|
|
GRAPH_ENGINE_MIN_WORKERS=1
|
|
# Maximum number of workers per GraphEngine instance (default: 10)
|
|
GRAPH_ENGINE_MAX_WORKERS=10
|
|
# Queue depth threshold that triggers worker scale up (default: 3)
|
|
GRAPH_ENGINE_SCALE_UP_THRESHOLD=3
|
|
# Seconds of idle time before scaling down workers (default: 5.0)
|
|
GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME=5.0
|
|
|
|
# Workflow storage configuration
|
|
# Options: rdbms, hybrid
|
|
# rdbms: Use only the relational database (default)
|
|
# hybrid: Save new data to object storage, read from both object storage and RDBMS
|
|
WORKFLOW_NODE_EXECUTION_STORAGE=rdbms
|
|
|
|
# Repository configuration
|
|
# Core workflow execution repository implementation
|
|
# Options:
|
|
# - core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository (default)
|
|
# - core.repositories.celery_workflow_execution_repository.CeleryWorkflowExecutionRepository
|
|
# - extensions.logstore.repositories.logstore_workflow_execution_repository.LogstoreWorkflowExecutionRepository
|
|
CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository
|
|
|
|
# Core workflow node execution repository implementation
|
|
# Options:
|
|
# - core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository (default)
|
|
# - core.repositories.celery_workflow_node_execution_repository.CeleryWorkflowNodeExecutionRepository
|
|
# - extensions.logstore.repositories.logstore_workflow_node_execution_repository.LogstoreWorkflowNodeExecutionRepository
|
|
CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository
|
|
|
|
# API workflow run repository implementation
|
|
# Options:
|
|
# - repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository (default)
|
|
# - extensions.logstore.repositories.logstore_api_workflow_run_repository.LogstoreAPIWorkflowRunRepository
|
|
API_WORKFLOW_RUN_REPOSITORY=repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository
|
|
|
|
# API workflow node execution repository implementation
|
|
# Options:
|
|
# - repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository (default)
|
|
# - extensions.logstore.repositories.logstore_api_workflow_node_execution_repository.LogstoreAPIWorkflowNodeExecutionRepository
|
|
API_WORKFLOW_NODE_EXECUTION_REPOSITORY=repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository
|
|
|
|
# Workflow log cleanup configuration
|
|
# Enable automatic cleanup of workflow run logs to manage database size
|
|
WORKFLOW_LOG_CLEANUP_ENABLED=false
|
|
# Number of days to retain workflow run logs (default: 30 days)
|
|
WORKFLOW_LOG_RETENTION_DAYS=30
|
|
# Batch size for workflow log cleanup operations (default: 100)
|
|
WORKFLOW_LOG_CLEANUP_BATCH_SIZE=100
|
|
# Comma-separated list of workflow IDs to clean logs for
|
|
WORKFLOW_LOG_CLEANUP_SPECIFIC_WORKFLOW_IDS=
|
|
|
|
# Aliyun SLS Logstore Configuration
|
|
# Aliyun Access Key ID
|
|
ALIYUN_SLS_ACCESS_KEY_ID=
|
|
# Aliyun Access Key Secret
|
|
ALIYUN_SLS_ACCESS_KEY_SECRET=
|
|
# Aliyun SLS Endpoint (e.g., cn-hangzhou.log.aliyuncs.com)
|
|
ALIYUN_SLS_ENDPOINT=
|
|
# Aliyun SLS Region (e.g., cn-hangzhou)
|
|
ALIYUN_SLS_REGION=
|
|
# Aliyun SLS Project Name
|
|
ALIYUN_SLS_PROJECT_NAME=
|
|
# Number of days to retain workflow run logs (default: 365 days, 3650 for permanent storage)
|
|
ALIYUN_SLS_LOGSTORE_TTL=365
|
|
# Enable dual-write to both SLS LogStore and SQL database (default: false)
|
|
LOGSTORE_DUAL_WRITE_ENABLED=false
|
|
# Enable dual-read fallback to SQL database when LogStore returns no results (default: true)
|
|
# Useful for migration scenarios where historical data exists only in SQL database
|
|
LOGSTORE_DUAL_READ_ENABLED=true
|
|
# Control flag for whether to write the `graph` field to LogStore.
|
|
# If LOGSTORE_ENABLE_PUT_GRAPH_FIELD is "true", write the full `graph` field;
|
|
# otherwise write an empty {} instead. Defaults to writing the `graph` field.
|
|
LOGSTORE_ENABLE_PUT_GRAPH_FIELD=true
|
|
|
|
# HTTP request node in workflow configuration
|
|
HTTP_REQUEST_NODE_MAX_BINARY_SIZE=10485760
|
|
HTTP_REQUEST_NODE_MAX_TEXT_SIZE=1048576
|
|
HTTP_REQUEST_NODE_SSL_VERIFY=True
|
|
|
|
# HTTP request node timeout configuration
|
|
# Maximum timeout values (in seconds) that users can set in HTTP request nodes
|
|
# - Connect timeout: Time to wait for establishing connection (default: 10s)
|
|
# - Read timeout: Time to wait for receiving response data (default: 600s, 10 minutes)
|
|
# - Write timeout: Time to wait for sending request data (default: 600s, 10 minutes)
|
|
HTTP_REQUEST_MAX_CONNECT_TIMEOUT=10
|
|
HTTP_REQUEST_MAX_READ_TIMEOUT=600
|
|
HTTP_REQUEST_MAX_WRITE_TIMEOUT=600
|
|
|
|
# Base64 encoded CA certificate data for custom certificate verification (PEM format, optional)
|
|
# HTTP_REQUEST_NODE_SSL_CERT_DATA=LS0tLS1CRUdJTi...
|
|
# Base64 encoded client certificate data for mutual TLS authentication (PEM format, optional)
|
|
# HTTP_REQUEST_NODE_SSL_CLIENT_CERT_DATA=LS0tLS1CRUdJTi...
|
|
# Base64 encoded client private key data for mutual TLS authentication (PEM format, optional)
|
|
# HTTP_REQUEST_NODE_SSL_CLIENT_KEY_DATA=LS0tLS1CRUdJTi...
|
|
|
|
# Webhook request configuration
|
|
WEBHOOK_REQUEST_BODY_MAX_SIZE=10485760
|
|
|
|
# Respect X-* headers to redirect clients
|
|
RESPECT_XFORWARD_HEADERS_ENABLED=false
|
|
|
|
# SSRF Proxy server HTTP URL
|
|
SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128
|
|
# SSRF Proxy server HTTPS URL
|
|
SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128
|
|
|
|
# Maximum loop count in the workflow
|
|
LOOP_NODE_MAX_COUNT=100
|
|
|
|
# The maximum number of tools that can be used in the agent.
|
|
MAX_TOOLS_NUM=10
|
|
|
|
# Maximum number of Parallelism branches in the workflow
|
|
MAX_PARALLEL_LIMIT=10
|
|
|
|
# The maximum number of iterations for agent setting
|
|
MAX_ITERATIONS_NUM=99
|
|
|
|
# ------------------------------
|
|
# Environment Variables for web Service
|
|
# ------------------------------
|
|
|
|
# The timeout for the text generation in millisecond
|
|
TEXT_GENERATION_TIMEOUT_MS=60000
|
|
|
|
# Enable the experimental vinext runtime shipped in the image.
|
|
EXPERIMENTAL_ENABLE_VINEXT=false
|
|
|
|
# Allow inline style attributes in Markdown rendering.
|
|
# Enable this if your workflows use Jinja2 templates with styled HTML.
|
|
# Only recommended for self-hosted deployments with trusted content.
|
|
ALLOW_INLINE_STYLES=false
|
|
|
|
# Allow rendering unsafe URLs which have "data:" scheme.
|
|
ALLOW_UNSAFE_DATA_SCHEME=false
|
|
|
|
# Maximum number of tree depth in the workflow
|
|
MAX_TREE_DEPTH=50
|
|
|
|
# ------------------------------
|
|
# Environment Variables for database Service
|
|
# ------------------------------
|
|
# Postgres data directory
|
|
PGDATA=/var/lib/postgresql/data/pgdata
|
|
|
|
# MySQL Default Configuration
|
|
MYSQL_HOST_VOLUME=./volumes/mysql/data
|
|
|
|
# ------------------------------
|
|
# Environment Variables for sandbox Service
|
|
# ------------------------------
|
|
|
|
# The API key for the sandbox service
|
|
SANDBOX_API_KEY=dify-sandbox
|
|
# The mode in which the Gin framework runs
|
|
SANDBOX_GIN_MODE=release
|
|
# The timeout for the worker in seconds
|
|
SANDBOX_WORKER_TIMEOUT=15
|
|
# Enable network for the sandbox service
|
|
SANDBOX_ENABLE_NETWORK=true
|
|
# HTTP proxy URL for SSRF protection
|
|
SANDBOX_HTTP_PROXY=http://ssrf_proxy:3128
|
|
# HTTPS proxy URL for SSRF protection
|
|
SANDBOX_HTTPS_PROXY=http://ssrf_proxy:3128
|
|
# The port on which the sandbox service runs
|
|
SANDBOX_PORT=8194
|
|
|
|
# ------------------------------
|
|
# Environment Variables for weaviate Service
|
|
# (only used when VECTOR_STORE is weaviate)
|
|
# ------------------------------
|
|
WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate
|
|
WEAVIATE_QUERY_DEFAULTS_LIMIT=25
|
|
WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
|
|
WEAVIATE_DEFAULT_VECTORIZER_MODULE=none
|
|
WEAVIATE_CLUSTER_HOSTNAME=node1
|
|
WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true
|
|
WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
|
|
WEAVIATE_AUTHENTICATION_APIKEY_USERS=hello@dify.ai
|
|
WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED=true
|
|
WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=hello@dify.ai
|
|
WEAVIATE_DISABLE_TELEMETRY=false
|
|
WEAVIATE_ENABLE_TOKENIZER_GSE=false
|
|
WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA=false
|
|
WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR=false
|
|
|
|
# ------------------------------
|
|
# Environment Variables for Chroma
|
|
# (only used when VECTOR_STORE is chroma)
|
|
# ------------------------------
|
|
|
|
# Authentication credentials for Chroma server
|
|
CHROMA_SERVER_AUTHN_CREDENTIALS=difyai123456
|
|
# Authentication provider for Chroma server
|
|
CHROMA_SERVER_AUTHN_PROVIDER=chromadb.auth.token_authn.TokenAuthenticationServerProvider
|
|
# Persistence setting for Chroma server
|
|
CHROMA_IS_PERSISTENT=TRUE
|
|
|
|
# ------------------------------
|
|
# Environment Variables for Oracle Service
|
|
# (only used when VECTOR_STORE is oracle)
|
|
# ------------------------------
|
|
ORACLE_PWD=Dify123456
|
|
ORACLE_CHARACTERSET=AL32UTF8
|
|
|
|
# ------------------------------
|
|
# Environment Variables for milvus Service
|
|
# (only used when VECTOR_STORE is milvus)
|
|
# ------------------------------
|
|
# ETCD configuration for auto compaction mode
|
|
ETCD_AUTO_COMPACTION_MODE=revision
|
|
# ETCD configuration for auto compaction retention in terms of number of revisions
|
|
ETCD_AUTO_COMPACTION_RETENTION=1000
|
|
# ETCD configuration for backend quota in bytes
|
|
ETCD_QUOTA_BACKEND_BYTES=4294967296
|
|
# ETCD configuration for the number of changes before triggering a snapshot
|
|
ETCD_SNAPSHOT_COUNT=50000
|
|
# MinIO access key for authentication
|
|
MINIO_ACCESS_KEY=minioadmin
|
|
# MinIO secret key for authentication
|
|
MINIO_SECRET_KEY=minioadmin
|
|
# ETCD service endpoints
|
|
ETCD_ENDPOINTS=etcd:2379
|
|
# MinIO service address
|
|
MINIO_ADDRESS=minio:9000
|
|
# Enable or disable security authorization
|
|
MILVUS_AUTHORIZATION_ENABLED=true
|
|
|
|
# ------------------------------
|
|
# Environment Variables for pgvector / pgvector-rs Service
|
|
# (only used when VECTOR_STORE is pgvector / pgvector-rs)
|
|
# ------------------------------
|
|
PGVECTOR_PGUSER=postgres
|
|
# The password for the default postgres user.
|
|
PGVECTOR_POSTGRES_PASSWORD=difyai123456
|
|
# The name of the default postgres database.
|
|
PGVECTOR_POSTGRES_DB=dify
|
|
# postgres data directory
|
|
PGVECTOR_PGDATA=/var/lib/postgresql/data/pgdata
|
|
|
|
# ------------------------------
|
|
# Environment Variables for opensearch
|
|
# (only used when VECTOR_STORE is opensearch)
|
|
# ------------------------------
|
|
OPENSEARCH_DISCOVERY_TYPE=single-node
|
|
OPENSEARCH_BOOTSTRAP_MEMORY_LOCK=true
|
|
OPENSEARCH_JAVA_OPTS_MIN=512m
|
|
OPENSEARCH_JAVA_OPTS_MAX=1024m
|
|
OPENSEARCH_INITIAL_ADMIN_PASSWORD=Qazwsxedc!@#123
|
|
OPENSEARCH_MEMLOCK_SOFT=-1
|
|
OPENSEARCH_MEMLOCK_HARD=-1
|
|
OPENSEARCH_NOFILE_SOFT=65536
|
|
OPENSEARCH_NOFILE_HARD=65536
|
|
|
|
# ------------------------------
|
|
# Environment Variables for Nginx reverse proxy
|
|
# ------------------------------
|
|
NGINX_SERVER_NAME=_
|
|
NGINX_HTTPS_ENABLED=false
|
|
# HTTP port
|
|
NGINX_PORT=80
|
|
# SSL settings are only applied when HTTPS_ENABLED is true
|
|
NGINX_SSL_PORT=443
|
|
# if HTTPS_ENABLED is true, you're required to add your own SSL certificates/keys to the `./nginx/ssl` directory
|
|
# and modify the env vars below accordingly.
|
|
NGINX_SSL_CERT_FILENAME=dify.crt
|
|
NGINX_SSL_CERT_KEY_FILENAME=dify.key
|
|
NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
|
|
|
|
# Nginx performance tuning
|
|
NGINX_WORKER_PROCESSES=auto
|
|
NGINX_CLIENT_MAX_BODY_SIZE=100M
|
|
NGINX_KEEPALIVE_TIMEOUT=65
|
|
|
|
# Proxy settings
|
|
NGINX_PROXY_READ_TIMEOUT=3600s
|
|
NGINX_PROXY_SEND_TIMEOUT=3600s
|
|
|
|
# Set true to accept requests for /.well-known/acme-challenge/
|
|
NGINX_ENABLE_CERTBOT_CHALLENGE=false
|
|
|
|
# ------------------------------
|
|
# Certbot Configuration
|
|
# ------------------------------
|
|
|
|
# Email address (required to get certificates from Let's Encrypt)
|
|
CERTBOT_EMAIL=your_email@example.com
|
|
|
|
# Domain name
|
|
CERTBOT_DOMAIN=your_domain.com
|
|
|
|
# certbot command options
|
|
# i.e: --force-renewal --dry-run --test-cert --debug
|
|
CERTBOT_OPTIONS=
|
|
|
|
# ------------------------------
|
|
# Environment Variables for SSRF Proxy
|
|
# ------------------------------
|
|
SSRF_HTTP_PORT=3128
|
|
SSRF_COREDUMP_DIR=/var/spool/squid
|
|
SSRF_REVERSE_PROXY_PORT=8194
|
|
SSRF_SANDBOX_HOST=sandbox
|
|
SSRF_DEFAULT_TIME_OUT=5
|
|
SSRF_DEFAULT_CONNECT_TIME_OUT=5
|
|
SSRF_DEFAULT_READ_TIME_OUT=5
|
|
SSRF_DEFAULT_WRITE_TIME_OUT=5
|
|
SSRF_POOL_MAX_CONNECTIONS=100
|
|
SSRF_POOL_MAX_KEEPALIVE_CONNECTIONS=20
|
|
SSRF_POOL_KEEPALIVE_EXPIRY=5.0
|
|
|
|
# ------------------------------
|
|
# docker env var for specifying vector db and metadata db type at startup
|
|
# (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
|
|
# ------------------------------
|
|
COMPOSE_PROFILES=${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}
|
|
|
|
# ------------------------------
|
|
# Worker health check configuration for worker and worker_beat services.
|
|
# Set to false to enable the health check.
|
|
# Note: enabling the health check may cause periodic CPU spikes and increased load,
|
|
# as it establishes a broker connection and sends a Celery ping on every check interval.
|
|
# ------------------------------
|
|
COMPOSE_WORKER_HEALTHCHECK_DISABLED=true
|
|
# Interval between health checks (e.g. 30s, 1m)
|
|
COMPOSE_WORKER_HEALTHCHECK_INTERVAL=30s
|
|
# Timeout for each health check (e.g. 30s, 1m)
|
|
COMPOSE_WORKER_HEALTHCHECK_TIMEOUT=30s
|
|
|
|
# ------------------------------
|
|
# Docker Compose Service Expose Host Port Configurations
|
|
# ------------------------------
|
|
EXPOSE_NGINX_PORT=80
|
|
EXPOSE_NGINX_SSL_PORT=443
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# ModelProvider & Tool Position Configuration
|
|
# Used to specify the model providers and tools that can be used in the app.
|
|
# ----------------------------------------------------------------------------
|
|
|
|
# Pin, include, and exclude tools
|
|
# Use comma-separated values with no spaces between items.
|
|
# Example: POSITION_TOOL_PINS=bing,google
|
|
POSITION_TOOL_PINS=
|
|
POSITION_TOOL_INCLUDES=
|
|
POSITION_TOOL_EXCLUDES=
|
|
|
|
# Pin, include, and exclude model providers
|
|
# Use comma-separated values with no spaces between items.
|
|
# Example: POSITION_PROVIDER_PINS=openai,openllm
|
|
POSITION_PROVIDER_PINS=
|
|
POSITION_PROVIDER_INCLUDES=
|
|
POSITION_PROVIDER_EXCLUDES=
|
|
|
|
# CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
|
|
CSP_WHITELIST=
|
|
|
|
# Enable or disable create tidb service job
|
|
CREATE_TIDB_SERVICE_JOB_ENABLED=false
|
|
|
|
# Maximum number of submitted thread count in a ThreadPool for parallel node execution
|
|
MAX_SUBMIT_COUNT=100
|
|
|
|
# The maximum number of top-k value for RAG.
|
|
TOP_K_MAX_VALUE=10
|
|
|
|
# ------------------------------
|
|
# Plugin Daemon Configuration
|
|
# ------------------------------
|
|
|
|
DB_PLUGIN_DATABASE=dify_plugin
|
|
EXPOSE_PLUGIN_DAEMON_PORT=5002
|
|
PLUGIN_DAEMON_PORT=5002
|
|
PLUGIN_DAEMON_KEY=lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi
|
|
PLUGIN_DAEMON_URL=http://plugin_daemon:5002
|
|
PLUGIN_MAX_PACKAGE_SIZE=52428800
|
|
PLUGIN_MODEL_SCHEMA_CACHE_TTL=3600
|
|
PLUGIN_PPROF_ENABLED=false
|
|
|
|
PLUGIN_DEBUGGING_HOST=0.0.0.0
|
|
PLUGIN_DEBUGGING_PORT=5003
|
|
EXPOSE_PLUGIN_DEBUGGING_HOST=localhost
|
|
EXPOSE_PLUGIN_DEBUGGING_PORT=5003
|
|
|
|
# If this key is changed, DIFY_INNER_API_KEY in plugin_daemon service must also be updated or agent node will fail.
|
|
PLUGIN_DIFY_INNER_API_KEY=QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1
|
|
PLUGIN_DIFY_INNER_API_URL=http://api:5001
|
|
|
|
ENDPOINT_URL_TEMPLATE=http://localhost/e/{hook_id}
|
|
|
|
MARKETPLACE_ENABLED=true
|
|
MARKETPLACE_API_URL=https://marketplace.dify.ai
|
|
|
|
# Creators Platform configuration
|
|
CREATORS_PLATFORM_FEATURES_ENABLED=true
|
|
CREATORS_PLATFORM_API_URL=https://creators.dify.ai
|
|
CREATORS_PLATFORM_OAUTH_CLIENT_ID=
|
|
|
|
FORCE_VERIFYING_SIGNATURE=true
|
|
ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES=true
|
|
|
|
PLUGIN_STDIO_BUFFER_SIZE=1024
|
|
PLUGIN_STDIO_MAX_BUFFER_SIZE=5242880
|
|
|
|
PLUGIN_PYTHON_ENV_INIT_TIMEOUT=120
|
|
# Plugin Daemon side timeout (configure to match the API side below)
|
|
PLUGIN_MAX_EXECUTION_TIMEOUT=600
|
|
# API side timeout (configure to match the Plugin Daemon side above)
|
|
PLUGIN_DAEMON_TIMEOUT=600.0
|
|
# PIP_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
|
PIP_MIRROR_URL=
|
|
|
|
# https://github.com/langgenius/dify-plugin-daemon/blob/main/.env.example
|
|
# Plugin storage type, local aws_s3 tencent_cos azure_blob aliyun_oss volcengine_tos
|
|
PLUGIN_STORAGE_TYPE=local
|
|
PLUGIN_STORAGE_LOCAL_ROOT=/app/storage
|
|
PLUGIN_WORKING_PATH=/app/storage/cwd
|
|
PLUGIN_INSTALLED_PATH=plugin
|
|
PLUGIN_PACKAGE_CACHE_PATH=plugin_packages
|
|
PLUGIN_MEDIA_CACHE_PATH=assets
|
|
# Plugin oss bucket
|
|
PLUGIN_STORAGE_OSS_BUCKET=
|
|
# Plugin oss s3 credentials
|
|
PLUGIN_S3_USE_AWS=false
|
|
PLUGIN_S3_USE_AWS_MANAGED_IAM=false
|
|
PLUGIN_S3_ENDPOINT=
|
|
PLUGIN_S3_USE_PATH_STYLE=false
|
|
PLUGIN_AWS_ACCESS_KEY=
|
|
PLUGIN_AWS_SECRET_KEY=
|
|
PLUGIN_AWS_REGION=
|
|
# Plugin oss azure blob
|
|
PLUGIN_AZURE_BLOB_STORAGE_CONTAINER_NAME=
|
|
PLUGIN_AZURE_BLOB_STORAGE_CONNECTION_STRING=
|
|
# Plugin oss tencent cos
|
|
PLUGIN_TENCENT_COS_SECRET_KEY=
|
|
PLUGIN_TENCENT_COS_SECRET_ID=
|
|
PLUGIN_TENCENT_COS_REGION=
|
|
# Plugin oss aliyun oss
|
|
PLUGIN_ALIYUN_OSS_REGION=
|
|
PLUGIN_ALIYUN_OSS_ENDPOINT=
|
|
PLUGIN_ALIYUN_OSS_ACCESS_KEY_ID=
|
|
PLUGIN_ALIYUN_OSS_ACCESS_KEY_SECRET=
|
|
PLUGIN_ALIYUN_OSS_AUTH_VERSION=v4
|
|
PLUGIN_ALIYUN_OSS_PATH=
|
|
# Plugin oss volcengine tos
|
|
PLUGIN_VOLCENGINE_TOS_ENDPOINT=
|
|
PLUGIN_VOLCENGINE_TOS_ACCESS_KEY=
|
|
PLUGIN_VOLCENGINE_TOS_SECRET_KEY=
|
|
PLUGIN_VOLCENGINE_TOS_REGION=
|
|
|
|
# ------------------------------
|
|
# OTLP Collector Configuration
|
|
# ------------------------------
|
|
ENABLE_OTEL=false
|
|
OTLP_TRACE_ENDPOINT=
|
|
OTLP_METRIC_ENDPOINT=
|
|
OTLP_BASE_ENDPOINT=http://localhost:4318
|
|
OTLP_API_KEY=
|
|
OTEL_EXPORTER_OTLP_PROTOCOL=
|
|
OTEL_EXPORTER_TYPE=otlp
|
|
OTEL_SAMPLING_RATE=0.1
|
|
OTEL_BATCH_EXPORT_SCHEDULE_DELAY=5000
|
|
OTEL_MAX_QUEUE_SIZE=2048
|
|
OTEL_MAX_EXPORT_BATCH_SIZE=512
|
|
OTEL_METRIC_EXPORT_INTERVAL=60000
|
|
OTEL_BATCH_EXPORT_TIMEOUT=10000
|
|
OTEL_METRIC_EXPORT_TIMEOUT=30000
|
|
|
|
# Prevent Clickjacking
|
|
ALLOW_EMBED=false
|
|
|
|
# Dataset queue monitor configuration
|
|
QUEUE_MONITOR_THRESHOLD=200
|
|
# You can configure multiple ones, separated by commas. eg: test1@dify.ai,test2@dify.ai
|
|
QUEUE_MONITOR_ALERT_EMAILS=
|
|
# Monitor interval in minutes, default is 30 minutes
|
|
QUEUE_MONITOR_INTERVAL=30
|
|
|
|
# Swagger UI configuration
|
|
SWAGGER_UI_ENABLED=false
|
|
SWAGGER_UI_PATH=/swagger-ui.html
|
|
|
|
# Whether to encrypt dataset IDs when exporting DSL files (default: true)
|
|
# Set to false to export dataset IDs as plain text for easier cross-environment import
|
|
DSL_EXPORT_ENCRYPT_DATASET_ID=true
|
|
|
|
# Maximum number of segments for dataset segments API (0 for unlimited)
|
|
DATASET_MAX_SEGMENTS_PER_REQUEST=0
|
|
|
|
# Celery schedule tasks configuration
|
|
ENABLE_CLEAN_EMBEDDING_CACHE_TASK=false
|
|
ENABLE_CLEAN_UNUSED_DATASETS_TASK=false
|
|
ENABLE_CREATE_TIDB_SERVERLESS_TASK=false
|
|
ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK=false
|
|
ENABLE_CLEAN_MESSAGES=false
|
|
ENABLE_WORKFLOW_RUN_CLEANUP_TASK=false
|
|
ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK=false
|
|
ENABLE_DATASETS_QUEUE_MONITOR=false
|
|
ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK=true
|
|
ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK=true
|
|
WORKFLOW_SCHEDULE_POLLER_INTERVAL=1
|
|
WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE=100
|
|
WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK=0
|
|
|
|
# Tenant isolated task queue configuration
|
|
TENANT_ISOLATED_TASK_CONCURRENCY=1
|
|
|
|
# Maximum allowed CSV file size for annotation import in megabytes
|
|
ANNOTATION_IMPORT_FILE_SIZE_LIMIT=2
|
|
#Maximum number of annotation records allowed in a single import
|
|
ANNOTATION_IMPORT_MAX_RECORDS=10000
|
|
# Minimum number of annotation records required in a single import
|
|
ANNOTATION_IMPORT_MIN_RECORDS=1
|
|
ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE=5
|
|
ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR=20
|
|
# Maximum number of concurrent annotation import tasks per tenant
|
|
ANNOTATION_IMPORT_MAX_CONCURRENT=5
|
|
|
|
# The API key of amplitude
|
|
AMPLITUDE_API_KEY=
|
|
|
|
# Sandbox expired records clean configuration
|
|
SANDBOX_EXPIRED_RECORDS_CLEAN_GRACEFUL_PERIOD=21
|
|
SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_SIZE=1000
|
|
SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_MAX_INTERVAL=200
|
|
SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS=30
|
|
|
|
|
|
# Redis URL used for event bus between API and
|
|
# celery worker
|
|
# defaults to url constructed from `REDIS_*`
|
|
# configurations
|
|
EVENT_BUS_REDIS_URL=
|
|
# Event transport type. Options are:
|
|
#
|
|
# - pubsub: normal Pub/Sub (at-most-once)
|
|
# - sharded: sharded Pub/Sub (at-most-once)
|
|
# - streams: Redis Streams (at-least-once, recommended to avoid subscriber races)
|
|
#
|
|
# Note: Before enabling 'streams' in production, estimate your expected event volume and retention needs.
|
|
# Configure Redis memory limits and stream trimming appropriately (e.g., MAXLEN and key expiry) to reduce
|
|
# the risk of data loss from Redis auto-eviction under memory pressure.
|
|
# Also accepts ENV: EVENT_BUS_REDIS_CHANNEL_TYPE.
|
|
EVENT_BUS_REDIS_CHANNEL_TYPE=pubsub
|
|
# Whether to use Redis cluster mode while use redis as event bus.
|
|
# It's highly recommended to enable this for large deployments.
|
|
EVENT_BUS_REDIS_USE_CLUSTERS=false
|
|
|
|
# Whether to Enable human input timeout check task
|
|
ENABLE_HUMAN_INPUT_TIMEOUT_TASK=true
|
|
# Human input timeout check interval in minutes
|
|
HUMAN_INPUT_TIMEOUT_TASK_INTERVAL=1
|
|
|
|
|
|
SANDBOX_EXPIRED_RECORDS_CLEAN_TASK_LOCK_TTL=90000
|