From d3ce263235a5db8ddb96e45c182e6a29fe0f2a0a Mon Sep 17 00:00:00 2001
From: RiskeyL <7a8y@163.com>
Date: Mon, 23 Mar 2026 10:55:44 +0800
Subject: [PATCH 1/3] update environment variable documentation based on latest
code using AI
---
en/self-host/configuration/environments.mdx | 2072 +++++++++++++------
1 file changed, 1405 insertions(+), 667 deletions(-)
diff --git a/en/self-host/configuration/environments.mdx b/en/self-host/configuration/environments.mdx
index d3aa8a0f5..b91840321 100644
--- a/en/self-host/configuration/environments.mdx
+++ b/en/self-host/configuration/environments.mdx
@@ -1,865 +1,1603 @@
---
-title: Environments
+title: Environment Variables
+description: Reference for all environment variables used by Dify self-hosted deployments.
---
-
-This document may be outdated. Please refer to the latest configuration files:
+Dify works out of the box with default settings. You can customize your deployment by modifying the environment variables in the `.env` file.
-- [docker-compose.yaml](https://github.com/langgenius/dify/blob/5f8d20b5b2bb51f19547467167b18d9c0f6ffbb8/docker/docker-compose.yaml)
-
-- [.env.example](https://github.com/langgenius/dify/blob/5f8d20b5b2bb51f19547467167b18d9c0f6ffbb8/docker/.env.example)
-
+
+After upgrading Dify, run `diff .env .env.example` in the `docker` directory to check for newly added or changed variables, then update your `.env` file accordingly.
+
## Common Variables
-### CONSOLE_API_URL
-
-The backend URL for the console API. This is used to construct the authorization callback. If left empty, it defaults to the same domain as the application. Example: `https://api.console.dify.ai`
-
-### CONSOLE_WEB_URL
-
-The front-end URL of the console web interface. This is used to construct front-end addresses and for CORS configuration. If left empty, it defaults to the same domain as the application. Example: `https://console.dify.ai`
-
-### SERVICE_API_URL
-
-The Service API URL, used to display Service API Base URL in the front-end. If left empty, it defaults to the same domain as the application. Example: `https://api.dify.ai`
-
-### TRIGGER_URL
-
-The base URL prefix used for the webhook callback URLs in both webhook triggers and plugin triggers.
-
-Ensure it points to a public domain or IP address accessible to external systems.
-
-### APP_API_URL
-
-The WebApp API backend URL, used to specify the backend URL for the front-end API. If left empty, it defaults to the same domain as the application. Example: `https://app.dify.ai`
-
-### APP_WEB_URL
-
-The WebApp URL, used to display File preview or download Url to the front-end or as Multi-model inputs; If left empty, it defaults to the same domain as the application. Example: `https://udify.app/`
-
-### FILES_URL
-
-The prefix for file preview or download URLs, used to display these URLs in the front-end and provide them as input for multi-modal models. To prevent forgery, image preview URLs are signed and expire after 5 minutes.
-
-***
-
-## Server
-
-### MODE
-
-Startup mode: This is only available when launched using docker. It is not applicable when running from source code.
-
-- api: Start API Server.
-- worker: Start asynchronous queue worker.
-
-### DEBUG
-
-Debug mode: Disabled by default. It's recommended to enable this setting during local development to prevent issues caused by monkey patching.
-
-### FLASK_DEBUG
-
-Flask debug mode: When enabled, it outputs trace information in the API responses, facilitating easier debugging.
-
-### SECRET_KEY
-
-A secret key used for securely signing session cookies and encrypting sensitive information in the database.
-
-This variable must be set before the first launch.
-
-Run `openssl rand -base64 42` to generate a strong key for it.
-
-### DEPLOY_ENV
-
-Deployment environment:
-
-- PRODUCTION (default): Production environment.
-- TESTING: Testing environment. There will be a distinct color label on the front-end page, indicating that this environment is a testing environment.
-
-### LOG_LEVEL
-
-The log output level. Default is INFO. For production environments, it's recommended to set this to ERROR.
-
-### MIGRATION_ENABLED
-
-When set to true, database migrations are automatically executed on container startup. This is only available when launched using docker and does not apply when running from source code.
-
-For source code launches, you need to manually run `flask db upgrade` in the api directory.
-
-### CHECK_UPDATE_URL
-
-Controls the version checking policy. If set to false, the system will not call `https://updates.dify.ai` to check for updates.
-
-Currently, the version check interface based on CloudFlare Worker is not directly accessible in China. Setting this variable to an empty value will disable this API call.
-
-### TEXT_GENERATION_TIMEOUT_MS
-
-Default value: 60000 (milliseconds). Specifies the timeout for text generation and workflow processes. This setting prevents system-wide service disruptions caused by individual processes exceeding their allocated time.
+These URL variables configure the addresses of Dify's various services.
-### OPENAI_API_BASE
+For single-domain deployments behind Nginx (the default Docker Compose setup), these can be left empty—the system auto-detects from the incoming request. Configure them when using custom domains, split-domain deployments, or a reverse proxy.
-Used to change the OpenAI base address, default is [https://api.openai.com/v1](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.
-
-### Container Startup Related Configuration
-
-Only effective when starting with docker image or docker-compose.
-
-- DIFY_BIND_ADDRESS: API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed.
-- DIFY_PORT: API service binding port number, default to 5001.
-- SERVER_WORKER_AMOUNT: The number of API server workers, i.e., the number of gevent workers. Formula: `number of cpu cores x 2 + 1`
-
- Reference: [https://docs.gunicorn.org/en/stable/design.html#how-many-workers](https://docs.gunicorn.org/en/stable/design.html#how-many-workers)
-
-- SERVER_WORKER_CLASS: Defaults to gevent. If using windows, it can be switched to sync or solo.
-- GUNICORN_TIMEOUT: Request handling timeout. Default is 200. Recommended value is 360 to support longer SSE (Server-Sent Events) connection times.
-- CELERY_WORKER_CLASS: Similar to `SERVER_WORKER_CLASS`. Default is gevent. If using windows, it can be switched to sync or solo.
-- CELERY_WORKER_AMOUNT: The number of Celery workers. The default is 1, and can be set as needed.
-- COMPOSE_PROFILES: Selectively start service groups. The default value is `${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}`, which is automatically derived from `VECTOR_STORE` and `DB_TYPE`.
-
-### Database Configuration
-
-The database uses PostgreSQL. Please use the public schema.
-
-- DB_TYPE: Database type.
-
- Available values include:
-
- - `postgresql`(default)
- - `mysql` (MySQL-compatible databases like TiDB can also use this value)
- - `oceanbase`
- - `seekdb`
-
-- DB_USERNAME: username
-- DB_PASSWORD: password
-- DB_HOST: database host
-- DB_PORT: database port number, default is 5432
-- DB_DATABASE: database name
-- SQLALCHEMY_POOL_SIZE: The size of the database connection pool. The default is 30 connections, which can be appropriately increased.
-- SQLALCHEMY_POOL_RECYCLE: Database connection pool recycling time, the default is 3600 seconds.
-- SQLALCHEMY_ECHO: Whether to print SQL, default is false.
-
-### Redis Configuration
-
-This Redis configuration is used for caching and for pub/sub during conversation.
-
-- REDIS_HOST: Redis host
-- REDIS_PORT: Redis port, default is 6379
-- REDIS_DB: Redis Database, default is 0. Please use a different Database from Session Redis and Celery Broker.
-- REDIS_USERNAME: Redis username, default is empty
-- REDIS_PASSWORD: Redis password, default is empty. It is strongly recommended to set a password.
-- REDIS_USE_SSL: Whether to use SSL protocol for connection, default is false
-- REDIS_USE_SENTINEL: Use Redis Sentinel to connect to Redis servers
-- REDIS_SENTINELS: Sentinel nodes, format: `:,:,:`
-- REDIS_SENTINEL_SERVICE_NAME: Sentinel service name, same as Master Name
-- REDIS_SENTINEL_USERNAME: Username for Sentinel
-- REDIS_SENTINEL_PASSWORD: Password for Sentinel
-- REDIS_SENTINEL_SOCKET_TIMEOUT: Sentinel timeout, default value: 0.1, unit: seconds
-
-### Celery Configuration
-
-- CELERY_BROKER_URL
-
- Format as follows(direct connection mode):
-
- ```
- redis://:@:/
- ```
-
- Example: `redis://:difyai123456@redis:6379/1`
-
- Sentinel mode:
-
- ```
- sentinel://:@:/
- ```
-
- Example: `sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1`
-
-- BROKER_USE_SSL: If set to true, use SSL protocol for connection, default is false
-- CELERY_USE_SENTINEL: If set to true, Sentinel mode will be enabled, default is false
-- CELERY_SENTINEL_MASTER_NAME: The service name of Sentinel, i.e., Master Name
-- CELERY_SENTINEL_SOCKET_TIMEOUT: Timeout for connecting to Sentinel, default value: 0.1, unit: seconds
-
-### CORS Configuration
-
-Used to set the front-end cross-domain access policy.
-
-- CONSOLE_CORS_ALLOW_ORIGINS\
- Console CORS cross-domain policy, default is `*`, that is, all domains can access.
-
-- WEB_API_CORS_ALLOW_ORIGINS\
- WebAPP CORS cross-domain policy, default is `*`, that is, all domains can access.
-
-- COOKIE_DOMAIN\
- When the frontend and backend run on different subdomains, set `COOKIE_DOMAIN` to the site's top-level domain (e.g., `example.com`).\
- The frontend and backend must be under the same top-level domain to share authentication cookies.
-
-- NEXT_PUBLIC_COOKIE_DOMAIN\
- When the frontend and backend run on different subdomains, set `NEXT_PUBLIC_COOKIE_DOMAIN` to `1`.\
- The frontend and backend must be under the same top-level domain to share authentication cookies.
-
-### File Storage Configuration
-
-Used to store uploaded data set files, team/tenant encryption keys, and other files.
-
-- STORAGE_TYPE
-
- Type of storage facility
-
- - local (default): Local file storage, if this option is selected, the following `STORAGE_LOCAL_PATH` configuration needs to be set.
-
- - s3: S3 object storage, if this option is selected, the following S3\_ prefixed configurations need to be set.
-
- - azure-blob: Azure Blob object storage, if this option is selected, the following AZURE_BLOB\_ prefixed configurations need to be set.
-
- - aliyun-oss: Alibaba Cloud OSS object storage, if this option is selected, the following ALIYUN_OSS\_ prefixed configurations need to be set.
-
- - huawei-obs: Huawei OBS object storage, if this option is selected, the following HUAWEI_OBS\_ prefixed configurations need to be set.
-
- - volcengine-tos: Volcengine TOS object storage, if this option is selected, the following VOLCENGINE_TOS\_ prefixed configurations need to be set.
-
- - tencent-cos: Tencent Cloud COS object storage, if this option is selected, the following TENCENT_COS\_ prefixed configurations need to be set.
-
-- STORAGE_LOCAL_PATH
-
- Default is storage, that is, it is stored in the storage directory of the current directory.
-
- If you are deploying with docker or docker-compose, be sure to mount the `/app/api/storage` directory in both containers to the same local directory, otherwise, you may encounter file not found errors.
+### CONSOLE_API_URL
-- S3_ENDPOINT: S3 endpoint address
-- S3_BUCKET_NAME: S3 bucket name
-- S3_ACCESS_KEY: S3 Access Key
-- S3_SECRET_KEY: S3 Secret Key
-- S3_REGION: S3 region information, such as: us-east-1
-- AZURE_BLOB_ACCOUNT_NAME: your-account-name eg, 'difyai'
-- AZURE_BLOB_ACCOUNT_KEY: your-account-key eg, 'difyai'
-- AZURE_BLOB_CONTAINER_NAME: your-container-name eg, 'difyai-container'
-- AZURE_BLOB_ACCOUNT_URL: 'https://your_account_name.blob.core.windows.net'
-- ALIYUN_OSS_BUCKET_NAME: your-bucket-name eg, 'difyai'
-- ALIYUN_OSS_ACCESS_KEY: your-access-key eg, 'difyai'
-- ALIYUN_OSS_SECRET_KEY: your-secret-key eg, 'difyai'
-- ALIYUN_OSS_ENDPOINT: https://oss-ap-southeast-1-internal.aliyuncs.com # reference: https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints
-- ALIYUN_OSS_REGION: ap-southeast-1 # reference: https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints
-- ALIYUN_OSS_AUTH_VERSION: v4
-- ALIYUN_OSS_PATH: your-path # Don't start with '/'. OSS doesn't support leading slash in object names. reference: https://www.alibabacloud.com/help/en/oss/support/0016-00000005
-- HUAWEI_OBS_BUCKET_NAME: your-bucket-name eg, 'difyai'
-- HUAWEI_OBS_SECRET_KEY: your-secret-key eg, 'difyai'
-- HUAWEI_OBS_ACCESS_KEY: your-access-key eg, 'difyai'
-- HUAWEI_OBS_SERVER: your-server-url # reference: https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0500.html
-- VOLCENGINE_TOS_BUCKET_NAME: your-bucket-name eg, 'difyai'
-- VOLCENGINE_TOS_SECRET_KEY: your-secret-key eg, 'difyai'
-- VOLCENGINE_TOS_ACCESS_KEY: your-access-key eg, 'difyai'
-- VOLCENGINE_TOS_REGION: your-region eg, 'cn-guangzhou' # reference: https://www.volcengine.com/docs/6349/107356
-- VOLCENGINE_TOS_ENDPOINT: your-endpoint eg, 'tos-cn-guangzhou.volces.com' # reference: https://www.volcengine.com/docs/6349/107356
-- TENCENT_COS_BUCKET_NAME: your-bucket-name eg, 'difyai'
-- TENCENT_COS_SECRET_KEY: your-secret-key eg, 'difyai'
-- TENCENT_COS_SECRET_ID: your-secret-id eg, 'difyai'
-- TENCENT_COS_REGION: your-region eg, 'ap-guangzhou' # reference: https://cloud.tencent.com/document/product/436/6224
-- TENCENT_COS_SCHEME: specify http/https protocol to access COS
+Default: (empty)
-### Vector Database Configuration
+The public URL of Dify's backend API. Set this if you use OAuth login (GitHub, Google), Notion integration, or any plugin that requires OAuth—these features need an absolute callback URL to redirect users back after authorization. Also determines whether secure (HTTPS-only) cookies are used.
-- VECTOR_STORE\
- Available values include:
- - `weaviate`
- - `oceanbase`
- - `seekdb`
- - `qdrant`
- - `milvus`
- - `myscale`
- - `relyt`
- - `pgvector`
- - `pgvecto-rs`
- - `chroma`
- - `opensearch`
- - `oracle`
- - `tencent`
- - `elasticsearch`
- - `elasticsearch-ja`
- - `analyticdb`
- - `couchbase`
- - `vikingdb`
- - `opengauss`
- - `tablestore`
- - `vastbase`
- - `tidb`
- - `baidu`
- - `lindorm`
- - `huawei_cloud`
- - `upstash`
- - `matrixone`
- - `clickzetta`
- - `alibabacloud_mysql`
- - `iris`
+Example: `https://api.console.dify.ai`
-#### Weaviate Configuration
+### CONSOLE_WEB_URL
-- WEAVIATE_ENDPOINT
+Default: (empty)
- Weaviate endpoint address, such as: `http://weaviate:8080`.
+The public URL of Dify's console frontend. Used to build links in all system emails (invitations, password resets, notifications) and to redirect users back to the console after OAuth login. Also serves as the default CORS allowed origin if `CONSOLE_CORS_ALLOW_ORIGINS` is not set.
-- WEAVIATE_API_KEY
+If empty, email links will be broken—even in single-domain setups, set this if you use email features.
- The api-key credential used to connect to Weaviate.
+Example: `https://console.dify.ai`
-- WEAVIATE_BATCH_SIZE
+### SERVICE_API_URL
- The number of index Objects created in batches in Weaviate, default is 100.
+Default: (empty)
- Refer to this document: [https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters](https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters)
+The API Base URL shown to developers in the Dify console—the URL they copy into their code to call the Dify API. If empty, auto-detects from the current request (e.g., `http://localhost/v1`). Set this to ensure a consistent URL when your server is accessible via multiple addresses.
-- WEAVIATE_GRPC_ENABLED
+Example: `https://api.dify.ai`
- Whether to use the gRPC method to interact with Weaviate, performance will greatly increase when enabled, may not be usable locally, default is true.
+### APP_API_URL
-#### OceanBase/seekdb Configuration
+Default: (empty)
-- OCEANBASE_VECTOR_HOST
+The backend API URL for the WebApp frontend (published apps). This variable is only used by the web frontend container, not the Python backend. If empty, the Docker image defaults to `http://127.0.0.1:5001`.
- The hostname or IP address of OceanBase or seekdb vector database.
+Example: `https://api.app.dify.ai`
-- OCEANBASE_VECTOR_PORT
+### APP_WEB_URL
- The port of OceanBase or seekdb vector database.
+Default: (empty)
-- OCEANBASE_VECTOR_USER
+The public URL where published WebApps are accessible. Required for the **Human Input node** in workflows—form links in email notifications are built as `{APP_WEB_URL}/form/{token}`. If empty, Human Input email delivery will not include valid form links.
- The username of OceanBase or seekdb vector database.
+Example: `https://app.dify.ai`
-- OCEANBASE_VECTOR_PASSWORD
+### TRIGGER_URL
- The password of OceanBase or seekdb vector database user.
+Default: `http://localhost`
-- OCEANBASE_VECTOR_DATABASE
+The publicly accessible URL for webhook and plugin trigger endpoints. External systems use this address to invoke your workflows. Dify builds trigger callback URLs like `{TRIGGER_URL}/triggers/webhook/{id}` and displays them in the console.
- The database name of OceanBase or seekdb vector database.
+For triggers to work from external systems, this must point to a public domain or IP address they can reach.
-- OCEANBASE_CLUSTER_NAME
+### FILES_URL
- The cluster name of OceanBase or seekdb vector database, only available for Docker deployment.
+Default: (empty; falls back to `CONSOLE_API_URL`)
-- OCEANBASE_MEMORY_LIMIT
+The base URL for file preview and download links. Dify generates signed, time-limited URLs for all files (uploaded documents, tool outputs, workspace logos) and serves them to the frontend and multi-modal models.
- The memory limit of OceanBase vector database, only available for Docker deployment.
+Set this if you use file processing plugins, or if you want file URLs on a dedicated domain. If both `FILES_URL` and `CONSOLE_API_URL` are empty, file previews will not work.
-- SEEKDB_MEMORY_LIMIT
+Example: `https://upload.example.com` or `http://:5001`
- The memory limit of seekdb vector database, only available for Docker deployment.
+### INTERNAL_FILES_URL
-#### Qdrant Configuration
+Default: (empty; falls back to `FILES_URL`)
-- QDRANT_URL
+The file access URL used for communication between services inside the Docker network (e.g., plugin daemon, PDF/Word extractors). These internal services may not be able to reach the external `FILES_URL` if it routes through Nginx or a public domain.
- Qdrant endpoint address, such as: `https://your-qdrant-cluster-url.qdrant.tech/`
+If empty, internal services use `FILES_URL`. Set this when internal services can't reach the external URL.
-- QDRANT_API_KEY
+Example: `http://api:5001`
- The api-key credential used to connect to Qdrant.
+### FILES_ACCESS_TIMEOUT
-#### Milvus Configuration
+Default: `300` (5 minutes)
-- MILVUS_URI
+How long signed file URLs remain valid, in seconds. After this time, the URL is rejected and the file must be re-requested. Increase for long-running processes; decrease for tighter security.
- Milvus uri configuration. e.g. `http://host.docker.internal:19530`. For [Zilliz Cloud](https://docs.zilliz.com/docs/free-trials), adjust the uri and token to the Public Endpoint and API Key.
+### System Encoding
-- MILVUS_TOKEN
+| Variable | Default | Description |
+|---|---|---|
+| `LANG` | `C.UTF-8` | System locale setting. Ensures UTF-8 encoding. |
+| `LC_ALL` | `C.UTF-8` | Locale override for all categories. |
+| `PYTHONIOENCODING` | `utf-8` | Python I/O encoding. |
+| `UV_CACHE_DIR` | `/tmp/.uv-cache` | UV package manager cache directory. Avoids permission issues with non-existent home directories. |
- Milvus token configuration, default is empty.
+## Server Configuration
-- MILVUS_USER
+### Logging
- Milvus user configuration, default is empty.
+| Variable | Default | Description |
+|---|---|---|
+| `LOG_LEVEL` | `INFO` | Minimum log severity. Controls what gets logged across all handlers (file + console). Levels from least to most severe: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. |
+| `LOG_OUTPUT_FORMAT` | `text` | `text` produces human-readable lines with timestamp, level, thread, and trace ID. `json` produces structured JSON for log aggregation tools (ELK, Datadog, etc.). |
+| `LOG_FILE` | `/app/logs/server.log` | Log file path. When set, enables file-based logging with automatic rotation. The directory is created automatically. When empty, logs only go to console. |
+| `LOG_FILE_MAX_SIZE` | `20` | Maximum log file size in MB before rotation. When exceeded, the active file is renamed to `.1` and a new file is started. |
+| `LOG_FILE_BACKUP_COUNT` | `5` | Number of rotated log files to keep. With defaults, at most 6 files exist: the active file plus 5 backups. |
+| `LOG_DATEFORMAT` | `%Y-%m-%d %H:%M:%S` | Timestamp format for text-format logs (strftime codes). Ignored by JSON format. |
+| `LOG_TZ` | `UTC` | Timezone for log timestamps (pytz format, e.g., `Asia/Shanghai`). Only applies to text format—JSON always uses UTC. Also sets Celery's task scheduling timezone. |
-- MILVUS_PASSWORD
+### General
- Milvus password configuration, default is empty.
+| Variable | Default | Description |
+|---|---|---|
+| `DEBUG` | `false` | Enables verbose logging: workflow node inputs/outputs, tool execution details, full LLM prompts and responses, and app startup timing. Useful for local development; not recommended for production as it may expose sensitive data in logs. |
+| `FLASK_DEBUG` | `false` | Standard Flask debug mode flag. Not actively used by Dify—`DEBUG` is the primary control. |
+| `ENABLE_REQUEST_LOGGING` | `false` | Logs a compact access line (`METHOD PATH STATUS DURATION TRACE_ID`) for every HTTP request. When `LOG_LEVEL` is also set to `DEBUG`, additionally logs full request and response bodies as JSON. |
+| `DEPLOY_ENV` | `PRODUCTION` | Tags monitoring data in Sentry and OpenTelemetry so you can filter errors and traces by environment. Also sent as the `X-Env` response header. Does not change application behavior. |
+| `MIGRATION_ENABLED` | `true` | When `true`, runs database schema migrations (`flask upgrade-db`) automatically on container startup. Docker only. Set to `false` if you run migrations separately. For source code launches, run `flask db upgrade` manually. |
+| `CHECK_UPDATE_URL` | `https://updates.dify.ai` | The console checks this URL for newer Dify versions. Set to empty to disable—useful for air-gapped environments or to prevent external HTTP calls. |
+| `OPENAI_API_BASE` | `https://api.openai.com/v1` | Legacy variable. Not actively used by Dify's own code. May be picked up by the OpenAI Python SDK if present in the environment. |
-#### MyScale Configuration
+### SECRET_KEY
-- MYSCALE_HOST
+Default: (pre-filled in `.env.example`; must be replaced for production)
- MyScale host configuration.
+Used for session cookie signing, JWT authentication tokens, file URL signatures (HMAC-SHA256), and encrypting third-party OAuth credentials (AES-256). Generate a strong key before first launch:
-- MYSCALE_PORT
+```bash
+openssl rand -base64 42
+```
- MyScale port configuration.
+
+Changing this key after deployment will immediately log out all users, invalidate all file URLs, and break any plugin integrations that use OAuth—their encrypted credentials become unrecoverable.
+
-- MYSCALE_USER
+### INIT_PASSWORD
- MyScale user configuration, default is `default`.
+Default: (empty)
-- MYSCALE_PASSWORD
+Optional security gate for first-time setup. When set, the `/install` page requires this password before the admin account can be created—preventing unauthorized setup if your server is exposed. Once setup is complete, this variable has no further effect. Maximum length: 30 characters.
- MyScale password configuration, default is empty.
+### Token & Request Limits
-- MYSCALE_DATABASE
+| Variable | Default | Description |
+|---|---|---|
+| `ACCESS_TOKEN_EXPIRE_MINUTES` | `60` | How long a login session's access token stays valid (in minutes). When it expires, the browser silently refreshes it using the refresh token—users are not logged out. |
+| `REFRESH_TOKEN_EXPIRE_DAYS` | `30` | How long a user can stay logged in without re-entering credentials (in days). If the user doesn't visit within this period, they must log in again. |
+| `APP_MAX_EXECUTION_TIME` | `1200` | Maximum time (in seconds) an app execution can run before being terminated. Works alongside `WORKFLOW_MAX_EXECUTION_TIME`—both enforce the same default of 20 minutes, but this one applies at the app queue level while the other applies at the workflow engine level. Increase both if your workflows need more time. |
+| `APP_DEFAULT_ACTIVE_REQUESTS` | `0` | Default concurrent request limit per app, used when an app doesn't have a custom limit set in the UI. `0` means unlimited. The effective limit is the smaller of this and `APP_MAX_ACTIVE_REQUESTS`. |
+| `APP_MAX_ACTIVE_REQUESTS` | `0` | Global ceiling for concurrent requests per app. Overrides per-app settings if they exceed this value. `0` means unlimited. |
- MyScale database configuration, default is `default`.
+### Container Startup Configuration
-- MYSCALE_FTS_PARAMS
+Only effective when starting with Docker image or Docker Compose.
- MyScale text-search params, check [MyScale docs](https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters) for multi-language support, default is empty.
+| Variable | Default | Description |
+|---|---|---|
+| `DIFY_BIND_ADDRESS` | `0.0.0.0` | Network interface the API server binds to. `0.0.0.0` listens on all interfaces; set to `127.0.0.1` to restrict to localhost only. |
+| `DIFY_PORT` | `5001` | Port the API server listens on. |
+| `SERVER_WORKER_AMOUNT` | `1` | Number of Gunicorn worker processes. With gevent (default), each worker handles multiple concurrent connections via greenlets, so 1 is usually sufficient. For sync workers, use `(2 x CPU cores) + 1`. [Reference](https://docs.gunicorn.org/en/stable/design.html#how-many-workers). |
+| `SERVER_WORKER_CLASS` | `gevent` | Gunicorn worker type. Gevent provides lightweight async concurrency. Changing this breaks psycopg2 and gRPC patching—it is strongly discouraged. |
+| `SERVER_WORKER_CONNECTIONS` | `10` | Maximum concurrent connections per worker. Only applies to async workers (gevent). If you experience connection rejections or slow responses under load, try increasing this value. |
+| `GUNICORN_TIMEOUT` | `360` | If a worker doesn't respond within this many seconds, Gunicorn kills and restarts it. Set to 360 (6 minutes) to support long-lived SSE connections used for streaming LLM responses. |
+| `CELERY_WORKER_CLASS` | (empty; defaults to gevent) | Celery worker type. Same gevent patching requirements as `SERVER_WORKER_CLASS`—it is strongly discouraged to change. |
+| `CELERY_WORKER_AMOUNT` | (empty; defaults to 1) | Number of Celery worker processes. Only used when autoscaling is disabled. |
+| `CELERY_AUTO_SCALE` | `false` | Enable dynamic autoscaling. When enabled, Celery monitors queue depth and spawns/kills workers between `CELERY_MIN_WORKERS` and `CELERY_MAX_WORKERS`. |
+| `CELERY_MAX_WORKERS` | (empty; defaults to CPU count) | Maximum workers when autoscaling is enabled. |
+| `CELERY_MIN_WORKERS` | (empty; defaults to 1) | Minimum workers when autoscaling is enabled. |
-#### Couchbase Configuration
+### API Tool Configuration
-- COUCHBASE_CONNECTION_STRING
+| Variable | Default | Description |
+|---|---|---|
+| `API_TOOL_DEFAULT_CONNECT_TIMEOUT` | `10` | Maximum time (in seconds) to wait for establishing a TCP connection when API Tool nodes call external APIs. |
+| `API_TOOL_DEFAULT_READ_TIMEOUT` | `60` | Maximum time (in seconds) to wait for receiving response data from external APIs called by API Tool nodes. |
- The connection string for the Couchbase cluster.
+### Datasource Configuration
-- COUCHBASE_USER
+These frontend feature flags control which web crawling options appear in the dataset creation UI. The backend always supports all crawlers regardless of these settings.
- The username for the database user.
+| Variable | Default | Description |
+|---|---|---|
+| `ENABLE_WEBSITE_JINAREADER` | `true` | Show Jina Reader as a website datasource option in the UI. |
+| `ENABLE_WEBSITE_FIRECRAWL` | `true` | Show Firecrawl as a website datasource option in the UI. |
+| `ENABLE_WEBSITE_WATERCRAWL` | `true` | Show WaterCrawl as a website datasource option in the UI. |
+| `NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX` | `false` | Enable inline LaTeX rendering with single dollar signs (`$...$`). Disabled by default because `$` commonly appears in regular text (prices, code), causing unintended math formatting. When disabled, only `$$...$$` triggers LaTeX. |
-- COUCHBASE_PASSWORD
+### Database Configuration
- The password for the database user.
+The database uses PostgreSQL by default. OceanBase, MySQL, and seekdb are also supported.
-- COUCHBASE_BUCKET_NAME
+| Variable | Default | Description |
+|---|---|---|
+| `DB_TYPE` | `postgresql` | Database type. Supported values: `postgresql`, `mysql`, `oceanbase`, `seekdb`. MySQL-compatible databases like TiDB can use `mysql`. |
+| `DB_USERNAME` | `postgres` | Database username. URL-encoded in the connection string, so special characters are safe to use. |
+| `DB_PASSWORD` | `difyai123456` | Database password. URL-encoded in the connection string, so characters like `@`, `:`, `%` are safe to use. |
+| `DB_HOST` | `db_postgres` | Database server hostname. |
+| `DB_PORT` | `5432` | Database server port. If using MySQL, set this to `3306`. |
+| `DB_DATABASE` | `dify` | Database name. |
- The name of the bucket to use.
+#### Connection Pool
-- COUCHBASE_SCOPE_NAME
+These control how Dify manages its pool of database connections. The defaults work well for most deployments.
- The name of the scope to use.
+| Variable | Default | Description |
+|---|---|---|
+| `SQLALCHEMY_POOL_SIZE` | `30` | Number of persistent connections kept in the pool. |
+| `SQLALCHEMY_MAX_OVERFLOW` | `10` | Additional temporary connections allowed when the pool is full. With default settings, up to 40 connections (30 + 10) can exist simultaneously. |
+| `SQLALCHEMY_POOL_RECYCLE` | `3600` | Recycle connections after this many seconds to prevent stale connections. |
+| `SQLALCHEMY_POOL_TIMEOUT` | `30` | How long to wait for a connection when the pool is exhausted. Requests fail with a timeout error if no connection frees up in time. |
+| `SQLALCHEMY_POOL_PRE_PING` | `false` | Test each connection with a lightweight query before using it. Prevents "connection lost" errors but adds slight latency. Recommended for production with unreliable networks. |
+| `SQLALCHEMY_POOL_USE_LIFO` | `false` | Reuse the most recently returned connection (LIFO) instead of rotating evenly (FIFO). LIFO keeps fewer connections "warm" and can reduce overhead. |
+| `SQLALCHEMY_ECHO` | `false` | Print all SQL statements to logs. Useful for debugging query issues. |
-#### AnalyticDB Configuration
+#### PostgreSQL Performance Tuning
-- ANALYTICDB_KEY_ID
+These are passed as startup arguments to the PostgreSQL container—they configure the database server, not the Dify application.
- The access key ID used for Aliyun OpenAPI authentication. Read the [Analyticdb documentation](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/support/create-an-accesskey-pair) to create your AccessKey.
+| Variable | Default | Description |
+|---|---|---|
+| `POSTGRES_MAX_CONNECTIONS` | `100` | Maximum number of database connections. [Reference](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS) |
+| `POSTGRES_SHARED_BUFFERS` | `128MB` | Shared memory for buffers. Recommended: 25% of available memory. [Reference](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS) |
+| `POSTGRES_WORK_MEM` | `4MB` | Memory per database worker for working space. [Reference](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM) |
+| `POSTGRES_MAINTENANCE_WORK_MEM` | `64MB` | Memory reserved for maintenance activities. [Reference](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM) |
+| `POSTGRES_EFFECTIVE_CACHE_SIZE` | `4096MB` | Planner's assumption about effective cache size. [Reference](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE) |
+| `POSTGRES_STATEMENT_TIMEOUT` | `0` | Max statement duration before termination (ms). `0` means no timeout. [Reference](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT) |
+| `POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT` | `0` | Max idle-in-transaction session duration (ms). `0` means no timeout. [Reference](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT) |
-- ANALYTICDB_KEY_SECRET
+#### MySQL Performance Tuning
- The access key secret used for Aliyun OpenAPI authentication.
+These are passed as startup arguments to the MySQL container—they configure the database server, not the Dify application.
-- ANALYTICDB_INSTANCE_ID
+| Variable | Default | Description |
+|---|---|---|
+| `MYSQL_MAX_CONNECTIONS` | `1000` | Maximum number of MySQL connections. |
+| `MYSQL_INNODB_BUFFER_POOL_SIZE` | `512M` | InnoDB buffer pool size. Recommended: 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_LOG_FILE_SIZE` | `128M` | InnoDB log file size. [Reference](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size) |
+| `MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT` | `2` | InnoDB flush log at transaction commit. 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) |
- The unique identifier for your AnalyticDB instance, such as : `gp-xxxxxx`. Read the [Analyticdb documentation](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/create-an-instance-1) to create your instance.
+### Redis Configuration
-- ANALYTICDB_REGION_ID
+Configure these to connect Dify to your Redis instance. Dify supports three deployment modes: standalone (default), Sentinel, and Cluster.
- The region identifier where the AnalyticDB instance is located, such as: `cn-hangzhou`.
+| Variable | Default | Description |
+|---|---|---|
+| `REDIS_HOST` | `redis` | Redis server hostname. Only used in standalone mode; ignored when Sentinel or Cluster mode is enabled. |
+| `REDIS_PORT` | `6379` | Redis server port. Only used in standalone mode. |
+| `REDIS_USERNAME` | (empty) | Redis 6.0+ ACL username. Applies to all modes (standalone, Sentinel, Cluster). |
+| `REDIS_PASSWORD` | `difyai123456` | Redis authentication password. For Cluster mode, use `REDIS_CLUSTERS_PASSWORD` instead. |
+| `REDIS_DB` | `0` | Redis database number (0–15). Only applies to standalone and Sentinel modes. Make sure this doesn't collide with Celery's database (configured in `CELERY_BROKER_URL`; default is DB 1). |
+| `REDIS_USE_SSL` | `false` | Enable SSL/TLS for the Redis connection. Does not automatically apply to Sentinel protocol. |
+| `REDIS_MAX_CONNECTIONS` | (empty) | Maximum connections in the Redis pool. Leave unset for the library default. Set this to match your Redis server's `maxclients` if needed. |
-- ANALYTICDB_ACCOUNT
+#### Redis SSL Configuration
- The account name used to connect to the AnalyticDB instance. Read the [Analyticdb documentation](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/createa-a-privileged-account) to create an account.
+Only applies when `REDIS_USE_SSL=true`. These same settings are also used by the Celery broker when its URL uses the `rediss://` scheme.
-- ANALYTICDB_PASSWORD
+| Variable | Default | Description |
+|---|---|---|
+| `REDIS_SSL_CERT_REQS` | `CERT_NONE` | Certificate verification level: `CERT_NONE` (no verification), `CERT_OPTIONAL`, or `CERT_REQUIRED` (full verification). |
+| `REDIS_SSL_CA_CERTS` | (empty) | Path to CA certificate file for verifying the Redis server. |
+| `REDIS_SSL_CERTFILE` | (empty) | Path to client certificate for mutual TLS authentication. |
+| `REDIS_SSL_KEYFILE` | (empty) | Path to client private key for mutual TLS authentication. |
- The password for the account used to connect to the AnalyticDB instance.
+#### Redis Sentinel Mode
-- ANALYTICDB_NAMESPACE
+Sentinel provides automatic master discovery and failover for high availability. Mutually exclusive with Cluster mode.
- The namespace(schema) within the AnalyticDB instance that you wish to interact with, such as `dify`. If this namespace does not exist, it will be created automatically.
+| Variable | Default | Description |
+|---|---|---|
+| `REDIS_USE_SENTINEL` | `false` | Enable Redis Sentinel mode. When enabled, `REDIS_HOST`/`REDIS_PORT` are ignored; Dify connects to Sentinel nodes instead and asks for the current master. |
+| `REDIS_SENTINELS` | (empty) | Sentinel node addresses. Format: `:,:,:`. These are the Sentinel instances, not the Redis servers. |
+| `REDIS_SENTINEL_SERVICE_NAME` | (empty) | The logical service name Sentinel monitors (configured in `sentinel.conf`). Dify calls `master_for(service_name)` to discover the current master. |
+| `REDIS_SENTINEL_USERNAME` | (empty) | Username for authenticating with Sentinel nodes. Separate from `REDIS_USERNAME`, which authenticates with the Redis master/replicas. |
+| `REDIS_SENTINEL_PASSWORD` | (empty) | Password for authenticating with Sentinel nodes. Separate from `REDIS_PASSWORD`. |
+| `REDIS_SENTINEL_SOCKET_TIMEOUT` | `0.1` | Socket timeout (in seconds) for communicating with Sentinel nodes. Default 0.1s assumes fast local network. For cloud/WAN deployments, increase to 1.0–5.0s to prevent intermittent timeouts. |
-- ANALYTICDB_NAMESPACE_PASSWORD
+#### Redis Cluster Mode
- The password for the namespace(schema). If the namespace does not exist, it will be created with this password.
+Cluster mode provides automatic sharding across multiple Redis nodes. Mutually exclusive with Sentinel mode.
-#### TiDB Configuration
+| Variable | Default | Description |
+|---|---|---|
+| `REDIS_USE_CLUSTERS` | `false` | Enable Redis Cluster mode. |
+| `REDIS_CLUSTERS` | (empty) | Cluster nodes. Format: `:,:,:` |
+| `REDIS_CLUSTERS_PASSWORD` | (empty) | Password for the Redis Cluster. |
-- TIDB_VECTOR_HOST
+### Celery Configuration
- The hostname or IP address of the TiDB vector database. Default is `tidb`.
+Configure the background task queue used for dataset indexing, email sending, and scheduled jobs.
-- TIDB_VECTOR_PORT
+### CELERY_BROKER_URL
- The port of the TiDB vector database. Default is `4000`.
+Default: `redis://:difyai123456@redis:6379/1`
-- TIDB_VECTOR_USER
+Redis connection URL for the Celery message broker.
- The username of the TiDB vector database.
+Direct connection format:
+```
+redis://:@:/
+```
-- TIDB_VECTOR_PASSWORD
+Sentinel mode format (separate multiple nodes with semicolons):
+```
+sentinel://:@:/
+```
- The password of the TiDB vector database.
+| Variable | Default | Description |
+|---|---|---|
+| `CELERY_BACKEND` | `redis` | Where Celery stores task results. Options: `redis` (fast, in-memory) or `database` (stores in your main database). |
+| `BROKER_USE_SSL` | `false` | Auto-enabled when `CELERY_BROKER_URL` uses `rediss://` scheme. Applies the Redis SSL certificate settings to the broker connection. |
+| `CELERY_USE_SENTINEL` | `false` | Enable Redis Sentinel mode for the Celery broker. |
+| `CELERY_SENTINEL_MASTER_NAME` | (empty) | Sentinel service name (Master Name). |
+| `CELERY_SENTINEL_PASSWORD` | (empty) | Password for Sentinel authentication. Separate from `REDIS_SENTINEL_PASSWORD`—they can differ if you use different Sentinel clusters for caching vs task queuing. |
+| `CELERY_SENTINEL_SOCKET_TIMEOUT` | `0.1` | Timeout for connecting to Sentinel in seconds. |
+| `CELERY_TASK_ANNOTATIONS` | `null` | Apply runtime settings to specific tasks (e.g., rate limits). Format: JSON dictionary. Example: `{"tasks.add": {"rate_limit": "10/s"}}`. Most users don't need this. |
-- TIDB_VECTOR_DATABASE
+### CORS Configuration
- The database name of the TiDB vector database. Default is `dify`.
+Controls cross-domain access policies for the frontend.
-#### MatrixOne Configuration
+| Variable | Default | Description |
+|---|---|---|
+| `WEB_API_CORS_ALLOW_ORIGINS` | `*` | Allowed origins for cross-origin requests to the Web API. Example: `https://dify.app` |
+| `CONSOLE_CORS_ALLOW_ORIGINS` | `*` | Allowed origins for cross-origin requests to the console API. If not set, falls back to `CONSOLE_WEB_URL`. |
+| `COOKIE_DOMAIN` | (empty) | Set to the shared top-level domain (e.g., `example.com`) when frontend and backend run on different subdomains. This allows authentication cookies to be shared across subdomains. When empty, cookies use the most secure `__Host-` prefix and are locked to a single domain. |
+| `NEXT_PUBLIC_COOKIE_DOMAIN` | (empty) | Frontend flag for cross-subdomain cookies. Set to `1` (or any non-empty value) to enable—the actual domain is read from `COOKIE_DOMAIN` on the backend. |
+| `NEXT_PUBLIC_BATCH_CONCURRENCY` | `5` | Frontend-only. Controls how many concurrent API calls the UI makes during batch operations. |
-- MATRIXONE_HOST
+### File Storage Configuration
- The host of Matrixone database, default value is matrixone.
+Configure where Dify stores uploaded files, dataset documents, and encryption keys. Each storage type has its own credential variables—configure only the one you're using.
-- MATRIXONE_PORT
+### STORAGE_TYPE
- The port of Matrixone database, default value is 6001.
+Default: `opendal`
-- MATRIXONE_USER
+Selects the file storage backend. Supported values: `opendal`, `s3`, `azure-blob`, `aliyun-oss`, `google-storage`, `huawei-obs`, `volcengine-tos`, `tencent-cos`, `baidu-obs`, `oci-storage`, `supabase`, `clickzetta-volume`, `local` (deprecated; internally uses OpenDAL with filesystem scheme).
- The user of Matrixone database, default value is dump.
+
+
-- MATRIXONE_PASSWORD
+Default storage backend using [Apache OpenDAL](https://opendal.apache.org/), a unified interface supporting many storage services. Dify automatically scans environment variables matching `OPENDAL__*` and passes them to OpenDAL. For example, with `OPENDAL_SCHEME=s3`, set `OPENDAL_S3_ACCESS_KEY_ID`, `OPENDAL_S3_SECRET_ACCESS_KEY`, etc.
- The password of Matrixone database, default value is 111.
+| Variable | Default | Description |
+|---|---|---|
+| `OPENDAL_SCHEME` | `fs` | Storage service to use. Examples: `fs` (local filesystem), `s3`, `gcs`, `azblob`. |
-- MATRIXONE_DATABASE
+For the default `fs` scheme:
- The database of Matrixone database, default value is dify.
+| Variable | Default | Description |
+|---|---|---|
+| `OPENDAL_FS_ROOT` | `storage` | Root directory for local filesystem storage. Created automatically if it doesn't exist. |
-#### Tencent Cloud VectorDB Configuration
+For all available schemes and their configuration options, see the [OpenDAL services documentation](https://github.com/apache/opendal/tree/main/core/src/services).
-- TENCENT_VECTOR_DB_URL
+
- The access address for Tencent Cloud VectorDB can be obtained from [the console](https://console.cloud.tencent.com/vdb).
+
-- TENCENT_VECTOR_DB_API_KEY
+| Variable | Default | Description |
+|---|---|---|
+| `S3_ENDPOINT` | (empty) | S3 endpoint address. Required for non-AWS S3-compatible services (MinIO, etc.). |
+| `S3_REGION` | `us-east-1` | S3 region. |
+| `S3_BUCKET_NAME` | `difyai` | S3 bucket name. |
+| `S3_ACCESS_KEY` | (empty) | S3 Access Key. Not needed when using IAM roles. |
+| `S3_SECRET_KEY` | (empty) | S3 Secret Key. Not needed when using IAM roles. |
+| `S3_USE_AWS_MANAGED_IAM` | `false` | Use AWS IAM roles (EC2 instance profile, ECS task role) instead of explicit access key/secret key. When enabled, boto3 auto-discovers credentials from the instance metadata. |
- The API key (password) for the VectorDB server is used for identity authentication. [Key Management](https://cloud.tencent.com/document/product/1709/95108).
+
-- TENCENT_VECTOR_DB_USERNAME
+
- The vector database account, default 'root'. [Account Management](https://cloud.tencent.com/document/product/1709/115833).
+| Variable | Default | Description |
+|---|---|---|
+| `AZURE_BLOB_ACCOUNT_NAME` | `difyai` | Azure storage account name. |
+| `AZURE_BLOB_ACCOUNT_KEY` | `difyai` | Azure storage account key. |
+| `AZURE_BLOB_CONTAINER_NAME` | `difyai-container` | Azure Blob container name. |
+| `AZURE_BLOB_ACCOUNT_URL` | `https://.blob.core.windows.net` | Azure Blob account URL. |
-- TENCENT_VECTOR_DB_TIMEOUT
+
- Set the default request timeout duration.
+
-- TENCENT_VECTOR_DB_DATABASE
+| Variable | Default | Description |
+|---|---|---|
+| `GOOGLE_STORAGE_BUCKET_NAME` | (empty) | Google Cloud Storage bucket name. |
+| `GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64` | (empty) | Base64-encoded service account JSON key. |
- Set up a Database for storing data. [Create Database](https://cloud.tencent.com/document/product/1709/95822).
+
-- TENCENT_VECTOR_DB_SHARD
+
- Specify the number of shards.
+| Variable | Default | Description |
+|---|---|---|
+| `ALIYUN_OSS_BUCKET_NAME` | (empty) | OSS bucket name. |
+| `ALIYUN_OSS_ACCESS_KEY` | (empty) | OSS access key. |
+| `ALIYUN_OSS_SECRET_KEY` | (empty) | OSS secret key. |
+| `ALIYUN_OSS_ENDPOINT` | `https://oss-ap-southeast-1-internal.aliyuncs.com` | OSS endpoint. [Regions and endpoints reference](https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints). |
+| `ALIYUN_OSS_REGION` | `ap-southeast-1` | OSS region. |
+| `ALIYUN_OSS_AUTH_VERSION` | `v4` | OSS authentication version. |
+| `ALIYUN_OSS_PATH` | (empty) | Object path prefix. Don't start with `/`. [Reference](https://www.alibabacloud.com/help/en/oss/support/0016-00000005). |
+| `ALIYUN_CLOUDBOX_ID` | (empty) | CloudBox ID for CloudBox-based OSS deployments. |
-- TENCENT_VECTOR_DB_REPLICAS
+
- Specify the number of replicas.
+
-- TENCENT_VECTOR_DB_ENABLE_HYBRID_SEARCH
+| Variable | Default | Description |
+|---|---|---|
+| `TENCENT_COS_BUCKET_NAME` | (empty) | COS bucket name. |
+| `TENCENT_COS_SECRET_KEY` | (empty) | COS secret key. |
+| `TENCENT_COS_SECRET_ID` | (empty) | COS secret ID. |
+| `TENCENT_COS_REGION` | (empty) | COS region, e.g., `ap-guangzhou`. [Reference](https://cloud.tencent.com/document/product/436/6224). |
+| `TENCENT_COS_SCHEME` | (empty) | Protocol to access COS (`http` or `https`). |
+| `TENCENT_COS_CUSTOM_DOMAIN` | (empty) | Custom domain for COS access. |
- Specify whether to enable HybridSearch. [Sparse Vector Documentation](https://cloud.tencent.com/document/product/1709/110110).
+
-#### Lindorm Configuration
+
-- LINDORM_URL
+| Variable | Default | Description |
+|---|---|---|
+| `OCI_ENDPOINT` | (empty) | OCI endpoint URL. |
+| `OCI_BUCKET_NAME` | (empty) | OCI bucket name. |
+| `OCI_ACCESS_KEY` | (empty) | OCI access key. |
+| `OCI_SECRET_KEY` | (empty) | OCI secret key. |
+| `OCI_REGION` | `us-ashburn-1` | OCI region. |
- The URL of LINDORM search engine,you can get it from [the console](https://lindorm.console.aliyun.com/)
+
-- LINDORM_USERNAME
+
- The username of lindorm search engine
+| Variable | Default | Description |
+|---|---|---|
+| `HUAWEI_OBS_BUCKET_NAME` | (empty) | OBS bucket name. |
+| `HUAWEI_OBS_ACCESS_KEY` | (empty) | OBS access key. |
+| `HUAWEI_OBS_SECRET_KEY` | (empty) | OBS secret key. |
+| `HUAWEI_OBS_SERVER` | (empty) | OBS server URL. [Reference](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0500.html). |
+| `HUAWEI_OBS_PATH_STYLE` | `false` | Use path-style URLs instead of virtual-hosted-style. |
-- LINDORM_PASSWORD
+
- The password of lindorm search engine
+
-#### OpenGauss Configuration
+| Variable | Default | Description |
+|---|---|---|
+| `VOLCENGINE_TOS_BUCKET_NAME` | (empty) | TOS bucket name. |
+| `VOLCENGINE_TOS_ACCESS_KEY` | (empty) | TOS access key. |
+| `VOLCENGINE_TOS_SECRET_KEY` | (empty) | TOS secret key. |
+| `VOLCENGINE_TOS_ENDPOINT` | (empty) | TOS endpoint URL. [Reference](https://www.volcengine.com/docs/6349/107356). |
+| `VOLCENGINE_TOS_REGION` | (empty) | TOS region, e.g., `cn-guangzhou`. |
-- OPENGAUSS_HOST
+
- The hostname or IP address of the openGauss vector database.
+
-- OPENGAUSS_PORT
+| Variable | Default | Description |
+|---|---|---|
+| `BAIDU_OBS_BUCKET_NAME` | (empty) | Baidu OBS bucket name. |
+| `BAIDU_OBS_ACCESS_KEY` | (empty) | Baidu OBS access key. |
+| `BAIDU_OBS_SECRET_KEY` | (empty) | Baidu OBS secret key. |
+| `BAIDU_OBS_ENDPOINT` | (empty) | Baidu OBS server URL. |
- The port of the openGauss vector database.
+
-- OPENGAUSS_USER
+
- The username of the openGauss vector database.
+| Variable | Default | Description |
+|---|---|---|
+| `SUPABASE_BUCKET_NAME` | (empty) | Supabase storage bucket name. |
+| `SUPABASE_API_KEY` | (empty) | Supabase API key. |
+| `SUPABASE_URL` | (empty) | Supabase server URL. |
-- OPENGAUSS_PASSWORD
+
- The password of the openGauss vector database.
+
-- OPENGAUSS_DATABASE
+| Variable | Default | Description |
+|---|---|---|
+| `CLICKZETTA_VOLUME_TYPE` | `user` | Volume type. Options: `user` (personal/small team), `table` (enterprise multi-tenant), `external` (data lake integration). |
+| `CLICKZETTA_VOLUME_NAME` | (empty) | External volume name (required only when `TYPE=external`). |
+| `CLICKZETTA_VOLUME_TABLE_PREFIX` | `dataset_` | Table volume table prefix (used only when `TYPE=table`). |
+| `CLICKZETTA_VOLUME_DIFY_PREFIX` | `dify_km` | Dify file directory prefix for isolation from other apps. |
- The database name of the openGauss vector database.
+ClickZetta Volume reuses the `CLICKZETTA_*` connection parameters configured in the Vector Database section.
-- OPENGAUSS_MIN_CONNECTION
+
+
- Min connection of the openGauss vector database.
+#### Archive Storage
-- OPENGAUSS_MAX_CONNECTION
+Separate S3-compatible storage for archiving workflow run logs. Used by the paid plan retention system to archive workflow runs older than the retention period to JSONL format. Requires `BILLING_ENABLED=true`.
- Max connection of the openGauss vector database.
+| Variable | Default | Description |
+|---|---|---|
+| `ARCHIVE_STORAGE_ENABLED` | `false` | Enable archive storage for workflow log archival. |
+| `ARCHIVE_STORAGE_ENDPOINT` | (empty) | S3-compatible endpoint URL. |
+| `ARCHIVE_STORAGE_ARCHIVE_BUCKET` | (empty) | Bucket for archived workflow run logs. |
+| `ARCHIVE_STORAGE_EXPORT_BUCKET` | (empty) | Bucket for workflow run exports. |
+| `ARCHIVE_STORAGE_ACCESS_KEY` | (empty) | Access key. |
+| `ARCHIVE_STORAGE_SECRET_KEY` | (empty) | Secret key. |
+| `ARCHIVE_STORAGE_REGION` | `auto` | Storage region. |
-- OPENGAUSS_ENABLE_PQ
+### Vector Database Configuration
- Enabling PQ Acceleration for the openGauss vector database.
+Configure the vector database used for knowledge base embedding storage and similarity search. Each provider has its own set of credential variables—configure only the one you're using.
-#### TableStore Configuration
+### VECTOR_STORE
-- TABLESTORE_ENDPOINT
+Default: `weaviate`
- The endpoint address of the TableStore server (e.g. 'https://instance-name.cn-hangzhou.ots.aliyuncs.com')
+Selects the vector database backend. If a dataset already has an index, the dataset's stored type takes precedence over this setting. When switching providers in Docker Compose, `COMPOSE_PROFILES` automatically starts the matching container based on this value.
-- TABLESTORE_INSTANCE_NAME
+Supported values: `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`.
- The instance name to access TableStore server (e.g. 'instance-name')
+| Variable | Default | Description |
+|---|---|---|
+| `VECTOR_INDEX_NAME_PREFIX` | `Vector_index` | Prefix added to collection names in the vector database. Change this if you share a vector database instance across multiple Dify deployments. |
-- TABLESTORE_ACCESS_KEY_ID
+
+
- The accessKey id for the instance name
+| Variable | Default | Description |
+|---|---|---|
+| `WEAVIATE_ENDPOINT` | `http://weaviate:8080` | Weaviate REST API endpoint. |
+| `WEAVIATE_API_KEY` | (empty) | API key for Weaviate authentication. |
+| `WEAVIATE_GRPC_ENDPOINT` | `grpc://weaviate:50051` | Separate gRPC endpoint for high-performance binary protocol. Significantly faster for batch operations. Falls back to inferring from HTTP endpoint if not set. |
+| `WEAVIATE_TOKENIZATION` | `word` | Tokenization method for text fields. Options: `word` (splits on whitespace and punctuation), `whitespace` (splits on whitespace only), `character` (character-level, better for CJK languages). |
+
+
+
+
+
+seekdb is the lite version of OceanBase and shares the same connection configuration.
-- TABLESTORE_ACCESS_KEY_SECRET
+| Variable | Default | Description |
+|---|---|---|
+| `OCEANBASE_VECTOR_HOST` | `oceanbase` | Hostname or IP address. |
+| `OCEANBASE_VECTOR_PORT` | `2881` | Port number. |
+| `OCEANBASE_VECTOR_USER` | `root@test` | Database username. |
+| `OCEANBASE_VECTOR_PASSWORD` | `difyai123456` | Database password. |
+| `OCEANBASE_VECTOR_DATABASE` | `test` | Database name. |
+| `OCEANBASE_CLUSTER_NAME` | `difyai` | Cluster name (Docker deployment only). |
+| `OCEANBASE_MEMORY_LIMIT` | `6G` | Memory limit for OceanBase (Docker deployment only). |
+| `SEEKDB_MEMORY_LIMIT` | `2G` | Memory limit for seekdb (Docker deployment only). |
+| `OCEANBASE_ENABLE_HYBRID_SEARCH` | `false` | Enable fulltext index for BM25 queries alongside vector search. Requires OceanBase >= 4.3.5.1. Collections must be recreated after enabling. |
+| `OCEANBASE_FULLTEXT_PARSER` | `ik` | Fulltext parser. Built-in: `ngram`, `beng`, `space`, `ngram2`, `ik`. External (require plugin): `japanese_ftparser`, `thai_ftparser`. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `QDRANT_URL` | `http://qdrant:6333` | Qdrant endpoint address. |
+| `QDRANT_API_KEY` | `difyai123456` | API key for Qdrant. |
+| `QDRANT_CLIENT_TIMEOUT` | `20` | Client timeout in seconds. |
+| `QDRANT_GRPC_ENABLED` | `false` | Enable gRPC communication. |
+| `QDRANT_GRPC_PORT` | `6334` | gRPC port. |
+| `QDRANT_REPLICATION_FACTOR` | `1` | Number of replicas per shard. |
+
+
- The accessKey secret for the instance name
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `MILVUS_URI` | `http://host.docker.internal:19530` | Milvus URI. For [Zilliz Cloud](https://docs.zilliz.com/docs/free-trials), use the Public Endpoint. |
+| `MILVUS_DATABASE` | (empty) | Database name. |
+| `MILVUS_TOKEN` | (empty) | Authentication token. For Zilliz Cloud, use the API Key. |
+| `MILVUS_USER` | (empty) | Username. |
+| `MILVUS_PASSWORD` | (empty) | Password. |
+| `MILVUS_ENABLE_HYBRID_SEARCH` | `false` | Enable BM25 sparse index for full-text search alongside vector similarity. Requires Milvus >= 2.5.0. If the collection was created without this enabled, it must be recreated. |
+| `MILVUS_ANALYZER_PARAMS` | (empty) | Analyzer parameters for text fields. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `MYSCALE_HOST` | `myscale` | MyScale host. |
+| `MYSCALE_PORT` | `8123` | MyScale port. |
+| `MYSCALE_USER` | `default` | Username. |
+| `MYSCALE_PASSWORD` | (empty) | Password. |
+| `MYSCALE_DATABASE` | `dify` | Database name. |
+| `MYSCALE_FTS_PARAMS` | (empty) | Full-text search params. [Multi-language support reference](https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters). |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `COUCHBASE_CONNECTION_STRING` | `couchbase://couchbase-server` | Connection string for the Couchbase cluster. |
+| `COUCHBASE_USER` | `Administrator` | Username. |
+| `COUCHBASE_PASSWORD` | `password` | Password. |
+| `COUCHBASE_BUCKET_NAME` | `Embeddings` | Bucket name. |
+| `COUCHBASE_SCOPE_NAME` | `_default` | Scope name. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `HOLOGRES_HOST` | (empty) | Hostname. |
+| `HOLOGRES_PORT` | `80` | Port number. |
+| `HOLOGRES_DATABASE` | (empty) | Database name. |
+| `HOLOGRES_ACCESS_KEY_ID` | (empty) | Access key ID (used as PG username). |
+| `HOLOGRES_ACCESS_KEY_SECRET` | (empty) | Access key secret (used as PG password). |
+| `HOLOGRES_SCHEMA` | `public` | Schema name. |
+| `HOLOGRES_TOKENIZER` | `jieba` | Tokenizer for text fields. |
+| `HOLOGRES_DISTANCE_METHOD` | `Cosine` | Distance method. |
+| `HOLOGRES_BASE_QUANTIZATION_TYPE` | `rabitq` | Quantization type. |
+| `HOLOGRES_MAX_DEGREE` | `64` | HNSW max degree. |
+| `HOLOGRES_EF_CONSTRUCTION` | `400` | HNSW ef_construction parameter. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PGVECTOR_HOST` | `pgvector` | Hostname. |
+| `PGVECTOR_PORT` | `5432` | Port number. |
+| `PGVECTOR_USER` | `postgres` | Username. |
+| `PGVECTOR_PASSWORD` | `difyai123456` | Password. |
+| `PGVECTOR_DATABASE` | `dify` | Database name. |
+| `PGVECTOR_MIN_CONNECTION` | `1` | Minimum pool connections. |
+| `PGVECTOR_MAX_CONNECTION` | `5` | Maximum pool connections. |
+| `PGVECTOR_PG_BIGM` | `false` | Enable pg_bigm extension for full-text search. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `VASTBASE_HOST` | `vastbase` | Hostname. |
+| `VASTBASE_PORT` | `5432` | Port number. |
+| `VASTBASE_USER` | `dify` | Username. |
+| `VASTBASE_PASSWORD` | `Difyai123456` | Password. |
+| `VASTBASE_DATABASE` | `dify` | Database name. |
+| `VASTBASE_MIN_CONNECTION` | `1` | Minimum pool connections. |
+| `VASTBASE_MAX_CONNECTION` | `5` | Maximum pool connections. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PGVECTO_RS_HOST` | `pgvecto-rs` | Hostname. |
+| `PGVECTO_RS_PORT` | `5432` | Port number. |
+| `PGVECTO_RS_USER` | `postgres` | Username. |
+| `PGVECTO_RS_PASSWORD` | `difyai123456` | Password. |
+| `PGVECTO_RS_DATABASE` | `dify` | Database name. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ANALYTICDB_KEY_ID` | (empty) | Aliyun access key ID. [Create AccessKey](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/support/create-an-accesskey-pair). |
+| `ANALYTICDB_KEY_SECRET` | (empty) | Aliyun access key secret. |
+| `ANALYTICDB_REGION_ID` | `cn-hangzhou` | Region identifier. |
+| `ANALYTICDB_INSTANCE_ID` | (empty) | Instance ID, e.g., `gp-xxxxxx`. [Create instance](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/create-an-instance-1). |
+| `ANALYTICDB_ACCOUNT` | (empty) | Account name. [Create account](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/createa-a-privileged-account). |
+| `ANALYTICDB_PASSWORD` | (empty) | Account password. |
+| `ANALYTICDB_NAMESPACE` | `dify` | Namespace (schema). Created automatically if not exists. |
+| `ANALYTICDB_NAMESPACE_PASSWORD` | (empty) | Namespace password. Used when creating a new namespace. |
+| `ANALYTICDB_HOST` | (empty) | Direct connection host (alternative to API-based access). |
+| `ANALYTICDB_PORT` | `5432` | Direct connection port. |
+| `ANALYTICDB_MIN_CONNECTION` | `1` | Minimum pool connections. |
+| `ANALYTICDB_MAX_CONNECTION` | `5` | Maximum pool connections. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `TIDB_VECTOR_HOST` | `tidb` | Hostname. |
+| `TIDB_VECTOR_PORT` | `4000` | Port number. |
+| `TIDB_VECTOR_USER` | (empty) | Username. |
+| `TIDB_VECTOR_PASSWORD` | (empty) | Password. |
+| `TIDB_VECTOR_DATABASE` | `dify` | Database name. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `MATRIXONE_HOST` | `matrixone` | Hostname. |
+| `MATRIXONE_PORT` | `6001` | Port number. |
+| `MATRIXONE_USER` | `dump` | Username. |
+| `MATRIXONE_PASSWORD` | `111` | Password. |
+| `MATRIXONE_DATABASE` | `dify` | Database name. |
+
+
+
+
+
+Hybrid storage using TiDB for metadata and Qdrant for vectors.
+
+| Variable | Default | Description |
+|---|---|---|
+| `TIDB_ON_QDRANT_URL` | `http://127.0.0.1` | Qdrant endpoint. |
+| `TIDB_ON_QDRANT_API_KEY` | `dify` | Qdrant API key. |
+| `TIDB_ON_QDRANT_CLIENT_TIMEOUT` | `20` | Client timeout in seconds. |
+| `TIDB_ON_QDRANT_GRPC_ENABLED` | `false` | Enable gRPC. |
+| `TIDB_ON_QDRANT_GRPC_PORT` | `6334` | gRPC port. |
+| `TIDB_PUBLIC_KEY` | (empty) | TiDB Cloud public key. |
+| `TIDB_PRIVATE_KEY` | (empty) | TiDB Cloud private key. |
+| `TIDB_API_URL` | `http://127.0.0.1` | TiDB API URL. |
+| `TIDB_IAM_API_URL` | `http://127.0.0.1` | TiDB IAM API URL. |
+| `TIDB_REGION` | `regions/aws-us-east-1` | TiDB region. |
+| `TIDB_PROJECT_ID` | (empty) | TiDB project ID. |
+| `TIDB_SPEND_LIMIT` | `100` | Spend limit. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `CHROMA_HOST` | `127.0.0.1` | Chroma server host. |
+| `CHROMA_PORT` | `8000` | Chroma server port. |
+| `CHROMA_TENANT` | `default_tenant` | Tenant name. |
+| `CHROMA_DATABASE` | `default_database` | Database name. |
+| `CHROMA_AUTH_PROVIDER` | `chromadb.auth.token_authn.TokenAuthClientProvider` | Auth provider class. |
+| `CHROMA_AUTH_CREDENTIALS` | (empty) | Auth credentials. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ORACLE_USER` | `dify` | Oracle username. |
+| `ORACLE_PASSWORD` | `dify` | Oracle password. |
+| `ORACLE_DSN` | `oracle:1521/FREEPDB1` | Data source name. |
+| `ORACLE_CONFIG_DIR` | `/app/api/storage/wallet` | Oracle configuration directory. |
+| `ORACLE_WALLET_LOCATION` | `/app/api/storage/wallet` | Wallet location for Autonomous DB. |
+| `ORACLE_WALLET_PASSWORD` | `dify` | Wallet password. |
+| `ORACLE_IS_AUTONOMOUS` | `false` | Whether using Oracle Autonomous Database. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ALIBABACLOUD_MYSQL_HOST` | `127.0.0.1` | Hostname. |
+| `ALIBABACLOUD_MYSQL_PORT` | `3306` | Port number. |
+| `ALIBABACLOUD_MYSQL_USER` | `root` | Username. |
+| `ALIBABACLOUD_MYSQL_PASSWORD` | `difyai123456` | Password. |
+| `ALIBABACLOUD_MYSQL_DATABASE` | `dify` | Database name. |
+| `ALIBABACLOUD_MYSQL_MAX_CONNECTION` | `5` | Maximum pool connections. |
+| `ALIBABACLOUD_MYSQL_HNSW_M` | `6` | HNSW M parameter. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `RELYT_HOST` | `db` | Hostname. |
+| `RELYT_PORT` | `5432` | Port number. |
+| `RELYT_USER` | `postgres` | Username. |
+| `RELYT_PASSWORD` | `difyai123456` | Password. |
+| `RELYT_DATABASE` | `postgres` | Database name. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `OPENSEARCH_HOST` | `opensearch` | Hostname. |
+| `OPENSEARCH_PORT` | `9200` | Port number. |
+| `OPENSEARCH_SECURE` | `true` | Use HTTPS. |
+| `OPENSEARCH_VERIFY_CERTS` | `true` | Verify SSL certificates. |
+| `OPENSEARCH_AUTH_METHOD` | `basic` | `basic` uses username/password. `aws_managed_iam` uses AWS SigV4 request signing via Boto3 credentials (for AWS Managed OpenSearch or Serverless). |
+| `OPENSEARCH_USER` | `admin` | Username. Only used with `basic` auth. |
+| `OPENSEARCH_PASSWORD` | `admin` | Password. Only used with `basic` auth. |
+| `OPENSEARCH_AWS_REGION` | `ap-southeast-1` | AWS region. Only used with `aws_managed_iam` auth. |
+| `OPENSEARCH_AWS_SERVICE` | `aoss` | AWS service type: `es` (Managed Cluster) or `aoss` (OpenSearch Serverless). Only used with `aws_managed_iam` auth. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `TENCENT_VECTOR_DB_URL` | `http://127.0.0.1` | Access address. [Console](https://console.cloud.tencent.com/vdb). |
+| `TENCENT_VECTOR_DB_API_KEY` | `dify` | API key. [Key Management](https://cloud.tencent.com/document/product/1709/95108). |
+| `TENCENT_VECTOR_DB_TIMEOUT` | `30` | Request timeout in seconds. |
+| `TENCENT_VECTOR_DB_USERNAME` | `dify` | Account name. [Account Management](https://cloud.tencent.com/document/product/1709/115833). |
+| `TENCENT_VECTOR_DB_DATABASE` | `dify` | Database name. [Create Database](https://cloud.tencent.com/document/product/1709/95822). |
+| `TENCENT_VECTOR_DB_SHARD` | `1` | Number of shards. |
+| `TENCENT_VECTOR_DB_REPLICAS` | `2` | Number of replicas. |
+| `TENCENT_VECTOR_DB_ENABLE_HYBRID_SEARCH` | `false` | Enable hybrid search. [Sparse Vector docs](https://cloud.tencent.com/document/product/1709/110110). |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ELASTICSEARCH_HOST` | `0.0.0.0` | Hostname. |
+| `ELASTICSEARCH_PORT` | `9200` | Port number. |
+| `ELASTICSEARCH_USERNAME` | `elastic` | Username. |
+| `ELASTICSEARCH_PASSWORD` | `elastic` | Password. |
+| `ELASTICSEARCH_USE_CLOUD` | `false` | Switch to Elastic Cloud mode. When `true`, uses `ELASTICSEARCH_CLOUD_URL` and `ELASTICSEARCH_API_KEY` instead of host/port/username/password. |
+| `ELASTICSEARCH_CLOUD_URL` | (empty) | Elastic Cloud endpoint URL. Required when `ELASTICSEARCH_USE_CLOUD=true`. |
+| `ELASTICSEARCH_API_KEY` | (empty) | Elastic Cloud API key. Required when `ELASTICSEARCH_USE_CLOUD=true`. |
+| `ELASTICSEARCH_VERIFY_CERTS` | `false` | Verify SSL certificates. |
+| `ELASTICSEARCH_CA_CERTS` | (empty) | Path to CA certificates. |
+| `ELASTICSEARCH_REQUEST_TIMEOUT` | `100000` | Request timeout in milliseconds. |
+| `ELASTICSEARCH_RETRY_ON_TIMEOUT` | `true` | Retry on timeout. |
+| `ELASTICSEARCH_MAX_RETRIES` | `10` | Maximum retry attempts. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `BAIDU_VECTOR_DB_ENDPOINT` | `http://127.0.0.1:5287` | Endpoint URL. |
+| `BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS` | `30000` | Connection timeout in milliseconds. |
+| `BAIDU_VECTOR_DB_ACCOUNT` | `root` | Account name. |
+| `BAIDU_VECTOR_DB_API_KEY` | `dify` | API key. |
+| `BAIDU_VECTOR_DB_DATABASE` | `dify` | Database name. |
+| `BAIDU_VECTOR_DB_SHARD` | `1` | Number of shards. |
+| `BAIDU_VECTOR_DB_REPLICAS` | `3` | Number of replicas. |
+| `BAIDU_VECTOR_DB_INVERTED_INDEX_ANALYZER` | `DEFAULT_ANALYZER` | Inverted index analyzer. |
+| `BAIDU_VECTOR_DB_INVERTED_INDEX_PARSER_MODE` | `COARSE_MODE` | Inverted index parser mode. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `VIKINGDB_ACCESS_KEY` | (empty) | Access key. |
+| `VIKINGDB_SECRET_KEY` | (empty) | Secret key. |
+| `VIKINGDB_REGION` | `cn-shanghai` | Region. |
+| `VIKINGDB_HOST` | `api-vikingdb.xxx.volces.com` | API host. Replace with your region-specific endpoint. |
+| `VIKINGDB_SCHEMA` | `http` | Protocol scheme (`http` or `https`). |
+| `VIKINGDB_CONNECTION_TIMEOUT` | `30` | Connection timeout in seconds. |
+| `VIKINGDB_SOCKET_TIMEOUT` | `30` | Socket timeout in seconds. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `LINDORM_URL` | `http://localhost:30070` | Lindorm search engine URL. [Console](https://lindorm.console.aliyun.com/). |
+| `LINDORM_USERNAME` | `admin` | Username. |
+| `LINDORM_PASSWORD` | `admin` | Password. |
+| `LINDORM_USING_UGC` | `true` | Use UGC mode. |
+| `LINDORM_QUERY_TIMEOUT` | `1` | Query timeout in seconds. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `OPENGAUSS_HOST` | `opengauss` | Hostname. |
+| `OPENGAUSS_PORT` | `6600` | Port number. |
+| `OPENGAUSS_USER` | `postgres` | Username. |
+| `OPENGAUSS_PASSWORD` | `Dify@123` | Password. |
+| `OPENGAUSS_DATABASE` | `dify` | Database name. |
+| `OPENGAUSS_MIN_CONNECTION` | `1` | Minimum pool connections. |
+| `OPENGAUSS_MAX_CONNECTION` | `5` | Maximum pool connections. |
+| `OPENGAUSS_ENABLE_PQ` | `false` | Enable PQ acceleration. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `HUAWEI_CLOUD_HOSTS` | `https://127.0.0.1:9200` | Cluster endpoint URL. |
+| `HUAWEI_CLOUD_USER` | `admin` | Username. |
+| `HUAWEI_CLOUD_PASSWORD` | `admin` | Password. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `UPSTASH_VECTOR_URL` | (empty) | Upstash Vector endpoint URL. |
+| `UPSTASH_VECTOR_TOKEN` | (empty) | Upstash Vector API token. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `TABLESTORE_ENDPOINT` | `https://instance-name.cn-hangzhou.ots.aliyuncs.com` | Endpoint address. Replace `instance-name` with your instance. |
+| `TABLESTORE_INSTANCE_NAME` | (empty) | Instance name. |
+| `TABLESTORE_ACCESS_KEY_ID` | (empty) | Access key ID. |
+| `TABLESTORE_ACCESS_KEY_SECRET` | (empty) | Access key secret. |
+| `TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE` | `false` | Normalize fulltext BM25 scores. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `CLICKZETTA_USERNAME` | (empty) | Username. |
+| `CLICKZETTA_PASSWORD` | (empty) | Password. |
+| `CLICKZETTA_INSTANCE` | (empty) | Instance name. |
+| `CLICKZETTA_SERVICE` | `api.clickzetta.com` | Service endpoint. |
+| `CLICKZETTA_WORKSPACE` | `quick_start` | Workspace name. |
+| `CLICKZETTA_VCLUSTER` | `default_ap` | Virtual cluster. |
+| `CLICKZETTA_SCHEMA` | `dify` | Schema name. |
+| `CLICKZETTA_BATCH_SIZE` | `100` | Batch size for operations. |
+| `CLICKZETTA_ENABLE_INVERTED_INDEX` | `true` | Enable inverted index. |
+| `CLICKZETTA_ANALYZER_TYPE` | `chinese` | Analyzer type. |
+| `CLICKZETTA_ANALYZER_MODE` | `smart` | Analyzer mode. |
+| `CLICKZETTA_VECTOR_DISTANCE_FUNCTION` | `cosine_distance` | Distance function. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `IRIS_HOST` | `iris` | Hostname. |
+| `IRIS_SUPER_SERVER_PORT` | `1972` | Super server port. |
+| `IRIS_USER` | `_SYSTEM` | Username. |
+| `IRIS_PASSWORD` | `Dify@1234` | Password. |
+| `IRIS_DATABASE` | `USER` | Database name. |
+| `IRIS_SCHEMA` | `dify` | Schema name. |
+| `IRIS_CONNECTION_URL` | (empty) | Full connection URL (overrides individual settings). |
+| `IRIS_MIN_CONNECTION` | `1` | Minimum pool connections. |
+| `IRIS_MAX_CONNECTION` | `3` | Maximum pool connections. |
+| `IRIS_TEXT_INDEX` | `true` | Enable text indexing. |
+| `IRIS_TEXT_INDEX_LANGUAGE` | `en` | Text index language. |
+
+
+
### Knowledge Configuration
-- UPLOAD_FILE_SIZE_LIMIT\
- The maximum allowed size (in megabytes) for an uploaded file. Default 15.
-
-- UPLOAD_FILE_BATCH_LIMIT\
- The maximum number of files that can be uploaded in a single batch. Default 5.
-
-- SINGLE_CHUNK_ATTACHMENT_LIMIT\
- The maximum number of files that can be attached to a single chunk. Default 10.
-
-- IMAGE_FILE_BATCH_LIMIT\
- The maximum number of image attachments that can be uploaded in a single batch. Default 10.
-
-- ATTACHMENT_IMAGE_FILE_SIZE_LIMIT\
- The maximum allowed size (in megabytes) for an image attachment. Default 2.
-
-- ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT\
- The timeout (in seconds) for downloading an image attachment. Default 60.
-
-- ETL_TYPE\
- Available values include:
-
- - `dify`: Dify's proprietary file extraction scheme
- - `Unstructured`: Unstructured.io file extraction scheme
-
-- UNSTRUCTURED_API_URL\
- Unstructured API path, needs to be configured when ETL_TYPE is Unstructured.\
- For example: `http://unstructured:8000/general/v0/general`
-
-- TOP_K_MAX_VALUE\
- The maximum top-k value of RAG, default 10.
+| Variable | Default | Description |
+|---|---|---|
+| `UPLOAD_FILE_SIZE_LIMIT` | `15` | Maximum file size in MB for document uploads (PDFs, Word docs, etc.). Users see a "file too large" error when exceeded. Does not apply to images, videos, or audio—they have separate limits below. |
+| `UPLOAD_FILE_BATCH_LIMIT` | `5` | Maximum number of files the frontend allows per upload batch. |
+| `UPLOAD_FILE_EXTENSION_BLACKLIST` | (empty) | Security blocklist of file extensions that cannot be uploaded. Comma-separated, lowercase, no dots. Example: `exe,bat,cmd,com,scr,vbs,ps1,msi,dll`. Empty allows all types. |
+| `SINGLE_CHUNK_ATTACHMENT_LIMIT` | `10` | Maximum number of images that can be embedded in a single knowledge base segment (chunk). |
+| `IMAGE_FILE_BATCH_LIMIT` | `10` | Maximum number of image files per upload batch. |
+| `ATTACHMENT_IMAGE_FILE_SIZE_LIMIT` | `2` | Maximum size in MB for images fetched from external URLs during knowledge base indexing. Images larger than this are skipped. Different from `UPLOAD_IMAGE_FILE_SIZE_LIMIT` which applies to direct uploads. |
+| `ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT` | `60` | Timeout in seconds when downloading images from external URLs during knowledge base indexing. Slow or unresponsive image servers are abandoned after this timeout. |
+| `ETL_TYPE` | `dify` | Document extraction library. `dify` supports txt, md, pdf, html, xlsx, docx, csv. `Unstructured` adds support for doc, msg, eml, ppt, pptx, xml, epub (requires `UNSTRUCTURED_API_URL`). |
+| `UNSTRUCTURED_API_URL` | (empty) | Unstructured.io API endpoint. Required when `ETL_TYPE` is `Unstructured`. Also needed for `.ppt` file support. Example: `http://unstructured:8000/general/v0/general`. |
+| `UNSTRUCTURED_API_KEY` | (empty) | API key for Unstructured.io authentication. |
+| `SCARF_NO_ANALYTICS` | `true` | Disable Unstructured library's telemetry/analytics collection. |
+| `TOP_K_MAX_VALUE` | `10` | Maximum value users can set for the `top_k` parameter in knowledge base retrieval (how many results to return per search). |
+| `DATASET_MAX_SEGMENTS_PER_REQUEST` | `0` | Maximum number of segments per dataset API request. `0` means unlimited. |
+
+#### Annotation Import
+
+| Variable | Default | Description |
+|---|---|---|
+| `ANNOTATION_IMPORT_FILE_SIZE_LIMIT` | `2` | Maximum CSV file size in MB for annotation import. Returns HTTP 413 when exceeded. |
+| `ANNOTATION_IMPORT_MAX_RECORDS` | `10000` | Maximum number of records per annotation import. Files with more records must be split into batches. |
+| `ANNOTATION_IMPORT_MIN_RECORDS` | `1` | Minimum number of valid records required per annotation import. |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE` | `5` | Maximum annotation import requests per minute per workspace. Returns HTTP 429 when exceeded. |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR` | `20` | Maximum annotation import requests per hour per workspace. |
+| `ANNOTATION_IMPORT_MAX_CONCURRENT` | `5` | Maximum concurrent annotation import tasks per workspace. Stale tasks are auto-cleaned after 2 minutes. |
+
+### Model Configuration
+
+| Variable | Default | Description |
+|---|---|---|
+| `PROMPT_GENERATION_MAX_TOKENS` | `512` | Maximum tokens when the system auto-generates a prompt using an LLM. Prevents runaway generations that waste API quota. |
+| `CODE_GENERATION_MAX_TOKENS` | `1024` | Maximum tokens when the system auto-generates code using an LLM. |
+| `PLUGIN_BASED_TOKEN_COUNTING_ENABLED` | `false` | Use plugin-based token counting for accurate usage tracking. When disabled, token counting returns 0 (faster but cost tracking is less accurate). |
### Multi-modal Configuration
-- MULTIMODAL_SEND_IMAGE_FORMAT
-
- The format of the image 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.
+| Variable | Default | Description |
+|---|---|---|
+| `MULTIMODAL_SEND_FORMAT` | `base64` | How files are sent to multi-modal LLMs. `base64` embeds file data in the request (more compatible, works offline, larger payloads). `url` sends a signed URL for the model to fetch (faster, smaller requests, but the model must be able to reach `FILES_URL`). |
+| `UPLOAD_IMAGE_FILE_SIZE_LIMIT` | `10` | Maximum image file size in MB for direct uploads (jpg, png, webp, gif, svg). |
+| `UPLOAD_VIDEO_FILE_SIZE_LIMIT` | `100` | Maximum video file size in MB for direct uploads (mp4, mov, mpeg, webm). |
+| `UPLOAD_AUDIO_FILE_SIZE_LIMIT` | `50` | Maximum audio file size in MB for direct uploads (mp3, m4a, wav, amr, mpga). |
-- UPLOAD_IMAGE_FILE_SIZE_LIMIT: Upload image file size limit, default 10M.
+
+All upload size limits are also gated by `NGINX_CLIENT_MAX_BODY_SIZE` (default `100M`). If you increase any upload limit above 100 MB, also increase `NGINX_CLIENT_MAX_BODY_SIZE` to match—otherwise Nginx rejects the upload with a 413 error.
+
### Sentry Configuration
-Used for application monitoring and error log tracking.
+Sentry provides error tracking and performance monitoring. Each service has its own DSN to separate error reporting.
-- SENTRY_DSN: Sentry DSN address, default is empty, when empty, all monitoring information is not reported to Sentry.
-- SENTRY_TRACES_SAMPLE_RATE: The reporting ratio of Sentry events, if it is 0.01, it is 1%.
-- SENTRY_PROFILES_SAMPLE_RATE: The reporting ratio of Sentry profiles, if it is 0.01, it is 1%.
+| Variable | Default | Description |
+|---|---|---|
+| `SENTRY_DSN` | (empty) | Sentry DSN shared across services. |
+| `API_SENTRY_DSN` | (empty) | Sentry DSN for the API service. Overrides `SENTRY_DSN` if set. Empty disables Sentry for the backend. |
+| `API_SENTRY_TRACES_SAMPLE_RATE` | `1.0` | Fraction of requests to include in performance tracing (0.01 = 1%, 1.0 = 100%). Traces track request flow across services. |
+| `API_SENTRY_PROFILES_SAMPLE_RATE` | `1.0` | Fraction of requests to include in CPU/memory profiling (0.01 = 1%). Profiles show where time is spent in code. |
+| `WEB_SENTRY_DSN` | (empty) | Sentry DSN for the web frontend (Next.js). Frontend-only. |
+| `PLUGIN_SENTRY_ENABLED` | `false` | Enable Sentry for the plugin daemon service. |
+| `PLUGIN_SENTRY_DSN` | (empty) | Sentry DSN for the plugin daemon. |
### Notion Integration Configuration
-Notion integration configuration variables can be obtained by applying for Notion integration: [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations)
-
-- NOTION_INTEGRATION_TYPE: Configure as "public" or "internal". Since Notion's OAuth redirect URL only supports HTTPS, if deploying locally, please use Notion's internal integration.
-- NOTION_CLIENT_SECRET: Notion OAuth client secret (used for public integration type)
-- NOTION_CLIENT_ID: OAuth client ID (used for public integration type)
-- NOTION_INTERNAL_SECRET: Notion internal integration secret. If the value of `NOTION_INTEGRATION_TYPE` is "internal", you need to configure this variable.
+Connect Dify to Notion as a knowledge base data source. Get integration credentials at [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations).
-### Mail related configuration
+| Variable | Default | Description |
+|---|---|---|
+| `NOTION_INTEGRATION_TYPE` | `public` | `public` uses standard OAuth 2.0 (requires HTTPS redirect URL, needs CLIENT_ID + CLIENT_SECRET). `internal` uses a direct integration token (works with HTTP). Use `internal` for local deployments. |
+| `NOTION_CLIENT_SECRET` | (empty) | OAuth client secret. Required for `public` integration. |
+| `NOTION_CLIENT_ID` | (empty) | OAuth client ID. Required for `public` integration. |
+| `NOTION_INTERNAL_SECRET` | (empty) | Direct integration token from Notion. Required for `internal` integration. |
-- MAIL_TYPE
+### Mail Configuration
+
+Dify sends emails for account invitations, password resets, login codes, and Human Input node notifications. Configure one of the three supported providers. Email links require `CONSOLE_WEB_URL` to be set—see [Common Variables](#console_web_url).
- - resend
- - MAIL_DEFAULT_SEND_FROM: The sender's email name, such as: no-reply [no-reply@dify.ai](mailto:no-reply@dify.ai), not mandatory.
- - RESEND_API_KEY: API-Key for the Resend email provider, can be obtained from API-Key.
+| Variable | Default | Description |
+|---|---|---|
+| `MAIL_TYPE` | `resend` | Mail provider: `resend`, `smtp`, or `sendgrid`. |
+| `MAIL_DEFAULT_SEND_FROM` | (empty) | Default "From" address for all outgoing emails. Required. |
- - smtp
- - SMTP_SERVER: SMTP server address
- - SMTP_PORT: SMTP server port number
- - SMTP_USERNAME: SMTP username
- - SMTP_PASSWORD: SMTP password
- - SMTP_USE_TLS: Whether to use TLS, default is false
- - MAIL_DEFAULT_SEND_FROM: The sender's email name, such as: no-reply [no-reply@dify.ai](mailto:no-reply@dify.ai), not mandatory.
+
+
- - sendgrid
- - SENDGRID_API_KEY: API key for the SendGrid email provider.
- - MAIL_DEFAULT_SEND_FROM: The sender's email address, e.g., your_email@sendgrid.com. This field is required for SendGrid authentication.
+| Variable | Default | Description |
+|---|---|---|
+| `RESEND_API_URL` | `https://api.resend.com` | Resend API endpoint. Override for self-hosted Resend or proxy. |
+| `RESEND_API_KEY` | (empty) | Resend API key. Required when `MAIL_TYPE=resend`. |
-For more details about the SendGrid email provider, please refer to the [SendGrid documentation](https://sendgrid.com/docs/for-developers/sending-email/).
+
-### ModelProvider & Tool Position Configuration
+
-Used to specify the model providers and tools that can be used in the app. These settings allow you to customize which tools and model providers are available, as well as their order and inclusion/exclusion in the app's interface.
+Three TLS modes: implicit TLS (`SMTP_USE_TLS=true`, `SMTP_OPPORTUNISTIC_TLS=false`, port 465), STARTTLS (`SMTP_USE_TLS=true`, `SMTP_OPPORTUNISTIC_TLS=true`, port 587), or plain (`SMTP_USE_TLS=false`, port 25).
+
+| Variable | Default | Description |
+|---|---|---|
+| `SMTP_SERVER` | (empty) | SMTP server address. |
+| `SMTP_PORT` | `465` | SMTP server port. Use `587` for STARTTLS mode. |
+| `SMTP_USERNAME` | (empty) | SMTP username. Can be empty for IP-whitelisted servers. |
+| `SMTP_PASSWORD` | (empty) | SMTP password. Can be empty for IP-whitelisted servers. |
+| `SMTP_USE_TLS` | `true` | Enable TLS. When `true` with `SMTP_OPPORTUNISTIC_TLS=false`, uses implicit TLS (`SMTP_SSL`). |
+| `SMTP_OPPORTUNISTIC_TLS` | `false` | Use STARTTLS (explicit TLS) instead of implicit TLS. Must be used with `SMTP_USE_TLS=true`. |
+| `SMTP_LOCAL_HOSTNAME` | (empty) | Override the hostname sent in SMTP HELO/EHLO. Required in Docker when your SMTP server rejects container hostnames (common with Google Workspace, Microsoft 365). Set to your domain, e.g., `mail.yourdomain.com`. |
+
+
+
+
-For a list of available [tools](https://github.com/langgenius/dify/blob/main/api/core/tools/provider/_position.yaml) and [model providers](https://github.com/langgenius/dify/blob/main/api/core/model_runtime/model_providers/_position.yaml), please refer to the provided links.
+| Variable | Default | Description |
+|---|---|---|
+| `SENDGRID_API_KEY` | (empty) | SendGrid API key. Required when `MAIL_TYPE=sendgrid`. |
-- POSITION_TOOL_PINS
+For more details, see the [SendGrid documentation](https://sendgrid.com/docs/for-developers/sending-email/).
+
+
+
+
+### Others Configuration
+
+#### Indexing
+
+| Variable | Default | Description |
+|---|---|---|
+| `INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH` | `4000` | Maximum token length per text segment when chunking documents for the knowledge base. Larger values retain more context per chunk; smaller values provide finer granularity. |
+
+#### Token & Invitation
- Pin specific tools to the top of the list, ensuring they appear first in the interface. (Use comma-separated values with **no spaces** between items.)
+All token expiry variables control how long a one-time-use token stored in Redis remains valid. After expiry, the user must request a new token.
- Example: `POSITION_TOOL_PINS=bing,google`
+| Variable | Default | Description |
+|---|---|---|
+| `INVITE_EXPIRY_HOURS` | `72` | How long a workspace invitation link stays valid (in hours). |
+| `RESET_PASSWORD_TOKEN_EXPIRY_MINUTES` | `5` | Password reset token validity in minutes. |
+| `EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES` | `5` | Email registration token validity in minutes. |
+| `CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES` | `5` | Change email token validity in minutes. |
+| `OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES` | `5` | Workspace owner transfer token validity in minutes. |
+
+#### Code Execution Sandbox
-- POSITION_TOOL_INCLUDES
+The sandbox is a separate service that runs Python, JavaScript, and Jinja2 code nodes in isolation.
+
+| Variable | Default | Description |
+|---|---|---|
+| `CODE_EXECUTION_ENDPOINT` | `http://sandbox:8194` | Sandbox service endpoint. |
+| `CODE_EXECUTION_API_KEY` | `dify-sandbox` | API key for sandbox authentication. Must match `SANDBOX_API_KEY` in the sandbox service. |
+| `CODE_EXECUTION_SSL_VERIFY` | `true` | Verify SSL for sandbox connections. Disable for development with self-signed certificates. |
+| `CODE_EXECUTION_CONNECT_TIMEOUT` | `10` | Connection timeout in seconds. |
+| `CODE_EXECUTION_READ_TIMEOUT` | `60` | Read timeout in seconds. |
+| `CODE_EXECUTION_WRITE_TIMEOUT` | `10` | Write timeout in seconds. |
+| `CODE_EXECUTION_POOL_MAX_CONNECTIONS` | `100` | Maximum concurrent HTTP connections to the sandbox service. |
+| `CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | Maximum idle connections kept alive in the sandbox connection pool. |
+| `CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY` | `5.0` | Seconds before idle sandbox connections are closed. |
+| `CODE_MAX_NUMBER` | `9223372036854775807` | Maximum numeric value allowed in code node output (max 64-bit signed integer). |
+| `CODE_MIN_NUMBER` | `-9223372036854775808` | Minimum numeric value allowed in code node output (min 64-bit signed integer). |
+| `CODE_MAX_STRING_LENGTH` | `400000` | Maximum string length in code node output. Prevents memory exhaustion from unbounded string generation. |
+| `CODE_MAX_DEPTH` | `5` | Maximum nesting depth for output data structures. |
+| `CODE_MAX_PRECISION` | `20` | Maximum decimal places for floating-point numbers in output. |
+| `CODE_MAX_STRING_ARRAY_LENGTH` | `30` | Maximum number of elements in a string array output. |
+| `CODE_MAX_OBJECT_ARRAY_LENGTH` | `30` | Maximum number of elements in an object array output. |
+| `CODE_MAX_NUMBER_ARRAY_LENGTH` | `1000` | Maximum number of elements in a number array output. |
+| `TEMPLATE_TRANSFORM_MAX_LENGTH` | `400000` | Maximum character length for Template Transform node output. |
- Specify the tools to be included in the app. Only the tools listed here will be available for use. If not set, all tools will be included unless specified in POSITION_TOOL_EXCLUDES. (Use comma-separated values with **no spaces** between items.)
+#### Workflow Runtime
- Example: `POSITION_TOOL_INCLUDES=bing,google`
-
-- POSITION_TOOL_EXCLUDES
-
- Exclude specific tools from being displayed or used in the app. Tools listed here will be omitted from the available options, except for pinned tools. (Use comma-separated values with **no spaces** between items.)
-
- Example: `POSITION_TOOL_EXCLUDES=yahoo,wolframalpha`
-
-- POSITION_PROVIDER_PINS
-
- Pin specific model providers to the top of the list, ensuring they appear first in the interface. (Use comma-separated values with **no spaces** between items.)
-
- Example: `POSITION_PROVIDER_PINS=openai,openllm`
-
-- POSITION_PROVIDER_INCLUDES
-
- Specify the model providers to be included in the app. Only the providers listed here will be available for use. If not set, all providers will be included unless specified in POSITION_PROVIDER_EXCLUDES. (Use comma-separated values with **no spaces** between items.)
-
- Example: `POSITION_PROVIDER_INCLUDES=cohere,upstage`
-
-- POSITION_PROVIDER_EXCLUDES
-
- Exclude specific model providers from being displayed or used in the app. Providers listed here will be omitted from the available options, except for pinned providers. (Use comma-separated values with **no spaces** between items.)
-
- Example: `POSITION_PROVIDER_EXCLUDES=openrouter,ollama`
+| Variable | Default | Description |
+|---|---|---|
+| `WORKFLOW_MAX_EXECUTION_STEPS` | `500` | Maximum number of node executions per workflow run. Exceeding this terminates the workflow. |
+| `WORKFLOW_MAX_EXECUTION_TIME` | `1200` | Maximum wall-clock time in seconds per workflow run. Exceeding this terminates the workflow. |
+| `WORKFLOW_CALL_MAX_DEPTH` | `5` | Maximum depth for nested workflow-calls-workflow. Prevents infinite recursion. |
+| `MAX_VARIABLE_SIZE` | `204800` | Maximum size in bytes (200 KB) for a single workflow variable. |
+| `WORKFLOW_FILE_UPLOAD_LIMIT` | `10` | Maximum number of files that can be uploaded in a single workflow execution. |
+| `WORKFLOW_NODE_EXECUTION_STORAGE` | `rdbms` | Where workflow node execution records are stored. `rdbms` stores everything in the database. `hybrid` stores new data in object storage and reads from both. |
+| `DSL_EXPORT_ENCRYPT_DATASET_ID` | `true` | Encrypt dataset IDs when exporting DSL files. Set to `false` to export plain IDs for easier cross-environment import. |
+
+#### Workflow Storage Repository
+
+These select which backend implementation handles workflow execution data. The default `SQLAlchemy` repositories store everything in the database. Alternative implementations (e.g., Celery, Logstore) can be used for different storage strategies.
+
+| Variable | Default | Description |
+|---|---|---|
+| `CORE_WORKFLOW_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository` | Repository implementation for workflow execution records. |
+| `CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository` | Repository implementation for workflow node execution records. |
+| `API_WORKFLOW_RUN_REPOSITORY` | `repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository` | Service-layer repository for workflow run API operations. |
+| `API_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository` | Service-layer repository for workflow node execution API operations. |
+| `LOOP_NODE_MAX_COUNT` | `100` | Maximum iterations for Loop nodes. Prevents infinite loops. |
+| `MAX_PARALLEL_LIMIT` | `10` | Maximum number of parallel branches in a workflow. |
+
+#### GraphEngine Worker Pool
+
+| Variable | Default | Description |
+|---|---|---|
+| `GRAPH_ENGINE_MIN_WORKERS` | `1` | Minimum workers per GraphEngine instance. |
+| `GRAPH_ENGINE_MAX_WORKERS` | `10` | Maximum workers per GraphEngine instance. |
+| `GRAPH_ENGINE_SCALE_UP_THRESHOLD` | `3` | Queue depth that triggers spawning additional workers. |
+| `GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME` | `5.0` | Seconds of idle time before excess workers are removed. |
+
+#### Workflow Log Cleanup
+
+| Variable | Default | Description |
+|---|---|---|
+| `WORKFLOW_LOG_CLEANUP_ENABLED` | `false` | Enable automatic cleanup of workflow execution logs at 2:00 AM daily. |
+| `WORKFLOW_LOG_RETENTION_DAYS` | `30` | Number of days to retain workflow logs before cleanup. |
+| `WORKFLOW_LOG_CLEANUP_BATCH_SIZE` | `100` | Number of log entries processed per cleanup batch. Adjust based on system performance. |
+| `WORKFLOW_LOG_CLEANUP_SPECIFIC_WORKFLOW_IDS` | (empty) | Comma-separated list of workflow IDs to limit cleanup to. When empty, all workflow logs are cleaned. |
+
+#### HTTP Request Node
+
+These configure the HTTP Request node used in workflows to call external APIs.
+
+| Variable | Default | Description |
+|---|---|---|
+| `HTTP_REQUEST_NODE_MAX_TEXT_SIZE` | `1048576` | Maximum text response size in bytes (1 MB). Responses larger than this are truncated. |
+| `HTTP_REQUEST_NODE_MAX_BINARY_SIZE` | `10485760` | Maximum binary response size in bytes (10 MB). |
+| `HTTP_REQUEST_NODE_SSL_VERIFY` | `true` | Verify SSL certificates. Disable for testing with self-signed certificates. |
+| `HTTP_REQUEST_MAX_CONNECT_TIMEOUT` | `10` | Maximum connect timeout users can set in the workflow editor (in seconds). Per-node timeouts cannot exceed this. |
+| `HTTP_REQUEST_MAX_READ_TIMEOUT` | `600` | Maximum read timeout ceiling (in seconds). |
+| `HTTP_REQUEST_MAX_WRITE_TIMEOUT` | `600` | Maximum write timeout ceiling (in seconds). |
+
+#### Webhook
+
+| Variable | Default | Description |
+|---|---|---|
+| `WEBHOOK_REQUEST_BODY_MAX_SIZE` | `10485760` | Maximum webhook payload size in bytes (10 MB). Larger payloads are rejected with a 413 error. |
+
+#### SSRF Protection
+
+All outbound HTTP requests from Dify (HTTP nodes, image downloads, etc.) are routed through a proxy that blocks requests to internal/private IP ranges, preventing Server-Side Request Forgery (SSRF) attacks.
+
+| Variable | Default | Description |
+|---|---|---|
+| `SSRF_PROXY_HTTP_URL` | `http://ssrf_proxy:3128` | SSRF proxy URL for HTTP requests. |
+| `SSRF_PROXY_HTTPS_URL` | `http://ssrf_proxy:3128` | SSRF proxy URL for HTTPS requests. |
+| `SSRF_POOL_MAX_CONNECTIONS` | `100` | Maximum concurrent connections in the SSRF HTTP client pool. |
+| `SSRF_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | Maximum idle connections kept alive in the SSRF pool. |
+| `SSRF_POOL_KEEPALIVE_EXPIRY` | `5.0` | Seconds before idle SSRF connections are closed. |
+| `RESPECT_XFORWARD_HEADERS_ENABLED` | `false` | Trust X-Forwarded-For/Proto/Port headers from reverse proxies. Only enable behind a single trusted reverse proxy—otherwise allows IP spoofing. |
+
+#### Agent Configuration
+
+| Variable | Default | Description |
+|---|---|---|
+| `MAX_TOOLS_NUM` | `10` | Maximum number of tools an agent can use simultaneously. |
+| `MAX_ITERATIONS_NUM` | `99` | Maximum reasoning iterations per agent execution. Prevents infinite agent loops. |
+
+## Web Frontend Service
+
+These variables are used by the Next.js web frontend container only—they do not affect the Python backend.
+
+| Variable | Default | Description |
+|---|---|---|
+| `TEXT_GENERATION_TIMEOUT_MS` | `60000` | Frontend timeout for streaming text generation UI. If a stream stalls for longer than this, the UI pauses rendering. |
+| `ALLOW_UNSAFE_DATA_SCHEME` | `false` | Allow rendering URLs with the `data:` scheme. Disabled by default for security. |
+| `MAX_TREE_DEPTH` | `50` | Maximum node tree depth in the workflow editor UI. |
+
+## Database Service
+
+These configure the database containers directly in Docker Compose.
+
+| Variable | Default | Description |
+|---|---|---|
+| `PGDATA` | `/var/lib/postgresql/data/pgdata` | PostgreSQL data directory inside the container. |
+| `MYSQL_HOST_VOLUME` | `./volumes/mysql/data` | Host path mounted as MySQL data volume. |
+
+## Sandbox Service
+
+The sandbox is an isolated service for executing code nodes (Python, JavaScript, Jinja2). Network access can be disabled for security.
+
+| Variable | Default | Description |
+|---|---|---|
+| `SANDBOX_API_KEY` | `dify-sandbox` | API key for sandbox authentication. Must match `CODE_EXECUTION_API_KEY` in the API service. |
+| `SANDBOX_GIN_MODE` | `release` | Sandbox service mode: `release` or `debug`. |
+| `SANDBOX_WORKER_TIMEOUT` | `15` | Maximum execution time in seconds for a single code run. |
+| `SANDBOX_ENABLE_NETWORK` | `true` | Allow code to make outbound HTTP requests. Disable to prevent code nodes from accessing external services. |
+| `SANDBOX_HTTP_PROXY` | `http://ssrf_proxy:3128` | HTTP proxy for SSRF protection when network is enabled. |
+| `SANDBOX_HTTPS_PROXY` | `http://ssrf_proxy:3128` | HTTPS proxy for SSRF protection. |
+| `SANDBOX_PORT` | `8194` | Sandbox service port. |
+
+## Nginx Reverse Proxy
+
+| Variable | Default | Description |
+|---|---|---|
+| `NGINX_SERVER_NAME` | `_` | Nginx server name. `_` matches any hostname. |
+| `NGINX_HTTPS_ENABLED` | `false` | Enable HTTPS. When `true`, place your SSL certificate and key in `./nginx/ssl/`. |
+| `NGINX_PORT` | `80` | HTTP port. |
+| `NGINX_SSL_PORT` | `443` | HTTPS port (only used when `NGINX_HTTPS_ENABLED=true`). |
+| `NGINX_SSL_CERT_FILENAME` | `dify.crt` | SSL certificate filename in `./nginx/ssl/`. |
+| `NGINX_SSL_CERT_KEY_FILENAME` | `dify.key` | SSL private key filename in `./nginx/ssl/`. |
+| `NGINX_SSL_PROTOCOLS` | `TLSv1.2 TLSv1.3` | Allowed TLS protocol versions. |
+| `NGINX_WORKER_PROCESSES` | `auto` | Number of Nginx worker processes. `auto` matches CPU core count. |
+| `NGINX_CLIENT_MAX_BODY_SIZE` | `100M` | Maximum request body size. Affects file upload limits at the proxy level. |
+| `NGINX_KEEPALIVE_TIMEOUT` | `65` | Keepalive timeout in seconds. |
+| `NGINX_PROXY_READ_TIMEOUT` | `3600s` | Proxy read timeout. Set high (1 hour) to support long-running SSE streams. |
+| `NGINX_PROXY_SEND_TIMEOUT` | `3600s` | Proxy send timeout. |
+| `NGINX_ENABLE_CERTBOT_CHALLENGE` | `false` | Accept Let's Encrypt ACME challenge requests at `/.well-known/acme-challenge/`. Enable for automated certificate renewal. |
+
+
+After enabling HTTPS, also update the URL variables in [Common Variables](#common-variables) (e.g., `CONSOLE_API_URL`, `CONSOLE_WEB_URL`) to use `https://`.
+
+
+#### Certbot Configuration
+
+| Variable | Default | Description |
+|---|---|---|
+| `CERTBOT_EMAIL` | (empty) | Email address required by Let's Encrypt for certificate notifications. |
+| `CERTBOT_DOMAIN` | (empty) | Domain name for the SSL certificate. |
+| `CERTBOT_OPTIONS` | (empty) | Additional certbot CLI options (e.g., `--force-renewal`, `--dry-run`). |
+
+## SSRF Proxy
+
+These configure the Squid-based SSRF proxy container that blocks requests to internal/private networks.
+
+| Variable | Default | Description |
+|---|---|---|
+| `SSRF_HTTP_PORT` | `3128` | Proxy listening port. |
+| `SSRF_COREDUMP_DIR` | `/var/spool/squid` | Core dump directory. |
+| `SSRF_REVERSE_PROXY_PORT` | `8194` | Reverse proxy port forwarded to the sandbox service. |
+| `SSRF_SANDBOX_HOST` | `sandbox` | Hostname of the sandbox service. |
+| `SSRF_DEFAULT_TIME_OUT` | `5` | Default overall timeout in seconds for proxied requests. |
+| `SSRF_DEFAULT_CONNECT_TIME_OUT` | `5` | Default connection timeout in seconds. |
+| `SSRF_DEFAULT_READ_TIME_OUT` | `5` | Default read timeout in seconds. |
+| `SSRF_DEFAULT_WRITE_TIME_OUT` | `5` | Default write timeout in seconds. |
+
+## Docker Compose
+
+| Variable | Default | Description |
+|---|---|---|
+| `COMPOSE_PROFILES` | `${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}` | Automatically selects which service containers to start based on your database and vector store choices. For example, setting `DB_TYPE=mysql` starts MySQL instead of PostgreSQL. |
+| `EXPOSE_NGINX_PORT` | `80` | Host port mapped to Nginx HTTP. |
+| `EXPOSE_NGINX_SSL_PORT` | `443` | Host port mapped to Nginx HTTPS. |
+
+## ModelProvider & Tool Position Configuration
+
+Customize which tools and model providers are available in the app interface and their display order. Use comma-separated values with no spaces between items.
+
+| Variable | Default | Description |
+|---|---|---|
+| `POSITION_TOOL_PINS` | (empty) | Pin specific tools to the top of the list. Example: `bing,google`. |
+| `POSITION_TOOL_INCLUDES` | (empty) | Only show listed tools. If unset, all tools are available. |
+| `POSITION_TOOL_EXCLUDES` | (empty) | Hide specific tools (pinned tools are not affected). |
+| `POSITION_PROVIDER_PINS` | (empty) | Pin specific model providers to the top. Example: `openai,anthropic`. |
+| `POSITION_PROVIDER_INCLUDES` | (empty) | Only show listed providers. If unset, all providers are available. |
+| `POSITION_PROVIDER_EXCLUDES` | (empty) | Hide specific providers (pinned providers are not affected). |
+
+## Plugin Daemon Configuration
+
+The plugin daemon is a separate service that manages plugin lifecycle (installation, execution, upgrades). The API communicates with it via HTTP.
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_DAEMON_URL` | `http://plugin_daemon:5002` | Plugin daemon service URL. |
+| `PLUGIN_DAEMON_KEY` | (auto-generated) | Authentication key for the plugin daemon. |
+| `PLUGIN_DAEMON_PORT` | `5002` | Plugin daemon listening port. |
+| `PLUGIN_DAEMON_TIMEOUT` | `600.0` | Timeout in seconds for all plugin daemon requests (installation, execution, listing). |
+| `PLUGIN_MAX_PACKAGE_SIZE` | `52428800` | Maximum plugin package size in bytes (50 MB). Validated during marketplace downloads. |
+| `PLUGIN_MODEL_SCHEMA_CACHE_TTL` | `3600` | How long to cache plugin model schemas in seconds. Reduces repeated lookups. |
+| `PLUGIN_DIFY_INNER_API_KEY` | (auto-generated) | API key the plugin daemon uses to call back to the Dify API. Must match `DIFY_INNER_API_KEY` in the plugin daemon service config. |
+| `PLUGIN_DIFY_INNER_API_URL` | `http://api:5001` | Internal API URL the plugin daemon calls back to. |
+| `PLUGIN_DEBUGGING_HOST` | `0.0.0.0` | Host for plugin remote debugging connections. |
+| `PLUGIN_DEBUGGING_PORT` | `5003` | Port for plugin remote debugging connections. |
+| `MARKETPLACE_ENABLED` | `true` | Enable the plugin marketplace. When disabled, only locally installed plugins are available—browsing and auto-upgrades are unavailable. |
+| `MARKETPLACE_API_URL` | `https://marketplace.dify.ai` | Marketplace API endpoint for plugin browsing, downloading, and upgrade checking. |
+| `FORCE_VERIFYING_SIGNATURE` | `true` | Require valid signatures before installing plugins. Prevents installing tampered or unsigned packages. |
+| `PLUGIN_MAX_EXECUTION_TIMEOUT` | `600` | Plugin execution timeout in seconds (plugin daemon side). Should match `PLUGIN_DAEMON_TIMEOUT` on the API side. |
+| `PIP_MIRROR_URL` | (empty) | Custom PyPI mirror URL used by the plugin daemon when installing plugin dependencies. Useful for faster installs or air-gapped environments. |
+
+## OTLP / OpenTelemetry Configuration
+
+OpenTelemetry provides distributed tracing and metrics collection. When enabled, Dify instruments Flask and exports telemetry data to an OTLP collector.
+
+| Variable | Default | Description |
+|---|---|---|
+| `ENABLE_OTEL` | `false` | Master switch for OpenTelemetry instrumentation. |
+| `OTLP_TRACE_ENDPOINT` | (empty) | Dedicated trace endpoint URL. If unset, falls back to `{OTLP_BASE_ENDPOINT}/v1/traces`. |
+| `OTLP_METRIC_ENDPOINT` | (empty) | Dedicated metric endpoint URL. If unset, falls back to `{OTLP_BASE_ENDPOINT}/v1/metrics`. |
+| `OTLP_BASE_ENDPOINT` | `http://localhost:4318` | Base OTLP collector URL. Used as fallback when specific trace/metric endpoints are not set. |
+| `OTLP_API_KEY` | (empty) | API key for OTLP authentication. Sent as `Authorization: Bearer` header. |
+| `OTEL_EXPORTER_TYPE` | `otlp` | Exporter type. `otlp` exports to a collector; other values use a console exporter (for debugging). |
+| `OTEL_EXPORTER_OTLP_PROTOCOL` | (empty) | Protocol for OTLP export. `grpc` uses gRPC exporters; anything else uses HTTP. |
+| `OTEL_SAMPLING_RATE` | `0.1` | Fraction of requests to trace (0.1 = 10%). Lower values reduce overhead in high-traffic production environments. |
+| `OTEL_BATCH_EXPORT_SCHEDULE_DELAY` | `5000` | Delay in milliseconds between batch exports. |
+| `OTEL_MAX_QUEUE_SIZE` | `2048` | Maximum number of spans queued before dropping. |
+| `OTEL_MAX_EXPORT_BATCH_SIZE` | `512` | Maximum spans per export batch. |
+| `OTEL_METRIC_EXPORT_INTERVAL` | `60000` | Metric export interval in milliseconds. |
+| `OTEL_BATCH_EXPORT_TIMEOUT` | `10000` | Batch span export timeout in milliseconds. |
+| `OTEL_METRIC_EXPORT_TIMEOUT` | `30000` | Metric export timeout in milliseconds. |
+
+## Miscellaneous
+
+| Variable | Default | Description |
+|---|---|---|
+| `CSP_WHITELIST` | (empty) | Additional domains to allow in Content Security Policy headers. |
+| `ALLOW_EMBED` | `false` | Allow Dify pages to be embedded in iframes. When `false`, sets `X-Frame-Options: DENY` to prevent clickjacking. |
+| `SWAGGER_UI_ENABLED` | `false` | Expose Swagger UI at `SWAGGER_UI_PATH` for browsing API documentation. Swagger endpoints bypass authentication. |
+| `SWAGGER_UI_PATH` | `/swagger-ui.html` | URL path for Swagger UI. |
+| `MAX_SUBMIT_COUNT` | `100` | Maximum concurrent task submissions in the thread pool used for parallel workflow node execution. |
+| `TENANT_ISOLATED_TASK_CONCURRENCY` | `1` | Number of document indexing or RAG pipeline tasks processed simultaneously per tenant. Increase for faster indexing with more database load. |
+| `CREATE_TIDB_SERVICE_JOB_ENABLED` | `false` | Pre-create TiDB Serverless clusters for vector database use. Pools ready-to-use clusters for faster dataset creation. |
+| `AMPLITUDE_API_KEY` | (empty) | API key for Amplitude analytics integration. |
### Scheduled Tasks Configuration
-Dify uses Celery Beat to execute various background scheduled tasks for system maintenance and data cleanup. The following environment variables configure scheduled task settings:
-
-- CELERY_BEAT_SCHEDULER_TIME
-
- Celery Beat scheduling time interval (in days) that controls the execution frequency of certain scheduled tasks. Default is 1 day.
-
-- ENABLE_CLEAN_EMBEDDING_CACHE_TASK
-
- Whether to enable the embedding cache cleanup task. Default is false. When enabled, it cleans expired embedding caches at 2:00 AM daily to reduce storage usage.
-
-- ENABLE_CLEAN_UNUSED_DATASETS_TASK
-
- Whether to enable the unused datasets cleanup task. Default is false. When enabled, it cleans long-unused datasets at 3:00 AM daily to free up storage space.
-
-- ENABLE_CLEAN_MESSAGES
-
- Whether to enable the message cleanup task. Default is false. When enabled, it cleans expired conversation message records at 4:00 AM daily.
-
-- ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK
-
- Whether to enable the mail document cleanup notification task. Default is false. When enabled, it sends document cleanup notification emails at 10:00 AM every Monday.
-
-- ENABLE_DATASETS_QUEUE_MONITOR
-
- Whether to enable the datasets queue monitoring task. Default is false. When enabled, it monitors the dataset processing queue status and sends alerts when the queue backlog exceeds the threshold.
-
-- QUEUE_MONITOR_INTERVAL
-
- Dataset queue monitoring interval (in minutes). Default is 30 minutes. Only effective when the queue monitoring task is enabled.
-
-- ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK
-
- Whether to enable the check upgradable plugin task. Default is true. When enabled, it checks for upgradable plugin versions every 15 minutes. Requires MARKETPLACE_ENABLED to be enabled.
-
-- MARKETPLACE_ENABLED
-
- Whether to enable the marketplace functionality. Default is true. When disabled, plugin-related features including plugin upgrade checks will be unavailable.
-
-- ENABLE_CREATE_TIDB_SERVERLESS_TASK
-
- Whether to enable the create TiDB Serverless task. Default is false. Used for TiDB cloud service integration, executes every hour.
-
-- ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK
-
- Whether to enable the update TiDB Serverless status task. Default is false. Used to update TiDB cloud service status, executes every 10 minutes.
-
-- WORKFLOW_LOG_CLEANUP_ENABLED
-
- Whether to enable automatic workflow log cleanup task. Default is false. When enabled, it cleans workflow execution logs that exceed the retention period at 2:00 AM daily.
-
-- WORKFLOW_LOG_RETENTION_DAYS
-
- Workflow log retention days. Default is 30 days. Only effective when the workflow log cleanup task is enabled.
-
-- WORKFLOW_LOG_CLEANUP_BATCH_SIZE
-
- Workflow log cleanup batch size. Default is 100. Number of log entries processed per cleanup operation, can be adjusted based on system performance.
-
-### Others
-
-- INVITE_EXPIRY_HOURS: Member invitation link valid time (hours), Default: 72.
-- HTTP_REQUEST_NODE_MAX_TEXT_SIZE: The maximum text size of the HTTP request node in the workflow, default 1MB。
-- HTTP_REQUEST_NODE_MAX_BINARY_SIZE: The maximum binary size of HTTP request nodes in the workflow, default 10MB。
-
----
-
-## Web Frontend
-
-### SENTRY_DSN
-
-Sentry DSN address, default is empty, when empty, all monitoring information is not reported to Sentry.
-
-## Deprecated
-
-### CONSOLE_URL
-
-> ⚠️ Modified in 0.3.8, will be deprecated in 0.4.9, replaced by: `CONSOLE_API_URL` and `CONSOLE_WEB_URL`.
-
-Console URL, used to concatenate the authorization callback, console front-end address, and CORS configuration use. If empty, it is the same domain. Example: `https://console.dify.ai`.
-
-### API_URL
-
-> ⚠️ Modified in 0.3.8, will be deprecated in 0.4.9, replaced by `SERVICE_API_URL`.
-
-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`
-
-### APP_URL
-
-> ⚠️ Modified in 0.3.8, will be deprecated in 0.4.9, replaced by `APP_API_URL` and `APP_WEB_URL`.
-
-WebApp Url, used to display WebAPP API Base Url to the front-end. If empty, it is the same domain. Example: `https://udify.app/`
-
-### Session Configuration
-
-> ⚠️ This configuration is no longer valid since v0.3.24.
-
-Only used by the API service for interface identity verification.
-
-- SESSION_TYPE: Session component type
-
- - redis (default): If you choose this, you need to set the environment variables starting with SESSION_REDIS\_ below.
- - sqlalchemy: If you choose this, the current database connection will be used and the sessions table will be used to read and write session records.
-
-- SESSION_REDIS_HOST: Redis host
-- SESSION_REDIS_PORT: Redis port, default is 6379
-- SESSION_REDIS_DB: Redis Database, default is 0. Please use a different Database from Redis and Celery Broker.
-- SESSION_REDIS_USERNAME: Redis username, default is empty
-- SESSION_REDIS_PASSWORD: Redis password, default is empty. It is strongly recommended to set a password.
-- SESSION_REDIS_USE_SSL: Whether to use SSL protocol for connection, default is false
-
-### Cookie Policy Configuration
-
-> ⚠️ This configuration is no longer valid since v0.3.24.
-
-Used to set the browser policy for session cookies used for identity verification.
-
-- COOKIE_HTTPONLY: Cookie HttpOnly configuration, default is true.
-- COOKIE_SAMESITE: Cookie SameSite configuration, default is Lax.
-- COOKIE_SECURE: Cookie Secure configuration, default is false.
-
-## Chunk Length Configuration
-
-### INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH
-
-Configuration for document chunk length. It is used to control the size of text segments when processing long documents. Default: 500. Maximum: 4000.
-
-**Larger Chunks**
-- Retain more context within each chunk, ideal for tasks requiring a broader understanding of the text.
-- Reduce the total number of chunks, lowering processing time and storage overhead.
-
-**Smaller Chunks**
-- Provide finer granularity, improving accuracy for tasks like extraction or summarization.
-- Reduce the risk of exceeding model token limits, making it safer for models with stricter constraints.
-
-**Configuration Recommendations**
-- Choose larger chunks for context-heavy tasks like sentiment analysis or document summarization.
-- Choose smaller chunks for fine-grained tasks such as keyword extraction or paragraph-level processing.
\ No newline at end of file
+Dify uses Celery Beat to run background maintenance tasks on configurable schedules.
+
+| Variable | Default | Description |
+|---|---|---|
+| `ENABLE_CLEAN_EMBEDDING_CACHE_TASK` | `false` | Delete expired embedding cache records from the database at 2:00 AM daily. Manages database size. |
+| `ENABLE_CLEAN_UNUSED_DATASETS_TASK` | `false` | Disable documents in knowledge bases that haven't had activity within the retention period. Runs at 3:00 AM daily. |
+| `ENABLE_CLEAN_MESSAGES` | `false` | Delete conversation messages older than the retention period at 4:00 AM daily. |
+| `ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK` | `false` | Email workspace owners a list of knowledge bases that had documents auto-disabled by the cleanup task. Runs every Monday at 10:00 AM. |
+| `ENABLE_DATASETS_QUEUE_MONITOR` | `false` | Monitor the dataset processing queue backlog in Redis. Sends email alerts when the queue exceeds the threshold. |
+| `QUEUE_MONITOR_INTERVAL` | `30` | How often to check the queue (in minutes). |
+| `QUEUE_MONITOR_THRESHOLD` | `200` | Queue size that triggers an alert email. |
+| `QUEUE_MONITOR_ALERT_EMAILS` | (empty) | Email addresses to receive queue alerts (comma-separated). |
+| `ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK` | `true` | Check the marketplace for newer plugin versions every 15 minutes. Dispatches upgrade tasks based on each tenant's auto-upgrade schedule. |
+| `ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK` | `true` | Enable the workflow schedule poller that checks for and triggers scheduled workflow runs. |
+| `WORKFLOW_SCHEDULE_POLLER_INTERVAL` | `1` | How often to check for due scheduled workflows (in minutes). |
+| `WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE` | `100` | Maximum number of due schedules fetched per poll cycle. |
+| `WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK` | `0` | Circuit breaker: maximum schedules dispatched per tick. `0` means unlimited. |
+| `ENABLE_WORKFLOW_RUN_CLEANUP_TASK` | `false` | Enable automatic cleanup of workflow run records. |
+| `ENABLE_CREATE_TIDB_SERVERLESS_TASK` | `false` | Pre-create TiDB Serverless clusters for vector database pooling. |
+| `ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK` | `false` | Update TiDB Serverless cluster status periodically. |
+| `ENABLE_HUMAN_INPUT_TIMEOUT_TASK` | `true` | Check for expired Human Input forms and resume or stop timed-out workflows. |
+| `HUMAN_INPUT_TIMEOUT_TASK_INTERVAL` | `1` | How often to check for expired Human Input forms (in minutes). |
+
+#### Record Retention & Cleanup
+
+These control how old records are cleaned up. When `BILLING_ENABLED` is active, cleanup targets sandbox-tier tenants with a grace period. When billing is disabled (self-hosted), cleanup applies to all records within the retention window.
+
+| Variable | Default | Description |
+|---|---|---|
+| `SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS` | `30` | Records older than this many days are eligible for deletion. |
+| `SANDBOX_EXPIRED_RECORDS_CLEAN_GRACEFUL_PERIOD` | `21` | Grace period in days after subscription expiration before records are deleted (billing-enabled only). |
+| `SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_SIZE` | `1000` | Number of records processed per cleanup batch. |
+| `SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_MAX_INTERVAL` | `200` | Maximum random delay in milliseconds between cleanup batches to reduce database load. |
+| `SANDBOX_EXPIRED_RECORDS_CLEAN_TASK_LOCK_TTL` | `90000` | Redis lock TTL in seconds (~25 hours) to prevent concurrent cleanup task execution. |
+
+## Aliyun SLS Logstore Configuration
+
+Optional integration with Aliyun Simple Log Service for storing workflow execution logs externally instead of in the database. Enable by setting the repository configuration variables to use logstore implementations.
+
+| Variable | Default | Description |
+|---|---|---|
+| `ALIYUN_SLS_ACCESS_KEY_ID` | (empty) | Aliyun access key ID for SLS authentication. |
+| `ALIYUN_SLS_ACCESS_KEY_SECRET` | (empty) | Aliyun access key secret for SLS authentication. |
+| `ALIYUN_SLS_ENDPOINT` | (empty) | SLS service endpoint URL (e.g., `cn-hangzhou.log.aliyuncs.com`). |
+| `ALIYUN_SLS_REGION` | (empty) | Aliyun region (e.g., `cn-hangzhou`). |
+| `ALIYUN_SLS_PROJECT_NAME` | (empty) | SLS project name for storing workflow logs. |
+| `ALIYUN_SLS_LOGSTORE_TTL` | `365` | Data retention in days for SLS logstores. Use `3650` for permanent storage. |
+| `LOGSTORE_DUAL_WRITE_ENABLED` | `false` | Write workflow data to both SLS and PostgreSQL simultaneously. Useful during migration to SLS. |
+| `LOGSTORE_DUAL_READ_ENABLED` | `true` | Fall back to PostgreSQL when SLS returns no results. Useful during migration when historical data exists only in the database. |
+| `LOGSTORE_ENABLE_PUT_GRAPH_FIELD` | `true` | Include the full workflow graph definition in SLS logs. Set to `false` to reduce storage by omitting large graph data. |
+
+## Event Bus Configuration
+
+Redis-based event transport between API and Celery workers.
+
+| Variable | Default | Description |
+|---|---|---|
+| `EVENT_BUS_REDIS_URL` | (empty) | Redis connection URL for event streaming. When empty, uses the main Redis connection settings. |
+| `EVENT_BUS_REDIS_CHANNEL_TYPE` | `pubsub` | Transport type: `pubsub` (Pub/Sub, at-most-once delivery), `sharded` (sharded Pub/Sub), or `streams` (Redis Streams, at-least-once delivery). |
+| `EVENT_BUS_REDIS_USE_CLUSTERS` | `false` | Enable Redis Cluster mode for event bus. Recommended for large deployments. |
+
+## Vector Database Service Configuration
+
+These configure the vector database containers themselves (not the Dify client connection). Only the variables for your chosen `VECTOR_STORE` are relevant.
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `WEAVIATE_PERSISTENCE_DATA_PATH` | `/var/lib/weaviate` | Data persistence directory inside the container. |
+| `WEAVIATE_QUERY_DEFAULTS_LIMIT` | `25` | Default query result limit. |
+| `WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED` | `true` | Allow anonymous access. |
+| `WEAVIATE_DEFAULT_VECTORIZER_MODULE` | `none` | Default vectorizer module. |
+| `WEAVIATE_CLUSTER_HOSTNAME` | `node1` | Cluster node hostname. |
+| `WEAVIATE_AUTHENTICATION_APIKEY_ENABLED` | `true` | Enable API key authentication. |
+| `WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS` | (auto-generated) | Allowed API keys. Must match `WEAVIATE_API_KEY` in the client config. |
+| `WEAVIATE_AUTHENTICATION_APIKEY_USERS` | `hello@dify.ai` | Users associated with API keys. |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED` | `true` | Enable admin list authorization. |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_USERS` | `hello@dify.ai` | Admin users. |
+| `WEAVIATE_DISABLE_TELEMETRY` | `false` | Disable Weaviate telemetry. |
+| `WEAVIATE_ENABLE_TOKENIZER_GSE` | `false` | Enable GSE tokenizer (Chinese). |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA` | `false` | Enable Kagome tokenizer (Japanese). |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR` | `false` | Enable Kagome tokenizer (Korean). |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ETCD_AUTO_COMPACTION_MODE` | `revision` | ETCD auto compaction mode. |
+| `ETCD_AUTO_COMPACTION_RETENTION` | `1000` | Auto compaction retention in number of revisions. |
+| `ETCD_QUOTA_BACKEND_BYTES` | `4294967296` | Backend quota in bytes (4 GB). |
+| `ETCD_SNAPSHOT_COUNT` | `50000` | Number of changes before triggering a snapshot. |
+| `ETCD_ENDPOINTS` | `etcd:2379` | ETCD service endpoints. |
+| `MINIO_ACCESS_KEY` | `minioadmin` | MinIO access key. |
+| `MINIO_SECRET_KEY` | `minioadmin` | MinIO secret key. |
+| `MINIO_ADDRESS` | `minio:9000` | MinIO service address. |
+| `MILVUS_AUTHORIZATION_ENABLED` | `true` | Enable Milvus security authorization. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `OPENSEARCH_DISCOVERY_TYPE` | `single-node` | Discovery type for cluster formation. |
+| `OPENSEARCH_BOOTSTRAP_MEMORY_LOCK` | `true` | Lock memory on startup to prevent swapping. |
+| `OPENSEARCH_JAVA_OPTS_MIN` | `512m` | Minimum JVM heap size. |
+| `OPENSEARCH_JAVA_OPTS_MAX` | `1024m` | Maximum JVM heap size. |
+| `OPENSEARCH_INITIAL_ADMIN_PASSWORD` | `Qazwsxedc!@#123` | Initial admin password for the OpenSearch service. |
+| `OPENSEARCH_MEMLOCK_SOFT` | `-1` | Soft memory lock limit (`-1` = unlimited). |
+| `OPENSEARCH_MEMLOCK_HARD` | `-1` | Hard memory lock limit (`-1` = unlimited). |
+| `OPENSEARCH_NOFILE_SOFT` | `65536` | Soft file descriptor limit. |
+| `OPENSEARCH_NOFILE_HARD` | `65536` | Hard file descriptor limit. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PGVECTOR_PGUSER` | `postgres` | PostgreSQL user for the PGVector container. |
+| `PGVECTOR_POSTGRES_PASSWORD` | (auto-generated) | PostgreSQL password for the PGVector container. |
+| `PGVECTOR_POSTGRES_DB` | `dify` | Database name in the PGVector container. |
+| `PGVECTOR_PGDATA` | `/var/lib/postgresql/data/pgdata` | Data directory inside the container. |
+| `PGVECTOR_PG_BIGM_VERSION` | `1.2-20240606` | Version of the pg_bigm extension. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `ORACLE_PWD` | `Dify123456` | Oracle database password for the container. |
+| `ORACLE_CHARACTERSET` | `AL32UTF8` | Oracle character set. |
+| `CHROMA_SERVER_AUTHN_CREDENTIALS` | (auto-generated) | Authentication credentials for the Chroma server container. |
+| `CHROMA_SERVER_AUTHN_PROVIDER` | `chromadb.auth.token_authn.TokenAuthenticationServerProvider` | Authentication provider for the Chroma server. |
+| `CHROMA_IS_PERSISTENT` | `TRUE` | Enable persistent storage for Chroma. |
+| `KIBANA_PORT` | `5601` | Kibana port (Elasticsearch UI). |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `IRIS_WEB_SERVER_PORT` | `52773` | IRIS web server management port. |
+| `IRIS_TIMEZONE` | `UTC` | Timezone for the IRIS container. |
+| `DB_PLUGIN_DATABASE` | `dify_plugin` | Separate database name for plugin data. |
+
+
+
+
+## Plugin Daemon Storage Configuration
+
+The plugin daemon can store plugin packages in different storage backends. Configure only the provider matching `PLUGIN_STORAGE_TYPE`.
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_STORAGE_TYPE` | `local` | Plugin storage backend: `local`, `aws_s3`, `tencent_cos`, `azure_blob`, `aliyun_oss`, `volcengine_tos`. |
+| `PLUGIN_STORAGE_LOCAL_ROOT` | `/app/storage` | Root directory for local plugin storage. |
+| `PLUGIN_WORKING_PATH` | `/app/storage/cwd` | Working directory for plugin execution. |
+| `PLUGIN_INSTALLED_PATH` | `plugin` | Subdirectory for installed plugins. |
+| `PLUGIN_PACKAGE_CACHE_PATH` | `plugin_packages` | Subdirectory for cached plugin packages. |
+| `PLUGIN_MEDIA_CACHE_PATH` | `assets` | Subdirectory for cached media assets. |
+| `PLUGIN_STORAGE_OSS_BUCKET` | (empty) | Object storage bucket name (shared across S3/COS/OSS/TOS providers). |
+| `PLUGIN_PPROF_ENABLED` | `false` | Enable Go pprof profiling for the plugin daemon. |
+| `PLUGIN_PYTHON_ENV_INIT_TIMEOUT` | `120` | Timeout in seconds for initializing Python environments for plugins. |
+| `PLUGIN_STDIO_BUFFER_SIZE` | `1024` | Buffer size in bytes for plugin stdio communication. |
+| `PLUGIN_STDIO_MAX_BUFFER_SIZE` | `5242880` | Maximum buffer size in bytes (5 MB) for plugin stdio communication. |
+| `ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES` | `true` | Enforce signature verification for LangGenius official plugins. |
+| `ENDPOINT_URL_TEMPLATE` | `http://localhost/e/{hook_id}` | URL template for plugin endpoints. `{hook_id}` is replaced with the actual hook ID. |
+| `EXPOSE_PLUGIN_DAEMON_PORT` | `5002` | Host port mapped to the plugin daemon. |
+| `EXPOSE_PLUGIN_DEBUGGING_HOST` | `localhost` | Host for plugin remote debugging. |
+| `EXPOSE_PLUGIN_DEBUGGING_PORT` | `5003` | Host port for plugin remote debugging. |
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_S3_USE_AWS` | `false` | Use AWS S3 (vs S3-compatible services). |
+| `PLUGIN_S3_USE_AWS_MANAGED_IAM` | `false` | Use IAM roles instead of explicit credentials. |
+| `PLUGIN_S3_ENDPOINT` | (empty) | S3 endpoint URL. |
+| `PLUGIN_S3_USE_PATH_STYLE` | `false` | Use path-style URLs instead of virtual-hosted. |
+| `PLUGIN_AWS_ACCESS_KEY` | (empty) | AWS access key. |
+| `PLUGIN_AWS_SECRET_KEY` | (empty) | AWS secret key. |
+| `PLUGIN_AWS_REGION` | (empty) | AWS region. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_AZURE_BLOB_STORAGE_CONTAINER_NAME` | (empty) | Azure Blob container name. |
+| `PLUGIN_AZURE_BLOB_STORAGE_CONNECTION_STRING` | (empty) | Azure Blob connection string. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_TENCENT_COS_SECRET_KEY` | (empty) | Tencent COS secret key. |
+| `PLUGIN_TENCENT_COS_SECRET_ID` | (empty) | Tencent COS secret ID. |
+| `PLUGIN_TENCENT_COS_REGION` | (empty) | Tencent COS region. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_ALIYUN_OSS_REGION` | (empty) | Aliyun OSS region. |
+| `PLUGIN_ALIYUN_OSS_ENDPOINT` | (empty) | Aliyun OSS endpoint. |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_ID` | (empty) | Aliyun OSS access key ID. |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_SECRET` | (empty) | Aliyun OSS access key secret. |
+| `PLUGIN_ALIYUN_OSS_AUTH_VERSION` | `v4` | Aliyun OSS authentication version. |
+| `PLUGIN_ALIYUN_OSS_PATH` | (empty) | Aliyun OSS path prefix. |
+
+
+
+
+
+| Variable | Default | Description |
+|---|---|---|
+| `PLUGIN_VOLCENGINE_TOS_ENDPOINT` | (empty) | Volcengine TOS endpoint. |
+| `PLUGIN_VOLCENGINE_TOS_ACCESS_KEY` | (empty) | Volcengine TOS access key. |
+| `PLUGIN_VOLCENGINE_TOS_SECRET_KEY` | (empty) | Volcengine TOS secret key. |
+| `PLUGIN_VOLCENGINE_TOS_REGION` | (empty) | Volcengine TOS region. |
+
+
+
\ No newline at end of file
From 9248032a503e58db921e3de6190802698fe2b0b6 Mon Sep 17 00:00:00 2001
From: RiskeyL <7a8y@163.com>
Date: Mon, 30 Mar 2026 18:52:15 +0800
Subject: [PATCH 2/3] docs: remove Cloud-only variables
---
en/self-host/configuration/environments.mdx | 34 ---------------------
1 file changed, 34 deletions(-)
diff --git a/en/self-host/configuration/environments.mdx b/en/self-host/configuration/environments.mdx
index b91840321..d41307e49 100644
--- a/en/self-host/configuration/environments.mdx
+++ b/en/self-host/configuration/environments.mdx
@@ -181,17 +181,6 @@ Only effective when starting with Docker image or Docker Compose.
| `API_TOOL_DEFAULT_CONNECT_TIMEOUT` | `10` | Maximum time (in seconds) to wait for establishing a TCP connection when API Tool nodes call external APIs. |
| `API_TOOL_DEFAULT_READ_TIMEOUT` | `60` | Maximum time (in seconds) to wait for receiving response data from external APIs called by API Tool nodes. |
-### Datasource Configuration
-
-These frontend feature flags control which web crawling options appear in the dataset creation UI. The backend always supports all crawlers regardless of these settings.
-
-| Variable | Default | Description |
-|---|---|---|
-| `ENABLE_WEBSITE_JINAREADER` | `true` | Show Jina Reader as a website datasource option in the UI. |
-| `ENABLE_WEBSITE_FIRECRAWL` | `true` | Show Firecrawl as a website datasource option in the UI. |
-| `ENABLE_WEBSITE_WATERCRAWL` | `true` | Show WaterCrawl as a website datasource option in the UI. |
-| `NEXT_PUBLIC_ENABLE_SINGLE_DOLLAR_LATEX` | `false` | Enable inline LaTeX rendering with single dollar signs (`$...$`). Disabled by default because `$` commonly appears in regular text (prices, code), causing unintended math formatting. When disabled, only `$$...$$` triggers LaTeX. |
-
### Database Configuration
The database uses PostgreSQL by default. OceanBase, MySQL, and seekdb are also supported.
@@ -710,27 +699,6 @@ seekdb is the lite version of OceanBase and shares the same connection configura
-
-
-Hybrid storage using TiDB for metadata and Qdrant for vectors.
-
-| Variable | Default | Description |
-|---|---|---|
-| `TIDB_ON_QDRANT_URL` | `http://127.0.0.1` | Qdrant endpoint. |
-| `TIDB_ON_QDRANT_API_KEY` | `dify` | Qdrant API key. |
-| `TIDB_ON_QDRANT_CLIENT_TIMEOUT` | `20` | Client timeout in seconds. |
-| `TIDB_ON_QDRANT_GRPC_ENABLED` | `false` | Enable gRPC. |
-| `TIDB_ON_QDRANT_GRPC_PORT` | `6334` | gRPC port. |
-| `TIDB_PUBLIC_KEY` | (empty) | TiDB Cloud public key. |
-| `TIDB_PRIVATE_KEY` | (empty) | TiDB Cloud private key. |
-| `TIDB_API_URL` | `http://127.0.0.1` | TiDB API URL. |
-| `TIDB_IAM_API_URL` | `http://127.0.0.1` | TiDB IAM API URL. |
-| `TIDB_REGION` | `regions/aws-us-east-1` | TiDB region. |
-| `TIDB_PROJECT_ID` | (empty) | TiDB project ID. |
-| `TIDB_SPEND_LIMIT` | `100` | Spend limit. |
-
-
-
| Variable | Default | Description |
@@ -1360,8 +1328,6 @@ OpenTelemetry provides distributed tracing and metrics collection. When enabled,
| `SWAGGER_UI_PATH` | `/swagger-ui.html` | URL path for Swagger UI. |
| `MAX_SUBMIT_COUNT` | `100` | Maximum concurrent task submissions in the thread pool used for parallel workflow node execution. |
| `TENANT_ISOLATED_TASK_CONCURRENCY` | `1` | Number of document indexing or RAG pipeline tasks processed simultaneously per tenant. Increase for faster indexing with more database load. |
-| `CREATE_TIDB_SERVICE_JOB_ENABLED` | `false` | Pre-create TiDB Serverless clusters for vector database use. Pools ready-to-use clusters for faster dataset creation. |
-| `AMPLITUDE_API_KEY` | (empty) | API key for Amplitude analytics integration. |
### Scheduled Tasks Configuration
From 1d7ae1b6bcfc4da16ef0d02daeb83a5d2e3c8abe Mon Sep 17 00:00:00 2001
From: RiskeyL <7a8y@163.com>
Date: Mon, 30 Mar 2026 21:47:09 +0800
Subject: [PATCH 3/3] translate: add zh and ja translations for the env var doc
---
ja/self-host/configuration/environments.mdx | 1568 ++++++++++++++++++-
zh/self-host/configuration/environments.mdx | 1568 ++++++++++++++++++-
2 files changed, 3132 insertions(+), 4 deletions(-)
diff --git a/ja/self-host/configuration/environments.mdx b/ja/self-host/configuration/environments.mdx
index fdc6dc508..2a3a91be2 100644
--- a/ja/self-host/configuration/environments.mdx
+++ b/ja/self-host/configuration/environments.mdx
@@ -1,7 +1,1571 @@
---
title: 環境変数
+description: Difyセルフホストデプロイで使用されるすべての環境変数のリファレンス。
---
+ ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/self-host/configuration/environments)を参照してください。
+
+Difyはデフォルト設定でそのまま動作します。`.env`ファイルの環境変数を変更することで、デプロイをカスタマイズできます。
+
+
+Difyをアップグレードした後、`docker`ディレクトリで`diff .env .env.example`を実行して、新しく追加または変更された変数を確認し、`.env`ファイルを適宜更新してください。
+
+
+## 共通変数
+
+これらのURL変数は、Difyの各サービスのアドレスを設定します。
+
+Nginx背後のシングルドメインデプロイ(デフォルトのDocker Compose構成)の場合、これらは空のままで構いません。システムがリクエストから自動検出します。カスタムドメイン、マルチドメインデプロイ、またはリバースプロキシを使用する場合に設定してください。
+
+### CONSOLE_API_URL
+
+デフォルト値:(空)
+
+Difyバックエンド APIの公開URL。OAuthログイン(GitHub、Google)、Notion連携、またはOAuthを必要とするプラグインを使用する場合に設定してください。これらの機能は、認証後にユーザーをリダイレクトするための絶対コールバックURLを必要とします。また、セキュア(HTTPSのみ)Cookieを使用するかどうかも決定します。
+
+例:`https://api.console.dify.ai`
+
+### CONSOLE_WEB_URL
+
+デフォルト値:(空)
+
+Difyコンソールフロントエンドの公開URL。すべてのシステムメール(招待、パスワードリセット、通知)のリンク構築、およびOAuthログイン後のコンソールへのリダイレクトに使用されます。`CONSOLE_CORS_ALLOW_ORIGINS`が設定されていない場合、デフォルトのCORS許可オリジンとしても機能します。
+
+空の場合、メールリンクが正しく機能しません。シングルドメインデプロイでも、メール機能を使用する場合はこの変数を設定してください。
+
+例:`https://console.dify.ai`
+
+### SERVICE_API_URL
+
+デフォルト値:(空)
+
+DifyコンソールでDeveloperに表示されるAPI Base URL。DeveloperがDify APIを呼び出すためにコードにコピーするURLです。空の場合、現在のリクエストから自動検出されます(例:`http://localhost/v1`)。サーバーが複数のアドレスでアクセス可能な場合、この変数を設定して一貫したURLを確保してください。
+
+例:`https://api.dify.ai`
+
+### APP_API_URL
+
+デフォルト値:(空)
+
+WebAppフロントエンド(公開アプリ)のバックエンドAPI URL。この変数はWebフロントエンドコンテナでのみ使用され、Pythonバックエンドには影響しません。空の場合、Dockerイメージのデフォルトは`http://127.0.0.1:5001`です。
+
+例:`https://api.app.dify.ai`
+
+### APP_WEB_URL
+
+デフォルト値:(空)
+
+公開WebAppのアクセスURL。ワークフローの**人間の入力ノード**に必要です。メール通知のフォームリンクは`{APP_WEB_URL}/form/{token}`形式で構築されます。空の場合、人間の入力メールに有効なフォームリンクが含まれません。
+
+例:`https://app.dify.ai`
+
+### TRIGGER_URL
+
+デフォルト値:`http://localhost`
+
+WebhookおよびプラグイントリガーエンドポイントのアクセスURL。外部システムがこのアドレスを使用してワークフローを呼び出します。DifyはトリガーコールバックURLを`{TRIGGER_URL}/triggers/webhook/{id}`の形式で構築し、コンソールに表示します。
+
+外部システムからトリガーが動作するようにするには、それらがアクセスできるパブリックドメインまたはIPアドレスを指定する必要があります。
+
+### FILES_URL
+
+デフォルト値:(空;`CONSOLE_API_URL`にフォールバック)
+
+ファイルプレビューおよびダウンロードリンクのベースURL。Difyはすべてのファイル(アップロードされたドキュメント、ツール出力、ワークスペースロゴ)に対して署名付き時間制限URLを生成し、フロントエンドとマルチモーダルモデルに提供します。
+
+ファイル処理プラグインを使用する場合、またはファイルURLを専用ドメインで使用したい場合に設定してください。`FILES_URL`と`CONSOLE_API_URL`の両方が空の場合、ファイルプレビューが機能しません。
+
+例:`https://upload.example.com`または`http://:5001`
+
+### INTERNAL_FILES_URL
+
+デフォルト値:(空;`FILES_URL`にフォールバック)
+
+Dockerネットワーク内のサービス間通信で使用されるファイルアクセスURL(例:プラグインデーモン、PDF/Word抽出器)。これらの内部サービスは、NginxやパブリックドメインをNginx経由する外部`FILES_URL`にアクセスできない場合があります。
+
+空の場合、内部サービスは`FILES_URL`を使用します。内部サービスが外部URLにアクセスできない場合に設定してください。
+
+例:`http://api:5001`
+
+### FILES_ACCESS_TIMEOUT
+
+デフォルト値:`300`(5分)
+
+署名付きファイルURLの有効期間(秒)。この時間を過ぎるとURLは拒否され、ファイルを再リクエストする必要があります。長時間実行プロセスの場合は増加し、セキュリティを強化する場合は減少させてください。
+
+### システムエンコーディング
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `LANG` | `C.UTF-8` | システムロケール設定。UTF-8エンコーディングを保証します。 |
+| `LC_ALL` | `C.UTF-8` | すべてのカテゴリのロケールオーバーライド。 |
+| `PYTHONIOENCODING` | `utf-8` | Python I/Oエンコーディング。 |
+| `UV_CACHE_DIR` | `/tmp/.uv-cache` | UVパッケージマネージャーのキャッシュディレクトリ。存在しないホームディレクトリによる権限問題を回避します。 |
+
+## サーバー設定
+
+### ログ
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `LOG_LEVEL` | `INFO` | 最小ログレベル。すべてのハンドラー(ファイル+コンソール)のログ記録内容を制御します。レベル(低→高):`DEBUG`、`INFO`、`WARNING`、`ERROR`、`CRITICAL`。 |
+| `LOG_OUTPUT_FORMAT` | `text` | `text`はタイムスタンプ、レベル、スレッド、トレースIDを含む人間可読な形式を出力します。`json`はログ集約ツール(ELK、Datadogなど)向けの構造化JSONを出力します。 |
+| `LOG_FILE` | `/app/logs/server.log` | ログファイルパス。設定するとファイルベースのログ記録が有効になり、自動ローテーションされます。ディレクトリは自動作成されます。空の場合はコンソールにのみ出力されます。 |
+| `LOG_FILE_MAX_SIZE` | `20` | ローテーション前のログファイル最大サイズ(MB)。超過すると現在のファイルが`.1`にリネームされ、新しいファイルが作成されます。 |
+| `LOG_FILE_BACKUP_COUNT` | `5` | 保持するローテーションログファイル数。デフォルト設定では最大6ファイル(現在のファイル+5バックアップ)が存在します。 |
+| `LOG_DATEFORMAT` | `%Y-%m-%d %H:%M:%S` | テキスト形式ログのタイムスタンプフォーマット(strftimeコード)。JSON形式では無視されます。 |
+| `LOG_TZ` | `UTC` | ログタイムスタンプのタイムゾーン(pytz形式、例:`Asia/Shanghai`)。テキスト形式にのみ適用されます。JSONは常にUTCを使用します。Celeryのタスクスケジューリングタイムゾーンも設定します。 |
+
+### 一般
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `DEBUG` | `false` | 詳細ログを有効化:ワークフローノードの入出力、ツール実行の詳細、完全なLLMプロンプトとレスポンス、アプリ起動時間。ローカル開発に有用です。ログに機密データが出力される可能性があるため、本番環境では推奨しません。 |
+| `FLASK_DEBUG` | `false` | 標準Flaskデバッグモードフラグ。Difyでは積極的に使用されていません。`DEBUG`が主要な制御変数です。 |
+| `ENABLE_REQUEST_LOGGING` | `false` | すべてのHTTPリクエストに対してコンパクトなアクセスログ(`METHOD PATH STATUS DURATION TRACE_ID`)を記録します。`LOG_LEVEL`が`DEBUG`に設定されている場合、完全なリクエストとレスポンスボディもJSON形式で記録されます。 |
+| `DEPLOY_ENV` | `PRODUCTION` | SentryとOpenTelemetryの監視データにタグ付けし、環境別にエラーとトレースをフィルタリングできるようにします。`X-Env`レスポンスヘッダーとしても送信されます。アプリケーションの動作は変更しません。 |
+| `MIGRATION_ENABLED` | `true` | `true`の場合、コンテナ起動時にデータベーススキーママイグレーション(`flask upgrade-db`)を自動実行します。Dockerのみ。マイグレーションを別途実行する場合は`false`に設定してください。ソースコードからの起動では、`flask db upgrade`を手動で実行してください。 |
+| `CHECK_UPDATE_URL` | `https://updates.dify.ai` | コンソールがこのURLでDifyの新バージョンを確認します。空に設定すると無効化されます。エアギャップ環境や外部HTTPコールを防止したい場合に有用です。 |
+| `OPENAI_API_BASE` | `https://api.openai.com/v1` | レガシー変数。Dify自身のコードでは積極的に使用されていません。環境に存在する場合、OpenAI Python SDKに読み取られる可能性があります。 |
+
+### SECRET_KEY
+
+デフォルト値:(`.env.example`にプリセット;本番環境では必ず置き換えてください)
+
+セッションCookie署名、JWT認証トークン、ファイルURL署名(HMAC-SHA256)、およびサードパーティOAuth資格情報の暗号化(AES-256)に使用されます。初回起動前に強力なキーを生成してください:
+
+```bash
+openssl rand -base64 42
+```
+
+
+デプロイ後にこのキーを変更すると、すべてのユーザーが即座にログアウトされ、すべてのファイルURLが無効になり、OAuthを使用するプラグイン連携が壊れます。暗号化された資格情報は復元できなくなります。
+
+
+### INIT_PASSWORD
+
+デフォルト値:(空)
+
+初回セットアップ時のオプションのセキュリティゲート。設定すると、`/install`ページで管理者アカウント作成前にこのパスワードの入力が必要になります。サーバーが公開されている場合の不正なセットアップを防止します。セットアップ完了後、この変数は効力を失います。最大長:30文字。
+
+### トークンとリクエスト制限
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ACCESS_TOKEN_EXPIRE_MINUTES` | `60` | ログインセッションのアクセストークンの有効期間(分)。期限切れ後、ブラウザがリフレッシュトークンを使用してサイレントに更新します。ユーザーはログアウトされません。 |
+| `REFRESH_TOKEN_EXPIRE_DAYS` | `30` | 資格情報を再入力せずにログイン状態を維持できる期間(日)。この期間内にアクセスがない場合、再ログインが必要です。 |
+| `APP_MAX_EXECUTION_TIME` | `1200` | アプリ実行の最大実行時間(秒)。超過すると終了されます。`WORKFLOW_MAX_EXECUTION_TIME`と連動し、両方ともデフォルトは20分ですが、これはアプリキューレベルで適用され、もう一方はワークフローエンジンレベルで適用されます。ワークフローにより多くの時間が必要な場合は、両方を増加してください。 |
+| `APP_DEFAULT_ACTIVE_REQUESTS` | `0` | アプリごとのデフォルト同時リクエスト制限。UIでカスタム制限が設定されていないアプリに使用されます。`0`は無制限を意味します。有効な制限はこの値と`APP_MAX_ACTIVE_REQUESTS`の小さい方になります。 |
+| `APP_MAX_ACTIVE_REQUESTS` | `0` | アプリごとのグローバル同時リクエスト上限。アプリのカスタム設定がこの値を超える場合、オーバーライドされます。`0`は無制限を意味します。 |
+
+### コンテナ起動設定
+
+DockerイメージまたはDocker Composeで起動する場合にのみ有効です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `DIFY_BIND_ADDRESS` | `0.0.0.0` | APIサーバーがバインドするネットワークインターフェース。`0.0.0.0`はすべてのインターフェースでリッスンします。`127.0.0.1`に設定するとローカルホストのみに制限されます。 |
+| `DIFY_PORT` | `5001` | APIサーバーのリッスンポート。 |
+| `SERVER_WORKER_AMOUNT` | `1` | Gunicornワーカープロセス数。gevent(デフォルト)使用時は各ワーカーがgreenletで複数の同時接続を処理するため、通常1で十分です。同期ワーカーの場合は`(2 x CPUコア数) + 1`を使用してください。[参考ドキュメント](https://docs.gunicorn.org/en/stable/design.html#how-many-workers)。 |
+| `SERVER_WORKER_CLASS` | `gevent` | Gunicornワーカータイプ。Geventは軽量な非同期並行処理を提供します。この設定を変更するとpsycopg2とgRPCのパッチが壊れます。変更は強く非推奨です。 |
+| `SERVER_WORKER_CONNECTIONS` | `10` | ワーカーごとの最大同時接続数。非同期ワーカー(gevent)にのみ適用されます。高負荷時に接続拒否やレスポンス遅延が発生する場合は、この値を増加してください。 |
+| `GUNICORN_TIMEOUT` | `360` | ワーカーがこの秒数以内に応答しない場合、Gunicornはそのワーカーを終了して再起動します。ストリーミングLLMレスポンスに使用される長時間SSE接続をサポートするため、360(6分)に設定されています。 |
+| `CELERY_WORKER_CLASS` | (空;デフォルトはgevent) | Celeryワーカータイプ。`SERVER_WORKER_CLASS`と同じgeventパッチ要件があります。変更は強く非推奨です。 |
+| `CELERY_WORKER_AMOUNT` | (空;デフォルトは1) | Celeryワーカープロセス数。オートスケーリング無効時のみ使用されます。 |
+| `CELERY_AUTO_SCALE` | `false` | 動的オートスケーリングを有効化。有効時、Celeryはキュー深度を監視し、`CELERY_MIN_WORKERS`から`CELERY_MAX_WORKERS`の間でワーカーを動的に生成/終了します。 |
+| `CELERY_MAX_WORKERS` | (空;デフォルトはCPU数) | オートスケーリング有効時の最大ワーカー数。 |
+| `CELERY_MIN_WORKERS` | (空;デフォルトは1) | オートスケーリング有効時の最小ワーカー数。 |
+
+### APIツール設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `API_TOOL_DEFAULT_CONNECT_TIMEOUT` | `10` | APIツールノードが外部APIを呼び出す際のTCP接続確立の最大待機時間(秒)。 |
+| `API_TOOL_DEFAULT_READ_TIMEOUT` | `60` | APIツールノードが外部APIからレスポンスデータを受信する最大待機時間(秒)。 |
+
+### データベース設定
+
+データベースはデフォルトでPostgreSQLを使用します。OceanBase、MySQL、seekdbもサポートされています。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `DB_TYPE` | `postgresql` | データベースタイプ。サポートされる値:`postgresql`、`mysql`、`oceanbase`、`seekdb`。TiDBなどのMySQL互換データベースは`mysql`を使用できます。 |
+| `DB_USERNAME` | `postgres` | データベースユーザー名。接続文字列でURLエンコードされるため、特殊文字も安全に使用できます。 |
+| `DB_PASSWORD` | `difyai123456` | データベースパスワード。接続文字列でURLエンコードされるため、`@`、`:`、`%`などの文字も安全に使用できます。 |
+| `DB_HOST` | `db_postgres` | データベースサーバーのホスト名。 |
+| `DB_PORT` | `5432` | データベースサーバーのポート。MySQLを使用する場合は`3306`に設定してください。 |
+| `DB_DATABASE` | `dify` | データベース名。 |
+
+#### コネクションプール
+
+Difyがデータベースコネクションプールを管理する方法を制御します。デフォルト設定はほとんどのデプロイで問題なく動作します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SQLALCHEMY_POOL_SIZE` | `30` | プール内に保持する永続接続数。 |
+| `SQLALCHEMY_MAX_OVERFLOW` | `10` | プールが満杯の場合に許可される追加の一時接続数。デフォルト設定では、最大40接続(30 + 10)が同時に存在できます。 |
+| `SQLALCHEMY_POOL_RECYCLE` | `3600` | この秒数の後に接続をリサイクルし、古い接続を防止します。 |
+| `SQLALCHEMY_POOL_TIMEOUT` | `30` | プールが枯渇した場合の接続待機時間。この時間内に接続が解放されない場合、リクエストはタイムアウトエラーで失敗します。 |
+| `SQLALCHEMY_POOL_PRE_PING` | `false` | 使用前に軽量クエリで接続をテストします。「接続切断」エラーを防止しますが、わずかなレイテンシーが追加されます。不安定なネットワークの本番環境で推奨されます。 |
+| `SQLALCHEMY_POOL_USE_LIFO` | `false` | 均等ローテーション(FIFO)の代わりに、最後に返却された接続を再利用します(LIFO)。LIFOはより少ない接続を「ウォーム」状態に保ち、オーバーヘッドを削減できます。 |
+| `SQLALCHEMY_ECHO` | `false` | すべてのSQL文をログに出力します。クエリ問題のデバッグに有用です。 |
+
+#### PostgreSQLパフォーマンスチューニング
+
+これらはPostgreSQLコンテナへの起動引数として渡されます。Difyアプリケーションではなく、データベースサーバーの設定です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `POSTGRES_MAX_CONNECTIONS` | `100` | 最大データベース接続数。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS) |
+| `POSTGRES_SHARED_BUFFERS` | `128MB` | バッファ用共有メモリ。推奨値:利用可能メモリの25%。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS) |
+| `POSTGRES_WORK_MEM` | `4MB` | データベースワーカーごとの作業メモリ。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM) |
+| `POSTGRES_MAINTENANCE_WORK_MEM` | `64MB` | メンテナンス作業用に予約されるメモリ。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM) |
+| `POSTGRES_EFFECTIVE_CACHE_SIZE` | `4096MB` | プランナーの有効キャッシュサイズの推定値。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE) |
+| `POSTGRES_STATEMENT_TIMEOUT` | `0` | ステートメント終了前の最大実行時間(ミリ秒)。`0`はタイムアウトなし。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT) |
+| `POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT` | `0` | トランザクション内アイドルセッションの最大時間(ミリ秒)。`0`はタイムアウトなし。[参考ドキュメント](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT) |
+
+#### MySQLパフォーマンスチューニング
+
+これらはMySQLコンテナへの起動引数として渡されます。Difyアプリケーションではなく、データベースサーバーの設定です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MYSQL_MAX_CONNECTIONS` | `1000` | 最大MySQL接続数。 |
+| `MYSQL_INNODB_BUFFER_POOL_SIZE` | `512M` | InnoDBバッファプールサイズ。推奨値:専用MySQLサーバーの利用可能メモリの70-80%。[参考ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size) |
+| `MYSQL_INNODB_LOG_FILE_SIZE` | `128M` | InnoDBログファイルサイズ。[参考ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size) |
+| `MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT` | `2` | トランザクションコミット時のInnoDBログフラッシュ方式。オプション:`0`(フラッシュなし)、`1`(フラッシュ&同期)、`2`(OSキャッシュへフラッシュ)。[参考ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit) |
+
+### Redis設定
+
+これらの変数を設定して、DifyをRedisインスタンスに接続します。Difyはスタンドアロン(デフォルト)、Sentinel、Clusterの3つのデプロイモードをサポートしています。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `REDIS_HOST` | `redis` | Redisサーバーのホスト名。スタンドアロンモードでのみ使用されます。SentinelまたはClusterモード有効時は無視されます。 |
+| `REDIS_PORT` | `6379` | Redisサーバーのポート。スタンドアロンモードでのみ使用されます。 |
+| `REDIS_USERNAME` | (空) | Redis 6.0+ ACLユーザー名。すべてのモード(スタンドアロン、Sentinel、Cluster)に適用されます。 |
+| `REDIS_PASSWORD` | `difyai123456` | Redis認証パスワード。Clusterモードの場合は、代わりに`REDIS_CLUSTERS_PASSWORD`を使用してください。 |
+| `REDIS_DB` | `0` | Redisデータベース番号(0-15)。スタンドアロンおよびSentinelモードにのみ適用されます。Celeryのデータベース(`CELERY_BROKER_URL`で設定;デフォルトはDB 1)と衝突しないようにしてください。 |
+| `REDIS_USE_SSL` | `false` | Redis接続のSSL/TLSを有効化。Sentinelプロトコルには自動適用されません。 |
+| `REDIS_MAX_CONNECTIONS` | (空) | Redisプール内の最大接続数。空のままでライブラリのデフォルトを使用します。必要に応じてRedisサーバーの`maxclients`に合わせて設定してください。 |
+
+#### Redis SSL設定
+
+`REDIS_USE_SSL=true`の場合にのみ適用されます。Celery brokerのURLが`rediss://`スキームを使用する場合、これらの設定はCelery brokerにも適用されます。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `REDIS_SSL_CERT_REQS` | `CERT_NONE` | 証明書検証レベル:`CERT_NONE`(検証なし)、`CERT_OPTIONAL`(オプション検証)、または`CERT_REQUIRED`(完全検証)。 |
+| `REDIS_SSL_CA_CERTS` | (空) | Redisサーバー検証用のCA証明書ファイルパス。 |
+| `REDIS_SSL_CERTFILE` | (空) | 相互TLS認証用のクライアント証明書パス。 |
+| `REDIS_SSL_KEYFILE` | (空) | 相互TLS認証用のクライアント秘密鍵パス。 |
+
+#### Redis Sentinelモード
+
+Sentinelは高可用性のための自動マスター検出とフェイルオーバーを提供します。Clusterモードとは相互に排他的です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `REDIS_USE_SENTINEL` | `false` | Redis Sentinelモードを有効化。有効時、`REDIS_HOST`/`REDIS_PORT`は無視されます。DifyはSentinelノードに接続し、現在のマスターを問い合わせます。 |
+| `REDIS_SENTINELS` | (空) | Sentinelノードのアドレス。形式:`:,:,:`。これらはSentinelインスタンスであり、Redisサーバーではありません。 |
+| `REDIS_SENTINEL_SERVICE_NAME` | (空) | Sentinelが監視する論理サービス名(`sentinel.conf`で設定)。Difyは`master_for(service_name)`を呼び出して現在のマスターを検出します。 |
+| `REDIS_SENTINEL_USERNAME` | (空) | Sentinelノードの認証ユーザー名。`REDIS_USERNAME`とは別です。後者はRedisマスター/レプリカの認証に使用されます。 |
+| `REDIS_SENTINEL_PASSWORD` | (空) | Sentinelノードの認証パスワード。`REDIS_PASSWORD`とは別です。 |
+| `REDIS_SENTINEL_SOCKET_TIMEOUT` | `0.1` | Sentinelノードとの通信のSocketタイムアウト(秒)。デフォルトの0.1秒は高速なローカルネットワークを想定しています。クラウド/WANデプロイでは、断続的なタイムアウトを防止するために1.0-5.0秒に増加してください。 |
+
+#### Redis Clusterモード
+
+Clusterモードは複数のRedisノード間での自動シャーディングを提供します。Sentinelモードとは相互に排他的です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `REDIS_USE_CLUSTERS` | `false` | Redis Clusterモードを有効化。 |
+| `REDIS_CLUSTERS` | (空) | Clusterノード。形式:`:,:,:` |
+| `REDIS_CLUSTERS_PASSWORD` | (空) | Redis Clusterのパスワード。 |
+
+### Celery設定
+
+データセットインデックス作成、メール送信、定期ジョブに使用されるバックグラウンドタスクキューを設定します。
+
+### CELERY_BROKER_URL
+
+デフォルト値:`redis://:difyai123456@redis:6379/1`
+
+CeleryメッセージブローカーのRedis接続URL。
+
+直接接続形式:
+```
+redis://:@:/
+```
+
+Sentinelモード形式(複数ノードはセミコロンで区切り):
+```
+sentinel://:@:/
+```
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CELERY_BACKEND` | `redis` | Celeryがタスク結果を保存する場所。オプション:`redis`(高速、インメモリ)または`database`(メインデータベースに保存)。 |
+| `BROKER_USE_SSL` | `false` | `CELERY_BROKER_URL`が`rediss://`スキームを使用する場合に自動有効化。Redis SSL証明書設定をbroker接続に適用します。 |
+| `CELERY_USE_SENTINEL` | `false` | Celery brokerのRedis Sentinelモードを有効化。 |
+| `CELERY_SENTINEL_MASTER_NAME` | (空) | Sentinelサービス名(Master Name)。 |
+| `CELERY_SENTINEL_PASSWORD` | (空) | Sentinel認証パスワード。`REDIS_SENTINEL_PASSWORD`とは別です。キャッシュとタスクキューで異なるSentinelクラスターを使用する場合に異なる値を設定できます。 |
+| `CELERY_SENTINEL_SOCKET_TIMEOUT` | `0.1` | Sentinelへの接続タイムアウト(秒)。 |
+| `CELERY_TASK_ANNOTATIONS` | `null` | 特定のタスクにランタイム設定(例:レート制限)を適用します。形式:JSON辞書。例:`{"tasks.add": {"rate_limit": "10/s"}}`。ほとんどのユーザーはこの設定を必要としません。 |
+
+### CORS設定
+
+フロントエンドのクロスドメインアクセスポリシーを制御します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `WEB_API_CORS_ALLOW_ORIGINS` | `*` | Web APIへのクロスオリジンリクエストの許可オリジン。例:`https://dify.app` |
+| `CONSOLE_CORS_ALLOW_ORIGINS` | `*` | コンソールAPIへのクロスオリジンリクエストの許可オリジン。設定されていない場合、`CONSOLE_WEB_URL`にフォールバックします。 |
+| `COOKIE_DOMAIN` | (空) | フロントエンドとバックエンドが異なるサブドメインで実行される場合、共有トップレベルドメイン(例:`example.com`)に設定します。これにより認証Cookieをサブドメイン間で共有できます。空の場合、Cookieは最もセキュアな`__Host-`プレフィックスを使用し、単一ドメインにロックされます。 |
+| `NEXT_PUBLIC_COOKIE_DOMAIN` | (空) | クロスサブドメインCookieのフロントエンドフラグ。`1`(または任意の非空値)に設定して有効化します。実際のドメインはバックエンドで`COOKIE_DOMAIN`から読み取られます。 |
+| `NEXT_PUBLIC_BATCH_CONCURRENCY` | `5` | フロントエンドのみ。バッチ操作時にUIが発行する同時APIコール数を制御します。 |
+
+### ファイルストレージ設定
+
+Difyがアップロードファイル、データセットドキュメント、暗号化キーを保存する場所を設定します。各ストレージタイプには独自の資格情報変数があります。使用するもののみを設定してください。
+
+### STORAGE_TYPE
+
+デフォルト値:`opendal`
+
+ファイルストレージバックエンドを選択します。サポートされる値:`opendal`、`s3`、`azure-blob`、`aliyun-oss`、`google-storage`、`huawei-obs`、`volcengine-tos`、`tencent-cos`、`baidu-obs`、`oci-storage`、`supabase`、`clickzetta-volume`、`local`(非推奨;内部的にOpenDALのファイルシステムスキームを使用)。
+
+
+
+
+[Apache OpenDAL](https://opendal.apache.org/)を使用するデフォルトのストレージバックエンド。多くのストレージサービスをサポートする統一インターフェースです。Difyは`OPENDAL__*`に一致する環境変数を自動スキャンし、OpenDALに渡します。例えば、`OPENDAL_SCHEME=s3`の場合、`OPENDAL_S3_ACCESS_KEY_ID`、`OPENDAL_S3_SECRET_ACCESS_KEY`などを設定します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OPENDAL_SCHEME` | `fs` | 使用するストレージサービス。例:`fs`(ローカルファイルシステム)、`s3`、`gcs`、`azblob`。 |
+
+デフォルトの`fs`スキームの場合:
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OPENDAL_FS_ROOT` | `storage` | ローカルファイルシステムストレージのルートディレクトリ。存在しない場合は自動作成されます。 |
+
+利用可能なすべてのスキームとその設定オプションについては、[OpenDALサービスドキュメント](https://github.com/apache/opendal/tree/main/core/src/services)を参照してください。
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `S3_ENDPOINT` | (空) | S3エンドポイントアドレス。AWS以外のS3互換サービス(MinIOなど)では必須です。 |
+| `S3_REGION` | `us-east-1` | S3リージョン。 |
+| `S3_BUCKET_NAME` | `difyai` | S3バケット名。 |
+| `S3_ACCESS_KEY` | (空) | S3 Access Key。IAMロール使用時は不要です。 |
+| `S3_SECRET_KEY` | (空) | S3 Secret Key。IAMロール使用時は不要です。 |
+| `S3_USE_AWS_MANAGED_IAM` | `false` | 明示的なaccess key/secret keyの代わりにAWS IAMロール(EC2インスタンスプロファイル、ECSタスクロール)を使用します。有効時、boto3がインスタンスメタデータから資格情報を自動検出します。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `AZURE_BLOB_ACCOUNT_NAME` | `difyai` | Azureストレージアカウント名。 |
+| `AZURE_BLOB_ACCOUNT_KEY` | `difyai` | Azureストレージアカウントキー。 |
+| `AZURE_BLOB_CONTAINER_NAME` | `difyai-container` | Azure Blobコンテナ名。 |
+| `AZURE_BLOB_ACCOUNT_URL` | `https://.blob.core.windows.net` | Azure BlobアカウントURL。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `GOOGLE_STORAGE_BUCKET_NAME` | (空) | Google Cloud Storageバケット名。 |
+| `GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64` | (空) | Base64エンコードされたサービスアカウントJSONキー。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ALIYUN_OSS_BUCKET_NAME` | (空) | OSSバケット名。 |
+| `ALIYUN_OSS_ACCESS_KEY` | (空) | OSS access key。 |
+| `ALIYUN_OSS_SECRET_KEY` | (空) | OSS secret key。 |
+| `ALIYUN_OSS_ENDPOINT` | `https://oss-ap-southeast-1-internal.aliyuncs.com` | OSSエンドポイント。[リージョンとエンドポイントのリファレンス](https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints)。 |
+| `ALIYUN_OSS_REGION` | `ap-southeast-1` | OSSリージョン。 |
+| `ALIYUN_OSS_AUTH_VERSION` | `v4` | OSS認証バージョン。 |
+| `ALIYUN_OSS_PATH` | (空) | オブジェクトパスプレフィックス。`/`で始めないでください。[参考ドキュメント](https://www.alibabacloud.com/help/en/oss/support/0016-00000005)。 |
+| `ALIYUN_CLOUDBOX_ID` | (空) | CloudBoxベースのOSSデプロイ用のCloudBox ID。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `TENCENT_COS_BUCKET_NAME` | (空) | COSバケット名。 |
+| `TENCENT_COS_SECRET_KEY` | (空) | COS secret key。 |
+| `TENCENT_COS_SECRET_ID` | (空) | COS secret ID。 |
+| `TENCENT_COS_REGION` | (空) | COSリージョン(例:`ap-guangzhou`)。[参考ドキュメント](https://cloud.tencent.com/document/product/436/6224)。 |
+| `TENCENT_COS_SCHEME` | (空) | COSアクセス用プロトコル(`http`または`https`)。 |
+| `TENCENT_COS_CUSTOM_DOMAIN` | (空) | COSアクセス用カスタムドメイン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OCI_ENDPOINT` | (空) | OCIエンドポイントURL。 |
+| `OCI_BUCKET_NAME` | (空) | OCIバケット名。 |
+| `OCI_ACCESS_KEY` | (空) | OCI access key。 |
+| `OCI_SECRET_KEY` | (空) | OCI secret key。 |
+| `OCI_REGION` | `us-ashburn-1` | OCIリージョン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `HUAWEI_OBS_BUCKET_NAME` | (空) | OBSバケット名。 |
+| `HUAWEI_OBS_ACCESS_KEY` | (空) | OBS access key。 |
+| `HUAWEI_OBS_SECRET_KEY` | (空) | OBS secret key。 |
+| `HUAWEI_OBS_SERVER` | (空) | OBSサーバーURL。[参考ドキュメント](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0500.html)。 |
+| `HUAWEI_OBS_PATH_STYLE` | `false` | 仮想ホスト型の代わりにパス型URLを使用。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `VOLCENGINE_TOS_BUCKET_NAME` | (空) | TOSバケット名。 |
+| `VOLCENGINE_TOS_ACCESS_KEY` | (空) | TOS access key。 |
+| `VOLCENGINE_TOS_SECRET_KEY` | (空) | TOS secret key。 |
+| `VOLCENGINE_TOS_ENDPOINT` | (空) | TOSエンドポイントURL。[参考ドキュメント](https://www.volcengine.com/docs/6349/107356)。 |
+| `VOLCENGINE_TOS_REGION` | (空) | TOSリージョン(例:`cn-guangzhou`)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `BAIDU_OBS_BUCKET_NAME` | (空) | Baidu OBSバケット名。 |
+| `BAIDU_OBS_ACCESS_KEY` | (空) | Baidu OBS access key。 |
+| `BAIDU_OBS_SECRET_KEY` | (空) | Baidu OBS secret key。 |
+| `BAIDU_OBS_ENDPOINT` | (空) | Baidu OBSサーバーURL。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SUPABASE_BUCKET_NAME` | (空) | Supabaseストレージバケット名。 |
+| `SUPABASE_API_KEY` | (空) | Supabase APIキー。 |
+| `SUPABASE_URL` | (空) | SupabaseサーバーURL。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CLICKZETTA_VOLUME_TYPE` | `user` | ボリュームタイプ。オプション:`user`(個人/小規模チーム)、`table`(エンタープライズマルチテナント)、`external`(データレイク統合)。 |
+| `CLICKZETTA_VOLUME_NAME` | (空) | 外部ボリューム名(`TYPE=external`の場合のみ必要)。 |
+| `CLICKZETTA_VOLUME_TABLE_PREFIX` | `dataset_` | テーブルボリュームのテーブルプレフィックス(`TYPE=table`の場合のみ使用)。 |
+| `CLICKZETTA_VOLUME_DIFY_PREFIX` | `dify_km` | 他のアプリから分離するためのDifyファイルディレクトリプレフィックス。 |
+
+ClickZetta Volumeは、ベクトルデータベースセクションで設定された`CLICKZETTA_*`接続パラメータを再利用します。
+
+
+
+
+#### アーカイブストレージ
+
+ワークフロー実行ログをアーカイブするための別のS3互換ストレージ。有料プランのリテンションシステムが保持期間を超えたワークフロー実行をJSONL形式でアーカイブするために使用されます。`BILLING_ENABLED=true`が必要です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ARCHIVE_STORAGE_ENABLED` | `false` | ワークフローログアーカイブ用のアーカイブストレージを有効化。 |
+| `ARCHIVE_STORAGE_ENDPOINT` | (空) | S3互換エンドポイントURL。 |
+| `ARCHIVE_STORAGE_ARCHIVE_BUCKET` | (空) | アーカイブされたワークフロー実行ログ用バケット。 |
+| `ARCHIVE_STORAGE_EXPORT_BUCKET` | (空) | ワークフロー実行エクスポート用バケット。 |
+| `ARCHIVE_STORAGE_ACCESS_KEY` | (空) | Access key。 |
+| `ARCHIVE_STORAGE_SECRET_KEY` | (空) | Secret key。 |
+| `ARCHIVE_STORAGE_REGION` | `auto` | ストレージリージョン。 |
+
+### ベクトルデータベース設定
+
+ナレッジベースのエンベディング保存と類似検索に使用するベクトルデータベースを設定します。各プロバイダーには独自の資格情報変数があります。使用するもののみを設定してください。
+
+### VECTOR_STORE
+
+デフォルト値:`weaviate`
+
+ベクトルデータベースバックエンドを選択します。データセットに既にインデックスがある場合、データセットに保存されたタイプがこの設定より優先されます。Docker Composeでプロバイダーを切り替える場合、`COMPOSE_PROFILES`がこの値に基づいて対応するコンテナを自動起動します。
+
+サポートされる値:`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_INDEX_NAME_PREFIX` | `Vector_index` | ベクトルデータベースのコレクション名に追加されるプレフィックス。複数のDifyデプロイでベクトルデータベースインスタンスを共有する場合に変更してください。 |
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `WEAVIATE_ENDPOINT` | `http://weaviate:8080` | Weaviate REST APIエンドポイント。 |
+| `WEAVIATE_API_KEY` | (空) | Weaviate認証用APIキー。 |
+| `WEAVIATE_GRPC_ENDPOINT` | `grpc://weaviate:50051` | 高性能バイナリプロトコル用の別のgRPCエンドポイント。バッチ操作が大幅に高速になります。未設定の場合、HTTPエンドポイントから推測されます。 |
+| `WEAVIATE_TOKENIZATION` | `word` | テキストフィールドのトークン化方法。オプション:`word`(空白と句読点で分割)、`whitespace`(空白のみで分割)、`character`(文字レベル、CJK言語に適しています)。 |
+
+
+
+
+
+seekdbはOceanBaseのライト版であり、同じ接続設定を共有します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OCEANBASE_VECTOR_HOST` | `oceanbase` | ホスト名またはIPアドレス。 |
+| `OCEANBASE_VECTOR_PORT` | `2881` | ポート番号。 |
+| `OCEANBASE_VECTOR_USER` | `root@test` | データベースユーザー名。 |
+| `OCEANBASE_VECTOR_PASSWORD` | `difyai123456` | データベースパスワード。 |
+| `OCEANBASE_VECTOR_DATABASE` | `test` | データベース名。 |
+| `OCEANBASE_CLUSTER_NAME` | `difyai` | クラスター名(Dockerデプロイのみ)。 |
+| `OCEANBASE_MEMORY_LIMIT` | `6G` | OceanBaseのメモリ制限(Dockerデプロイのみ)。 |
+| `SEEKDB_MEMORY_LIMIT` | `2G` | seekdbのメモリ制限(Dockerデプロイのみ)。 |
+| `OCEANBASE_ENABLE_HYBRID_SEARCH` | `false` | ベクトル検索と併用するBM25クエリ用の全文インデックスを有効化。OceanBase >= 4.3.5.1が必要です。有効化後にコレクションを再作成する必要があります。 |
+| `OCEANBASE_FULLTEXT_PARSER` | `ik` | 全文パーサー。組み込み:`ngram`、`beng`、`space`、`ngram2`、`ik`。外部(プラグインが必要):`japanese_ftparser`、`thai_ftparser`。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `QDRANT_URL` | `http://qdrant:6333` | Qdrantエンドポイントアドレス。 |
+| `QDRANT_API_KEY` | `difyai123456` | Qdrant用APIキー。 |
+| `QDRANT_CLIENT_TIMEOUT` | `20` | クライアントタイムアウト(秒)。 |
+| `QDRANT_GRPC_ENABLED` | `false` | gRPC通信を有効化。 |
+| `QDRANT_GRPC_PORT` | `6334` | gRPCポート。 |
+| `QDRANT_REPLICATION_FACTOR` | `1` | シャードごとのレプリカ数。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MILVUS_URI` | `http://host.docker.internal:19530` | Milvus URI。[Zilliz Cloud](https://docs.zilliz.com/docs/free-trials)の場合はPublic Endpointを使用してください。 |
+| `MILVUS_DATABASE` | (空) | データベース名。 |
+| `MILVUS_TOKEN` | (空) | 認証トークン。Zilliz Cloudの場合はAPI Keyを使用してください。 |
+| `MILVUS_USER` | (空) | ユーザー名。 |
+| `MILVUS_PASSWORD` | (空) | パスワード。 |
+| `MILVUS_ENABLE_HYBRID_SEARCH` | `false` | ベクトル類似検索と併用するBM25スパースインデックスによる全文検索を有効化。Milvus >= 2.5.0が必要です。この機能を有効にせずに作成されたコレクションは再作成が必要です。 |
+| `MILVUS_ANALYZER_PARAMS` | (空) | テキストフィールドのアナライザーパラメータ。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MYSCALE_HOST` | `myscale` | MyScaleホスト。 |
+| `MYSCALE_PORT` | `8123` | MyScaleポート。 |
+| `MYSCALE_USER` | `default` | ユーザー名。 |
+| `MYSCALE_PASSWORD` | (空) | パスワード。 |
+| `MYSCALE_DATABASE` | `dify` | データベース名。 |
+| `MYSCALE_FTS_PARAMS` | (空) | 全文検索パラメータ。[多言語サポートリファレンス](https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `COUCHBASE_CONNECTION_STRING` | `couchbase://couchbase-server` | Couchbaseクラスターの接続文字列。 |
+| `COUCHBASE_USER` | `Administrator` | ユーザー名。 |
+| `COUCHBASE_PASSWORD` | `password` | パスワード。 |
+| `COUCHBASE_BUCKET_NAME` | `Embeddings` | バケット名。 |
+| `COUCHBASE_SCOPE_NAME` | `_default` | スコープ名。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `HOLOGRES_HOST` | (空) | ホスト名。 |
+| `HOLOGRES_PORT` | `80` | ポート番号。 |
+| `HOLOGRES_DATABASE` | (空) | データベース名。 |
+| `HOLOGRES_ACCESS_KEY_ID` | (空) | Access Key ID(PGユーザー名として使用)。 |
+| `HOLOGRES_ACCESS_KEY_SECRET` | (空) | Access Key Secret(PGパスワードとして使用)。 |
+| `HOLOGRES_SCHEMA` | `public` | スキーマ名。 |
+| `HOLOGRES_TOKENIZER` | `jieba` | テキストフィールドのトークナイザー。 |
+| `HOLOGRES_DISTANCE_METHOD` | `Cosine` | 距離メソッド。 |
+| `HOLOGRES_BASE_QUANTIZATION_TYPE` | `rabitq` | 量子化タイプ。 |
+| `HOLOGRES_MAX_DEGREE` | `64` | HNSWの最大次数。 |
+| `HOLOGRES_EF_CONSTRUCTION` | `400` | HNSWのef_constructionパラメータ。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | 全文検索用のpg_bigm拡張を有効化。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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_HOST` | `pgvecto-rs` | ホスト名。 |
+| `PGVECTO_RS_PORT` | `5432` | ポート番号。 |
+| `PGVECTO_RS_USER` | `postgres` | ユーザー名。 |
+| `PGVECTO_RS_PASSWORD` | `difyai123456` | パスワード。 |
+| `PGVECTO_RS_DATABASE` | `dify` | データベース名。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ANALYTICDB_KEY_ID` | (空) | Aliyun access key ID。[AccessKeyの作成](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/support/create-an-accesskey-pair)。 |
+| `ANALYTICDB_KEY_SECRET` | (空) | Aliyun access key secret。 |
+| `ANALYTICDB_REGION_ID` | `cn-hangzhou` | リージョン識別子。 |
+| `ANALYTICDB_INSTANCE_ID` | (空) | インスタンスID(例:`gp-xxxxxx`)。[インスタンスの作成](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/create-an-instance-1)。 |
+| `ANALYTICDB_ACCOUNT` | (空) | アカウント名。[アカウントの作成](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/createa-a-privileged-account)。 |
+| `ANALYTICDB_PASSWORD` | (空) | アカウントパスワード。 |
+| `ANALYTICDB_NAMESPACE` | `dify` | 名前空間(スキーマ)。存在しない場合は自動作成されます。 |
+| `ANALYTICDB_NAMESPACE_PASSWORD` | (空) | 名前空間パスワード。新しい名前空間作成時に使用されます。 |
+| `ANALYTICDB_HOST` | (空) | 直接接続ホスト(APIベースのアクセスの代替)。 |
+| `ANALYTICDB_PORT` | `5432` | 直接接続ポート。 |
+| `ANALYTICDB_MIN_CONNECTION` | `1` | 最小プール接続数。 |
+| `ANALYTICDB_MAX_CONNECTION` | `5` | 最大プール接続数。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `TIDB_VECTOR_HOST` | `tidb` | ホスト名。 |
+| `TIDB_VECTOR_PORT` | `4000` | ポート番号。 |
+| `TIDB_VECTOR_USER` | (空) | ユーザー名。 |
+| `TIDB_VECTOR_PASSWORD` | (空) | パスワード。 |
+| `TIDB_VECTOR_DATABASE` | `dify` | データベース名。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MATRIXONE_HOST` | `matrixone` | ホスト名。 |
+| `MATRIXONE_PORT` | `6001` | ポート番号。 |
+| `MATRIXONE_USER` | `dump` | ユーザー名。 |
+| `MATRIXONE_PASSWORD` | `111` | パスワード。 |
+| `MATRIXONE_DATABASE` | `dify` | データベース名。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CHROMA_HOST` | `127.0.0.1` | Chromaサーバーホスト。 |
+| `CHROMA_PORT` | `8000` | Chromaサーバーポート。 |
+| `CHROMA_TENANT` | `default_tenant` | テナント名。 |
+| `CHROMA_DATABASE` | `default_database` | データベース名。 |
+| `CHROMA_AUTH_PROVIDER` | `chromadb.auth.token_authn.TokenAuthClientProvider` | 認証プロバイダークラス。 |
+| `CHROMA_AUTH_CREDENTIALS` | (空) | 認証資格情報。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ORACLE_USER` | `dify` | Oracleユーザー名。 |
+| `ORACLE_PASSWORD` | `dify` | Oracleパスワード。 |
+| `ORACLE_DSN` | `oracle:1521/FREEPDB1` | データソース名。 |
+| `ORACLE_CONFIG_DIR` | `/app/api/storage/wallet` | Oracle設定ディレクトリ。 |
+| `ORACLE_WALLET_LOCATION` | `/app/api/storage/wallet` | Autonomous DB用ウォレットの場所。 |
+| `ORACLE_WALLET_PASSWORD` | `dify` | ウォレットパスワード。 |
+| `ORACLE_IS_AUTONOMOUS` | `false` | Oracle Autonomous Databaseを使用するかどうか。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | HNSW Mパラメータ。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `RELYT_HOST` | `db` | ホスト名。 |
+| `RELYT_PORT` | `5432` | ポート番号。 |
+| `RELYT_USER` | `postgres` | ユーザー名。 |
+| `RELYT_PASSWORD` | `difyai123456` | パスワード。 |
+| `RELYT_DATABASE` | `postgres` | データベース名。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OPENSEARCH_HOST` | `opensearch` | ホスト名。 |
+| `OPENSEARCH_PORT` | `9200` | ポート番号。 |
+| `OPENSEARCH_SECURE` | `true` | HTTPSを使用。 |
+| `OPENSEARCH_VERIFY_CERTS` | `true` | SSL証明書を検証。 |
+| `OPENSEARCH_AUTH_METHOD` | `basic` | `basic`はユーザー名/パスワードを使用。`aws_managed_iam`はBoto3資格情報によるAWS SigV4リクエスト署名を使用(AWS Managed OpenSearchまたはServerless用)。 |
+| `OPENSEARCH_USER` | `admin` | ユーザー名。`basic`認証でのみ使用。 |
+| `OPENSEARCH_PASSWORD` | `admin` | パスワード。`basic`認証でのみ使用。 |
+| `OPENSEARCH_AWS_REGION` | `ap-southeast-1` | AWSリージョン。`aws_managed_iam`認証でのみ使用。 |
+| `OPENSEARCH_AWS_SERVICE` | `aoss` | AWSサービスタイプ:`es`(Managed Cluster)または`aoss`(OpenSearch Serverless)。`aws_managed_iam`認証でのみ使用。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `TENCENT_VECTOR_DB_URL` | `http://127.0.0.1` | アクセスアドレス。[コンソール](https://console.cloud.tencent.com/vdb)。 |
+| `TENCENT_VECTOR_DB_API_KEY` | `dify` | APIキー。[キー管理](https://cloud.tencent.com/document/product/1709/95108)。 |
+| `TENCENT_VECTOR_DB_TIMEOUT` | `30` | リクエストタイムアウト(秒)。 |
+| `TENCENT_VECTOR_DB_USERNAME` | `dify` | アカウント名。[アカウント管理](https://cloud.tencent.com/document/product/1709/115833)。 |
+| `TENCENT_VECTOR_DB_DATABASE` | `dify` | データベース名。[データベースの作成](https://cloud.tencent.com/document/product/1709/95822)。 |
+| `TENCENT_VECTOR_DB_SHARD` | `1` | シャード数。 |
+| `TENCENT_VECTOR_DB_REPLICAS` | `2` | レプリカ数。 |
+| `TENCENT_VECTOR_DB_ENABLE_HYBRID_SEARCH` | `false` | ハイブリッド検索を有効化。[スパースベクトルドキュメント](https://cloud.tencent.com/document/product/1709/110110)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ELASTICSEARCH_HOST` | `0.0.0.0` | ホスト名。 |
+| `ELASTICSEARCH_PORT` | `9200` | ポート番号。 |
+| `ELASTICSEARCH_USERNAME` | `elastic` | ユーザー名。 |
+| `ELASTICSEARCH_PASSWORD` | `elastic` | パスワード。 |
+| `ELASTICSEARCH_USE_CLOUD` | `false` | Elastic Cloudモードに切り替え。`true`の場合、host/port/username/passwordの代わりに`ELASTICSEARCH_CLOUD_URL`と`ELASTICSEARCH_API_KEY`を使用します。 |
+| `ELASTICSEARCH_CLOUD_URL` | (空) | Elastic CloudエンドポイントURL。`ELASTICSEARCH_USE_CLOUD=true`の場合に必要です。 |
+| `ELASTICSEARCH_API_KEY` | (空) | Elastic Cloud APIキー。`ELASTICSEARCH_USE_CLOUD=true`の場合に必要です。 |
+| `ELASTICSEARCH_VERIFY_CERTS` | `false` | SSL証明書を検証。 |
+| `ELASTICSEARCH_CA_CERTS` | (空) | CA証明書のパス。 |
+| `ELASTICSEARCH_REQUEST_TIMEOUT` | `100000` | リクエストタイムアウト(ミリ秒)。 |
+| `ELASTICSEARCH_RETRY_ON_TIMEOUT` | `true` | タイムアウト時にリトライ。 |
+| `ELASTICSEARCH_MAX_RETRIES` | `10` | 最大リトライ回数。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `BAIDU_VECTOR_DB_ENDPOINT` | `http://127.0.0.1:5287` | エンドポイントURL。 |
+| `BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS` | `30000` | 接続タイムアウト(ミリ秒)。 |
+| `BAIDU_VECTOR_DB_ACCOUNT` | `root` | アカウント名。 |
+| `BAIDU_VECTOR_DB_API_KEY` | `dify` | APIキー。 |
+| `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` | 転置インデックスパーサーモード。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `VIKINGDB_ACCESS_KEY` | (空) | Access key。 |
+| `VIKINGDB_SECRET_KEY` | (空) | Secret key。 |
+| `VIKINGDB_REGION` | `cn-shanghai` | リージョン。 |
+| `VIKINGDB_HOST` | `api-vikingdb.xxx.volces.com` | APIホスト。リージョン固有のエンドポイントに置き換えてください。 |
+| `VIKINGDB_SCHEMA` | `http` | プロトコルスキーム(`http`または`https`)。 |
+| `VIKINGDB_CONNECTION_TIMEOUT` | `30` | 接続タイムアウト(秒)。 |
+| `VIKINGDB_SOCKET_TIMEOUT` | `30` | Socketタイムアウト(秒)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `LINDORM_URL` | `http://localhost:30070` | Lindorm検索エンジンURL。[コンソール](https://lindorm.console.aliyun.com/)。 |
+| `LINDORM_USERNAME` | `admin` | ユーザー名。 |
+| `LINDORM_PASSWORD` | `admin` | パスワード。 |
+| `LINDORM_USING_UGC` | `true` | UGCモードを使用。 |
+| `LINDORM_QUERY_TIMEOUT` | `1` | クエリタイムアウト(秒)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | PQアクセラレーションを有効化。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `HUAWEI_CLOUD_HOSTS` | `https://127.0.0.1:9200` | クラスターエンドポイントURL。 |
+| `HUAWEI_CLOUD_USER` | `admin` | ユーザー名。 |
+| `HUAWEI_CLOUD_PASSWORD` | `admin` | パスワード。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `UPSTASH_VECTOR_URL` | (空) | Upstash VectorエンドポイントURL。 |
+| `UPSTASH_VECTOR_TOKEN` | (空) | Upstash Vector APIトークン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `TABLESTORE_ENDPOINT` | `https://instance-name.cn-hangzhou.ots.aliyuncs.com` | エンドポイントアドレス。`instance-name`をインスタンス名に置き換えてください。 |
+| `TABLESTORE_INSTANCE_NAME` | (空) | インスタンス名。 |
+| `TABLESTORE_ACCESS_KEY_ID` | (空) | Access Key ID。 |
+| `TABLESTORE_ACCESS_KEY_SECRET` | (空) | Access Key Secret。 |
+| `TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE` | `false` | 全文BM25スコアを正規化。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | 距離関数。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `IRIS_HOST` | `iris` | ホスト名。 |
+| `IRIS_SUPER_SERVER_PORT` | `1972` | スーパーサーバーポート。 |
+| `IRIS_USER` | `_SYSTEM` | ユーザー名。 |
+| `IRIS_PASSWORD` | `Dify@1234` | パスワード。 |
+| `IRIS_DATABASE` | `USER` | データベース名。 |
+| `IRIS_SCHEMA` | `dify` | スキーマ名。 |
+| `IRIS_CONNECTION_URL` | (空) | 完全な接続URL(個別設定をオーバーライド)。 |
+| `IRIS_MIN_CONNECTION` | `1` | 最小プール接続数。 |
+| `IRIS_MAX_CONNECTION` | `3` | 最大プール接続数。 |
+| `IRIS_TEXT_INDEX` | `true` | テキストインデックスを有効化。 |
+| `IRIS_TEXT_INDEX_LANGUAGE` | `en` | テキストインデックスの言語。 |
+
+
+
+
+### ナレッジベース設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `UPLOAD_FILE_SIZE_LIMIT` | `15` | ドキュメントアップロード(PDF、Wordドキュメントなど)の最大ファイルサイズ(MB)。超過するとユーザーに「ファイルが大きすぎます」エラーが表示されます。画像、動画、音声には適用されません。それらには下記の別の制限があります。 |
+| `UPLOAD_FILE_BATCH_LIMIT` | `5` | フロントエンドがアップロードバッチごとに許可する最大ファイル数。 |
+| `UPLOAD_FILE_EXTENSION_BLACKLIST` | (空) | アップロードできないファイル拡張子のセキュリティブロックリスト。カンマ区切り、小文字、ドットなし。例:`exe,bat,cmd,com,scr,vbs,ps1,msi,dll`。空の場合はすべてのタイプを許可します。 |
+| `SINGLE_CHUNK_ATTACHMENT_LIMIT` | `10` | 単一のナレッジベースセグメント(チャンク)に埋め込める最大画像数。 |
+| `IMAGE_FILE_BATCH_LIMIT` | `10` | アップロードバッチごとの最大画像ファイル数。 |
+| `ATTACHMENT_IMAGE_FILE_SIZE_LIMIT` | `2` | ナレッジベースインデックス作成時に外部URLから取得する画像の最大サイズ(MB)。これを超える画像はスキップされます。直接アップロードに適用される`UPLOAD_IMAGE_FILE_SIZE_LIMIT`とは異なります。 |
+| `ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT` | `60` | ナレッジベースインデックス作成時に外部URLから画像をダウンロードする際のタイムアウト(秒)。低速または応答しない画像サーバーはこのタイムアウト後に放棄されます。 |
+| `ETL_TYPE` | `dify` | ドキュメント抽出ライブラリ。`dify`はtxt、md、pdf、html、xlsx、docx、csvをサポートします。`Unstructured`はdoc、msg、eml、ppt、pptx、xml、epubのサポートを追加します(`UNSTRUCTURED_API_URL`が必要)。 |
+| `UNSTRUCTURED_API_URL` | (空) | Unstructured.io APIエンドポイント。`ETL_TYPE`が`Unstructured`の場合に必要です。`.ppt`ファイルのサポートにも必要です。例:`http://unstructured:8000/general/v0/general`。 |
+| `UNSTRUCTURED_API_KEY` | (空) | Unstructured.io認証用APIキー。 |
+| `SCARF_NO_ANALYTICS` | `true` | Unstructuredライブラリのテレメトリ/分析収集を無効化。 |
+| `TOP_K_MAX_VALUE` | `10` | ナレッジベース検索で`top_k`パラメータ(検索ごとの結果返却数)にユーザーが設定できる最大値。 |
+| `DATASET_MAX_SEGMENTS_PER_REQUEST` | `0` | データセットAPIリクエストごとの最大セグメント数。`0`は無制限を意味します。 |
+
+#### アノテーションインポート
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ANNOTATION_IMPORT_FILE_SIZE_LIMIT` | `2` | アノテーションインポート用CSVファイルの最大サイズ(MB)。超過するとHTTP 413が返されます。 |
+| `ANNOTATION_IMPORT_MAX_RECORDS` | `10000` | アノテーションインポートごとの最大レコード数。レコードが多いファイルはバッチに分割する必要があります。 |
+| `ANNOTATION_IMPORT_MIN_RECORDS` | `1` | アノテーションインポートごとに必要な最小有効レコード数。 |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE` | `5` | ワークスペースごとの1分あたりの最大アノテーションインポートリクエスト数。超過するとHTTP 429が返されます。 |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR` | `20` | ワークスペースごとの1時間あたりの最大アノテーションインポートリクエスト数。 |
+| `ANNOTATION_IMPORT_MAX_CONCURRENT` | `5` | ワークスペースごとの最大同時アノテーションインポートタスク数。古いタスクは2分後に自動クリーンアップされます。 |
+
+### モデル設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PROMPT_GENERATION_MAX_TOKENS` | `512` | システムがLLMを使用してプロンプトを自動生成する際の最大トークン数。APIクォータを無駄にする暴走生成を防止します。 |
+| `CODE_GENERATION_MAX_TOKENS` | `1024` | システムがLLMを使用してコードを自動生成する際の最大トークン数。 |
+| `PLUGIN_BASED_TOKEN_COUNTING_ENABLED` | `false` | 正確な使用量追跡のためにプラグインベースのトークンカウントを使用。無効の場合、トークンカウントは0を返します(高速ですがコスト追跡の精度が低下します)。 |
+
+### マルチモーダル設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MULTIMODAL_SEND_FORMAT` | `base64` | マルチモーダルLLMにファイルを送信する方法。`base64`はリクエストにファイルデータを埋め込みます(互換性が高く、オフラインで動作、ペイロードが大きい)。`url`は署名付きURLを送信してモデルに取得させます(高速、リクエストが小さいですが、モデルが`FILES_URL`にアクセスできる必要があります)。 |
+| `UPLOAD_IMAGE_FILE_SIZE_LIMIT` | `10` | 直接アップロードの最大画像ファイルサイズ(MB)(jpg、png、webp、gif、svg)。 |
+| `UPLOAD_VIDEO_FILE_SIZE_LIMIT` | `100` | 直接アップロードの最大動画ファイルサイズ(MB)(mp4、mov、mpeg、webm)。 |
+| `UPLOAD_AUDIO_FILE_SIZE_LIMIT` | `50` | 直接アップロードの最大音声ファイルサイズ(MB)(mp3、m4a、wav、amr、mpga)。 |
+
-このドキュメントは英語版のみです。[英語ドキュメント](/en/self-host/configuration/environments)を参照してください。
-
\ No newline at end of file
+すべてのアップロードサイズ制限は`NGINX_CLIENT_MAX_BODY_SIZE`(デフォルト`100M`)によっても制限されます。アップロード制限を100 MBを超えて増加する場合は、`NGINX_CLIENT_MAX_BODY_SIZE`も同様に増加してください。そうしないと、Nginxが413エラーでアップロードを拒否します。
+
+
+### Sentry設定
+
+Sentryはエラー追跡とパフォーマンス監視を提供します。各サービスにはエラーレポートを分離するための独自のDSNがあります。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SENTRY_DSN` | (空) | サービス間で共有されるSentry DSN。 |
+| `API_SENTRY_DSN` | (空) | APIサービス用のSentry DSN。設定されている場合、`SENTRY_DSN`をオーバーライドします。空の場合、バックエンドのSentryが無効になります。 |
+| `API_SENTRY_TRACES_SAMPLE_RATE` | `1.0` | パフォーマンストレーシングに含めるリクエストの割合(0.01 = 1%、1.0 = 100%)。トレースはサービス間のリクエストフローを追跡します。 |
+| `API_SENTRY_PROFILES_SAMPLE_RATE` | `1.0` | CPU/メモリプロファイリングに含めるリクエストの割合(0.01 = 1%)。プロファイルはコード内で時間が費やされている箇所を表示します。 |
+| `WEB_SENTRY_DSN` | (空) | Webフロントエンド(Next.js)用のSentry DSN。フロントエンドのみ。 |
+| `PLUGIN_SENTRY_ENABLED` | `false` | プラグインデーモンサービスのSentryを有効化。 |
+| `PLUGIN_SENTRY_DSN` | (空) | プラグインデーモン用のSentry DSN。 |
+
+### Notion連携設定
+
+ナレッジベースデータソースとしてDifyをNotionに接続します。[https://www.notion.so/my-integrations](https://www.notion.so/my-integrations)で連携資格情報を取得してください。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `NOTION_INTEGRATION_TYPE` | `public` | `public`は標準OAuth 2.0を使用します(HTTPSリダイレクトURLが必要、CLIENT_ID + CLIENT_SECRETが必要)。`internal`は直接連携トークンを使用します(HTTPで動作)。ローカルデプロイには`internal`を使用してください。 |
+| `NOTION_CLIENT_SECRET` | (空) | OAuthクライアントシークレット。`public`連携に必要です。 |
+| `NOTION_CLIENT_ID` | (空) | OAuthクライアントID。`public`連携に必要です。 |
+| `NOTION_INTERNAL_SECRET` | (空) | Notionからの直接連携トークン。`internal`連携に必要です。 |
+
+### メール設定
+
+Difyはアカウント招待、パスワードリセット、ログインコード、人間の入力ノード通知のメールを送信します。サポートされる3つのプロバイダーのいずれかを設定してください。メールリンクには`CONSOLE_WEB_URL`の設定が必要です。[共通変数](#console_web_url)を参照してください。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MAIL_TYPE` | `resend` | メールプロバイダー:`resend`、`smtp`、または`sendgrid`。 |
+| `MAIL_DEFAULT_SEND_FROM` | (空) | すべての送信メールのデフォルト「From」アドレス。必須です。 |
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `RESEND_API_URL` | `https://api.resend.com` | Resend APIエンドポイント。セルフホストResendまたはプロキシ用にオーバーライドします。 |
+| `RESEND_API_KEY` | (空) | Resend APIキー。`MAIL_TYPE=resend`の場合に必要です。 |
+
+
+
+
+
+3つのTLSモード:暗黙的TLS(`SMTP_USE_TLS=true`、`SMTP_OPPORTUNISTIC_TLS=false`、ポート465)、STARTTLS(`SMTP_USE_TLS=true`、`SMTP_OPPORTUNISTIC_TLS=true`、ポート587)、またはプレーン(`SMTP_USE_TLS=false`、ポート25)。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SMTP_SERVER` | (空) | SMTPサーバーアドレス。 |
+| `SMTP_PORT` | `465` | SMTPサーバーポート。STARTTLSモードの場合は`587`を使用してください。 |
+| `SMTP_USERNAME` | (空) | SMTPユーザー名。IPホワイトリストされたサーバーでは空にできます。 |
+| `SMTP_PASSWORD` | (空) | SMTPパスワード。IPホワイトリストされたサーバーでは空にできます。 |
+| `SMTP_USE_TLS` | `true` | TLSを有効化。`true`で`SMTP_OPPORTUNISTIC_TLS=false`の場合、暗黙的TLS(`SMTP_SSL`)を使用します。 |
+| `SMTP_OPPORTUNISTIC_TLS` | `false` | 暗黙的TLSの代わりにSTARTTLS(明示的TLS)を使用。`SMTP_USE_TLS=true`と併用する必要があります。 |
+| `SMTP_LOCAL_HOSTNAME` | (空) | SMTP HELO/EHLOで送信されるホスト名をオーバーライド。SMTPサーバーがコンテナホスト名を拒否する場合にDockerで必要です(Google Workspace、Microsoft 365でよく発生)。ドメインに設定してください(例:`mail.yourdomain.com`)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SENDGRID_API_KEY` | (空) | SendGrid APIキー。`MAIL_TYPE=sendgrid`の場合に必要です。 |
+
+詳細については、[SendGridドキュメント](https://sendgrid.com/docs/for-developers/sending-email/)を参照してください。
+
+
+
+
+### その他の設定
+
+#### インデックス作成
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH` | `4000` | ナレッジベース用にドキュメントをチャンク化する際のテキストセグメントごとの最大トークン長。大きい値はチャンクあたりのコンテキストを多く保持し、小さい値はより細かい粒度を提供します。 |
+
+#### トークンと招待
+
+すべてのトークン有効期限変数は、Redisに保存されるワンタイムトークンの有効期間を制御します。期限切れ後、ユーザーは新しいトークンをリクエストする必要があります。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `INVITE_EXPIRY_HOURS` | `72` | ワークスペース招待リンクの有効期間(時間)。 |
+| `RESET_PASSWORD_TOKEN_EXPIRY_MINUTES` | `5` | パスワードリセットトークンの有効期間(分)。 |
+| `EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES` | `5` | メール登録トークンの有効期間(分)。 |
+| `CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES` | `5` | メール変更トークンの有効期間(分)。 |
+| `OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES` | `5` | ワークスペースオーナー移譲トークンの有効期間(分)。 |
+
+#### コード実行サンドボックス
+
+サンドボックスは、Python、JavaScript、Jinja2コードノードを分離して実行する独立したサービスです。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CODE_EXECUTION_ENDPOINT` | `http://sandbox:8194` | サンドボックスサービスエンドポイント。 |
+| `CODE_EXECUTION_API_KEY` | `dify-sandbox` | サンドボックス認証用APIキー。サンドボックスサービスの`SANDBOX_API_KEY`と一致する必要があります。 |
+| `CODE_EXECUTION_SSL_VERIFY` | `true` | サンドボックス接続のSSLを検証。自己署名証明書での開発時は無効化してください。 |
+| `CODE_EXECUTION_CONNECT_TIMEOUT` | `10` | 接続タイムアウト(秒)。 |
+| `CODE_EXECUTION_READ_TIMEOUT` | `60` | 読み取りタイムアウト(秒)。 |
+| `CODE_EXECUTION_WRITE_TIMEOUT` | `10` | 書き込みタイムアウト(秒)。 |
+| `CODE_EXECUTION_POOL_MAX_CONNECTIONS` | `100` | サンドボックスサービスへの最大同時HTTP接続数。 |
+| `CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | サンドボックスコネクションプールで維持する最大アイドル接続数。 |
+| `CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY` | `5.0` | アイドルなサンドボックス接続が閉じられるまでの秒数。 |
+| `CODE_MAX_NUMBER` | `9223372036854775807` | コードノード出力で許可される最大数値(最大64ビット符号付き整数)。 |
+| `CODE_MIN_NUMBER` | `-9223372036854775808` | コードノード出力で許可される最小数値(最小64ビット符号付き整数)。 |
+| `CODE_MAX_STRING_LENGTH` | `400000` | コードノード出力の最大文字列長。無制限の文字列生成によるメモリ枯渇を防止します。 |
+| `CODE_MAX_DEPTH` | `5` | 出力データ構造の最大ネスト深度。 |
+| `CODE_MAX_PRECISION` | `20` | 出力の浮動小数点数の最大小数桁数。 |
+| `CODE_MAX_STRING_ARRAY_LENGTH` | `30` | 文字列配列出力の最大要素数。 |
+| `CODE_MAX_OBJECT_ARRAY_LENGTH` | `30` | オブジェクト配列出力の最大要素数。 |
+| `CODE_MAX_NUMBER_ARRAY_LENGTH` | `1000` | 数値配列出力の最大要素数。 |
+| `TEMPLATE_TRANSFORM_MAX_LENGTH` | `400000` | テンプレート変換ノード出力の最大文字数。 |
+
+#### ワークフローランタイム
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `WORKFLOW_MAX_EXECUTION_STEPS` | `500` | ワークフロー実行ごとの最大ノード実行回数。超過するとワークフローが終了されます。 |
+| `WORKFLOW_MAX_EXECUTION_TIME` | `1200` | ワークフロー実行ごとの最大実行時間(秒)。超過するとワークフローが終了されます。 |
+| `WORKFLOW_CALL_MAX_DEPTH` | `5` | ネストされたワークフロー呼び出しの最大深度。無限再帰を防止します。 |
+| `MAX_VARIABLE_SIZE` | `204800` | 単一のワークフロー変数の最大サイズ(バイト、200 KB)。 |
+| `WORKFLOW_FILE_UPLOAD_LIMIT` | `10` | 単一のワークフロー実行でアップロードできる最大ファイル数。 |
+| `WORKFLOW_NODE_EXECUTION_STORAGE` | `rdbms` | ワークフローノード実行レコードの保存先。`rdbms`はすべてをデータベースに保存します。`hybrid`は新しいデータをオブジェクトストレージに保存し、両方から読み取ります。 |
+| `DSL_EXPORT_ENCRYPT_DATASET_ID` | `true` | DSLファイルエクスポート時にデータセットIDを暗号化。クロス環境インポートを容易にするためにプレーンIDをエクスポートする場合は`false`に設定してください。 |
+
+#### ワークフローストレージリポジトリ
+
+ワークフロー実行データを処理するバックエンド実装を選択します。デフォルトの`SQLAlchemy`リポジトリはすべてをデータベースに保存します。代替実装(例:Celery、Logstore)は異なるストレージ戦略に使用できます。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CORE_WORKFLOW_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository` | ワークフロー実行レコードのリポジトリ実装。 |
+| `CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository` | ワークフローノード実行レコードのリポジトリ実装。 |
+| `API_WORKFLOW_RUN_REPOSITORY` | `repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository` | ワークフロー実行API操作のサービスレイヤーリポジトリ。 |
+| `API_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository` | ワークフローノード実行API操作のサービスレイヤーリポジトリ。 |
+| `LOOP_NODE_MAX_COUNT` | `100` | ループノードの最大反復回数。無限ループを防止します。 |
+| `MAX_PARALLEL_LIMIT` | `10` | ワークフロー内の最大並列ブランチ数。 |
+
+#### GraphEngineワーカープール
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `GRAPH_ENGINE_MIN_WORKERS` | `1` | GraphEngineインスタンスごとの最小ワーカー数。 |
+| `GRAPH_ENGINE_MAX_WORKERS` | `10` | GraphEngineインスタンスごとの最大ワーカー数。 |
+| `GRAPH_ENGINE_SCALE_UP_THRESHOLD` | `3` | 追加ワーカーの生成をトリガーするキュー深度。 |
+| `GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME` | `5.0` | 余剰ワーカーが削除されるまでのアイドル時間(秒)。 |
+
+#### ワークフローログクリーンアップ
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `WORKFLOW_LOG_CLEANUP_ENABLED` | `false` | 毎日午前2:00にワークフロー実行ログの自動クリーンアップを有効化。 |
+| `WORKFLOW_LOG_RETENTION_DAYS` | `30` | クリーンアップ前にワークフローログを保持する日数。 |
+| `WORKFLOW_LOG_CLEANUP_BATCH_SIZE` | `100` | クリーンアップバッチごとに処理するログエントリ数。システムパフォーマンスに基づいて調整してください。 |
+| `WORKFLOW_LOG_CLEANUP_SPECIFIC_WORKFLOW_IDS` | (空) | クリーンアップを制限するワークフローIDのカンマ区切りリスト。空の場合、すべてのワークフローログがクリーンアップされます。 |
+
+#### HTTPリクエストノード
+
+ワークフローで外部APIを呼び出すために使用されるHTTPリクエストノードの設定です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `HTTP_REQUEST_NODE_MAX_TEXT_SIZE` | `1048576` | テキストレスポンスの最大サイズ(バイト、1 MB)。これを超えるレスポンスは切り詰められます。 |
+| `HTTP_REQUEST_NODE_MAX_BINARY_SIZE` | `10485760` | バイナリレスポンスの最大サイズ(バイト、10 MB)。 |
+| `HTTP_REQUEST_NODE_SSL_VERIFY` | `true` | SSL証明書を検証。自己署名証明書でのテスト時に無効化します。 |
+| `HTTP_REQUEST_MAX_CONNECT_TIMEOUT` | `10` | ワークフローエディターでユーザーが設定できる最大接続タイムアウト(秒)。ノードごとのタイムアウトはこれを超えられません。 |
+| `HTTP_REQUEST_MAX_READ_TIMEOUT` | `600` | 読み取りタイムアウトの上限(秒)。 |
+| `HTTP_REQUEST_MAX_WRITE_TIMEOUT` | `600` | 書き込みタイムアウトの上限(秒)。 |
+
+#### Webhook
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `WEBHOOK_REQUEST_BODY_MAX_SIZE` | `10485760` | Webhookペイロードの最大サイズ(バイト、10 MB)。これを超えるペイロードは413エラーで拒否されます。 |
+
+#### SSRF保護
+
+DifyからのすべてのアウトバウンドHTTPリクエスト(HTTPノード、画像ダウンロードなど)は、内部/プライベートIP範囲へのリクエストをブロックするプロキシを経由し、Server-Side Request Forgery(SSRF)攻撃を防止します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SSRF_PROXY_HTTP_URL` | `http://ssrf_proxy:3128` | HTTPリクエスト用SSRFプロキシURL。 |
+| `SSRF_PROXY_HTTPS_URL` | `http://ssrf_proxy:3128` | HTTPSリクエスト用SSRFプロキシURL。 |
+| `SSRF_POOL_MAX_CONNECTIONS` | `100` | SSRF HTTPクライアントプール内の最大同時接続数。 |
+| `SSRF_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | SSRFプールで維持する最大アイドル接続数。 |
+| `SSRF_POOL_KEEPALIVE_EXPIRY` | `5.0` | アイドルなSSRF接続が閉じられるまでの秒数。 |
+| `RESPECT_XFORWARD_HEADERS_ENABLED` | `false` | リバースプロキシからのX-Forwarded-For/Proto/Portヘッダーを信頼。単一の信頼されたリバースプロキシの背後でのみ有効化してください。それ以外ではIPスプーフィングが可能になります。 |
+
+#### エージェント設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `MAX_TOOLS_NUM` | `10` | エージェントが同時に使用できる最大ツール数。 |
+| `MAX_ITERATIONS_NUM` | `99` | エージェント実行ごとの最大推論イテレーション数。無限エージェントループを防止します。 |
+
+## Webフロントエンドサービス
+
+これらの変数はNext.js Webフロントエンドコンテナのみで使用されます。Pythonバックエンドには影響しません。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `TEXT_GENERATION_TIMEOUT_MS` | `60000` | ストリーミングテキスト生成UIのフロントエンドタイムアウト。ストリームがこの時間以上停止した場合、UIはレンダリングを一時停止します。 |
+| `ALLOW_UNSAFE_DATA_SCHEME` | `false` | `data:`スキームのURLレンダリングを許可。セキュリティのためデフォルトでは無効です。 |
+| `MAX_TREE_DEPTH` | `50` | ワークフローエディターUIの最大ノードツリー深度。 |
+
+## データベースサービス
+
+Docker Composeでデータベースコンテナを直接設定します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PGDATA` | `/var/lib/postgresql/data/pgdata` | コンテナ内のPostgreSQLデータディレクトリ。 |
+| `MYSQL_HOST_VOLUME` | `./volumes/mysql/data` | MySQLデータボリュームとしてマウントされるホストパス。 |
+
+## サンドボックスサービス
+
+サンドボックスは、コードノード(Python、JavaScript、Jinja2)を実行するための隔離されたサービスです。セキュリティのためにネットワークアクセスを無効化できます。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SANDBOX_API_KEY` | `dify-sandbox` | サンドボックス認証用APIキー。APIサービスの`CODE_EXECUTION_API_KEY`と一致する必要があります。 |
+| `SANDBOX_GIN_MODE` | `release` | サンドボックスサービスモード:`release`または`debug`。 |
+| `SANDBOX_WORKER_TIMEOUT` | `15` | 単一コード実行の最大実行時間(秒)。 |
+| `SANDBOX_ENABLE_NETWORK` | `true` | コードからのアウトバウンドHTTPリクエストを許可。コードノードが外部サービスにアクセスすることを防止するには無効化してください。 |
+| `SANDBOX_HTTP_PROXY` | `http://ssrf_proxy:3128` | ネットワーク有効時のSSRF保護用HTTPプロキシ。 |
+| `SANDBOX_HTTPS_PROXY` | `http://ssrf_proxy:3128` | SSRF保護用HTTPSプロキシ。 |
+| `SANDBOX_PORT` | `8194` | サンドボックスサービスのポート。 |
+
+## Nginxリバースプロキシ
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `NGINX_SERVER_NAME` | `_` | Nginxサーバー名。`_`は任意のホスト名に一致します。 |
+| `NGINX_HTTPS_ENABLED` | `false` | HTTPSを有効化。`true`の場合、SSL証明書と鍵を`./nginx/ssl/`に配置してください。 |
+| `NGINX_PORT` | `80` | HTTPポート。 |
+| `NGINX_SSL_PORT` | `443` | HTTPSポート(`NGINX_HTTPS_ENABLED=true`の場合のみ使用)。 |
+| `NGINX_SSL_CERT_FILENAME` | `dify.crt` | `./nginx/ssl/`内のSSL証明書ファイル名。 |
+| `NGINX_SSL_CERT_KEY_FILENAME` | `dify.key` | `./nginx/ssl/`内のSSL秘密鍵ファイル名。 |
+| `NGINX_SSL_PROTOCOLS` | `TLSv1.2 TLSv1.3` | 許可されるTLSプロトコルバージョン。 |
+| `NGINX_WORKER_PROCESSES` | `auto` | Nginxワーカープロセス数。`auto`はCPUコア数に一致します。 |
+| `NGINX_CLIENT_MAX_BODY_SIZE` | `100M` | 最大リクエストボディサイズ。プロキシレベルのファイルアップロード制限に影響します。 |
+| `NGINX_KEEPALIVE_TIMEOUT` | `65` | キープアライブタイムアウト(秒)。 |
+| `NGINX_PROXY_READ_TIMEOUT` | `3600s` | プロキシ読み取りタイムアウト。長時間のSSEストリームをサポートするため高く設定(1時間)されています。 |
+| `NGINX_PROXY_SEND_TIMEOUT` | `3600s` | プロキシ送信タイムアウト。 |
+| `NGINX_ENABLE_CERTBOT_CHALLENGE` | `false` | `/.well-known/acme-challenge/`でLet's Encrypt ACMEチャレンジリクエストを受け入れます。自動証明書更新のために有効化してください。 |
+
+
+HTTPSを有効化した後、[共通変数](#共通変数)のURL変数(例:`CONSOLE_API_URL`、`CONSOLE_WEB_URL`)も`https://`を使用するように更新してください。
+
+
+#### Certbot設定
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CERTBOT_EMAIL` | (空) | Let's Encryptの証明書通知に必要なメールアドレス。 |
+| `CERTBOT_DOMAIN` | (空) | SSL証明書のドメイン名。 |
+| `CERTBOT_OPTIONS` | (空) | 追加のcertbot CLIオプション(例:`--force-renewal`、`--dry-run`)。 |
+
+## SSRFプロキシ
+
+内部/プライベートネットワークへのリクエストをブロックするSquidベースのSSRFプロキシコンテナの設定です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | デフォルト書き込みタイムアウト(秒)。 |
+
+## Docker Compose
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `COMPOSE_PROFILES` | `${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}` | データベースとベクトルストアの選択に基づいて、起動するサービスコンテナを自動選択します。例えば、`DB_TYPE=mysql`を設定するとPostgreSQLの代わりにMySQLが起動します。 |
+| `EXPOSE_NGINX_PORT` | `80` | Nginx HTTPにマッピングされるホストポート。 |
+| `EXPOSE_NGINX_SSL_PORT` | `443` | Nginx HTTPSにマッピングされるホストポート。 |
+
+## モデルプロバイダーとツールの表示順設定
+
+アプリインターフェースで利用可能なツールとモデルプロバイダーおよびその表示順をカスタマイズします。カンマ区切りの値を使用し、項目間にスペースを入れないでください。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `POSITION_TOOL_PINS` | (空) | 特定のツールをリストの先頭に固定。例:`bing,google`。 |
+| `POSITION_TOOL_INCLUDES` | (空) | リストされたツールのみ表示。未設定の場合、すべてのツールが利用可能です。 |
+| `POSITION_TOOL_EXCLUDES` | (空) | 特定のツールを非表示(固定されたツールには影響しません)。 |
+| `POSITION_PROVIDER_PINS` | (空) | 特定のモデルプロバイダーを先頭に固定。例:`openai,anthropic`。 |
+| `POSITION_PROVIDER_INCLUDES` | (空) | リストされたプロバイダーのみ表示。未設定の場合、すべてのプロバイダーが利用可能です。 |
+| `POSITION_PROVIDER_EXCLUDES` | (空) | 特定のプロバイダーを非表示(固定されたプロバイダーには影響しません)。 |
+
+## プラグインデーモン設定
+
+プラグインデーモンは、プラグインのライフサイクル(インストール、実行、アップグレード)を管理する独立したサービスです。APIはHTTP経由で通信します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_DAEMON_URL` | `http://plugin_daemon:5002` | プラグインデーモンサービスURL。 |
+| `PLUGIN_DAEMON_KEY` | (自動生成) | プラグインデーモンの認証キー。 |
+| `PLUGIN_DAEMON_PORT` | `5002` | プラグインデーモンのリッスンポート。 |
+| `PLUGIN_DAEMON_TIMEOUT` | `600.0` | すべてのプラグインデーモンリクエスト(インストール、実行、リスト表示)のタイムアウト(秒)。 |
+| `PLUGIN_MAX_PACKAGE_SIZE` | `52428800` | プラグインパッケージの最大サイズ(バイト、50 MB)。マーケットプレイスダウンロード時に検証されます。 |
+| `PLUGIN_MODEL_SCHEMA_CACHE_TTL` | `3600` | プラグインモデルスキーマのキャッシュ期間(秒)。繰り返しの参照を削減します。 |
+| `PLUGIN_DIFY_INNER_API_KEY` | (自動生成) | プラグインデーモンがDify APIにコールバックする際に使用するAPIキー。プラグインデーモンサービス設定の`DIFY_INNER_API_KEY`と一致する必要があります。 |
+| `PLUGIN_DIFY_INNER_API_URL` | `http://api:5001` | プラグインデーモンがコールバックする内部API URL。 |
+| `PLUGIN_DEBUGGING_HOST` | `0.0.0.0` | プラグインリモートデバッグ接続のホスト。 |
+| `PLUGIN_DEBUGGING_PORT` | `5003` | プラグインリモートデバッグ接続のポート。 |
+| `MARKETPLACE_ENABLED` | `true` | プラグインマーケットプレイスを有効化。無効の場合、ローカルにインストールされたプラグインのみ利用可能で、ブラウジングと自動アップグレードは利用できません。 |
+| `MARKETPLACE_API_URL` | `https://marketplace.dify.ai` | プラグインのブラウジング、ダウンロード、アップグレード確認のためのマーケットプレイスAPIエンドポイント。 |
+| `FORCE_VERIFYING_SIGNATURE` | `true` | プラグインインストール前に有効な署名を要求。改ざんまたは未署名のパッケージのインストールを防止します。 |
+| `PLUGIN_MAX_EXECUTION_TIMEOUT` | `600` | プラグイン実行タイムアウト(秒、プラグインデーモン側)。API側の`PLUGIN_DAEMON_TIMEOUT`と一致させる必要があります。 |
+| `PIP_MIRROR_URL` | (空) | プラグインデーモンがプラグインの依存関係をインストールする際に使用するカスタムPyPIミラーURL。高速インストールやエアギャップ環境に有用です。 |
+
+## OTLP / OpenTelemetry設定
+
+OpenTelemetryは分散トレーシングとメトリクス収集を提供します。有効時、DifyはFlaskを計装し、テレメトリデータをOTLPコレクターにエクスポートします。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ENABLE_OTEL` | `false` | OpenTelemetry計装のマスタースイッチ。 |
+| `OTLP_TRACE_ENDPOINT` | (空) | 専用トレースエンドポイントURL。未設定の場合、`{OTLP_BASE_ENDPOINT}/v1/traces`にフォールバックします。 |
+| `OTLP_METRIC_ENDPOINT` | (空) | 専用メトリクスエンドポイントURL。未設定の場合、`{OTLP_BASE_ENDPOINT}/v1/metrics`にフォールバックします。 |
+| `OTLP_BASE_ENDPOINT` | `http://localhost:4318` | ベースOTLPコレクターURL。特定のトレース/メトリクスエンドポイントが設定されていない場合のフォールバックとして使用されます。 |
+| `OTLP_API_KEY` | (空) | OTLP認証用APIキー。`Authorization: Bearer`ヘッダーとして送信されます。 |
+| `OTEL_EXPORTER_TYPE` | `otlp` | エクスポータータイプ。`otlp`はコレクターにエクスポートします。その他の値はコンソールエクスポーター(デバッグ用)を使用します。 |
+| `OTEL_EXPORTER_OTLP_PROTOCOL` | (空) | OTLPエクスポートのプロトコル。`grpc`はgRPCエクスポーターを使用します。それ以外はHTTPを使用します。 |
+| `OTEL_SAMPLING_RATE` | `0.1` | トレースするリクエストの割合(0.1 = 10%)。高トラフィックの本番環境ではオーバーヘッドを削減するために値を小さくします。 |
+| `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` | メトリクスエクスポートのタイムアウト(ミリ秒)。 |
+
+## その他
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `CSP_WHITELIST` | (空) | Content Security Policyヘッダーで許可する追加ドメイン。 |
+| `ALLOW_EMBED` | `false` | Difyページのiframe埋め込みを許可。`false`の場合、クリックジャッキングを防止するため`X-Frame-Options: DENY`を設定します。 |
+| `SWAGGER_UI_ENABLED` | `false` | `SWAGGER_UI_PATH`でSwagger UIを公開し、APIドキュメントをブラウジングできるようにします。Swaggerエンドポイントは認証をバイパスします。 |
+| `SWAGGER_UI_PATH` | `/swagger-ui.html` | Swagger UIのURLパス。 |
+| `MAX_SUBMIT_COUNT` | `100` | 並列ワークフローノード実行に使用されるスレッドプール内の最大同時タスク送信数。 |
+| `TENANT_ISOLATED_TASK_CONCURRENCY` | `1` | テナントごとに同時処理されるドキュメントインデックスまたはRAGパイプラインタスク数。高速なインデックス作成のために増加できますが、データベース負荷が増加します。 |
+
+### 定期タスク設定
+
+DifyはCelery Beatを使用して、設定可能なスケジュールでバックグラウンドメンテナンスタスクを実行します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ENABLE_CLEAN_EMBEDDING_CACHE_TASK` | `false` | 毎日午前2:00に期限切れのエンベディングキャッシュレコードをデータベースから削除します。データベースサイズを管理します。 |
+| `ENABLE_CLEAN_UNUSED_DATASETS_TASK` | `false` | 保持期間内にアクティビティがなかったナレッジベースのドキュメントを無効化します。毎日午前3:00に実行されます。 |
+| `ENABLE_CLEAN_MESSAGES` | `false` | 毎日午前4:00に保持期間を超えた会話メッセージを削除します。 |
+| `ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK` | `false` | クリーンアップタスクによりドキュメントが自動無効化されたナレッジベースのリストをワークスペースオーナーにメールで送信します。毎週月曜日午前10:00に実行されます。 |
+| `ENABLE_DATASETS_QUEUE_MONITOR` | `false` | Redis内のデータセット処理キューのバックログを監視します。キューがしきい値を超えるとメールアラートを送信します。 |
+| `QUEUE_MONITOR_INTERVAL` | `30` | キューを確認する頻度(分)。 |
+| `QUEUE_MONITOR_THRESHOLD` | `200` | アラートメールをトリガーするキューサイズ。 |
+| `QUEUE_MONITOR_ALERT_EMAILS` | (空) | キューアラートを受信するメールアドレス(カンマ区切り)。 |
+| `ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK` | `true` | 15分ごとにマーケットプレイスで新しいプラグインバージョンを確認します。各テナントの自動アップグレードスケジュールに基づいてアップグレードタスクをディスパッチします。 |
+| `ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK` | `true` | スケジュールされたワークフロー実行を確認してトリガーするワークフロースケジュールポーラーを有効化。 |
+| `WORKFLOW_SCHEDULE_POLLER_INTERVAL` | `1` | 期日のスケジュール済みワークフローを確認する頻度(分)。 |
+| `WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE` | `100` | ポーリングサイクルごとに取得する最大期日スケジュール数。 |
+| `WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK` | `0` | サーキットブレーカー:ティックごとにディスパッチされる最大スケジュール数。`0`は無制限を意味します。 |
+| `ENABLE_WORKFLOW_RUN_CLEANUP_TASK` | `false` | ワークフロー実行レコードの自動クリーンアップを有効化。 |
+| `ENABLE_CREATE_TIDB_SERVERLESS_TASK` | `false` | ベクトルデータベースプーリング用にTiDB Serverlessクラスターを事前作成。 |
+| `ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK` | `false` | TiDB Serverlessクラスターのステータスを定期的に更新。 |
+| `ENABLE_HUMAN_INPUT_TIMEOUT_TASK` | `true` | 期限切れの人間の入力フォームを確認し、タイムアウトしたワークフローを再開または停止します。 |
+| `HUMAN_INPUT_TIMEOUT_TASK_INTERVAL` | `1` | 期限切れの人間の入力フォームを確認する頻度(分)。 |
+
+#### レコード保持とクリーンアップ
+
+古いレコードのクリーンアップ方法を制御します。`BILLING_ENABLED`がアクティブな場合、クリーンアップは猶予期間付きでサンドボックスティアのテナントを対象とします。課金が無効(セルフホスト)の場合、クリーンアップは保持期間内のすべてのレコードに適用されます。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS` | `30` | この日数を超えたレコードが削除対象になります。 |
+| `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_CLEAN_TASK_LOCK_TTL` | `90000` | 同時クリーンアップタスク実行を防止するRedisロックTTL(秒、約25時間)。 |
+
+## Aliyun SLSログストア設定
+
+データベースの代わりにワークフロー実行ログを外部に保存するためのAliyun Simple Log Serviceとのオプション統合。ログストア実装を使用するようにリポジトリ設定変数を設定して有効化します。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ALIYUN_SLS_ACCESS_KEY_ID` | (空) | SLS認証用Aliyun access key ID。 |
+| `ALIYUN_SLS_ACCESS_KEY_SECRET` | (空) | SLS認証用Aliyun access key secret。 |
+| `ALIYUN_SLS_ENDPOINT` | (空) | SLSサービスエンドポイントURL(例:`cn-hangzhou.log.aliyuncs.com`)。 |
+| `ALIYUN_SLS_REGION` | (空) | Aliyunリージョン(例:`cn-hangzhou`)。 |
+| `ALIYUN_SLS_PROJECT_NAME` | (空) | ワークフローログ保存用SLSプロジェクト名。 |
+| `ALIYUN_SLS_LOGSTORE_TTL` | `365` | SLSログストアのデータ保持期間(日)。永久保存には`3650`を使用してください。 |
+| `LOGSTORE_DUAL_WRITE_ENABLED` | `false` | ワークフローデータをSLSとPostgreSQLの両方に同時書き込み。SLSへの移行時に有用です。 |
+| `LOGSTORE_DUAL_READ_ENABLED` | `true` | SLSが結果を返さない場合にPostgreSQLにフォールバック。履歴データがデータベースにのみ存在する移行時に有用です。 |
+| `LOGSTORE_ENABLE_PUT_GRAPH_FIELD` | `true` | SLSログに完全なワークフローグラフ定義を含めます。大きなグラフデータを省略してストレージを削減するには`false`に設定してください。 |
+
+## イベントバス設定
+
+APIとCeleryワーカー間のRedisベースのイベント転送です。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `EVENT_BUS_REDIS_URL` | (空) | イベントストリーミング用Redis接続URL。空の場合、メインRedis接続設定を使用します。 |
+| `EVENT_BUS_REDIS_CHANNEL_TYPE` | `pubsub` | トランスポートタイプ:`pubsub`(Pub/Sub、at-most-once配信)、`sharded`(シャードPub/Sub)、または`streams`(Redis Streams、at-least-once配信)。 |
+| `EVENT_BUS_REDIS_USE_CLUSTERS` | `false` | イベントバスのRedis Clusterモードを有効化。大規模デプロイメントに推奨されます。 |
+
+## ベクトルデータベースサービス設定
+
+ベクトルデータベースコンテナ自体の設定です(Difyクライアント接続ではありません)。選択した`VECTOR_STORE`の変数のみが関連します。
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `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` | APIキー認証を有効化。 |
+| `WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS` | (自動生成) | 許可されるAPIキー。クライアント設定の`WEAVIATE_API_KEY`と一致する必要があります。 |
+| `WEAVIATE_AUTHENTICATION_APIKEY_USERS` | `hello@dify.ai` | APIキーに関連付けられたユーザー。 |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED` | `true` | 管理者リスト認可を有効化。 |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_USERS` | `hello@dify.ai` | 管理者ユーザー。 |
+| `WEAVIATE_DISABLE_TELEMETRY` | `false` | Weaviateテレメトリを無効化。 |
+| `WEAVIATE_ENABLE_TOKENIZER_GSE` | `false` | GSEトークナイザーを有効化(中国語)。 |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA` | `false` | Kagomeトークナイザーを有効化(日本語)。 |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR` | `false` | Kagomeトークナイザーを有効化(韓国語)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ETCD_AUTO_COMPACTION_MODE` | `revision` | ETCD自動コンパクションモード。 |
+| `ETCD_AUTO_COMPACTION_RETENTION` | `1000` | リビジョン数での自動コンパクション保持。 |
+| `ETCD_QUOTA_BACKEND_BYTES` | `4294967296` | バックエンドクォータ(バイト、4 GB)。 |
+| `ETCD_SNAPSHOT_COUNT` | `50000` | スナップショットをトリガーする変更数。 |
+| `ETCD_ENDPOINTS` | `etcd:2379` | ETCDサービスエンドポイント。 |
+| `MINIO_ACCESS_KEY` | `minioadmin` | MinIO access key。 |
+| `MINIO_SECRET_KEY` | `minioadmin` | MinIO secret key。 |
+| `MINIO_ADDRESS` | `minio:9000` | MinIOサービスアドレス。 |
+| `MILVUS_AUTHORIZATION_ENABLED` | `true` | Milvusセキュリティ認可を有効化。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `OPENSEARCH_DISCOVERY_TYPE` | `single-node` | クラスター形成のディスカバリタイプ。 |
+| `OPENSEARCH_BOOTSTRAP_MEMORY_LOCK` | `true` | 起動時にメモリをロックしてスワッピングを防止。 |
+| `OPENSEARCH_JAVA_OPTS_MIN` | `512m` | 最小JVMヒープサイズ。 |
+| `OPENSEARCH_JAVA_OPTS_MAX` | `1024m` | 最大JVMヒープサイズ。 |
+| `OPENSEARCH_INITIAL_ADMIN_PASSWORD` | `Qazwsxedc!@#123` | OpenSearchサービスの初期管理者パスワード。 |
+| `OPENSEARCH_MEMLOCK_SOFT` | `-1` | ソフトメモリロック制限(`-1`は無制限)。 |
+| `OPENSEARCH_MEMLOCK_HARD` | `-1` | ハードメモリロック制限(`-1`は無制限)。 |
+| `OPENSEARCH_NOFILE_SOFT` | `65536` | ソフトファイルディスクリプタ制限。 |
+| `OPENSEARCH_NOFILE_HARD` | `65536` | ハードファイルディスクリプタ制限。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PGVECTOR_PGUSER` | `postgres` | PGVectorコンテナのPostgreSQLユーザー。 |
+| `PGVECTOR_POSTGRES_PASSWORD` | (自動生成) | PGVectorコンテナのPostgreSQLパスワード。 |
+| `PGVECTOR_POSTGRES_DB` | `dify` | PGVectorコンテナ内のデータベース名。 |
+| `PGVECTOR_PGDATA` | `/var/lib/postgresql/data/pgdata` | コンテナ内のデータディレクトリ。 |
+| `PGVECTOR_PG_BIGM_VERSION` | `1.2-20240606` | pg_bigm拡張のバージョン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `ORACLE_PWD` | `Dify123456` | コンテナのOracleデータベースパスワード。 |
+| `ORACLE_CHARACTERSET` | `AL32UTF8` | Oracle文字セット。 |
+| `CHROMA_SERVER_AUTHN_CREDENTIALS` | (自動生成) | Chromaサーバーコンテナの認証資格情報。 |
+| `CHROMA_SERVER_AUTHN_PROVIDER` | `chromadb.auth.token_authn.TokenAuthenticationServerProvider` | Chromaサーバーの認証プロバイダー。 |
+| `CHROMA_IS_PERSISTENT` | `TRUE` | Chromaの永続ストレージを有効化。 |
+| `KIBANA_PORT` | `5601` | Kibanaポート(Elasticsearch UI)。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `IRIS_WEB_SERVER_PORT` | `52773` | IRIS Webサーバー管理ポート。 |
+| `IRIS_TIMEZONE` | `UTC` | IRISコンテナのタイムゾーン。 |
+| `DB_PLUGIN_DATABASE` | `dify_plugin` | プラグインデータ用の別データベース名。 |
+
+
+
+
+## プラグインデーモンストレージ設定
+
+プラグインデーモンは異なるストレージバックエンドにプラグインパッケージを保存できます。`PLUGIN_STORAGE_TYPE`に一致するプロバイダーのみを設定してください。
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_STORAGE_TYPE` | `local` | プラグインストレージバックエンド:`local`、`aws_s3`、`tencent_cos`、`azure_blob`、`aliyun_oss`、`volcengine_tos`。 |
+| `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_STORAGE_OSS_BUCKET` | (空) | オブジェクトストレージバケット名(S3/COS/OSS/TOSプロバイダー間で共有)。 |
+| `PLUGIN_PPROF_ENABLED` | `false` | プラグインデーモンのGo pprofプロファイリングを有効化。 |
+| `PLUGIN_PYTHON_ENV_INIT_TIMEOUT` | `120` | プラグインのPython環境初期化のタイムアウト(秒)。 |
+| `PLUGIN_STDIO_BUFFER_SIZE` | `1024` | プラグインstdio通信のバッファサイズ(バイト)。 |
+| `PLUGIN_STDIO_MAX_BUFFER_SIZE` | `5242880` | プラグインstdio通信の最大バッファサイズ(バイト、5 MB)。 |
+| `ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES` | `true` | LangGenius公式プラグインの署名検証を強制。 |
+| `ENDPOINT_URL_TEMPLATE` | `http://localhost/e/{hook_id}` | プラグインエンドポイントのURLテンプレート。`{hook_id}`は実際のフックIDに置き換えられます。 |
+| `EXPOSE_PLUGIN_DAEMON_PORT` | `5002` | プラグインデーモンにマッピングされるホストポート。 |
+| `EXPOSE_PLUGIN_DEBUGGING_HOST` | `localhost` | プラグインリモートデバッグのホスト。 |
+| `EXPOSE_PLUGIN_DEBUGGING_PORT` | `5003` | プラグインリモートデバッグのホストポート。 |
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_S3_USE_AWS` | `false` | AWS S3を使用(S3互換サービスとの対比)。 |
+| `PLUGIN_S3_USE_AWS_MANAGED_IAM` | `false` | 明示的な資格情報の代わりにIAMロールを使用。 |
+| `PLUGIN_S3_ENDPOINT` | (空) | S3エンドポイントURL。 |
+| `PLUGIN_S3_USE_PATH_STYLE` | `false` | 仮想ホスト型の代わりにパス型URLを使用。 |
+| `PLUGIN_AWS_ACCESS_KEY` | (空) | AWS access key。 |
+| `PLUGIN_AWS_SECRET_KEY` | (空) | AWS secret key。 |
+| `PLUGIN_AWS_REGION` | (空) | AWSリージョン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_AZURE_BLOB_STORAGE_CONTAINER_NAME` | (空) | Azure Blobコンテナ名。 |
+| `PLUGIN_AZURE_BLOB_STORAGE_CONNECTION_STRING` | (空) | Azure Blob接続文字列。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_TENCENT_COS_SECRET_KEY` | (空) | Tencent COS secret key。 |
+| `PLUGIN_TENCENT_COS_SECRET_ID` | (空) | Tencent COS secret ID。 |
+| `PLUGIN_TENCENT_COS_REGION` | (空) | Tencent COSリージョン。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_ALIYUN_OSS_REGION` | (空) | Aliyun OSSリージョン。 |
+| `PLUGIN_ALIYUN_OSS_ENDPOINT` | (空) | Aliyun OSSエンドポイント。 |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_ID` | (空) | Aliyun OSS access key ID。 |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_SECRET` | (空) | Aliyun OSS access key secret。 |
+| `PLUGIN_ALIYUN_OSS_AUTH_VERSION` | `v4` | Aliyun OSS認証バージョン。 |
+| `PLUGIN_ALIYUN_OSS_PATH` | (空) | Aliyun OSSパスプレフィックス。 |
+
+
+
+
+
+| 変数 | デフォルト値 | 説明 |
+|---|---|---|
+| `PLUGIN_VOLCENGINE_TOS_ENDPOINT` | (空) | Volcengine TOSエンドポイント。 |
+| `PLUGIN_VOLCENGINE_TOS_ACCESS_KEY` | (空) | Volcengine TOS access key。 |
+| `PLUGIN_VOLCENGINE_TOS_SECRET_KEY` | (空) | Volcengine TOS secret key。 |
+| `PLUGIN_VOLCENGINE_TOS_REGION` | (空) | Volcengine TOSリージョン。 |
+
+
+
\ No newline at end of file
diff --git a/zh/self-host/configuration/environments.mdx b/zh/self-host/configuration/environments.mdx
index 116872a92..e4f7af82a 100644
--- a/zh/self-host/configuration/environments.mdx
+++ b/zh/self-host/configuration/environments.mdx
@@ -1,7 +1,1571 @@
---
title: 环境变量
+description: Dify 自托管部署使用的所有环境变量参考。
---
+ ⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考[英文原版](/en/self-host/configuration/environments)。
+
+Dify 使用默认配置即可开箱即用。你可以通过修改 `.env` 文件中的环境变量来自定义部署。
+
+
+升级 Dify 后,在 `docker` 目录下运行 `diff .env .env.example` 检查新增或变更的变量,然后相应更新你的 `.env` 文件。
+
+
+## 通用变量
+
+这些 URL 变量用于配置 Dify 各服务的访问地址。
+
+对于 Nginx 后的单域名部署(默认 Docker Compose 配置),这些变量可以留空——系统会从请求中自动检测。当使用自定义域名、多域名部署或反向代理时,需要配置这些变量。
+
+### CONSOLE_API_URL
+
+默认值:(空)
+
+Dify 后端 API 的公开 URL。如果你使用 OAuth 登录(GitHub、Google)、Notion 集成或任何需要 OAuth 的插件,请设置此变量——这些功能需要绝对回调 URL 才能在授权后将用户重定向回来。此变量还决定是否使用安全(仅 HTTPS)Cookie。
+
+示例:`https://api.console.dify.ai`
+
+### CONSOLE_WEB_URL
+
+默认值:(空)
+
+Dify 控制台前端的公开 URL。用于构建所有系统邮件(邀请、密码重置、通知)中的链接,以及 OAuth 登录后将用户重定向回控制台。如果未设置 `CONSOLE_CORS_ALLOW_ORIGINS`,此变量也作为默认的 CORS 允许来源。
+
+如果为空,邮件链接将无法正常工作——即使在单域名部署中,如果使用邮件功能也需要设置此变量。
+
+示例:`https://console.dify.ai`
+
+### SERVICE_API_URL
+
+默认值:(空)
+
+在 Dify 控制台中展示给开发者的 API Base URL——即他们复制到代码中用于调用 Dify API 的 URL。如果为空,将从当前请求自动检测(例如 `http://localhost/v1`)。当你的服务器可通过多个地址访问时,设置此变量以确保 URL 一致。
+
+示例:`https://api.dify.ai`
+
+### APP_API_URL
+
+默认值:(空)
+
+WebApp 前端(已发布应用)的后端 API URL。此变量仅由 Web 前端容器使用,不影响 Python 后端。如果为空,Docker 镜像默认使用 `http://127.0.0.1:5001`。
+
+示例:`https://api.app.dify.ai`
+
+### APP_WEB_URL
+
+默认值:(空)
+
+已发布 WebApp 的公开访问 URL。工作流中的**人工输入节点**需要此变量——邮件通知中的表单链接以 `{APP_WEB_URL}/form/{token}` 格式构建。如果为空,人工输入邮件将不包含有效的表单链接。
+
+示例:`https://app.dify.ai`
+
+### TRIGGER_URL
+
+默认值:`http://localhost`
+
+Webhook 和插件触发端点的公开访问 URL。外部系统使用此地址来调用你的工作流。Dify 构建触发回调 URL 格式为 `{TRIGGER_URL}/triggers/webhook/{id}` 并在控制台中展示。
+
+要使触发器能从外部系统正常工作,此变量必须指向它们可以访问的公共域名或 IP 地址。
+
+### FILES_URL
+
+默认值:(空;回退到 `CONSOLE_API_URL`)
+
+文件预览和下载链接的基础 URL。Dify 为所有文件(上传的文档、工具输出、工作空间 Logo)生成签名的限时 URL,并提供给前端和多模态模型使用。
+
+如果你使用文件处理插件,或希望文件 URL 使用专用域名,请设置此变量。如果 `FILES_URL` 和 `CONSOLE_API_URL` 都为空,文件预览将无法工作。
+
+示例:`https://upload.example.com` 或 `http://:5001`
+
+### INTERNAL_FILES_URL
+
+默认值:(空;回退到 `FILES_URL`)
+
+Docker 网络内部服务间通信使用的文件访问 URL(例如插件守护进程、PDF/Word 提取器)。这些内部服务可能无法通过 Nginx 或公共域名访问外部的 `FILES_URL`。
+
+如果为空,内部服务使用 `FILES_URL`。当内部服务无法访问外部 URL 时,请设置此变量。
+
+示例:`http://api:5001`
+
+### FILES_ACCESS_TIMEOUT
+
+默认值:`300`(5 分钟)
+
+签名文件 URL 的有效时长(秒)。超过此时间后 URL 将被拒绝,文件需要重新请求。对于长时间运行的流程可以增大此值;对于更严格的安全要求可以减小此值。
+
+### 系统编码
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `LANG` | `C.UTF-8` | 系统区域设置,确保使用 UTF-8 编码。 |
+| `LC_ALL` | `C.UTF-8` | 覆盖所有类别的区域设置。 |
+| `PYTHONIOENCODING` | `utf-8` | Python I/O 编码。 |
+| `UV_CACHE_DIR` | `/tmp/.uv-cache` | UV 包管理器缓存目录。避免因不存在的主目录导致权限问题。 |
+
+## 服务器配置
+
+### 日志
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `LOG_LEVEL` | `INFO` | 最低日志级别。控制所有处理器(文件 + 控制台)的日志记录内容。级别从低到高:`DEBUG`、`INFO`、`WARNING`、`ERROR`、`CRITICAL`。 |
+| `LOG_OUTPUT_FORMAT` | `text` | `text` 输出包含时间戳、级别、线程和追踪 ID 的可读格式。`json` 输出结构化 JSON,适用于日志聚合工具(ELK、Datadog 等)。 |
+| `LOG_FILE` | `/app/logs/server.log` | 日志文件路径。设置后启用基于文件的日志记录,并自动轮转。目录会自动创建。为空时日志仅输出到控制台。 |
+| `LOG_FILE_MAX_SIZE` | `20` | 日志文件轮转前的最大大小(MB)。超过后当前文件重命名为 `.1`,并创建新文件。 |
+| `LOG_FILE_BACKUP_COUNT` | `5` | 保留的轮转日志文件数量。使用默认配置时最多存在 6 个文件:当前文件加 5 个备份。 |
+| `LOG_DATEFORMAT` | `%Y-%m-%d %H:%M:%S` | 文本格式日志的时间戳格式(strftime 代码)。JSON 格式忽略此设置。 |
+| `LOG_TZ` | `UTC` | 日志时间戳的时区(pytz 格式,例如 `Asia/Shanghai`)。仅适用于文本格式——JSON 始终使用 UTC。同时设置 Celery 的任务调度时区。 |
+
+### 常规
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `DEBUG` | `false` | 启用详细日志记录:工作流节点输入/输出、工具执行详情、完整 LLM 提示和响应、应用启动耗时。适用于本地开发;不建议在生产环境使用,因为可能在日志中暴露敏感数据。 |
+| `FLASK_DEBUG` | `false` | 标准 Flask 调试模式标志。Dify 未主动使用——`DEBUG` 是主要控制变量。 |
+| `ENABLE_REQUEST_LOGGING` | `false` | 为每个 HTTP 请求记录一条紧凑的访问日志(`METHOD PATH STATUS DURATION TRACE_ID`)。当 `LOG_LEVEL` 同时设为 `DEBUG` 时,还会以 JSON 格式记录完整的请求和响应体。 |
+| `DEPLOY_ENV` | `PRODUCTION` | 在 Sentry 和 OpenTelemetry 中标记监控数据,以便按环境过滤错误和追踪。也作为 `X-Env` 响应头发送。不改变应用行为。 |
+| `MIGRATION_ENABLED` | `true` | 为 `true` 时,容器启动时自动运行数据库架构迁移(`flask upgrade-db`)。仅限 Docker。如果你单独运行迁移,请设为 `false`。对于源码启动,需手动运行 `flask db upgrade`。 |
+| `CHECK_UPDATE_URL` | `https://updates.dify.ai` | 控制台通过此 URL 检查 Dify 的新版本。设为空可禁用——适用于离线环境或防止外部 HTTP 调用。 |
+| `OPENAI_API_BASE` | `https://api.openai.com/v1` | 遗留变量。Dify 自身代码未主动使用。如果存在于环境中,可能会被 OpenAI Python SDK 读取。 |
+
+### SECRET_KEY
+
+默认值:(在 `.env.example` 中预填充;生产环境必须替换)
+
+用于会话 Cookie 签名、JWT 认证令牌、文件 URL 签名(HMAC-SHA256)以及加密第三方 OAuth 凭证(AES-256)。首次启动前请生成一个强密钥:
+
+```bash
+openssl rand -base64 42
+```
+
+
+部署后更改此密钥将立即使所有用户登出、使所有文件 URL 失效,并破坏使用 OAuth 的插件集成——其加密凭证将无法恢复。
+
+
+### INIT_PASSWORD
+
+默认值:(空)
+
+首次安装时的可选安全门控。设置后,`/install` 页面在创建管理员账户前需要输入此密码——防止服务器暴露时被未授权设置。安装完成后此变量不再生效。最大长度:30 个字符。
+
+### 令牌与请求限制
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ACCESS_TOKEN_EXPIRE_MINUTES` | `60` | 登录会话的访问令牌有效时长(分钟)。过期后浏览器使用刷新令牌静默刷新——用户不会被登出。 |
+| `REFRESH_TOKEN_EXPIRE_DAYS` | `30` | 用户无需重新输入凭证即可保持登录的时长(天)。如果用户在此期间未访问,则需要重新登录。 |
+| `APP_MAX_EXECUTION_TIME` | `1200` | 应用执行的最大运行时间(秒),超时后终止。与 `WORKFLOW_MAX_EXECUTION_TIME` 配合使用——两者默认均为 20 分钟,但此变量作用于应用队列层面,另一个作用于工作流引擎层面。如果工作流需要更多时间,请同时增大两者。 |
+| `APP_DEFAULT_ACTIVE_REQUESTS` | `0` | 每个应用的默认并发请求限制,在应用未在 UI 中设置自定义限制时使用。`0` 表示不限制。有效限制取此值与 `APP_MAX_ACTIVE_REQUESTS` 的较小值。 |
+| `APP_MAX_ACTIVE_REQUESTS` | `0` | 每个应用的全局并发请求上限。如果应用自定义设置超过此值,将被覆盖。`0` 表示不限制。 |
+
+### 容器启动配置
+
+仅在使用 Docker 镜像或 Docker Compose 启动时生效。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `DIFY_BIND_ADDRESS` | `0.0.0.0` | API 服务器绑定的网络接口。`0.0.0.0` 监听所有接口;设为 `127.0.0.1` 限制为仅本地访问。 |
+| `DIFY_PORT` | `5001` | API 服务器监听端口。 |
+| `SERVER_WORKER_AMOUNT` | `1` | Gunicorn 工作进程数。使用 gevent(默认)时,每个工作进程通过 greenlet 处理多个并发连接,因此 1 通常足够。对于同步工作进程,使用 `(2 x CPU 核心数) + 1`。[参考文档](https://docs.gunicorn.org/en/stable/design.html#how-many-workers)。 |
+| `SERVER_WORKER_CLASS` | `gevent` | Gunicorn 工作进程类型。Gevent 提供轻量级异步并发。更改此设置会破坏 psycopg2 和 gRPC 补丁——强烈不建议修改。 |
+| `SERVER_WORKER_CONNECTIONS` | `10` | 每个工作进程的最大并发连接数。仅适用于异步工作进程(gevent)。如果在高负载下遇到连接拒绝或响应缓慢,尝试增大此值。 |
+| `GUNICORN_TIMEOUT` | `360` | 如果工作进程在此秒数内没有响应,Gunicorn 将终止并重启它。设为 360(6 分钟)以支持用于流式 LLM 响应的长连接 SSE。 |
+| `CELERY_WORKER_CLASS` | (空;默认为 gevent) | Celery 工作进程类型。与 `SERVER_WORKER_CLASS` 有相同的 gevent 补丁要求——强烈不建议修改。 |
+| `CELERY_WORKER_AMOUNT` | (空;默认为 1) | Celery 工作进程数。仅在禁用自动扩缩时使用。 |
+| `CELERY_AUTO_SCALE` | `false` | 启用动态自动扩缩。启用后,Celery 监控队列深度,在 `CELERY_MIN_WORKERS` 和 `CELERY_MAX_WORKERS` 之间动态创建/销毁工作进程。 |
+| `CELERY_MAX_WORKERS` | (空;默认为 CPU 数量) | 自动扩缩启用时的最大工作进程数。 |
+| `CELERY_MIN_WORKERS` | (空;默认为 1) | 自动扩缩启用时的最小工作进程数。 |
+
+### API 工具配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `API_TOOL_DEFAULT_CONNECT_TIMEOUT` | `10` | API 工具节点调用外部 API 时建立 TCP 连接的最大等待时间(秒)。 |
+| `API_TOOL_DEFAULT_READ_TIMEOUT` | `60` | API 工具节点从外部 API 接收响应数据的最大等待时间(秒)。 |
+
+### 数据库配置
+
+数据库默认使用 PostgreSQL。同时支持 OceanBase、MySQL 和 seekdb。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `DB_TYPE` | `postgresql` | 数据库类型。支持的值:`postgresql`、`mysql`、`oceanbase`、`seekdb`。TiDB 等 MySQL 兼容数据库可使用 `mysql`。 |
+| `DB_USERNAME` | `postgres` | 数据库用户名。在连接字符串中进行 URL 编码,因此特殊字符可以安全使用。 |
+| `DB_PASSWORD` | `difyai123456` | 数据库密码。在连接字符串中进行 URL 编码,因此 `@`、`:`、`%` 等字符可以安全使用。 |
+| `DB_HOST` | `db_postgres` | 数据库服务器主机名。 |
+| `DB_PORT` | `5432` | 数据库服务器端口。如果使用 MySQL,请设为 `3306`。 |
+| `DB_DATABASE` | `dify` | 数据库名称。 |
+
+#### 连接池
+
+这些变量控制 Dify 管理数据库连接池的方式。默认配置适用于大多数部署。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SQLALCHEMY_POOL_SIZE` | `30` | 连接池中保持的持久连接数。 |
+| `SQLALCHEMY_MAX_OVERFLOW` | `10` | 连接池满时允许的额外临时连接数。使用默认设置时,最多可同时存在 40 个连接(30 + 10)。 |
+| `SQLALCHEMY_POOL_RECYCLE` | `3600` | 在此秒数后回收连接,防止连接过期。 |
+| `SQLALCHEMY_POOL_TIMEOUT` | `30` | 连接池耗尽时等待连接的时长。如果在此时间内没有连接释放,请求将超时失败。 |
+| `SQLALCHEMY_POOL_PRE_PING` | `false` | 使用连接前通过轻量查询测试连接。防止「连接丢失」错误,但会增加少量延迟。建议在网络不稳定的生产环境中启用。 |
+| `SQLALCHEMY_POOL_USE_LIFO` | `false` | 复用最近归还的连接(LIFO)而非均匀轮转(FIFO)。LIFO 使较少的连接保持「活跃」状态,可以减少开销。 |
+| `SQLALCHEMY_ECHO` | `false` | 将所有 SQL 语句输出到日志。适用于调试查询问题。 |
+
+#### PostgreSQL 性能调优
+
+这些变量作为启动参数传递给 PostgreSQL 容器——它们配置的是数据库服务器,而非 Dify 应用。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `POSTGRES_MAX_CONNECTIONS` | `100` | 最大数据库连接数。[参考文档](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS) |
+| `POSTGRES_SHARED_BUFFERS` | `128MB` | 缓冲区共享内存。建议设为可用内存的 25%。[参考文档](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS) |
+| `POSTGRES_WORK_MEM` | `4MB` | 每个数据库工作进程的工作内存。[参考文档](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM) |
+| `POSTGRES_MAINTENANCE_WORK_MEM` | `64MB` | 维护操作预留的内存。[参考文档](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM) |
+| `POSTGRES_EFFECTIVE_CACHE_SIZE` | `4096MB` | 查询规划器对有效缓存大小的估计值。[参考文档](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE) |
+| `POSTGRES_STATEMENT_TIMEOUT` | `0` | 语句执行超时前的最大时长(毫秒)。`0` 表示不超时。[参考文档](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT) |
+| `POSTGRES_IDLE_IN_TRANSACTION_SESSION_TIMEOUT` | `0` | 事务内空闲会话的最大时长(毫秒)。`0` 表示不超时。[参考文档](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-IDLE-IN-TRANSACTION-SESSION-TIMEOUT) |
+
+#### MySQL 性能调优
+
+这些变量作为启动参数传递给 MySQL 容器——它们配置的是数据库服务器,而非 Dify 应用。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MYSQL_MAX_CONNECTIONS` | `1000` | 最大 MySQL 连接数。 |
+| `MYSQL_INNODB_BUFFER_POOL_SIZE` | `512M` | InnoDB 缓冲池大小。建议值:专用 MySQL 服务器可用内存的 70-80%。[参考文档](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size) |
+| `MYSQL_INNODB_LOG_FILE_SIZE` | `128M` | InnoDB 日志文件大小。[参考文档](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_log_file_size) |
+| `MYSQL_INNODB_FLUSH_LOG_AT_TRX_COMMIT` | `2` | 事务提交时的 InnoDB 刷写日志方式。选项:`0`(不刷写)、`1`(刷写并同步)、`2`(刷写到操作系统缓存)。[参考文档](https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit) |
+
+### Redis 配置
+
+配置这些变量以将 Dify 连接到你的 Redis 实例。Dify 支持三种部署模式:单机(默认)、哨兵和集群。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `REDIS_HOST` | `redis` | Redis 服务器主机名。仅在单机模式下使用;启用哨兵或集群模式时忽略。 |
+| `REDIS_PORT` | `6379` | Redis 服务器端口。仅在单机模式下使用。 |
+| `REDIS_USERNAME` | (空) | Redis 6.0+ ACL 用户名。适用于所有模式(单机、哨兵、集群)。 |
+| `REDIS_PASSWORD` | `difyai123456` | Redis 认证密码。集群模式请使用 `REDIS_CLUSTERS_PASSWORD` 代替。 |
+| `REDIS_DB` | `0` | Redis 数据库编号(0–15)。仅适用于单机和哨兵模式。确保不与 Celery 的数据库冲突(在 `CELERY_BROKER_URL` 中配置;默认为 DB 1)。 |
+| `REDIS_USE_SSL` | `false` | 启用 Redis 连接的 SSL/TLS。不会自动应用于哨兵协议。 |
+| `REDIS_MAX_CONNECTIONS` | (空) | Redis 连接池中的最大连接数。留空使用库默认值。如需要,可设置为与 Redis 服务器的 `maxclients` 匹配。 |
+
+#### Redis SSL 配置
+
+仅在 `REDIS_USE_SSL=true` 时适用。当 Celery broker URL 使用 `rediss://` 协议时,这些设置也适用于 Celery broker。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `REDIS_SSL_CERT_REQS` | `CERT_NONE` | 证书验证级别:`CERT_NONE`(不验证)、`CERT_OPTIONAL`(可选验证)或 `CERT_REQUIRED`(完整验证)。 |
+| `REDIS_SSL_CA_CERTS` | (空) | 用于验证 Redis 服务器的 CA 证书文件路径。 |
+| `REDIS_SSL_CERTFILE` | (空) | 用于双向 TLS 认证的客户端证书路径。 |
+| `REDIS_SSL_KEYFILE` | (空) | 用于双向 TLS 认证的客户端私钥路径。 |
+
+#### Redis 哨兵模式
+
+哨兵提供自动主节点发现和故障转移以实现高可用。与集群模式互斥。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `REDIS_USE_SENTINEL` | `false` | 启用 Redis 哨兵模式。启用后 `REDIS_HOST`/`REDIS_PORT` 被忽略;Dify 连接到哨兵节点并查询当前主节点。 |
+| `REDIS_SENTINELS` | (空) | 哨兵节点地址。格式:`:,:,:`。这些是哨兵实例,而非 Redis 服务器。 |
+| `REDIS_SENTINEL_SERVICE_NAME` | (空) | 哨兵监控的逻辑服务名称(在 `sentinel.conf` 中配置)。Dify 调用 `master_for(service_name)` 来发现当前主节点。 |
+| `REDIS_SENTINEL_USERNAME` | (空) | 哨兵节点的认证用户名。与 `REDIS_USERNAME` 分开——后者用于 Redis 主/副本的认证。 |
+| `REDIS_SENTINEL_PASSWORD` | (空) | 哨兵节点的认证密码。与 `REDIS_PASSWORD` 分开。 |
+| `REDIS_SENTINEL_SOCKET_TIMEOUT` | `0.1` | 与哨兵节点通信的 Socket 超时(秒)。默认 0.1 秒假定快速本地网络。对于云/广域网部署,建议增大到 1.0–5.0 秒以防止间歇性超时。 |
+
+#### Redis 集群模式
+
+集群模式提供跨多个 Redis 节点的自动分片。与哨兵模式互斥。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `REDIS_USE_CLUSTERS` | `false` | 启用 Redis 集群模式。 |
+| `REDIS_CLUSTERS` | (空) | 集群节点。格式:`:,:,:` |
+| `REDIS_CLUSTERS_PASSWORD` | (空) | Redis 集群的密码。 |
+
+### Celery 配置
+
+配置用于数据集索引、邮件发送和定时任务的后台任务队列。
+
+### CELERY_BROKER_URL
+
+默认值:`redis://:difyai123456@redis:6379/1`
+
+Celery 消息代理的 Redis 连接 URL。
+
+直连格式:
+```
+redis://:@:/
+```
+
+哨兵模式格式(多个节点用分号分隔):
+```
+sentinel://:@:/
+```
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CELERY_BACKEND` | `redis` | Celery 存储任务结果的位置。选项:`redis`(快速,内存存储)或 `database`(存储在主数据库中)。 |
+| `BROKER_USE_SSL` | `false` | 当 `CELERY_BROKER_URL` 使用 `rediss://` 协议时自动启用。将 Redis SSL 证书设置应用于 broker 连接。 |
+| `CELERY_USE_SENTINEL` | `false` | 为 Celery broker 启用 Redis 哨兵模式。 |
+| `CELERY_SENTINEL_MASTER_NAME` | (空) | 哨兵服务名称(Master Name)。 |
+| `CELERY_SENTINEL_PASSWORD` | (空) | 哨兵认证密码。与 `REDIS_SENTINEL_PASSWORD` 分开——如果缓存和任务队列使用不同的哨兵集群,它们可以不同。 |
+| `CELERY_SENTINEL_SOCKET_TIMEOUT` | `0.1` | 连接哨兵的超时时间(秒)。 |
+| `CELERY_TASK_ANNOTATIONS` | `null` | 为特定任务应用运行时设置(例如速率限制)。格式:JSON 字典。示例:`{"tasks.add": {"rate_limit": "10/s"}}`。大多数用户不需要此设置。 |
+
+### CORS 配置
+
+控制前端的跨域访问策略。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `WEB_API_CORS_ALLOW_ORIGINS` | `*` | Web API 跨域请求的允许来源。示例:`https://dify.app` |
+| `CONSOLE_CORS_ALLOW_ORIGINS` | `*` | 控制台 API 跨域请求的允许来源。如果未设置,回退到 `CONSOLE_WEB_URL`。 |
+| `COOKIE_DOMAIN` | (空) | 当前端和后端运行在不同子域上时,设为共享的顶级域名(例如 `example.com`)。这允许认证 Cookie 在子域间共享。为空时 Cookie 使用最安全的 `__Host-` 前缀,并锁定到单个域。 |
+| `NEXT_PUBLIC_COOKIE_DOMAIN` | (空) | 跨子域 Cookie 的前端标志。设为 `1`(或任何非空值)启用——后端从 `COOKIE_DOMAIN` 读取实际域名。 |
+| `NEXT_PUBLIC_BATCH_CONCURRENCY` | `5` | 仅前端。控制 UI 在批量操作时发起的并发 API 调用数。 |
+
+### 文件存储配置
+
+配置 Dify 存储上传文件、数据集文档和加密密钥的位置。每种存储类型有各自的凭证变量——仅配置你使用的那种。
+
+### STORAGE_TYPE
+
+默认值:`opendal`
+
+选择文件存储后端。支持的值:`opendal`、`s3`、`azure-blob`、`aliyun-oss`、`google-storage`、`huawei-obs`、`volcengine-tos`、`tencent-cos`、`baidu-obs`、`oci-storage`、`supabase`、`clickzetta-volume`、`local`(已弃用;内部使用 OpenDAL 的文件系统方案)。
+
+
+
+
+使用 [Apache OpenDAL](https://opendal.apache.org/) 的默认存储后端,一个支持众多存储服务的统一接口。Dify 自动扫描匹配 `OPENDAL__*` 的环境变量并传递给 OpenDAL。例如,使用 `OPENDAL_SCHEME=s3` 时,设置 `OPENDAL_S3_ACCESS_KEY_ID`、`OPENDAL_S3_SECRET_ACCESS_KEY` 等。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OPENDAL_SCHEME` | `fs` | 使用的存储服务。示例:`fs`(本地文件系统)、`s3`、`gcs`、`azblob`。 |
+
+对于默认的 `fs` 方案:
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OPENDAL_FS_ROOT` | `storage` | 本地文件系统存储的根目录。如不存在将自动创建。 |
+
+有关所有可用方案及其配置选项,请参阅 [OpenDAL 服务文档](https://github.com/apache/opendal/tree/main/core/src/services)。
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `S3_ENDPOINT` | (空) | S3 端点地址。非 AWS S3 兼容服务(MinIO 等)必填。 |
+| `S3_REGION` | `us-east-1` | S3 区域。 |
+| `S3_BUCKET_NAME` | `difyai` | S3 存储桶名称。 |
+| `S3_ACCESS_KEY` | (空) | S3 Access Key。使用 IAM 角色时不需要。 |
+| `S3_SECRET_KEY` | (空) | S3 Secret Key。使用 IAM 角色时不需要。 |
+| `S3_USE_AWS_MANAGED_IAM` | `false` | 使用 AWS IAM 角色(EC2 实例配置文件、ECS 任务角色)代替显式的 access key/secret key。启用后 boto3 从实例元数据自动发现凭证。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `AZURE_BLOB_ACCOUNT_NAME` | `difyai` | Azure 存储账户名称。 |
+| `AZURE_BLOB_ACCOUNT_KEY` | `difyai` | Azure 存储账户密钥。 |
+| `AZURE_BLOB_CONTAINER_NAME` | `difyai-container` | Azure Blob 容器名称。 |
+| `AZURE_BLOB_ACCOUNT_URL` | `https://.blob.core.windows.net` | Azure Blob 账户 URL。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `GOOGLE_STORAGE_BUCKET_NAME` | (空) | Google Cloud Storage 存储桶名称。 |
+| `GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64` | (空) | Base64 编码的服务账号 JSON 密钥。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ALIYUN_OSS_BUCKET_NAME` | (空) | OSS 存储桶名称。 |
+| `ALIYUN_OSS_ACCESS_KEY` | (空) | OSS access key。 |
+| `ALIYUN_OSS_SECRET_KEY` | (空) | OSS secret key。 |
+| `ALIYUN_OSS_ENDPOINT` | `https://oss-ap-southeast-1-internal.aliyuncs.com` | OSS 端点。[区域和端点参考](https://www.alibabacloud.com/help/en/oss/user-guide/regions-and-endpoints)。 |
+| `ALIYUN_OSS_REGION` | `ap-southeast-1` | OSS 区域。 |
+| `ALIYUN_OSS_AUTH_VERSION` | `v4` | OSS 认证版本。 |
+| `ALIYUN_OSS_PATH` | (空) | 对象路径前缀。不要以 `/` 开头。[参考文档](https://www.alibabacloud.com/help/en/oss/support/0016-00000005)。 |
+| `ALIYUN_CLOUDBOX_ID` | (空) | 基于 CloudBox 的 OSS 部署的 CloudBox ID。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `TENCENT_COS_BUCKET_NAME` | (空) | COS 存储桶名称。 |
+| `TENCENT_COS_SECRET_KEY` | (空) | COS secret key。 |
+| `TENCENT_COS_SECRET_ID` | (空) | COS secret ID。 |
+| `TENCENT_COS_REGION` | (空) | COS 区域,例如 `ap-guangzhou`。[参考文档](https://cloud.tencent.com/document/product/436/6224)。 |
+| `TENCENT_COS_SCHEME` | (空) | 访问 COS 的协议(`http` 或 `https`)。 |
+| `TENCENT_COS_CUSTOM_DOMAIN` | (空) | COS 访问的自定义域名。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OCI_ENDPOINT` | (空) | OCI 端点 URL。 |
+| `OCI_BUCKET_NAME` | (空) | OCI 存储桶名称。 |
+| `OCI_ACCESS_KEY` | (空) | OCI access key。 |
+| `OCI_SECRET_KEY` | (空) | OCI secret key。 |
+| `OCI_REGION` | `us-ashburn-1` | OCI 区域。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `HUAWEI_OBS_BUCKET_NAME` | (空) | OBS 存储桶名称。 |
+| `HUAWEI_OBS_ACCESS_KEY` | (空) | OBS access key。 |
+| `HUAWEI_OBS_SECRET_KEY` | (空) | OBS secret key。 |
+| `HUAWEI_OBS_SERVER` | (空) | OBS 服务器 URL。[参考文档](https://support.huaweicloud.com/sdk-python-devg-obs/obs_22_0500.html)。 |
+| `HUAWEI_OBS_PATH_STYLE` | `false` | 使用路径风格 URL 代替虚拟主机风格。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `VOLCENGINE_TOS_BUCKET_NAME` | (空) | TOS 存储桶名称。 |
+| `VOLCENGINE_TOS_ACCESS_KEY` | (空) | TOS access key。 |
+| `VOLCENGINE_TOS_SECRET_KEY` | (空) | TOS secret key。 |
+| `VOLCENGINE_TOS_ENDPOINT` | (空) | TOS 端点 URL。[参考文档](https://www.volcengine.com/docs/6349/107356)。 |
+| `VOLCENGINE_TOS_REGION` | (空) | TOS 区域,例如 `cn-guangzhou`。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `BAIDU_OBS_BUCKET_NAME` | (空) | 百度 OBS 存储桶名称。 |
+| `BAIDU_OBS_ACCESS_KEY` | (空) | 百度 OBS access key。 |
+| `BAIDU_OBS_SECRET_KEY` | (空) | 百度 OBS secret key。 |
+| `BAIDU_OBS_ENDPOINT` | (空) | 百度 OBS 服务器 URL。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SUPABASE_BUCKET_NAME` | (空) | Supabase 存储桶名称。 |
+| `SUPABASE_API_KEY` | (空) | Supabase API key。 |
+| `SUPABASE_URL` | (空) | Supabase 服务器 URL。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CLICKZETTA_VOLUME_TYPE` | `user` | Volume 类型。选项:`user`(个人/小团队)、`table`(企业多租户)、`external`(数据湖集成)。 |
+| `CLICKZETTA_VOLUME_NAME` | (空) | 外部 volume 名称(仅 `TYPE=external` 时必填)。 |
+| `CLICKZETTA_VOLUME_TABLE_PREFIX` | `dataset_` | Table volume 表前缀(仅 `TYPE=table` 时使用)。 |
+| `CLICKZETTA_VOLUME_DIFY_PREFIX` | `dify_km` | Dify 文件目录前缀,用于与其他应用隔离。 |
+
+ClickZetta Volume 复用向量数据库部分配置的 `CLICKZETTA_*` 连接参数。
+
+
+
+
+#### 归档存储
+
+用于归档工作流运行日志的独立 S3 兼容存储。付费方案的保留系统使用此存储将超过保留期的工作流运行记录归档为 JSONL 格式。需要 `BILLING_ENABLED=true`。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ARCHIVE_STORAGE_ENABLED` | `false` | 启用工作流日志归档存储。 |
+| `ARCHIVE_STORAGE_ENDPOINT` | (空) | S3 兼容端点 URL。 |
+| `ARCHIVE_STORAGE_ARCHIVE_BUCKET` | (空) | 归档工作流运行日志的存储桶。 |
+| `ARCHIVE_STORAGE_EXPORT_BUCKET` | (空) | 工作流运行导出的存储桶。 |
+| `ARCHIVE_STORAGE_ACCESS_KEY` | (空) | Access key。 |
+| `ARCHIVE_STORAGE_SECRET_KEY` | (空) | Secret key。 |
+| `ARCHIVE_STORAGE_REGION` | `auto` | 存储区域。 |
+
+### 向量数据库配置
+
+配置用于知识库嵌入存储和相似性搜索的向量数据库。每个提供商有各自的凭证变量——仅配置你使用的那个。
+
+### VECTOR_STORE
+
+默认值:`weaviate`
+
+选择向量数据库后端。如果数据集已有索引,数据集存储的类型优先于此设置。在 Docker Compose 中切换提供商时,`COMPOSE_PROFILES` 会根据此值自动启动匹配的容器。
+
+支持的值:`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_INDEX_NAME_PREFIX` | `Vector_index` | 向量数据库中集合名称的前缀。如果在多个 Dify 部署间共享向量数据库实例,请更改此值。 |
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `WEAVIATE_ENDPOINT` | `http://weaviate:8080` | Weaviate REST API 端点。 |
+| `WEAVIATE_API_KEY` | (空) | Weaviate 认证的 API key。 |
+| `WEAVIATE_GRPC_ENDPOINT` | `grpc://weaviate:50051` | 独立的 gRPC 端点,用于高性能二进制协议。批量操作显著更快。如未设置,将从 HTTP 端点推断。 |
+| `WEAVIATE_TOKENIZATION` | `word` | 文本字段的分词方法。选项:`word`(按空格和标点分割)、`whitespace`(仅按空格分割)、`character`(字符级别,更适合中日韩语言)。 |
+
+
+
+
+
+seekdb 是 OceanBase 的轻量版本,共享相同的连接配置。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OCEANBASE_VECTOR_HOST` | `oceanbase` | 主机名或 IP 地址。 |
+| `OCEANBASE_VECTOR_PORT` | `2881` | 端口号。 |
+| `OCEANBASE_VECTOR_USER` | `root@test` | 数据库用户名。 |
+| `OCEANBASE_VECTOR_PASSWORD` | `difyai123456` | 数据库密码。 |
+| `OCEANBASE_VECTOR_DATABASE` | `test` | 数据库名称。 |
+| `OCEANBASE_CLUSTER_NAME` | `difyai` | 集群名称(仅 Docker 部署)。 |
+| `OCEANBASE_MEMORY_LIMIT` | `6G` | OceanBase 内存限制(仅 Docker 部署)。 |
+| `SEEKDB_MEMORY_LIMIT` | `2G` | seekdb 内存限制(仅 Docker 部署)。 |
+| `OCEANBASE_ENABLE_HYBRID_SEARCH` | `false` | 启用全文索引用于 BM25 查询,配合向量搜索使用。需要 OceanBase >= 4.3.5.1。启用后需重新创建集合。 |
+| `OCEANBASE_FULLTEXT_PARSER` | `ik` | 全文解析器。内置:`ngram`、`beng`、`space`、`ngram2`、`ik`。外部(需要插件):`japanese_ftparser`、`thai_ftparser`。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `QDRANT_URL` | `http://qdrant:6333` | Qdrant 端点地址。 |
+| `QDRANT_API_KEY` | `difyai123456` | Qdrant API key。 |
+| `QDRANT_CLIENT_TIMEOUT` | `20` | 客户端超时(秒)。 |
+| `QDRANT_GRPC_ENABLED` | `false` | 启用 gRPC 通信。 |
+| `QDRANT_GRPC_PORT` | `6334` | gRPC 端口。 |
+| `QDRANT_REPLICATION_FACTOR` | `1` | 每个分片的副本数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MILVUS_URI` | `http://host.docker.internal:19530` | Milvus URI。对于 [Zilliz Cloud](https://docs.zilliz.com/docs/free-trials),使用 Public Endpoint。 |
+| `MILVUS_DATABASE` | (空) | 数据库名称。 |
+| `MILVUS_TOKEN` | (空) | 认证令牌。对于 Zilliz Cloud,使用 API Key。 |
+| `MILVUS_USER` | (空) | 用户名。 |
+| `MILVUS_PASSWORD` | (空) | 密码。 |
+| `MILVUS_ENABLE_HYBRID_SEARCH` | `false` | 启用 BM25 稀疏索引用于全文搜索,配合向量相似性搜索使用。需要 Milvus >= 2.5.0。如果集合在未启用时创建,则需重新创建。 |
+| `MILVUS_ANALYZER_PARAMS` | (空) | 文本字段的分析器参数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MYSCALE_HOST` | `myscale` | MyScale 主机。 |
+| `MYSCALE_PORT` | `8123` | MyScale 端口。 |
+| `MYSCALE_USER` | `default` | 用户名。 |
+| `MYSCALE_PASSWORD` | (空) | 密码。 |
+| `MYSCALE_DATABASE` | `dify` | 数据库名称。 |
+| `MYSCALE_FTS_PARAMS` | (空) | 全文搜索参数。[多语言支持参考](https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `COUCHBASE_CONNECTION_STRING` | `couchbase://couchbase-server` | Couchbase 集群的连接字符串。 |
+| `COUCHBASE_USER` | `Administrator` | 用户名。 |
+| `COUCHBASE_PASSWORD` | `password` | 密码。 |
+| `COUCHBASE_BUCKET_NAME` | `Embeddings` | 存储桶名称。 |
+| `COUCHBASE_SCOPE_NAME` | `_default` | Scope 名称。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `HOLOGRES_HOST` | (空) | 主机名。 |
+| `HOLOGRES_PORT` | `80` | 端口号。 |
+| `HOLOGRES_DATABASE` | (空) | 数据库名称。 |
+| `HOLOGRES_ACCESS_KEY_ID` | (空) | Access key ID(用作 PG 用户名)。 |
+| `HOLOGRES_ACCESS_KEY_SECRET` | (空) | Access key secret(用作 PG 密码)。 |
+| `HOLOGRES_SCHEMA` | `public` | Schema 名称。 |
+| `HOLOGRES_TOKENIZER` | `jieba` | 文本字段的分词器。 |
+| `HOLOGRES_DISTANCE_METHOD` | `Cosine` | 距离计算方法。 |
+| `HOLOGRES_BASE_QUANTIZATION_TYPE` | `rabitq` | 量化类型。 |
+| `HOLOGRES_MAX_DEGREE` | `64` | HNSW 最大度数。 |
+| `HOLOGRES_EF_CONSTRUCTION` | `400` | HNSW ef_construction 参数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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` | 启用 pg_bigm 扩展用于全文搜索。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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_HOST` | `pgvecto-rs` | 主机名。 |
+| `PGVECTO_RS_PORT` | `5432` | 端口号。 |
+| `PGVECTO_RS_USER` | `postgres` | 用户名。 |
+| `PGVECTO_RS_PASSWORD` | `difyai123456` | 密码。 |
+| `PGVECTO_RS_DATABASE` | `dify` | 数据库名称。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ANALYTICDB_KEY_ID` | (空) | 阿里云 access key ID。[创建 AccessKey](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/support/create-an-accesskey-pair)。 |
+| `ANALYTICDB_KEY_SECRET` | (空) | 阿里云 access key secret。 |
+| `ANALYTICDB_REGION_ID` | `cn-hangzhou` | 区域标识。 |
+| `ANALYTICDB_INSTANCE_ID` | (空) | 实例 ID,例如 `gp-xxxxxx`。[创建实例](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/create-an-instance-1)。 |
+| `ANALYTICDB_ACCOUNT` | (空) | 账户名称。[创建账户](https://help.aliyun.com/zh/analyticdb/analyticdb-for-postgresql/getting-started/createa-a-privileged-account)。 |
+| `ANALYTICDB_PASSWORD` | (空) | 账户密码。 |
+| `ANALYTICDB_NAMESPACE` | `dify` | 命名空间(schema)。如不存在将自动创建。 |
+| `ANALYTICDB_NAMESPACE_PASSWORD` | (空) | 命名空间密码。创建新命名空间时使用。 |
+| `ANALYTICDB_HOST` | (空) | 直连主机(替代基于 API 的访问)。 |
+| `ANALYTICDB_PORT` | `5432` | 直连端口。 |
+| `ANALYTICDB_MIN_CONNECTION` | `1` | 最小连接池连接数。 |
+| `ANALYTICDB_MAX_CONNECTION` | `5` | 最大连接池连接数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `TIDB_VECTOR_HOST` | `tidb` | 主机名。 |
+| `TIDB_VECTOR_PORT` | `4000` | 端口号。 |
+| `TIDB_VECTOR_USER` | (空) | 用户名。 |
+| `TIDB_VECTOR_PASSWORD` | (空) | 密码。 |
+| `TIDB_VECTOR_DATABASE` | `dify` | 数据库名称。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MATRIXONE_HOST` | `matrixone` | 主机名。 |
+| `MATRIXONE_PORT` | `6001` | 端口号。 |
+| `MATRIXONE_USER` | `dump` | 用户名。 |
+| `MATRIXONE_PASSWORD` | `111` | 密码。 |
+| `MATRIXONE_DATABASE` | `dify` | 数据库名称。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CHROMA_HOST` | `127.0.0.1` | Chroma 服务器主机。 |
+| `CHROMA_PORT` | `8000` | Chroma 服务器端口。 |
+| `CHROMA_TENANT` | `default_tenant` | 租户名称。 |
+| `CHROMA_DATABASE` | `default_database` | 数据库名称。 |
+| `CHROMA_AUTH_PROVIDER` | `chromadb.auth.token_authn.TokenAuthClientProvider` | 认证提供者类。 |
+| `CHROMA_AUTH_CREDENTIALS` | (空) | 认证凭证。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ORACLE_USER` | `dify` | Oracle 用户名。 |
+| `ORACLE_PASSWORD` | `dify` | Oracle 密码。 |
+| `ORACLE_DSN` | `oracle:1521/FREEPDB1` | 数据源名称。 |
+| `ORACLE_CONFIG_DIR` | `/app/api/storage/wallet` | Oracle 配置目录。 |
+| `ORACLE_WALLET_LOCATION` | `/app/api/storage/wallet` | 自治数据库的 Wallet 位置。 |
+| `ORACLE_WALLET_PASSWORD` | `dify` | Wallet 密码。 |
+| `ORACLE_IS_AUTONOMOUS` | `false` | 是否使用 Oracle 自治数据库。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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` | HNSW M 参数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `RELYT_HOST` | `db` | 主机名。 |
+| `RELYT_PORT` | `5432` | 端口号。 |
+| `RELYT_USER` | `postgres` | 用户名。 |
+| `RELYT_PASSWORD` | `difyai123456` | 密码。 |
+| `RELYT_DATABASE` | `postgres` | 数据库名称。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OPENSEARCH_HOST` | `opensearch` | 主机名。 |
+| `OPENSEARCH_PORT` | `9200` | 端口号。 |
+| `OPENSEARCH_SECURE` | `true` | 使用 HTTPS。 |
+| `OPENSEARCH_VERIFY_CERTS` | `true` | 验证 SSL 证书。 |
+| `OPENSEARCH_AUTH_METHOD` | `basic` | `basic` 使用用户名/密码。`aws_managed_iam` 通过 Boto3 凭证使用 AWS SigV4 请求签名(适用于 AWS 托管的 OpenSearch 或 Serverless)。 |
+| `OPENSEARCH_USER` | `admin` | 用户名。仅在 `basic` 认证下使用。 |
+| `OPENSEARCH_PASSWORD` | `admin` | 密码。仅在 `basic` 认证下使用。 |
+| `OPENSEARCH_AWS_REGION` | `ap-southeast-1` | AWS 区域。仅在 `aws_managed_iam` 认证下使用。 |
+| `OPENSEARCH_AWS_SERVICE` | `aoss` | AWS 服务类型:`es`(托管集群)或 `aoss`(OpenSearch Serverless)。仅在 `aws_managed_iam` 认证下使用。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `TENCENT_VECTOR_DB_URL` | `http://127.0.0.1` | 访问地址。[控制台](https://console.cloud.tencent.com/vdb)。 |
+| `TENCENT_VECTOR_DB_API_KEY` | `dify` | API key。[密钥管理](https://cloud.tencent.com/document/product/1709/95108)。 |
+| `TENCENT_VECTOR_DB_TIMEOUT` | `30` | 请求超时(秒)。 |
+| `TENCENT_VECTOR_DB_USERNAME` | `dify` | 账户名称。[账户管理](https://cloud.tencent.com/document/product/1709/115833)。 |
+| `TENCENT_VECTOR_DB_DATABASE` | `dify` | 数据库名称。[创建数据库](https://cloud.tencent.com/document/product/1709/95822)。 |
+| `TENCENT_VECTOR_DB_SHARD` | `1` | 分片数量。 |
+| `TENCENT_VECTOR_DB_REPLICAS` | `2` | 副本数量。 |
+| `TENCENT_VECTOR_DB_ENABLE_HYBRID_SEARCH` | `false` | 启用混合搜索。[稀疏向量文档](https://cloud.tencent.com/document/product/1709/110110)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ELASTICSEARCH_HOST` | `0.0.0.0` | 主机名。 |
+| `ELASTICSEARCH_PORT` | `9200` | 端口号。 |
+| `ELASTICSEARCH_USERNAME` | `elastic` | 用户名。 |
+| `ELASTICSEARCH_PASSWORD` | `elastic` | 密码。 |
+| `ELASTICSEARCH_USE_CLOUD` | `false` | 切换到 Elastic Cloud 模式。为 `true` 时使用 `ELASTICSEARCH_CLOUD_URL` 和 `ELASTICSEARCH_API_KEY` 代替 host/port/username/password。 |
+| `ELASTICSEARCH_CLOUD_URL` | (空) | Elastic Cloud 端点 URL。`ELASTICSEARCH_USE_CLOUD=true` 时必填。 |
+| `ELASTICSEARCH_API_KEY` | (空) | Elastic Cloud API key。`ELASTICSEARCH_USE_CLOUD=true` 时必填。 |
+| `ELASTICSEARCH_VERIFY_CERTS` | `false` | 验证 SSL 证书。 |
+| `ELASTICSEARCH_CA_CERTS` | (空) | CA 证书路径。 |
+| `ELASTICSEARCH_REQUEST_TIMEOUT` | `100000` | 请求超时(毫秒)。 |
+| `ELASTICSEARCH_RETRY_ON_TIMEOUT` | `true` | 超时后重试。 |
+| `ELASTICSEARCH_MAX_RETRIES` | `10` | 最大重试次数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `BAIDU_VECTOR_DB_ENDPOINT` | `http://127.0.0.1:5287` | 端点 URL。 |
+| `BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS` | `30000` | 连接超时(毫秒)。 |
+| `BAIDU_VECTOR_DB_ACCOUNT` | `root` | 账户名称。 |
+| `BAIDU_VECTOR_DB_API_KEY` | `dify` | API key。 |
+| `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` | 倒排索引解析模式。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `VIKINGDB_ACCESS_KEY` | (空) | Access key。 |
+| `VIKINGDB_SECRET_KEY` | (空) | Secret key。 |
+| `VIKINGDB_REGION` | `cn-shanghai` | 区域。 |
+| `VIKINGDB_HOST` | `api-vikingdb.xxx.volces.com` | API 主机。替换为你所在区域的端点。 |
+| `VIKINGDB_SCHEMA` | `http` | 协议方案(`http` 或 `https`)。 |
+| `VIKINGDB_CONNECTION_TIMEOUT` | `30` | 连接超时(秒)。 |
+| `VIKINGDB_SOCKET_TIMEOUT` | `30` | Socket 超时(秒)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `LINDORM_URL` | `http://localhost:30070` | Lindorm 搜索引擎 URL。[控制台](https://lindorm.console.aliyun.com/)。 |
+| `LINDORM_USERNAME` | `admin` | 用户名。 |
+| `LINDORM_PASSWORD` | `admin` | 密码。 |
+| `LINDORM_USING_UGC` | `true` | 使用 UGC 模式。 |
+| `LINDORM_QUERY_TIMEOUT` | `1` | 查询超时(秒)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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` | 启用 PQ 加速。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `HUAWEI_CLOUD_HOSTS` | `https://127.0.0.1:9200` | 集群端点 URL。 |
+| `HUAWEI_CLOUD_USER` | `admin` | 用户名。 |
+| `HUAWEI_CLOUD_PASSWORD` | `admin` | 密码。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `UPSTASH_VECTOR_URL` | (空) | Upstash Vector 端点 URL。 |
+| `UPSTASH_VECTOR_TOKEN` | (空) | Upstash Vector API 令牌。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `TABLESTORE_ENDPOINT` | `https://instance-name.cn-hangzhou.ots.aliyuncs.com` | 端点地址。将 `instance-name` 替换为你的实例名称。 |
+| `TABLESTORE_INSTANCE_NAME` | (空) | 实例名称。 |
+| `TABLESTORE_ACCESS_KEY_ID` | (空) | Access key ID。 |
+| `TABLESTORE_ACCESS_KEY_SECRET` | (空) | Access key secret。 |
+| `TABLESTORE_NORMALIZE_FULLTEXT_BM25_SCORE` | `false` | 标准化全文 BM25 分数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CLICKZETTA_USERNAME` | (空) | 用户名。 |
+| `CLICKZETTA_PASSWORD` | (空) | 密码。 |
+| `CLICKZETTA_INSTANCE` | (空) | 实例名称。 |
+| `CLICKZETTA_SERVICE` | `api.clickzetta.com` | 服务端点。 |
+| `CLICKZETTA_WORKSPACE` | `quick_start` | 工作空间名称。 |
+| `CLICKZETTA_VCLUSTER` | `default_ap` | 虚拟集群。 |
+| `CLICKZETTA_SCHEMA` | `dify` | Schema 名称。 |
+| `CLICKZETTA_BATCH_SIZE` | `100` | 操作批量大小。 |
+| `CLICKZETTA_ENABLE_INVERTED_INDEX` | `true` | 启用倒排索引。 |
+| `CLICKZETTA_ANALYZER_TYPE` | `chinese` | 分析器类型。 |
+| `CLICKZETTA_ANALYZER_MODE` | `smart` | 分析器模式。 |
+| `CLICKZETTA_VECTOR_DISTANCE_FUNCTION` | `cosine_distance` | 距离函数。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `IRIS_HOST` | `iris` | 主机名。 |
+| `IRIS_SUPER_SERVER_PORT` | `1972` | Super Server 端口。 |
+| `IRIS_USER` | `_SYSTEM` | 用户名。 |
+| `IRIS_PASSWORD` | `Dify@1234` | 密码。 |
+| `IRIS_DATABASE` | `USER` | 数据库名称。 |
+| `IRIS_SCHEMA` | `dify` | Schema 名称。 |
+| `IRIS_CONNECTION_URL` | (空) | 完整连接 URL(覆盖单独设置)。 |
+| `IRIS_MIN_CONNECTION` | `1` | 最小连接池连接数。 |
+| `IRIS_MAX_CONNECTION` | `3` | 最大连接池连接数。 |
+| `IRIS_TEXT_INDEX` | `true` | 启用文本索引。 |
+| `IRIS_TEXT_INDEX_LANGUAGE` | `en` | 文本索引语言。 |
+
+
+
+
+### 知识库配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `UPLOAD_FILE_SIZE_LIMIT` | `15` | 文档上传的最大文件大小(MB),包括 PDF、Word 文档等。超过时用户会看到「文件过大」错误。不适用于图片、视频或音频——它们有各自的大小限制(见下文)。 |
+| `UPLOAD_FILE_BATCH_LIMIT` | `5` | 前端每次上传批次允许的最大文件数。 |
+| `UPLOAD_FILE_EXTENSION_BLACKLIST` | (空) | 禁止上传的文件扩展名安全黑名单。逗号分隔,小写,不含点号。示例:`exe,bat,cmd,com,scr,vbs,ps1,msi,dll`。为空允许所有类型。 |
+| `SINGLE_CHUNK_ATTACHMENT_LIMIT` | `10` | 单个知识库段落(chunk)中可嵌入的最大图片数量。 |
+| `IMAGE_FILE_BATCH_LIMIT` | `10` | 每次上传批次的最大图片文件数。 |
+| `ATTACHMENT_IMAGE_FILE_SIZE_LIMIT` | `2` | 知识库索引过程中从外部 URL 获取图片的最大大小(MB)。超过此大小的图片将被跳过。不同于 `UPLOAD_IMAGE_FILE_SIZE_LIMIT`(适用于直接上传)。 |
+| `ATTACHMENT_IMAGE_DOWNLOAD_TIMEOUT` | `60` | 知识库索引过程中从外部 URL 下载图片的超时时间(秒)。响应缓慢或无响应的图片服务器在此超时后将被放弃。 |
+| `ETL_TYPE` | `dify` | 文档提取库。`dify` 支持 txt、md、pdf、html、xlsx、docx、csv。`Unstructured` 额外支持 doc、msg、eml、ppt、pptx、xml、epub(需要 `UNSTRUCTURED_API_URL`)。 |
+| `UNSTRUCTURED_API_URL` | (空) | Unstructured.io API 端点。`ETL_TYPE` 为 `Unstructured` 时必填。`.ppt` 文件支持也需要此设置。示例:`http://unstructured:8000/general/v0/general`。 |
+| `UNSTRUCTURED_API_KEY` | (空) | Unstructured.io 认证的 API key。 |
+| `SCARF_NO_ANALYTICS` | `true` | 禁用 Unstructured 库的遥测/分析收集。 |
+| `TOP_K_MAX_VALUE` | `10` | 知识库检索中用户可设置的 `top_k` 参数最大值(每次搜索返回的结果数)。 |
+| `DATASET_MAX_SEGMENTS_PER_REQUEST` | `0` | 每个数据集 API 请求的最大段落数。`0` 表示不限制。 |
+
+#### 标注导入
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ANNOTATION_IMPORT_FILE_SIZE_LIMIT` | `2` | 标注导入的最大 CSV 文件大小(MB)。超过时返回 HTTP 413。 |
+| `ANNOTATION_IMPORT_MAX_RECORDS` | `10000` | 每次标注导入的最大记录数。超过的文件必须分批导入。 |
+| `ANNOTATION_IMPORT_MIN_RECORDS` | `1` | 每次标注导入所需的最少有效记录数。 |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_MINUTE` | `5` | 每个工作空间每分钟的最大标注导入请求数。超过时返回 HTTP 429。 |
+| `ANNOTATION_IMPORT_RATE_LIMIT_PER_HOUR` | `20` | 每个工作空间每小时的最大标注导入请求数。 |
+| `ANNOTATION_IMPORT_MAX_CONCURRENT` | `5` | 每个工作空间的最大并发标注导入任务数。过期任务在 2 分钟后自动清理。 |
+
+### 模型配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PROMPT_GENERATION_MAX_TOKENS` | `512` | 系统使用 LLM 自动生成提示时的最大 token 数。防止失控生成浪费 API 配额。 |
+| `CODE_GENERATION_MAX_TOKENS` | `1024` | 系统使用 LLM 自动生成代码时的最大 token 数。 |
+| `PLUGIN_BASED_TOKEN_COUNTING_ENABLED` | `false` | 使用基于插件的 token 计数以实现精确用量跟踪。禁用时 token 计数返回 0(更快但成本跟踪不够精确)。 |
+
+### 多模态配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MULTIMODAL_SEND_FORMAT` | `base64` | 文件发送到多模态 LLM 的方式。`base64` 将文件数据嵌入请求(兼容性更好,支持离线,负载更大)。`url` 发送签名 URL 让模型获取(更快,请求更小,但模型必须能访问 `FILES_URL`)。 |
+| `UPLOAD_IMAGE_FILE_SIZE_LIMIT` | `10` | 直接上传图片的最大文件大小(MB),支持 jpg、png、webp、gif、svg。 |
+| `UPLOAD_VIDEO_FILE_SIZE_LIMIT` | `100` | 直接上传视频的最大文件大小(MB),支持 mp4、mov、mpeg、webm。 |
+| `UPLOAD_AUDIO_FILE_SIZE_LIMIT` | `50` | 直接上传音频的最大文件大小(MB),支持 mp3、m4a、wav、amr、mpga。 |
+
-此文档当前仅提供英文版本。请参阅[英文文档](/en/self-host/configuration/environments)。
-
\ No newline at end of file
+所有上传大小限制还受 `NGINX_CLIENT_MAX_BODY_SIZE`(默认 `100M`)限制。如果你将任何上传限制增大到超过 100 MB,还需要相应增大 `NGINX_CLIENT_MAX_BODY_SIZE`——否则 Nginx 会以 413 错误拒绝上传。
+
+
+### Sentry 配置
+
+Sentry 提供错误跟踪和性能监控。每个服务有各自的 DSN 以分离错误报告。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SENTRY_DSN` | (空) | 跨服务共享的 Sentry DSN。 |
+| `API_SENTRY_DSN` | (空) | API 服务的 Sentry DSN。如果设置,覆盖 `SENTRY_DSN`。为空则禁用后端的 Sentry。 |
+| `API_SENTRY_TRACES_SAMPLE_RATE` | `1.0` | 包含在性能追踪中的请求比例(0.01 = 1%,1.0 = 100%)。追踪跨服务跟踪请求流。 |
+| `API_SENTRY_PROFILES_SAMPLE_RATE` | `1.0` | 包含在 CPU/内存性能分析中的请求比例(0.01 = 1%)。分析显示代码中时间花费在哪里。 |
+| `WEB_SENTRY_DSN` | (空) | Web 前端(Next.js)的 Sentry DSN。仅前端使用。 |
+| `PLUGIN_SENTRY_ENABLED` | `false` | 为插件守护进程服务启用 Sentry。 |
+| `PLUGIN_SENTRY_DSN` | (空) | 插件守护进程的 Sentry DSN。 |
+
+### Notion 集成配置
+
+将 Dify 连接到 Notion 作为知识库数据源。在 [https://www.notion.so/my-integrations](https://www.notion.so/my-integrations) 获取集成凭证。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `NOTION_INTEGRATION_TYPE` | `public` | `public` 使用标准 OAuth 2.0(需要 HTTPS 重定向 URL,需要 CLIENT_ID + CLIENT_SECRET)。`internal` 使用直接集成令牌(支持 HTTP)。本地部署建议使用 `internal`。 |
+| `NOTION_CLIENT_SECRET` | (空) | OAuth 客户端密钥。`public` 集成必填。 |
+| `NOTION_CLIENT_ID` | (空) | OAuth 客户端 ID。`public` 集成必填。 |
+| `NOTION_INTERNAL_SECRET` | (空) | Notion 的直接集成令牌。`internal` 集成必填。 |
+
+### 邮件配置
+
+Dify 发送邮件用于账户邀请、密码重置、登录验证码和人工输入节点通知。配置三个支持的提供商之一。邮件链接需要设置 `CONSOLE_WEB_URL`——参见[通用变量](#console_web_url)。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MAIL_TYPE` | `resend` | 邮件提供商:`resend`、`smtp` 或 `sendgrid`。 |
+| `MAIL_DEFAULT_SEND_FROM` | (空) | 所有外发邮件的默认「发件人」地址。必填。 |
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `RESEND_API_URL` | `https://api.resend.com` | Resend API 端点。用于自托管 Resend 或代理时覆盖。 |
+| `RESEND_API_KEY` | (空) | Resend API key。`MAIL_TYPE=resend` 时必填。 |
+
+
+
+
+
+三种 TLS 模式:隐式 TLS(`SMTP_USE_TLS=true`、`SMTP_OPPORTUNISTIC_TLS=false`,端口 465)、STARTTLS(`SMTP_USE_TLS=true`、`SMTP_OPPORTUNISTIC_TLS=true`,端口 587)或明文(`SMTP_USE_TLS=false`,端口 25)。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SMTP_SERVER` | (空) | SMTP 服务器地址。 |
+| `SMTP_PORT` | `465` | SMTP 服务器端口。STARTTLS 模式使用 `587`。 |
+| `SMTP_USERNAME` | (空) | SMTP 用户名。IP 白名单服务器可留空。 |
+| `SMTP_PASSWORD` | (空) | SMTP 密码。IP 白名单服务器可留空。 |
+| `SMTP_USE_TLS` | `true` | 启用 TLS。为 `true` 且 `SMTP_OPPORTUNISTIC_TLS=false` 时使用隐式 TLS(`SMTP_SSL`)。 |
+| `SMTP_OPPORTUNISTIC_TLS` | `false` | 使用 STARTTLS(显式 TLS)代替隐式 TLS。必须与 `SMTP_USE_TLS=true` 配合使用。 |
+| `SMTP_LOCAL_HOSTNAME` | (空) | 覆盖 SMTP HELO/EHLO 中发送的主机名。在 Docker 中当 SMTP 服务器拒绝容器主机名时必填(常见于 Google Workspace、Microsoft 365)。设为你的域名,例如 `mail.yourdomain.com`。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SENDGRID_API_KEY` | (空) | SendGrid API key。`MAIL_TYPE=sendgrid` 时必填。 |
+
+更多详情请参阅 [SendGrid 文档](https://sendgrid.com/docs/for-developers/sending-email/)。
+
+
+
+
+### 其他配置
+
+#### 索引
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH` | `4000` | 知识库文档分块时每个文本段落的最大 token 长度。值越大每个块保留的上下文越多;值越小提供更细的粒度。 |
+
+#### 令牌与邀请
+
+所有令牌过期变量控制存储在 Redis 中的一次性令牌的有效时长。过期后用户必须请求新令牌。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `INVITE_EXPIRY_HOURS` | `72` | 工作空间邀请链接的有效时长(小时)。 |
+| `RESET_PASSWORD_TOKEN_EXPIRY_MINUTES` | `5` | 密码重置令牌的有效时长(分钟)。 |
+| `EMAIL_REGISTER_TOKEN_EXPIRY_MINUTES` | `5` | 邮箱注册令牌的有效时长(分钟)。 |
+| `CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES` | `5` | 更改邮箱令牌的有效时长(分钟)。 |
+| `OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES` | `5` | 工作空间所有者转让令牌的有效时长(分钟)。 |
+
+#### 代码执行沙箱
+
+沙箱是一个独立的服务,在隔离环境中运行 Python、JavaScript 和 Jinja2 代码节点。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CODE_EXECUTION_ENDPOINT` | `http://sandbox:8194` | 沙箱服务端点。 |
+| `CODE_EXECUTION_API_KEY` | `dify-sandbox` | 沙箱认证的 API key。必须与沙箱服务中的 `SANDBOX_API_KEY` 匹配。 |
+| `CODE_EXECUTION_SSL_VERIFY` | `true` | 验证沙箱连接的 SSL。开发环境使用自签名证书时可禁用。 |
+| `CODE_EXECUTION_CONNECT_TIMEOUT` | `10` | 连接超时(秒)。 |
+| `CODE_EXECUTION_READ_TIMEOUT` | `60` | 读取超时(秒)。 |
+| `CODE_EXECUTION_WRITE_TIMEOUT` | `10` | 写入超时(秒)。 |
+| `CODE_EXECUTION_POOL_MAX_CONNECTIONS` | `100` | 到沙箱服务的最大并发 HTTP 连接数。 |
+| `CODE_EXECUTION_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | 沙箱连接池中保持的最大空闲连接数。 |
+| `CODE_EXECUTION_POOL_KEEPALIVE_EXPIRY` | `5.0` | 空闲沙箱连接关闭前的等待秒数。 |
+| `CODE_MAX_NUMBER` | `9223372036854775807` | 代码节点输出允许的最大数值(64 位有符号整数最大值)。 |
+| `CODE_MIN_NUMBER` | `-9223372036854775808` | 代码节点输出允许的最小数值(64 位有符号整数最小值)。 |
+| `CODE_MAX_STRING_LENGTH` | `400000` | 代码节点输出的最大字符串长度。防止无限字符串生成导致的内存耗尽。 |
+| `CODE_MAX_DEPTH` | `5` | 输出数据结构的最大嵌套深度。 |
+| `CODE_MAX_PRECISION` | `20` | 输出中浮点数的最大小数位数。 |
+| `CODE_MAX_STRING_ARRAY_LENGTH` | `30` | 字符串数组输出的最大元素数。 |
+| `CODE_MAX_OBJECT_ARRAY_LENGTH` | `30` | 对象数组输出的最大元素数。 |
+| `CODE_MAX_NUMBER_ARRAY_LENGTH` | `1000` | 数字数组输出的最大元素数。 |
+| `TEMPLATE_TRANSFORM_MAX_LENGTH` | `400000` | 模板转换节点输出的最大字符长度。 |
+
+#### 工作流运行时
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `WORKFLOW_MAX_EXECUTION_STEPS` | `500` | 每次工作流运行的最大节点执行数。超过此值将终止工作流。 |
+| `WORKFLOW_MAX_EXECUTION_TIME` | `1200` | 每次工作流运行的最大实际运行时间(秒)。超过此值将终止工作流。 |
+| `WORKFLOW_CALL_MAX_DEPTH` | `5` | 嵌套工作流调用工作流的最大深度。防止无限递归。 |
+| `MAX_VARIABLE_SIZE` | `204800` | 单个工作流变量的最大大小(字节,200 KB)。 |
+| `WORKFLOW_FILE_UPLOAD_LIMIT` | `10` | 单次工作流执行中可上传的最大文件数。 |
+| `WORKFLOW_NODE_EXECUTION_STORAGE` | `rdbms` | 工作流节点执行记录的存储位置。`rdbms` 将所有内容存储在数据库中。`hybrid` 将新数据存储在对象存储中,并从两者读取。 |
+| `DSL_EXPORT_ENCRYPT_DATASET_ID` | `true` | 导出 DSL 文件时加密数据集 ID。设为 `false` 以导出明文 ID,便于跨环境导入。 |
+
+#### 工作流存储仓库
+
+这些变量选择处理工作流执行数据的后端实现。默认的 `SQLAlchemy` 仓库将所有内容存储在数据库中。也可使用其他实现(例如 Celery、Logstore)实现不同的存储策略。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CORE_WORKFLOW_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository` | 工作流执行记录的仓库实现。 |
+| `CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository` | 工作流节点执行记录的仓库实现。 |
+| `API_WORKFLOW_RUN_REPOSITORY` | `repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository` | 工作流运行 API 操作的服务层仓库。 |
+| `API_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository` | 工作流节点执行 API 操作的服务层仓库。 |
+| `LOOP_NODE_MAX_COUNT` | `100` | 循环节点的最大迭代次数。防止无限循环。 |
+| `MAX_PARALLEL_LIMIT` | `10` | 工作流中并行分支的最大数量。 |
+
+#### GraphEngine 工作线程池
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `GRAPH_ENGINE_MIN_WORKERS` | `1` | 每个 GraphEngine 实例的最小工作线程数。 |
+| `GRAPH_ENGINE_MAX_WORKERS` | `10` | 每个 GraphEngine 实例的最大工作线程数。 |
+| `GRAPH_ENGINE_SCALE_UP_THRESHOLD` | `3` | 触发创建额外工作线程的队列深度。 |
+| `GRAPH_ENGINE_SCALE_DOWN_IDLE_TIME` | `5.0` | 多余工作线程在空闲此秒数后被移除。 |
+
+#### 工作流日志清理
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `WORKFLOW_LOG_CLEANUP_ENABLED` | `false` | 启用每天凌晨 2:00 自动清理工作流执行日志。 |
+| `WORKFLOW_LOG_RETENTION_DAYS` | `30` | 清理前保留工作流日志的天数。 |
+| `WORKFLOW_LOG_CLEANUP_BATCH_SIZE` | `100` | 每次清理批次处理的日志条目数。根据系统性能调整。 |
+| `WORKFLOW_LOG_CLEANUP_SPECIFIC_WORKFLOW_IDS` | (空) | 限制清理范围的工作流 ID 列表(逗号分隔)。为空时清理所有工作流日志。 |
+
+#### HTTP 请求节点
+
+这些变量配置工作流中用于调用外部 API 的 HTTP 请求节点。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `HTTP_REQUEST_NODE_MAX_TEXT_SIZE` | `1048576` | 最大文本响应大小(字节,1 MB)。超过此大小的响应将被截断。 |
+| `HTTP_REQUEST_NODE_MAX_BINARY_SIZE` | `10485760` | 最大二进制响应大小(字节,10 MB)。 |
+| `HTTP_REQUEST_NODE_SSL_VERIFY` | `true` | 验证 SSL 证书。测试自签名证书时可禁用。 |
+| `HTTP_REQUEST_MAX_CONNECT_TIMEOUT` | `10` | 用户在工作流编辑器中可设置的最大连接超时(秒)。每个节点的超时不能超过此值。 |
+| `HTTP_REQUEST_MAX_READ_TIMEOUT` | `600` | 最大读取超时上限(秒)。 |
+| `HTTP_REQUEST_MAX_WRITE_TIMEOUT` | `600` | 最大写入超时上限(秒)。 |
+
+#### Webhook
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `WEBHOOK_REQUEST_BODY_MAX_SIZE` | `10485760` | 最大 webhook 负载大小(字节,10 MB)。超过的负载以 413 错误拒绝。 |
+
+#### SSRF 防护
+
+Dify 的所有出站 HTTP 请求(HTTP 节点、图片下载等)都通过代理路由,该代理阻止对内部/私有 IP 范围的请求,防止服务端请求伪造(SSRF)攻击。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SSRF_PROXY_HTTP_URL` | `http://ssrf_proxy:3128` | HTTP 请求的 SSRF 代理 URL。 |
+| `SSRF_PROXY_HTTPS_URL` | `http://ssrf_proxy:3128` | HTTPS 请求的 SSRF 代理 URL。 |
+| `SSRF_POOL_MAX_CONNECTIONS` | `100` | SSRF HTTP 客户端连接池的最大并发连接数。 |
+| `SSRF_POOL_MAX_KEEPALIVE_CONNECTIONS` | `20` | SSRF 连接池中保持的最大空闲连接数。 |
+| `SSRF_POOL_KEEPALIVE_EXPIRY` | `5.0` | 空闲 SSRF 连接关闭前的等待秒数。 |
+| `RESPECT_XFORWARD_HEADERS_ENABLED` | `false` | 信任来自反向代理的 X-Forwarded-For/Proto/Port 头。仅在单个受信反向代理后启用——否则允许 IP 欺骗。 |
+
+#### Agent 配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `MAX_TOOLS_NUM` | `10` | Agent 可同时使用的最大工具数。 |
+| `MAX_ITERATIONS_NUM` | `99` | 每次 Agent 执行的最大推理迭代次数。防止 Agent 无限循环。 |
+
+## Web 前端服务
+
+这些变量仅由 Next.js Web 前端容器使用——不影响 Python 后端。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `TEXT_GENERATION_TIMEOUT_MS` | `60000` | 流式文本生成 UI 的前端超时。如果流中断超过此时间,UI 暂停渲染。 |
+| `ALLOW_UNSAFE_DATA_SCHEME` | `false` | 允许渲染 `data:` 协议的 URL。出于安全考虑默认禁用。 |
+| `MAX_TREE_DEPTH` | `50` | 工作流编辑器 UI 中的最大节点树深度。 |
+
+## 数据库服务
+
+这些变量直接在 Docker Compose 中配置数据库容器。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PGDATA` | `/var/lib/postgresql/data/pgdata` | 容器内 PostgreSQL 数据目录。 |
+| `MYSQL_HOST_VOLUME` | `./volumes/mysql/data` | 挂载为 MySQL 数据卷的宿主机路径。 |
+
+## 沙箱服务
+
+沙箱是用于执行代码节点(Python、JavaScript、Jinja2)的隔离服务。可以禁用网络访问以增强安全性。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SANDBOX_API_KEY` | `dify-sandbox` | 沙箱认证的 API key。必须与 API 服务中的 `CODE_EXECUTION_API_KEY` 匹配。 |
+| `SANDBOX_GIN_MODE` | `release` | 沙箱服务模式:`release` 或 `debug`。 |
+| `SANDBOX_WORKER_TIMEOUT` | `15` | 单次代码运行的最大执行时间(秒)。 |
+| `SANDBOX_ENABLE_NETWORK` | `true` | 允许代码发起出站 HTTP 请求。禁用可防止代码节点访问外部服务。 |
+| `SANDBOX_HTTP_PROXY` | `http://ssrf_proxy:3128` | 网络启用时用于 SSRF 防护的 HTTP 代理。 |
+| `SANDBOX_HTTPS_PROXY` | `http://ssrf_proxy:3128` | SSRF 防护的 HTTPS 代理。 |
+| `SANDBOX_PORT` | `8194` | 沙箱服务端口。 |
+
+## Nginx 反向代理
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `NGINX_SERVER_NAME` | `_` | Nginx 服务器名称。`_` 匹配任何主机名。 |
+| `NGINX_HTTPS_ENABLED` | `false` | 启用 HTTPS。为 `true` 时将 SSL 证书和密钥放在 `./nginx/ssl/` 中。 |
+| `NGINX_PORT` | `80` | HTTP 端口。 |
+| `NGINX_SSL_PORT` | `443` | HTTPS 端口(仅在 `NGINX_HTTPS_ENABLED=true` 时使用)。 |
+| `NGINX_SSL_CERT_FILENAME` | `dify.crt` | `./nginx/ssl/` 中的 SSL 证书文件名。 |
+| `NGINX_SSL_CERT_KEY_FILENAME` | `dify.key` | `./nginx/ssl/` 中的 SSL 私钥文件名。 |
+| `NGINX_SSL_PROTOCOLS` | `TLSv1.2 TLSv1.3` | 允许的 TLS 协议版本。 |
+| `NGINX_WORKER_PROCESSES` | `auto` | Nginx 工作进程数。`auto` 匹配 CPU 核心数。 |
+| `NGINX_CLIENT_MAX_BODY_SIZE` | `100M` | 最大请求体大小。影响代理级别的文件上传限制。 |
+| `NGINX_KEEPALIVE_TIMEOUT` | `65` | Keepalive 超时(秒)。 |
+| `NGINX_PROXY_READ_TIMEOUT` | `3600s` | 代理读取超时。设置较高(1 小时)以支持长时间运行的 SSE 流。 |
+| `NGINX_PROXY_SEND_TIMEOUT` | `3600s` | 代理发送超时。 |
+| `NGINX_ENABLE_CERTBOT_CHALLENGE` | `false` | 在 `/.well-known/acme-challenge/` 接受 Let's Encrypt ACME 验证请求。启用以支持自动证书续期。 |
+
+
+启用 HTTPS 后,还需要将[通用变量](#通用变量)中的 URL 变量(例如 `CONSOLE_API_URL`、`CONSOLE_WEB_URL`)更新为使用 `https://`。
+
+
+#### Certbot 配置
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CERTBOT_EMAIL` | (空) | Let's Encrypt 用于证书通知的邮箱地址。 |
+| `CERTBOT_DOMAIN` | (空) | SSL 证书的域名。 |
+| `CERTBOT_OPTIONS` | (空) | 额外的 certbot CLI 选项(例如 `--force-renewal`、`--dry-run`)。 |
+
+## SSRF 代理
+
+这些变量配置基于 Squid 的 SSRF 代理容器,该容器阻止对内部/私有网络的请求。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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` | 默认写入超时(秒)。 |
+
+## Docker Compose
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `COMPOSE_PROFILES` | `${VECTOR_STORE:-weaviate},${DB_TYPE:-postgresql}` | 根据你的数据库和向量存储选择自动决定启动哪些服务容器。例如设置 `DB_TYPE=mysql` 将启动 MySQL 而非 PostgreSQL。 |
+| `EXPOSE_NGINX_PORT` | `80` | 映射到 Nginx HTTP 的宿主机端口。 |
+| `EXPOSE_NGINX_SSL_PORT` | `443` | 映射到 Nginx HTTPS 的宿主机端口。 |
+
+## 模型提供商与工具位置配置
+
+自定义应用界面中可用的工具和模型提供商及其显示顺序。使用逗号分隔的值,项目之间不要有空格。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `POSITION_TOOL_PINS` | (空) | 将特定工具固定在列表顶部。示例:`bing,google`。 |
+| `POSITION_TOOL_INCLUDES` | (空) | 仅显示列出的工具。如未设置,所有工具可用。 |
+| `POSITION_TOOL_EXCLUDES` | (空) | 隐藏特定工具(固定的工具不受影响)。 |
+| `POSITION_PROVIDER_PINS` | (空) | 将特定模型提供商固定在顶部。示例:`openai,anthropic`。 |
+| `POSITION_PROVIDER_INCLUDES` | (空) | 仅显示列出的提供商。如未设置,所有提供商可用。 |
+| `POSITION_PROVIDER_EXCLUDES` | (空) | 隐藏特定提供商(固定的提供商不受影响)。 |
+
+## 插件守护进程配置
+
+插件守护进程是一个独立的服务,管理插件的生命周期(安装、执行、升级)。API 通过 HTTP 与其通信。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_DAEMON_URL` | `http://plugin_daemon:5002` | 插件守护进程服务 URL。 |
+| `PLUGIN_DAEMON_KEY` | (自动生成) | 插件守护进程的认证密钥。 |
+| `PLUGIN_DAEMON_PORT` | `5002` | 插件守护进程监听端口。 |
+| `PLUGIN_DAEMON_TIMEOUT` | `600.0` | 所有插件守护进程请求(安装、执行、列表)的超时时间(秒)。 |
+| `PLUGIN_MAX_PACKAGE_SIZE` | `52428800` | 最大插件包大小(字节,50 MB)。在市场下载时验证。 |
+| `PLUGIN_MODEL_SCHEMA_CACHE_TTL` | `3600` | 缓存插件模型 Schema 的时间(秒)。减少重复查找。 |
+| `PLUGIN_DIFY_INNER_API_KEY` | (自动生成) | 插件守护进程回调 Dify API 使用的 API key。必须与插件守护进程服务配置中的 `DIFY_INNER_API_KEY` 匹配。 |
+| `PLUGIN_DIFY_INNER_API_URL` | `http://api:5001` | 插件守护进程回调的内部 API URL。 |
+| `PLUGIN_DEBUGGING_HOST` | `0.0.0.0` | 插件远程调试连接的主机。 |
+| `PLUGIN_DEBUGGING_PORT` | `5003` | 插件远程调试连接的端口。 |
+| `MARKETPLACE_ENABLED` | `true` | 启用插件市场。禁用时仅本地安装的插件可用——浏览和自动升级不可用。 |
+| `MARKETPLACE_API_URL` | `https://marketplace.dify.ai` | 用于插件浏览、下载和升级检查的市场 API 端点。 |
+| `FORCE_VERIFYING_SIGNATURE` | `true` | 安装插件前要求有效签名。防止安装被篡改或未签名的包。 |
+| `PLUGIN_MAX_EXECUTION_TIMEOUT` | `600` | 插件执行超时(秒,插件守护进程侧)。应与 API 侧的 `PLUGIN_DAEMON_TIMEOUT` 匹配。 |
+| `PIP_MIRROR_URL` | (空) | 插件守护进程安装插件依赖时使用的自定义 PyPI 镜像 URL。适用于加速安装或离线环境。 |
+
+## OTLP / OpenTelemetry 配置
+
+OpenTelemetry 提供分布式追踪和指标收集。启用后,Dify 对 Flask 进行仪器化并将遥测数据导出到 OTLP 收集器。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ENABLE_OTEL` | `false` | OpenTelemetry 仪器化的主开关。 |
+| `OTLP_TRACE_ENDPOINT` | (空) | 专用追踪端点 URL。如未设置,回退到 `{OTLP_BASE_ENDPOINT}/v1/traces`。 |
+| `OTLP_METRIC_ENDPOINT` | (空) | 专用指标端点 URL。如未设置,回退到 `{OTLP_BASE_ENDPOINT}/v1/metrics`。 |
+| `OTLP_BASE_ENDPOINT` | `http://localhost:4318` | OTLP 收集器基础 URL。当未设置特定追踪/指标端点时作为回退使用。 |
+| `OTLP_API_KEY` | (空) | OTLP 认证的 API key。以 `Authorization: Bearer` 头发送。 |
+| `OTEL_EXPORTER_TYPE` | `otlp` | 导出器类型。`otlp` 导出到收集器;其他值使用控制台导出器(用于调试)。 |
+| `OTEL_EXPORTER_OTLP_PROTOCOL` | (空) | OTLP 导出协议。`grpc` 使用 gRPC 导出器;其他值使用 HTTP。 |
+| `OTEL_SAMPLING_RATE` | `0.1` | 追踪的请求比例(0.1 = 10%)。在高流量生产环境中降低此值可减少开销。 |
+| `OTEL_BATCH_EXPORT_SCHEDULE_DELAY` | `5000` | 批次导出之间的延迟(毫秒)。 |
+| `OTEL_MAX_QUEUE_SIZE` | `2048` | 丢弃前可排队的最大 span 数。 |
+| `OTEL_MAX_EXPORT_BATCH_SIZE` | `512` | 每次导出批次的最大 span 数。 |
+| `OTEL_METRIC_EXPORT_INTERVAL` | `60000` | 指标导出间隔(毫秒)。 |
+| `OTEL_BATCH_EXPORT_TIMEOUT` | `10000` | 批次 span 导出超时(毫秒)。 |
+| `OTEL_METRIC_EXPORT_TIMEOUT` | `30000` | 指标导出超时(毫秒)。 |
+
+## 杂项
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `CSP_WHITELIST` | (空) | 在 Content Security Policy 头中允许的额外域名。 |
+| `ALLOW_EMBED` | `false` | 允许 Dify 页面在 iframe 中嵌入。为 `false` 时设置 `X-Frame-Options: DENY` 以防止点击劫持。 |
+| `SWAGGER_UI_ENABLED` | `false` | 在 `SWAGGER_UI_PATH` 暴露 Swagger UI 以浏览 API 文档。Swagger 端点绕过认证。 |
+| `SWAGGER_UI_PATH` | `/swagger-ui.html` | Swagger UI 的 URL 路径。 |
+| `MAX_SUBMIT_COUNT` | `100` | 线程池中用于并行工作流节点执行的最大并发任务提交数。 |
+| `TENANT_ISOLATED_TASK_CONCURRENCY` | `1` | 每个租户同时处理的文档索引或 RAG 管道任务数。增大可加快索引速度但增加数据库负载。 |
+
+### 定时任务配置
+
+Dify 使用 Celery Beat 按可配置的计划运行后台维护任务。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ENABLE_CLEAN_EMBEDDING_CACHE_TASK` | `false` | 每天凌晨 2:00 从数据库中删除过期的嵌入缓存记录。管理数据库大小。 |
+| `ENABLE_CLEAN_UNUSED_DATASETS_TASK` | `false` | 禁用在保留期内没有活动的知识库中的文档。每天凌晨 3:00 运行。 |
+| `ENABLE_CLEAN_MESSAGES` | `false` | 每天凌晨 4:00 删除超过保留期的对话消息。 |
+| `ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK` | `false` | 向工作空间所有者发送邮件,列出被清理任务自动禁用文档的知识库。每周一上午 10:00 运行。 |
+| `ENABLE_DATASETS_QUEUE_MONITOR` | `false` | 监控 Redis 中的数据集处理队列积压。当队列超过阈值时发送邮件警报。 |
+| `QUEUE_MONITOR_INTERVAL` | `30` | 检查队列的频率(分钟)。 |
+| `QUEUE_MONITOR_THRESHOLD` | `200` | 触发警报邮件的队列大小。 |
+| `QUEUE_MONITOR_ALERT_EMAILS` | (空) | 接收队列警报的邮箱地址(逗号分隔)。 |
+| `ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK` | `true` | 每 15 分钟检查市场中是否有更新的插件版本。根据每个租户的自动升级计划分发升级任务。 |
+| `ENABLE_WORKFLOW_SCHEDULE_POLLER_TASK` | `true` | 启用工作流调度轮询器,检查并触发计划的工作流运行。 |
+| `WORKFLOW_SCHEDULE_POLLER_INTERVAL` | `1` | 检查到期计划工作流的频率(分钟)。 |
+| `WORKFLOW_SCHEDULE_POLLER_BATCH_SIZE` | `100` | 每次轮询周期获取的最大到期计划数。 |
+| `WORKFLOW_SCHEDULE_MAX_DISPATCH_PER_TICK` | `0` | 熔断器:每个周期分发的最大计划数。`0` 表示不限制。 |
+| `ENABLE_WORKFLOW_RUN_CLEANUP_TASK` | `false` | 启用工作流运行记录的自动清理。 |
+| `ENABLE_CREATE_TIDB_SERVERLESS_TASK` | `false` | 预创建 TiDB Serverless 集群用于向量数据库池。 |
+| `ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK` | `false` | 定期更新 TiDB Serverless 集群状态。 |
+| `ENABLE_HUMAN_INPUT_TIMEOUT_TASK` | `true` | 检查过期的人工输入表单,恢复或停止超时的工作流。 |
+| `HUMAN_INPUT_TIMEOUT_TASK_INTERVAL` | `1` | 检查过期人工输入表单的频率(分钟)。 |
+
+#### 记录保留与清理
+
+这些变量控制旧记录的清理方式。当 `BILLING_ENABLED` 激活时,清理针对沙箱层租户并有宽限期。当计费禁用时(自托管),清理适用于保留窗口内的所有记录。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `SANDBOX_EXPIRED_RECORDS_RETENTION_DAYS` | `30` | 超过此天数的记录有资格被删除。 |
+| `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_CLEAN_TASK_LOCK_TTL` | `90000` | Redis 锁 TTL(秒,约 25 小时),防止清理任务并发执行。 |
+
+## 阿里云 SLS 日志存储配置
+
+与阿里云简单日志服务(SLS)的可选集成,用于将工作流执行日志存储在外部而非数据库中。通过将仓库配置变量设置为使用 logstore 实现来启用。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ALIYUN_SLS_ACCESS_KEY_ID` | (空) | 阿里云 SLS 认证的 access key ID。 |
+| `ALIYUN_SLS_ACCESS_KEY_SECRET` | (空) | 阿里云 SLS 认证的 access key secret。 |
+| `ALIYUN_SLS_ENDPOINT` | (空) | SLS 服务端点 URL(例如 `cn-hangzhou.log.aliyuncs.com`)。 |
+| `ALIYUN_SLS_REGION` | (空) | 阿里云区域(例如 `cn-hangzhou`)。 |
+| `ALIYUN_SLS_PROJECT_NAME` | (空) | 存储工作流日志的 SLS 项目名称。 |
+| `ALIYUN_SLS_LOGSTORE_TTL` | `365` | SLS logstore 的数据保留天数。使用 `3650` 表示永久存储。 |
+| `LOGSTORE_DUAL_WRITE_ENABLED` | `false` | 同时将工作流数据写入 SLS 和 PostgreSQL。迁移到 SLS 时有用。 |
+| `LOGSTORE_DUAL_READ_ENABLED` | `true` | 当 SLS 无结果时回退到 PostgreSQL。迁移期间历史数据仅存在于数据库中时有用。 |
+| `LOGSTORE_ENABLE_PUT_GRAPH_FIELD` | `true` | 在 SLS 日志中包含完整的工作流图定义。设为 `false` 可通过省略大型图数据来减少存储。 |
+
+## 事件总线配置
+
+API 和 Celery 工作进程之间基于 Redis 的事件传输。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `EVENT_BUS_REDIS_URL` | (空) | 事件流的 Redis 连接 URL。为空时使用主 Redis 连接设置。 |
+| `EVENT_BUS_REDIS_CHANNEL_TYPE` | `pubsub` | 传输类型:`pubsub`(Pub/Sub,至多一次投递)、`sharded`(分片 Pub/Sub)或 `streams`(Redis Streams,至少一次投递)。 |
+| `EVENT_BUS_REDIS_USE_CLUSTERS` | `false` | 为事件总线启用 Redis 集群模式。建议在大规模部署中使用。 |
+
+## 向量数据库服务配置
+
+这些变量配置向量数据库容器本身(而非 Dify 客户端连接)。仅与你选择的 `VECTOR_STORE` 相关的变量有效。
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `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` | 启用 API key 认证。 |
+| `WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS` | (自动生成) | 允许的 API key。必须与客户端配置中的 `WEAVIATE_API_KEY` 匹配。 |
+| `WEAVIATE_AUTHENTICATION_APIKEY_USERS` | `hello@dify.ai` | 与 API key 关联的用户。 |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED` | `true` | 启用管理员列表授权。 |
+| `WEAVIATE_AUTHORIZATION_ADMINLIST_USERS` | `hello@dify.ai` | 管理员用户。 |
+| `WEAVIATE_DISABLE_TELEMETRY` | `false` | 禁用 Weaviate 遥测。 |
+| `WEAVIATE_ENABLE_TOKENIZER_GSE` | `false` | 启用 GSE 分词器(中文)。 |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_JA` | `false` | 启用 Kagome 分词器(日文)。 |
+| `WEAVIATE_ENABLE_TOKENIZER_KAGOME_KR` | `false` | 启用 Kagome 分词器(韩文)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ETCD_AUTO_COMPACTION_MODE` | `revision` | ETCD 自动压缩模式。 |
+| `ETCD_AUTO_COMPACTION_RETENTION` | `1000` | 自动压缩保留的修订数。 |
+| `ETCD_QUOTA_BACKEND_BYTES` | `4294967296` | 后端配额(字节,4 GB)。 |
+| `ETCD_SNAPSHOT_COUNT` | `50000` | 触发快照前的变更数。 |
+| `ETCD_ENDPOINTS` | `etcd:2379` | ETCD 服务端点。 |
+| `MINIO_ACCESS_KEY` | `minioadmin` | MinIO access key。 |
+| `MINIO_SECRET_KEY` | `minioadmin` | MinIO secret key。 |
+| `MINIO_ADDRESS` | `minio:9000` | MinIO 服务地址。 |
+| `MILVUS_AUTHORIZATION_ENABLED` | `true` | 启用 Milvus 安全授权。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `OPENSEARCH_DISCOVERY_TYPE` | `single-node` | 集群形成的发现类型。 |
+| `OPENSEARCH_BOOTSTRAP_MEMORY_LOCK` | `true` | 启动时锁定内存以防止交换。 |
+| `OPENSEARCH_JAVA_OPTS_MIN` | `512m` | JVM 最小堆大小。 |
+| `OPENSEARCH_JAVA_OPTS_MAX` | `1024m` | JVM 最大堆大小。 |
+| `OPENSEARCH_INITIAL_ADMIN_PASSWORD` | `Qazwsxedc!@#123` | OpenSearch 服务的初始管理员密码。 |
+| `OPENSEARCH_MEMLOCK_SOFT` | `-1` | 软内存锁限制(`-1` = 无限制)。 |
+| `OPENSEARCH_MEMLOCK_HARD` | `-1` | 硬内存锁限制(`-1` = 无限制)。 |
+| `OPENSEARCH_NOFILE_SOFT` | `65536` | 软文件描述符限制。 |
+| `OPENSEARCH_NOFILE_HARD` | `65536` | 硬文件描述符限制。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PGVECTOR_PGUSER` | `postgres` | PGVector 容器的 PostgreSQL 用户。 |
+| `PGVECTOR_POSTGRES_PASSWORD` | (自动生成) | PGVector 容器的 PostgreSQL 密码。 |
+| `PGVECTOR_POSTGRES_DB` | `dify` | PGVector 容器中的数据库名称。 |
+| `PGVECTOR_PGDATA` | `/var/lib/postgresql/data/pgdata` | 容器内的数据目录。 |
+| `PGVECTOR_PG_BIGM_VERSION` | `1.2-20240606` | pg_bigm 扩展版本。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `ORACLE_PWD` | `Dify123456` | 容器的 Oracle 数据库密码。 |
+| `ORACLE_CHARACTERSET` | `AL32UTF8` | Oracle 字符集。 |
+| `CHROMA_SERVER_AUTHN_CREDENTIALS` | (自动生成) | Chroma 服务器容器的认证凭证。 |
+| `CHROMA_SERVER_AUTHN_PROVIDER` | `chromadb.auth.token_authn.TokenAuthenticationServerProvider` | Chroma 服务器的认证提供者。 |
+| `CHROMA_IS_PERSISTENT` | `TRUE` | 为 Chroma 启用持久化存储。 |
+| `KIBANA_PORT` | `5601` | Kibana 端口(Elasticsearch UI)。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `IRIS_WEB_SERVER_PORT` | `52773` | IRIS Web 服务器管理端口。 |
+| `IRIS_TIMEZONE` | `UTC` | IRIS 容器的时区。 |
+| `DB_PLUGIN_DATABASE` | `dify_plugin` | 插件数据的独立数据库名称。 |
+
+
+
+
+## 插件守护进程存储配置
+
+插件守护进程可以在不同的存储后端中存储插件包。仅配置与 `PLUGIN_STORAGE_TYPE` 匹配的提供商。
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_STORAGE_TYPE` | `local` | 插件存储后端:`local`、`aws_s3`、`tencent_cos`、`azure_blob`、`aliyun_oss`、`volcengine_tos`。 |
+| `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_STORAGE_OSS_BUCKET` | (空) | 对象存储桶名称(跨 S3/COS/OSS/TOS 提供商共享)。 |
+| `PLUGIN_PPROF_ENABLED` | `false` | 为插件守护进程启用 Go pprof 性能分析。 |
+| `PLUGIN_PYTHON_ENV_INIT_TIMEOUT` | `120` | 初始化插件 Python 环境的超时时间(秒)。 |
+| `PLUGIN_STDIO_BUFFER_SIZE` | `1024` | 插件标准 I/O 通信的缓冲区大小(字节)。 |
+| `PLUGIN_STDIO_MAX_BUFFER_SIZE` | `5242880` | 插件标准 I/O 通信的最大缓冲区大小(字节,5 MB)。 |
+| `ENFORCE_LANGGENIUS_PLUGIN_SIGNATURES` | `true` | 强制验证 LangGenius 官方插件的签名。 |
+| `ENDPOINT_URL_TEMPLATE` | `http://localhost/e/{hook_id}` | 插件端点的 URL 模板。`{hook_id}` 将被替换为实际的 hook ID。 |
+| `EXPOSE_PLUGIN_DAEMON_PORT` | `5002` | 映射到插件守护进程的宿主机端口。 |
+| `EXPOSE_PLUGIN_DEBUGGING_HOST` | `localhost` | 插件远程调试的主机。 |
+| `EXPOSE_PLUGIN_DEBUGGING_PORT` | `5003` | 插件远程调试的宿主机端口。 |
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_S3_USE_AWS` | `false` | 使用 AWS S3(相对于 S3 兼容服务)。 |
+| `PLUGIN_S3_USE_AWS_MANAGED_IAM` | `false` | 使用 IAM 角色代替显式凭证。 |
+| `PLUGIN_S3_ENDPOINT` | (空) | S3 端点 URL。 |
+| `PLUGIN_S3_USE_PATH_STYLE` | `false` | 使用路径风格 URL 代替虚拟主机风格。 |
+| `PLUGIN_AWS_ACCESS_KEY` | (空) | AWS access key。 |
+| `PLUGIN_AWS_SECRET_KEY` | (空) | AWS secret key。 |
+| `PLUGIN_AWS_REGION` | (空) | AWS 区域。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_AZURE_BLOB_STORAGE_CONTAINER_NAME` | (空) | Azure Blob 容器名称。 |
+| `PLUGIN_AZURE_BLOB_STORAGE_CONNECTION_STRING` | (空) | Azure Blob 连接字符串。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_TENCENT_COS_SECRET_KEY` | (空) | 腾讯 COS secret key。 |
+| `PLUGIN_TENCENT_COS_SECRET_ID` | (空) | 腾讯 COS secret ID。 |
+| `PLUGIN_TENCENT_COS_REGION` | (空) | 腾讯 COS 区域。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_ALIYUN_OSS_REGION` | (空) | 阿里云 OSS 区域。 |
+| `PLUGIN_ALIYUN_OSS_ENDPOINT` | (空) | 阿里云 OSS 端点。 |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_ID` | (空) | 阿里云 OSS access key ID。 |
+| `PLUGIN_ALIYUN_OSS_ACCESS_KEY_SECRET` | (空) | 阿里云 OSS access key secret。 |
+| `PLUGIN_ALIYUN_OSS_AUTH_VERSION` | `v4` | 阿里云 OSS 认证版本。 |
+| `PLUGIN_ALIYUN_OSS_PATH` | (空) | 阿里云 OSS 路径前缀。 |
+
+
+
+
+
+| 变量 | 默认值 | 说明 |
+|---|---|---|
+| `PLUGIN_VOLCENGINE_TOS_ENDPOINT` | (空) | 火山引擎 TOS 端点。 |
+| `PLUGIN_VOLCENGINE_TOS_ACCESS_KEY` | (空) | 火山引擎 TOS access key。 |
+| `PLUGIN_VOLCENGINE_TOS_SECRET_KEY` | (空) | 火山引擎 TOS secret key。 |
+| `PLUGIN_VOLCENGINE_TOS_REGION` | (空) | 火山引擎 TOS 区域。 |
+
+
+