2024-06-28 17:37:52 +08:00
x-shared-env : &shared-api-worker-env
# The log level for the application. Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
LOG_LEVEL : ${LOG_LEVEL:-INFO}
# Debug mode, default is false. It is recommended to turn on this configuration for local development to prevent some problems caused by monkey patch.
DEBUG : ${DEBUG:-false}
# Flask debug mode, it can output trace information at the interface when turned on, which is convenient for debugging.
FLASK_DEBUG : ${FLASK_DEBUG:-false}
# A secretkey that is used for securely signing the session cookie and encrypting sensitive information on the database. You can generate a strong key using `openssl rand -base64 42`.
2024-06-30 21:17:53 +08:00
SECRET_KEY : ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U}
2024-06-28 17:37:52 +08:00
# Password for admin user initialization.
# If left unset, admin user will not be prompted for a password when creating the initial admin account.
2024-06-30 21:17:53 +08:00
INIT_PASSWORD : ${INIT_PASSWORD:-}
2024-06-28 17:37:52 +08:00
# The base URL of console application web frontend, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai
2024-06-30 21:17:53 +08:00
CONSOLE_WEB_URL : ${CONSOLE_WEB_URL:-}
2024-06-28 17:37:52 +08:00
# The base URL of console application api server, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai
2024-06-30 21:17:53 +08:00
CONSOLE_API_URL : ${CONSOLE_API_URL:-}
2024-06-28 17:37:52 +08:00
# The URL prefix for Service API endpoints, refers to the base URL of the current API service if api domain is
# different from console domain.
# example: http://api.dify.ai
2024-06-30 21:17:53 +08:00
SERVICE_API_URL : ${SERVICE_API_URL:-}
2024-06-28 17:37:52 +08:00
# The URL prefix for Web APP frontend, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app
2024-06-30 21:17:53 +08:00
APP_WEB_URL : ${APP_WEB_URL:-}
2024-06-28 17:37:52 +08:00
# Whether to enable the version check policy. If set to false, https://updates.dify.ai will not be called for version check.
2024-06-30 21:17:53 +08:00
CHECK_UPDATE_URL : ${CHECK_UPDATE_URL:-true}
2024-06-28 17:37:52 +08:00
# Used to change the OpenAI base address, default is https://api.openai.com/v1.
# When OpenAI cannot be accessed in China, replace it with a domestic mirror address,
# or when a local model provides OpenAI compatible API, it can be replaced.
2024-06-30 21:17:53 +08:00
OPENAI_API_BASE : ${OPENAI_API_BASE:-}
2024-06-28 17:37:52 +08:00
# File preview or download Url prefix.
# used to display File preview or download Url to the front-end or as Multi-model inputs;
# Url is signed and has expiration time.
2024-06-30 21:17:53 +08:00
FILES_URL : ${FILES_URL:-}
2024-06-28 17:37:52 +08:00
# File Access Time specifies a time interval in seconds for the file to be accessed.
# The default value is 300 seconds.
FILES_ACCESS_TIMEOUT : ${FILES_ACCESS_TIMEOUT:-300}
# When enabled, migrations will be executed prior to application startup and the application will start after the migrations have completed.
MIGRATION_ENABLED : ${MIGRATION_ENABLED:-true}
# Deployment environment.
# Supported values are `PRODUCTION`, `TESTING`. Default is `PRODUCTION`.
# Testing environment. There will be a distinct color label on the front-end page,
# indicating that this environment is a testing environment.
DEPLOY_ENV : ${DEPLOY_ENV:-PRODUCTION}
# API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed.
2024-06-30 21:17:53 +08:00
DIFY_BIND_ADDRESS : ${DIFY_BIND_ADDRESS:-0.0.0.0}
2024-06-28 17:37:52 +08:00
# API service binding port number, default 5001.
2024-06-30 21:17:53 +08:00
DIFY_PORT : ${DIFY_PORT:-5001}
2024-06-28 17:37:52 +08:00
# 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
2024-06-30 21:17:53 +08:00
SERVER_WORKER_AMOUNT : ${SERVER_WORKER_AMOUNT:-}
2024-06-28 17:37:52 +08:00
# Defaults to gevent. If using windows, it can be switched to sync or solo.
2024-06-30 21:17:53 +08:00
SERVER_WORKER_CLASS : ${SERVER_WORKER_CLASS:-}
2024-06-28 17:37:52 +08:00
# Similar to SERVER_WORKER_CLASS. Default is gevent.
# If using windows, it can be switched to sync or solo.
2024-06-30 21:17:53 +08:00
CELERY_WORKER_CLASS : ${CELERY_WORKER_CLASS:-}
2024-06-28 17:37:52 +08:00
# Request handling timeout. The default is 200,
# it is recommended to set it to 360 to support a longer sse connection time.
2024-06-30 21:17:53 +08:00
GUNICORN_TIMEOUT : ${GUNICORN_TIMEOUT:-360}
2024-06-28 17:37:52 +08:00
# The number of Celery workers. The default is 1, and can be set as needed.
2024-06-30 21:17:53 +08:00
CELERY_WORKER_AMOUNT : ${CELERY_WORKER_AMOUNT:-}
2024-06-28 17:37:52 +08:00
# The configurations of postgres database connection.
# It is consistent with the configuration in the 'db' service below.
2024-06-30 21:17:53 +08:00
DB_USERNAME : ${DB_USERNAME:-postgres}
DB_PASSWORD : ${DB_PASSWORD:-difyai123456}
DB_HOST : ${DB_HOST:-db}
DB_PORT : ${DB_PORT:-5432}
DB_DATABASE : ${DB_DATABASE:-dify}
2024-06-28 17:37:52 +08:00
# The size of the database connection pool.
# The default is 30 connections, which can be appropriately increased.
2024-06-30 21:17:53 +08:00
SQLALCHEMY_POOL_SIZE : ${SQLALCHEMY_POOL_SIZE:-30}
2024-06-28 17:37:52 +08:00
# Database connection pool recycling time, the default is 3600 seconds.
2024-06-30 21:17:53 +08:00
SQLALCHEMY_POOL_RECYCLE : ${SQLALCHEMY_POOL_RECYCLE:-3600}
2024-06-28 17:37:52 +08:00
# Whether to print SQL, default is false.
2024-06-30 21:17:53 +08:00
SQLALCHEMY_ECHO : ${SQLALCHEMY_ECHO:-false}
2024-06-28 17:37:52 +08:00
# The configurations of redis connection.
# It is consistent with the configuration in the 'redis' service below.
2024-06-30 21:17:53 +08:00
REDIS_HOST : ${REDIS_HOST:-redis}
2024-06-28 17:37:52 +08:00
REDIS_PORT : ${REDIS_PORT:-6379}
2024-06-30 21:17:53 +08:00
REDIS_USERNAME : ${REDIS_USERNAME:-}
REDIS_PASSWORD : ${REDIS_PASSWORD:-difyai123456}
REDIS_USE_SSL : ${REDIS_USE_SSL:-false}
2024-06-28 17:37:52 +08:00
# Redis Database, default is 0. Please use a different Database from Session Redis and Celery Broker.
REDIS_DB : 0
# The configurations of celery broker.
# Use redis as the broker, and redis db 1 for celery broker.
2024-06-30 21:17:53 +08:00
CELERY_BROKER_URL : ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1}
BROKER_USE_SSL : ${BROKER_USE_SSL:-false}
2024-06-28 17:37:52 +08:00
# Specifies the allowed origins for cross-origin requests to the Web API, e.g. https://dify.app or * for all origins.
2024-06-30 21:17:53 +08:00
WEB_API_CORS_ALLOW_ORIGINS : ${WEB_API_CORS_ALLOW_ORIGINS:-*}
2024-06-28 17:37:52 +08:00
# Specifies the allowed origins for cross-origin requests to the console API, e.g. https://cloud.dify.ai or * for all origins.
2024-06-30 21:17:53 +08:00
CONSOLE_CORS_ALLOW_ORIGINS : ${CONSOLE_CORS_ALLOW_ORIGINS:-*}
2024-06-28 17:37:52 +08:00
# The type of storage to use for storing user files. Supported values are `local` and `s3` and `azure-blob` and `google-storage`, Default: `local`
2024-06-30 21:17:53 +08:00
STORAGE_TYPE : ${STORAGE_TYPE:-local}
2024-06-28 17:37:52 +08:00
# The path to the local storage directory, the directory relative the root path of API service codes or absolute path. Default: `storage` or `/home/john/storage`.
# only available when STORAGE_TYPE is `local`.
STORAGE_LOCAL_PATH : storage
# The S3 storage configurations, only available when STORAGE_TYPE is `s3`.
2024-06-30 21:17:53 +08:00
S3_USE_AWS_MANAGED_IAM : ${S3_USE_AWS_MANAGED_IAM:-false}
S3_ENDPOINT : ${S3_ENDPOINT:-}
S3_BUCKET_NAME : ${S3_BUCKET_NAME:-}
S3_ACCESS_KEY : ${S3_ACCESS_KEY:-}
S3_SECRET_KEY : ${S3_SECRET_KEY:-}
S3_REGION : ${S3_REGION:-us-east-1}
2024-06-28 17:37:52 +08:00
# The Azure Blob storage configurations, only available when STORAGE_TYPE is `azure-blob`.
2024-06-30 21:17:53 +08:00
AZURE_BLOB_ACCOUNT_NAME : ${AZURE_BLOB_ACCOUNT_NAME:-}
AZURE_BLOB_ACCOUNT_KEY : ${AZURE_BLOB_ACCOUNT_KEY:-}
AZURE_BLOB_CONTAINER_NAME : ${AZURE_BLOB_CONTAINER_NAME:-}
AZURE_BLOB_ACCOUNT_URL : ${AZURE_BLOB_ACCOUNT_URL:-}
2024-06-28 17:37:52 +08:00
# The Google storage configurations, only available when STORAGE_TYPE is `google-storage`.
2024-06-30 21:17:53 +08:00
GOOGLE_STORAGE_BUCKET_NAME : ${GOOGLE_STORAGE_BUCKET_NAME:-}
2024-06-28 17:37:52 +08:00
# if you want to use Application Default Credentials, you can leave GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64 empty.
2024-06-30 21:17:53 +08:00
GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64 : ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-}
2024-06-28 17:37:52 +08:00
# The Alibaba Cloud OSS configurations, only available when STORAGE_TYPE is `aliyun-oss`
2024-06-30 21:17:53 +08:00
ALIYUN_OSS_BUCKET_NAME : ${ALIYUN_OSS_BUCKET_NAME:-}
ALIYUN_OSS_ACCESS_KEY : ${ALIYUN_OSS_ACCESS_KEY:-}
ALIYUN_OSS_SECRET_KEY : ${ALIYUN_OSS_SECRET_KEY:-}
ALIYUN_OSS_ENDPOINT : ${ALIYUN_OSS_ENDPOINT:-}
ALIYUN_OSS_REGION : ${ALIYUN_OSS_REGION:-}
ALIYUN_OSS_AUTH_VERSION : ${ALIYUN_OSS_AUTH_VERSION:-v4}
2024-06-28 17:37:52 +08:00
# The Tencent COS storage configurations, only available when STORAGE_TYPE is `tencent-cos`.
2024-06-30 21:17:53 +08:00
TENCENT_COS_BUCKET_NAME : ${TENCENT_COS_BUCKET_NAME:-}
TENCENT_COS_SECRET_KEY : ${TENCENT_COS_SECRET_KEY:-}
TENCENT_COS_SECRET_ID : ${TENCENT_COS_SECRET_ID:-}
TENCENT_COS_REGION : ${TENCENT_COS_REGION:-}
TENCENT_COS_SCHEME : ${TENCENT_COS_SCHEME:-}
2024-06-28 17:37:52 +08:00
# The type of vector store to use. Supported values are `weaviate`, `qdrant`, `milvus`, `relyt`, `pgvector`, `chroma`, 'opensearch', 'tidb_vector'.
2024-06-30 21:17:53 +08:00
VECTOR_STORE : ${VECTOR_STORE:-weaviate}
2024-06-28 17:37:52 +08:00
# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`.
2024-06-30 21:17:53 +08:00
WEAVIATE_ENDPOINT : ${WEAVIATE_ENDPOINT:-http://weaviate:8080}
2024-06-28 17:37:52 +08:00
# The Weaviate API key.
2024-06-30 21:17:53 +08:00
WEAVIATE_API_KEY : ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
2024-06-28 17:37:52 +08:00
# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.
2024-06-30 21:17:53 +08:00
QDRANT_URL : ${QDRANT_URL:-http://qdrant:6333}
2024-06-28 17:37:52 +08:00
# The Qdrant API key.
2024-06-30 21:17:53 +08:00
QDRANT_API_KEY : ${QDRANT_API_KEY:-difyai123456}
2024-06-28 17:37:52 +08:00
# The Qdrant client timeout setting.
2024-06-30 21:17:53 +08:00
QDRANT_CLIENT_TIMEOUT : ${QDRANT_CLIENT_TIMEOUT:-20}
2024-06-28 17:37:52 +08:00
# The Qdrant client enable gRPC mode.
2024-06-30 21:17:53 +08:00
QDRANT_GRPC_ENABLED : ${QDRANT_GRPC_ENABLED:-false}
2024-06-28 17:37:52 +08:00
# The Qdrant server gRPC mode PORT.
2024-06-30 21:17:53 +08:00
QDRANT_GRPC_PORT : ${QDRANT_GRPC_PORT:-6334}
2024-06-28 17:37:52 +08:00
# Milvus configuration Only available when VECTOR_STORE is `milvus`.
# The milvus host.
2024-06-30 21:17:53 +08:00
MILVUS_HOST : ${MILVUS_HOST:-127.0.0.1}
2024-06-28 17:37:52 +08:00
# The milvus host.
2024-06-30 21:17:53 +08:00
MILVUS_PORT : ${MILVUS_PORT:-19530}
2024-06-28 17:37:52 +08:00
# The milvus username.
2024-06-30 21:17:53 +08:00
MILVUS_USER : ${MILVUS_USER:-root}
2024-06-28 17:37:52 +08:00
# The milvus password.
2024-06-30 21:17:53 +08:00
MILVUS_PASSWORD : ${MILVUS_PASSWORD:-Milvus}
2024-06-28 17:37:52 +08:00
# The milvus tls switch.
2024-06-30 21:17:53 +08:00
MILVUS_SECURE : ${MILVUS_SECURE:-false}
2024-06-28 17:37:52 +08:00
# relyt configurations
2024-06-30 21:17:53 +08:00
RELYT_HOST : ${RELYT_HOST:-db}
RELYT_PORT : ${RELYT_PORT:-5432}
RELYT_USER : ${RELYT_USER:-postgres}
RELYT_PASSWORD : ${RELYT_PASSWORD:-difyai123456}
RELYT_DATABASE : ${RELYT_DATABASE:-postgres}
2024-06-28 17:37:52 +08:00
# pgvector configurations
2024-06-30 21:17:53 +08:00
PGVECTOR_HOST : ${PGVECTOR_HOST:-pgvector}
PGVECTOR_PORT : ${PGVECTOR_PORT:-5432}
PGVECTOR_USER : ${PGVECTOR_USER:-postgres}
PGVECTOR_PASSWORD : ${PGVECTOR_PASSWORD:-difyai123456}
PGVECTOR_DATABASE : ${PGVECTOR_DATABASE:-dify}
2024-06-28 17:37:52 +08:00
# tidb vector configurations
2024-06-30 21:17:53 +08:00
TIDB_VECTOR_HOST : ${TIDB_VECTOR_HOST:-tidb}
TIDB_VECTOR_PORT : ${TIDB_VECTOR_PORT:-4000}
TIDB_VECTOR_USER : ${TIDB_VECTOR_USER:-}
TIDB_VECTOR_PASSWORD : ${TIDB_VECTOR_PASSWORD:-}
TIDB_VECTOR_DATABASE : ${TIDB_VECTOR_DATABASE:-dify}
2024-06-28 17:37:52 +08:00
# oracle configurations
2024-06-30 21:17:53 +08:00
ORACLE_HOST : ${ORACLE_HOST:-oracle}
ORACLE_PORT : ${ORACLE_PORT:-1521}
ORACLE_USER : ${ORACLE_USER:-dify}
ORACLE_PASSWORD : ${ORACLE_PASSWORD:-dify}
ORACLE_DATABASE : ${ORACLE_DATABASE:-FREEPDB1}
2024-06-28 17:37:52 +08:00
# Chroma configuration
2024-06-30 21:17:53 +08:00
CHROMA_HOST : ${CHROMA_HOST:-127.0.0.1}
CHROMA_PORT : ${CHROMA_PORT:-8000}
CHROMA_TENANT : ${CHROMA_TENANT:-default_tenant}
CHROMA_DATABASE : ${CHROMA_DATABASE:-default_database}
CHROMA_AUTH_PROVIDER : ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider}
CHROMA_AUTH_CREDENTIALS : ${CHROMA_AUTH_CREDENTIALS:-}
2024-06-28 17:37:52 +08:00
# OpenSearch configuration
2024-06-30 21:17:53 +08:00
OPENSEARCH_HOST : ${OPENSEARCH_HOST:-opensearch}
OPENSEARCH_PORT : ${OPENSEARCH_PORT:-9200}
OPENSEARCH_USER : ${OPENSEARCH_USER:-admin}
OPENSEARCH_PASSWORD : ${OPENSEARCH_PASSWORD:-admin}
OPENSEARCH_SECURE : ${OPENSEARCH_SECURE:-true}
2024-06-28 17:37:52 +08:00
# tencent configurations
2024-06-30 21:17:53 +08:00
TENCENT_VECTOR_DB_URL : ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1}
TENCENT_VECTOR_DB_API_KEY : ${TENCENT_VECTOR_DB_API_KEY:-dify}
TENCENT_VECTOR_DB_TIMEOUT : ${TENCENT_VECTOR_DB_TIMEOUT:-30}
TENCENT_VECTOR_DB_USERNAME : ${TENCENT_VECTOR_DB_USERNAME:-dify}
TENCENT_VECTOR_DB_DATABASE : ${TENCENT_VECTOR_DB_DATABASE:-dify}
TENCENT_VECTOR_DB_SHARD : ${TENCENT_VECTOR_DB_SHARD:-1}
TENCENT_VECTOR_DB_REPLICAS : ${TENCENT_VECTOR_DB_REPLICAS:-2}
2024-06-28 17:37:52 +08:00
# Knowledge Configuration
# Upload file size limit, default 15M.
2024-06-30 21:17:53 +08:00
UPLOAD_FILE_SIZE_LIMIT : ${UPLOAD_FILE_SIZE_LIMIT:-15}
2024-06-28 17:37:52 +08:00
# The maximum number of files that can be uploaded at a time, default 5.
2024-06-30 21:17:53 +08:00
UPLOAD_FILE_BATCH_LIMIT : ${UPLOAD_FILE_BATCH_LIMIT:-5}
2024-06-28 17:37:52 +08:00
# `dify` Dify's proprietary file extraction scheme
# `Unstructured` Unstructured.io file extraction scheme
2024-06-30 21:17:53 +08:00
ETL_TYPE : ${ETL_TYPE:-dify}
2024-06-28 17:37:52 +08:00
# Unstructured API path, needs to be configured when ETL_TYPE is Unstructured.
2024-06-30 21:17:53 +08:00
UNSTRUCTURED_API_URL : ${UNSTRUCTURED_API_URL:-}
2024-06-28 17:37:52 +08:00
# Multi-modal Configuration
# The format of the image sent when the multi-modal model is input, the default is base64, optional url.
2024-06-30 21:17:53 +08:00
MULTIMODAL_SEND_IMAGE_FORMAT : ${MULTIMODAL_SEND_IMAGE_FORMAT:-base64}
2024-06-28 17:37:52 +08:00
# Upload image file size limit, default 10M.
2024-06-30 21:17:53 +08:00
UPLOAD_IMAGE_FILE_SIZE_LIMIT : ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10}
2024-06-28 17:37:52 +08:00
# The DSN for Sentry error reporting. If not set, Sentry error reporting will be disabled.
2024-06-30 21:17:53 +08:00
SENTRY_DSN : ${API_SENTRY_DSN:-}
2024-06-28 17:37:52 +08:00
# The sample rate for Sentry events. Default: `1.0`
2024-06-30 21:17:53 +08:00
SENTRY_TRACES_SAMPLE_RATE : ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
2024-06-28 17:37:52 +08:00
# The sample rate for Sentry profiles. Default: `1.0`
2024-06-30 21:17:53 +08:00
SENTRY_PROFILES_SAMPLE_RATE : ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
2024-06-28 17:37:52 +08:00
# Notion import configuration, support public and internal
2024-06-30 21:17:53 +08:00
NOTION_INTEGRATION_TYPE : ${NOTION_INTEGRATION_TYPE:-public}
NOTION_CLIENT_SECRET : ${NOTION_CLIENT_SECRET:-}
NOTION_CLIENT_ID : ${NOTION_CLIENT_ID:-}
NOTION_INTERNAL_SECRET : ${NOTION_INTERNAL_SECRET:-}
2024-06-28 17:37:52 +08:00
# Mail configuration, support: resend, smtp
2024-06-30 21:17:53 +08:00
MAIL_TYPE : ${MAIL_TYPE:-resend}
2024-06-28 17:37:52 +08:00
# default send from email address, if not specified
2024-06-30 21:17:53 +08:00
MAIL_DEFAULT_SEND_FROM : ${MAIL_DEFAULT_SEND_FROM:-}
SMTP_SERVER : ${SMTP_SERVER:-}
2024-06-29 18:35:32 +08:00
SMTP_PORT : ${SMTP_PORT:-465}
2024-06-30 21:17:53 +08:00
SMTP_USERNAME : ${SMTP_USERNAME:-}
SMTP_PASSWORD : ${SMTP_PASSWORD:-}
SMTP_USE_TLS : ${SMTP_USE_TLS:-true}
SMTP_OPPORTUNISTIC_TLS : ${SMTP_OPPORTUNISTIC_TLS:-false}
2024-06-28 17:37:52 +08:00
# the api-key for resend (https://resend.com)
2024-06-30 21:17:53 +08:00
RESEND_API_KEY : ${RESEND_API_KEY:-your-resend-api-key}
2024-06-28 17:37:52 +08:00
RESEND_API_URL : https://api.resend.com
# Indexing configuration
2024-06-30 21:17:53 +08:00
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH : ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-1000}
2024-06-28 17:37:52 +08:00
# Other configurations
2024-06-30 21:17:53 +08:00
INVITE_EXPIRY_HOURS : ${INVITE_EXPIRY_HOURS:-72}
2024-06-28 17:37:52 +08:00
CODE_EXECUTION_ENDPOINT : ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194}
2024-06-30 21:39:48 +08:00
CODE_EXECUTION_API_KEY : ${SANDBOX_API_KEY:-dify-sandbox}
2024-06-28 17:37:52 +08:00
CODE_MAX_NUMBER : ${CODE_MAX_NUMBER:-9223372036854775807}
2024-06-30 21:17:53 +08:00
CODE_MIN_NUMBER : ${CODE_MIN_NUMBER:--9223372036854775808}
2024-06-28 17:37:52 +08:00
CODE_MAX_STRING_LENGTH : ${CODE_MAX_STRING_LENGTH:-80000}
TEMPLATE_TRANSFORM_MAX_LENGTH : ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000}
CODE_MAX_STRING_ARRAY_LENGTH : ${CODE_MAX_STRING_ARRAY_LENGTH:-30}
CODE_MAX_OBJECT_ARRAY_LENGTH : ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30}
CODE_MAX_NUMBER_ARRAY_LENGTH : ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000}
SSRF_PROXY_HTTP_URL : ${SSRF_PROXY_HTTP_URL:-'http://ssrf_proxy:3128'}
SSRF_PROXY_HTTPS_URL : ${SSRF_PROXY_HTTPS_URL:-'http://ssrf_proxy:3128'}
2023-05-15 08:51:32 +08:00
services :
# API service
api :
2024-06-29 17:43:20 +08:00
image : langgenius/dify-api:0.6.12-fix1
2023-05-15 08:51:32 +08:00
restart : always
environment :
2024-06-28 17:37:52 +08:00
# Use the shared environment variables.
<< : *shared-api-worker-env
2023-05-15 08:51:32 +08:00
# Startup mode, 'api' starts the API server.
MODE : api
depends_on :
2023-09-10 12:07:20 +08:00
- db
- redis
2023-05-15 08:51:32 +08:00
volumes :
# Mount the storage directory to the container, for storing user files.
2023-05-15 16:57:50 +08:00
- ./volumes/app/storage:/app/api/storage
2024-05-13 14:39:14 +08:00
networks :
- ssrf_proxy_network
- default
2023-05-15 08:51:32 +08:00
# worker service
# The Celery worker for processing the queue.
worker :
2024-06-29 17:43:20 +08:00
image : langgenius/dify-api:0.6.12-fix1
2023-05-15 08:51:32 +08:00
restart : always
environment :
2024-06-28 17:37:52 +08:00
# Use the shared environment variables.
<< : *shared-api-worker-env
2023-05-15 08:51:32 +08:00
# Startup mode, 'worker' starts the Celery worker for processing the queue.
MODE : worker
depends_on :
2023-09-10 12:07:20 +08:00
- db
- redis
2023-05-15 08:51:32 +08:00
volumes :
# Mount the storage directory to the container, for storing user files.
2023-05-15 16:57:50 +08:00
- ./volumes/app/storage:/app/api/storage
2024-05-13 14:39:14 +08:00
networks :
- ssrf_proxy_network
- default
2023-05-15 08:51:32 +08:00
# Frontend web application.
web :
2024-06-29 17:43:20 +08:00
image : langgenius/dify-web:0.6.12-fix1
2023-05-15 08:51:32 +08:00
restart : always
environment :
2024-06-28 17:37:52 +08:00
CONSOLE_API_URL : ${CONSOLE_API_URL:-}
APP_API_URL : ${APP_API_URL:-}
2024-06-30 21:17:53 +08:00
SENTRY_DSN : ${WEB_SENTRY_DSN:-}
2023-05-15 08:51:32 +08:00
# The postgres database.
db :
image : postgres:15-alpine
restart : always
environment :
2024-06-28 17:37:52 +08:00
PGUSER : ${PGUSER:-postgres}
POSTGRES_PASSWORD : ${POSTGRES_PASSWORD:-difyai123456}
POSTGRES_DB : ${POSTGRES_DB:-dify}
PGDATA : ${PGDATA:-/var/lib/postgresql/data/pgdata}
2023-05-15 08:51:32 +08:00
volumes :
- ./volumes/db/data:/var/lib/postgresql/data
2023-09-09 13:47:08 +08:00
healthcheck :
2024-01-09 18:15:25 +08:00
test : [ "CMD" , "pg_isready" ]
2023-09-09 13:47:08 +08:00
interval : 1s
timeout : 3s
retries : 30
2023-05-15 08:51:32 +08:00
# The redis cache.
redis :
image : redis:6-alpine
restart : always
volumes :
# Mount the redis data directory to the container.
- ./volumes/redis/data:/data
# Set the redis password when startup redis server.
2024-06-28 17:37:52 +08:00
command : redis-server --requirepass ${REDIS_PASSWORD:-difyai123456}
2023-09-09 13:47:08 +08:00
healthcheck :
2024-01-09 10:31:52 +08:00
test : [ "CMD" , "redis-cli" , "ping" ]
2023-05-15 08:51:32 +08:00
2024-04-08 18:51:46 +08:00
# The DifySandbox
sandbox :
2024-06-02 11:30:14 +08:00
image : langgenius/dify-sandbox:0.2.1
2024-04-08 18:51:46 +08:00
restart : always
environment :
# The DifySandbox configurations
2024-05-13 14:39:14 +08:00
# Make sure you are changing this key for your deployment with a strong key.
# You can generate a strong key using `openssl rand -base64 42`.
2024-06-30 21:17:53 +08:00
API_KEY : ${SANDBOX_API_KEY:-dify-sandbox}
GIN_MODE : ${SANDBOX_GIN_MODE:-release}
WORKER_TIMEOUT : ${SANDBOX_WORKER_TIMEOUT:-15}
ENABLE_NETWORK : ${SANDBOX_ENABLE_NETWORK:-true}
HTTP_PROXY : ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128}
HTTPS_PROXY : ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128}
2024-06-28 17:37:52 +08:00
SANDBOX_PORT : ${SANDBOX_PORT:-8194}
2024-05-13 14:39:14 +08:00
volumes :
- ./volumes/sandbox/dependencies:/dependencies
networks :
- ssrf_proxy_network
2024-04-08 18:51:46 +08:00
2024-05-13 14:39:14 +08:00
# ssrf_proxy server
# for more information, please refer to
# https://docs.dify.ai/getting-started/install-self-hosted/install-faq#id-16.-why-is-ssrf_proxy-needed
ssrf_proxy :
image : ubuntu/squid:latest
restart : always
volumes :
2024-06-28 17:37:52 +08:00
- ./ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template
2024-06-30 20:18:53 +08:00
- ./ssrf_proxy/docker-entrypoint.sh:/docker-entrypoint-mount.sh
entrypoint : [ "sh" , "-c" , "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$//' /docker-entrypoint.sh && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" ]
2024-06-28 17:37:52 +08:00
environment :
# pls clearly modify the squid env vars to fit your network environment.
2024-06-30 10:31:31 +08:00
HTTP_PORT : ${SSRF_HTTP_PORT:-3128}
2024-06-30 21:17:53 +08:00
COREDUMP_DIR : ${SSRF_COREDUMP_DIR:-/var/spool/squid}
REVERSE_PROXY_PORT : ${SSRF_REVERSE_PROXY_PORT:-8194}
SANDBOX_HOST : ${SSRF_SANDBOX_HOST:-sandbox}
2024-06-28 17:37:52 +08:00
SANDBOX_PORT : ${SANDBOX_PORT:-8194}
2024-05-13 14:39:14 +08:00
networks :
- ssrf_proxy_network
- default
2024-05-10 17:20:30 +08:00
2023-05-15 08:51:32 +08:00
# The nginx reverse proxy.
# used for reverse proxying the API service and Web service.
nginx :
image : nginx:latest
2023-12-24 15:33:28 +08:00
restart : always
2023-05-15 08:51:32 +08:00
volumes :
2024-06-28 17:37:52 +08:00
- ./nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
- ./nginx/proxy.conf.template:/etc/nginx/proxy.conf.template
2023-05-15 08:51:32 +08:00
- ./nginx/conf.d:/etc/nginx/conf.d
2024-06-30 20:18:53 +08:00
- ./nginx/docker-entrypoint.sh:/docker-entrypoint-mount.sh
2024-06-28 17:37:52 +08:00
- ./nginx/ssl:/etc/ssl
2024-06-30 20:18:53 +08:00
entrypoint : [ "sh" , "-c" , "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$//' /docker-entrypoint.sh && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" ]
2024-06-28 17:37:52 +08:00
environment :
NGINX_SERVER_NAME : ${NGINX_SERVER_NAME:-_}
2024-06-30 21:17:53 +08:00
HTTPS_ENABLED : ${NGINX_HTTPS_ENABLED:-false}
2024-06-28 17:37:52 +08:00
NGINX_SSL_PORT : ${NGINX_SSL_PORT:-443}
# You're required to add your own SSL certificates/keys to the `./nginx/ssl` directory
# and modify the env vars below in .env if HTTPS_ENABLED is true.
NGINX_SSL_CERT_FILENAME : ${NGINX_SSL_CERT_FILENAME:-dify.crt}
NGINX_SSL_CERT_KEY_FILENAME : ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}
NGINX_SSL_PROTOCOLS : ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}
NGINX_WORKER_PROCESSES : ${NGINX_WORKER_PROCESSES:-auto}
NGINX_CLIENT_MAX_BODY_SIZE : ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}
NGINX_KEEPALIVE_TIMEOUT : ${NGINX_KEEPALIVE_TIMEOUT:-65}
NGINX_PROXY_READ_TIMEOUT : ${NGINX_PROXY_READ_TIMEOUT:-3600s}
NGINX_PROXY_SEND_TIMEOUT : ${NGINX_PROXY_SEND_TIMEOUT:-3600s}
2023-05-15 08:51:32 +08:00
depends_on :
- api
- web
ports :
2024-06-30 10:31:31 +08:00
- "${EXPOSE_NGINX_PORT:-80}:80"
- "${EXPOSE_NGINX_SSL_PORT:-443}:443"
2024-06-28 17:37:52 +08:00
# The Weaviate vector store.
weaviate :
image : semitechnologies/weaviate:1.19.0
profiles :
- weaviate
restart : always
volumes :
# Mount the Weaviate data directory to the con tainer.
- ./volumes/weaviate:/var/lib/weaviate
environment :
# The Weaviate configurations
# You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.
2024-06-30 21:17:53 +08:00
PERSISTENCE_DATA_PATH : ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate}
QUERY_DEFAULTS_LIMIT : ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25}
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED : ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-false}
DEFAULT_VECTORIZER_MODULE : ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none}
CLUSTER_HOSTNAME : ${WEAVIATE_CLUSTER_HOSTNAME:-node1}
AUTHENTICATION_APIKEY_ENABLED : ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true}
AUTHENTICATION_APIKEY_ALLOWED_KEYS : ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
AUTHENTICATION_APIKEY_USERS : ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai}
AUTHORIZATION_ADMINLIST_ENABLED : ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true}
AUTHORIZATION_ADMINLIST_USERS : ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai}
2024-06-28 17:37:52 +08:00
# Qdrant vector store.
# (if used, you need to set VECTOR_STORE to qdrant in the api & worker service.)
qdrant :
image : langgenius/qdrant:v1.7.3
profiles :
- qdrant
restart : always
volumes :
- ./volumes/qdrant:/qdrant/storage
environment :
QDRANT_API_KEY : ${QDRANT_API_KEY:-difyai123456}
# The pgvector vector database.
pgvector :
image : pgvector/pgvector:pg16
profiles :
- pgvector
restart : always
environment :
PGUSER : ${PGVECTOR_PGUSER:-postgres}
# The password for the default postgres user.
POSTGRES_PASSWORD : ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
# The name of the default postgres database.
POSTGRES_DB : ${PGVECTOR_POSTGRES_DB:-dify}
# postgres data directory
PGDATA : ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
volumes :
- ./volumes/pgvector/data:/var/lib/postgresql/data
healthcheck :
test : [ "CMD" , "pg_isready" ]
interval : 1s
timeout : 3s
retries : 30
# pgvecto-rs vector store
pgvecto-rs :
image : tensorchord/pgvecto-rs:pg16-v0.2.0
profiles :
- pgvecto-rs
restart : always
environment :
2024-06-30 21:17:53 +08:00
PGUSER : ${PGVECTOR_PGUSER:-postgres}
2024-06-28 17:37:52 +08:00
# The password for the default postgres user.
2024-06-30 21:17:53 +08:00
POSTGRES_PASSWORD : ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
2024-06-28 17:37:52 +08:00
# The name of the default postgres database.
2024-06-30 21:17:53 +08:00
POSTGRES_DB : ${PGVECTOR_POSTGRES_DB:-dify}
2024-06-28 17:37:52 +08:00
# postgres data directory
2024-06-30 21:17:53 +08:00
PGDATA : ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
2024-06-28 17:37:52 +08:00
volumes :
- ./volumes/pgvecto_rs/data:/var/lib/postgresql/data
healthcheck :
test : [ "CMD" , "pg_isready" ]
interval : 1s
timeout : 3s
retries : 30
# Chroma vector database
chroma :
image : ghcr.io/chroma-core/chroma:0.5.1
profiles :
- chroma
restart : always
volumes :
- ./volumes/chroma:/chroma/chroma
environment :
CHROMA_SERVER_AUTHN_CREDENTIALS : ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456}
CHROMA_SERVER_AUTHN_PROVIDER : ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider}
2024-06-30 21:17:53 +08:00
IS_PERSISTENT : ${CHROMA_IS_PERSISTENT:-TRUE}
2024-06-28 17:37:52 +08:00
oracle :
image : container-registry.oracle.com/database/free:latest
profiles :
- oracle
restart : always
volumes :
- type : volume
source : oradata
target : /opt/oracle/oradata
- ./startupscripts:/opt/oracle/scripts/startup
environment :
- ORACLE_PWD=${ORACLE_PWD:-Dify123456}
- ORACLE_CHARACTERSET=${ORACLE_CHARACTERSET:-AL32UTF8}
# Milvus vector database services
etcd :
container_name : milvus-etcd
image : quay.io/coreos/etcd:v3.5.5
profiles :
- milvus
environment :
- ETCD_AUTO_COMPACTION_MODE=${ETCD_AUTO_COMPACTION_MODE:-revision}
- ETCD_AUTO_COMPACTION_RETENTION=${ETCD_AUTO_COMPACTION_RETENTION:-1000}
- ETCD_QUOTA_BACKEND_BYTES=${ETCD_QUOTA_BACKEND_BYTES:-4294967296}
- ETCD_SNAPSHOT_COUNT=${ETCD_SNAPSHOT_COUNT:-50000}
volumes :
- ./volumes/milvus/etcd:/etcd
command : etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
healthcheck :
test : [ "CMD" , "etcdctl" , "endpoint" , "health" ]
interval : 30s
timeout : 20s
retries : 3
networks :
- milvus
minio :
container_name : milvus-minio
image : minio/minio:RELEASE.2023-03-20T20-16-18Z
profiles :
- milvus
environment :
MINIO_ACCESS_KEY : ${MINIO_ACCESS_KEY:-minioadmin}
MINIO_SECRET_KEY : ${MINIO_SECRET_KEY:-minioadmin}
volumes :
- ./volumes/milvus/minio:/minio_data
command : minio server /minio_data --console-address ":9001"
healthcheck :
test : [ "CMD" , "curl" , "-f" , "http://localhost:9000/minio/health/live" ]
interval : 30s
timeout : 20s
retries : 3
networks :
- milvus
milvus-standalone :
container_name : milvus-standalone
image : milvusdb/milvus:v2.3.1
profiles :
- milvus
command : [ "milvus" , "run" , "standalone" ]
environment :
ETCD_ENDPOINTS : ${ETCD_ENDPOINTS:-etcd:2379}
MINIO_ADDRESS : ${MINIO_ADDRESS:-minio:9000}
common.security.authorizationEnabled : ${MILVUS_AUTHORIZATION_ENABLED:-true}
volumes :
- ./volumes/milvus/milvus:/var/lib/milvus
healthcheck :
test : [ "CMD" , "curl" , "-f" , "http://localhost:9091/healthz" ]
interval : 30s
start_period : 90s
timeout : 20s
retries : 3
depends_on :
- "etcd"
- "minio"
networks :
- milvus
opensearch :
container_name : opensearch
image : opensearchproject/opensearch:latest
profiles :
- opensearch
environment :
- discovery.type=${OPENSEARCH_DISCOVERY_TYPE:-single-node}
- bootstrap.memory_lock=${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true}
- OPENSEARCH_JAVA_OPTS=-Xms${OPENSEARCH_JAVA_OPTS_MIN:-512m} -Xmx${OPENSEARCH_JAVA_OPTS_MAX:-1024m}
- OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123}
ulimits :
memlock :
soft : ${OPENSEARCH_MEMLOCK_SOFT:--1}
hard : ${OPENSEARCH_MEMLOCK_HARD:--1}
nofile :
soft : ${OPENSEARCH_NOFILE_SOFT:-65536}
hard : ${OPENSEARCH_NOFILE_HARD:-65536}
volumes :
- ./volumes/opensearch/data:/usr/share/opensearch/data
networks :
- opensearch-net
opensearch-dashboards :
container_name : opensearch-dashboards
image : opensearchproject/opensearch-dashboards:latest
profiles :
- opensearch
environment :
OPENSEARCH_HOSTS : '["https://opensearch:9200"]'
volumes :
- ./volumes/opensearch/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml
networks :
- opensearch-net
depends_on :
- opensearch
2024-05-13 14:39:14 +08:00
networks :
# create a network between sandbox, api and ssrf_proxy, and can not access outside.
ssrf_proxy_network :
driver : bridge
internal : true
2024-06-28 17:37:52 +08:00
milvus :
driver : bridge
opensearch-net :
driver : bridge
internal : true
2024-06-22 01:48:07 +08:00
2024-06-28 17:37:52 +08:00
volumes :
oradata :