解决Dify:failed to init dify plugin db题目

打印 上一主题 下一主题

主题 1744|帖子 1744|积分 5234

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
    Dify最新版本1.1.3(langgenius/dify: Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.),使用docker compose进行当地部署时,在docker container的log中,总会出现如下提示:
“[error] failed to initialize database, got error failed to connect to `host=db user=postgres database=postgres`: hostname resolving error”。对此,dify issues的回答是"This version is not officially supported yet. Please do not use this version if you can not understand it.",并建议你使用0.15.3版本。
    为了解决题目,我向kimi提问,在其中一个回答中给了如下解决方案:
    “你已经使用了 depends_on 来确保 db 和 redis 服务先于 api 服务启动。但 depends_on 只能确保服务启动次序,不能确保服务完全可用。为了确保 PostgreSQL 完全启动后再启动 api 服务,可以使用 wait-for-it.sh 脚本或其他类似的工具。”
    而我使用wait-for-it.sh确实让上述错误消散了。
    首先我分析了dify\docker目录下的docker-compose.yaml文件,发现在dify环境中,各模块的相互依赖关系如下:
api:db,redis
woker:db,redis
plugin_daemon:db
nginx:api,web
    经测试,nginx可以忽略,但是plugin_daemon、api、woker这三个模块必须保证依赖次序关系精确实现。为此我需要将wait-for-it.sh脚本嵌入到这三个模块的docker镜像中,并在该镜像被docker compose加载时,运行wait-for-it.sh,以确保镜像自身运行启动命令前,其前序的模块已经精确加载并运行。api和woker两个模块均依赖langgenius/dify-api:1.1.3,而plugin_daemon则依赖langgenius/dify-plugin-daemon:0.0.6-local。我需要将wait-for-it.sh嵌入到这两个镜像中,并修改dify\docker\docker-compose.yaml文件内容。
我的操纵步骤如下:
1.从 wait-for-it.sh GitHub 堆栈 下载脚本文件wait-for-it.sh。注意下载的wait-for-it.sh要确保其是unix文件格式,也就是行尾不能是CRLF,而应该是LF。一个简单的方法:用vscode打开这个sh文件,在窗口的状态栏中若显示的是"CRLF",则只需点击这个“CRLF”标识,将其改成LF即可。
2.将这个wait-for-it.sh文件拷贝至git clone的Dify目录下的docker子目录中。我的目录如下:D:\AiTools\dify\docker
3.同时在这个目录中创建一个Dockerfile,内容如下:
  1. FROM langgenius/dify-api:1.1.3
  2. # 将 wait-for-it.sh 脚本复制到镜像中
  3. COPY ./wait-for-it.sh /wait-for-it.sh
  4. # 确保脚本具有可执行权限
  5. RUN chmod +x /wait-for-it.sh
复制代码
4.在dify\docker目录中打开命令行,运行如下命令:
  1. docker buildx build . -t langgenius/dify-api:1.1.4
复制代码
上述命令将生成一个新的langgenius/dify-api:1.1.4镜像。同样,将上述Dockerfile文件的首行修改成如下内容:
  1. FROM langgenius/dify-plugin-daemon:0.0.6-local
  2. # 将 wait-for-it.sh 脚本复制到镜像中
  3. COPY ./wait-for-it.sh /wait-for-it.sh
  4. # 确保脚本具有可执行权限
  5. RUN chmod +x /wait-for-it.sh
复制代码
运行以下命令生成新的langgenius/dify-plugin-daemon:0.0.7-local镜像。
  1. docker buildx build . -t langgenius/dify-plugin-daemon:0.0.7-local
复制代码
5.修改dify\docker\docker-compose.yaml文件内容如下:
  1. # ==================================================================
  2. # WARNING: This file is auto-generated by generate_docker_compose
  3. # Do not modify this file directly. Instead, update the .env.example
  4. # or docker-compose-template.yaml and regenerate this file.
  5. # ==================================================================
  6. x-shared-env: &shared-api-worker-env
  7.   CONSOLE_API_URL: ${CONSOLE_API_URL:-}
  8.   CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-}
  9.   SERVICE_API_URL: ${SERVICE_API_URL:-}
  10.   APP_API_URL: ${APP_API_URL:-}
  11.   APP_WEB_URL: ${APP_WEB_URL:-}
  12.   FILES_URL: ${FILES_URL:-}
  13.   LOG_LEVEL: ${LOG_LEVEL:-INFO}
  14.   LOG_FILE: ${LOG_FILE:-/app/logs/server.log}
  15.   LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20}
  16.   LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5}
  17.   LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S}
  18.   LOG_TZ: ${LOG_TZ:-UTC}
  19.   DEBUG: ${DEBUG:-false}
  20.   FLASK_DEBUG: ${FLASK_DEBUG:-false}
  21.   SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U}
  22.   INIT_PASSWORD: ${INIT_PASSWORD:-}
  23.   DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION}
  24.   CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai}
  25.   OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1}
  26.   MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true}
  27.   FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300}
  28.   ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60}
  29.   REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30}
  30.   APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0}
  31.   APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200}
  32.   DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0}
  33.   DIFY_PORT: ${DIFY_PORT:-5001}
  34.   SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1}
  35.   SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent}
  36.   SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10}
  37.   CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-}
  38.   GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360}
  39.   CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-}
  40.   CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false}
  41.   CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-}
  42.   CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-}
  43.   API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10}
  44.   API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60}
  45.   DB_USERNAME: ${DB_USERNAME:-postgres}
  46.   DB_PASSWORD: ${DB_PASSWORD:-difyai123456}
  47.   DB_HOST: ${DB_HOST:-db}
  48.   DB_PORT: ${DB_PORT:-5432}
  49.   DB_DATABASE: ${DB_DATABASE:-dify}
  50.   SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30}
  51.   SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600}
  52.   SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false}
  53.   POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100}
  54.   POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB}
  55.   POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB}
  56.   POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}
  57.   POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}
  58.   REDIS_HOST: ${REDIS_HOST:-redis}
  59.   REDIS_PORT: ${REDIS_PORT:-6379}
  60.   REDIS_USERNAME: ${REDIS_USERNAME:-}
  61.   REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456}
  62.   REDIS_USE_SSL: ${REDIS_USE_SSL:-false}
  63.   REDIS_DB: ${REDIS_DB:-0}
  64.   REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false}
  65.   REDIS_SENTINELS: ${REDIS_SENTINELS:-}
  66.   REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-}
  67.   REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-}
  68.   REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-}
  69.   REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1}
  70.   REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false}
  71.   REDIS_CLUSTERS: ${REDIS_CLUSTERS:-}
  72.   REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-}
  73.   CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1}
  74.   BROKER_USE_SSL: ${BROKER_USE_SSL:-false}
  75.   CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false}
  76.   CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-}
  77.   CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1}
  78.   WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*}
  79.   CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*}
  80.   STORAGE_TYPE: ${STORAGE_TYPE:-opendal}
  81.   OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs}
  82.   OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage}
  83.   S3_ENDPOINT: ${S3_ENDPOINT:-}
  84.   S3_REGION: ${S3_REGION:-us-east-1}
  85.   S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai}
  86.   S3_ACCESS_KEY: ${S3_ACCESS_KEY:-}
  87.   S3_SECRET_KEY: ${S3_SECRET_KEY:-}
  88.   S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false}
  89.   AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai}
  90.   AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai}
  91.   AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container}
  92.   AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://<your_account_name>.blob.core.windows.net}
  93.   GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name}
  94.   GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-}
  95.   ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name}
  96.   ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key}
  97.   ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key}
  98.   ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com}
  99.   ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1}
  100.   ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4}
  101.   ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path}
  102.   TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name}
  103.   TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key}
  104.   TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id}
  105.   TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region}
  106.   TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme}
  107.   OCI_ENDPOINT: ${OCI_ENDPOINT:-https://your-object-storage-namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com}
  108.   OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name}
  109.   OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key}
  110.   OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key}
  111.   OCI_REGION: ${OCI_REGION:-us-ashburn-1}
  112.   HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name}
  113.   HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key}
  114.   HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key}
  115.   HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url}
  116.   VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name}
  117.   VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key}
  118.   VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key}
  119.   VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url}
  120.   VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region}
  121.   BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name}
  122.   BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key}
  123.   BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key}
  124.   BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url}
  125.   SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name}
  126.   SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key}
  127.   SUPABASE_URL: ${SUPABASE_URL:-your-server-url}
  128.   VECTOR_STORE: ${VECTOR_STORE:-weaviate}
  129.   WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080}
  130.   WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
  131.   QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333}
  132.   QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456}
  133.   QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20}
  134.   QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false}
  135.   QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334}
  136.   MILVUS_URI: ${MILVUS_URI:-http://host.docker.internal:19530}
  137.   MILVUS_TOKEN: ${MILVUS_TOKEN:-}
  138.   MILVUS_USER: ${MILVUS_USER:-}
  139.   MILVUS_PASSWORD: ${MILVUS_PASSWORD:-}
  140.   MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False}
  141.   MYSCALE_HOST: ${MYSCALE_HOST:-myscale}
  142.   MYSCALE_PORT: ${MYSCALE_PORT:-8123}
  143.   MYSCALE_USER: ${MYSCALE_USER:-default}
  144.   MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-}
  145.   MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify}
  146.   MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-}
  147.   COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server}
  148.   COUCHBASE_USER: ${COUCHBASE_USER:-Administrator}
  149.   COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password}
  150.   COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings}
  151.   COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default}
  152.   PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector}
  153.   PGVECTOR_PORT: ${PGVECTOR_PORT:-5432}
  154.   PGVECTOR_USER: ${PGVECTOR_USER:-postgres}
  155.   PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456}
  156.   PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify}
  157.   PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1}
  158.   PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5}
  159.   PGVECTOR_PG_BIGM: ${PGVECTOR_PG_BIGM:-false}
  160.   PGVECTOR_PG_BIGM_VERSION: ${PGVECTOR_PG_BIGM_VERSION:-1.2-20240606}
  161.   PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs}
  162.   PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432}
  163.   PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres}
  164.   PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456}
  165.   PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify}
  166.   ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak}
  167.   ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk}
  168.   ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou}
  169.   ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456}
  170.   ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount}
  171.   ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword}
  172.   ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify}
  173.   ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword}
  174.   ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com}
  175.   ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432}
  176.   ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1}
  177.   ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5}
  178.   TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb}
  179.   TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000}
  180.   TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-}
  181.   TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-}
  182.   TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify}
  183.   TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1}
  184.   TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify}
  185.   TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20}
  186.   TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false}
  187.   TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334}
  188.   TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify}
  189.   TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify}
  190.   TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1}
  191.   TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1}
  192.   TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1}
  193.   TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify}
  194.   TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100}
  195.   CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1}
  196.   CHROMA_PORT: ${CHROMA_PORT:-8000}
  197.   CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant}
  198.   CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database}
  199.   CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider}
  200.   CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-}
  201.   ORACLE_USER: ${ORACLE_USER:-dify}
  202.   ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify}
  203.   ORACLE_DSN: ${ORACLE_DSN:-oracle:1521/FREEPDB1}
  204.   ORACLE_CONFIG_DIR: ${ORACLE_CONFIG_DIR:-/app/api/storage/wallet}
  205.   ORACLE_WALLET_LOCATION: ${ORACLE_WALLET_LOCATION:-/app/api/storage/wallet}
  206.   ORACLE_WALLET_PASSWORD: ${ORACLE_WALLET_PASSWORD:-dify}
  207.   ORACLE_IS_AUTONOMOUS: ${ORACLE_IS_AUTONOMOUS:-false}
  208.   RELYT_HOST: ${RELYT_HOST:-db}
  209.   RELYT_PORT: ${RELYT_PORT:-5432}
  210.   RELYT_USER: ${RELYT_USER:-postgres}
  211.   RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456}
  212.   RELYT_DATABASE: ${RELYT_DATABASE:-postgres}
  213.   OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch}
  214.   OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200}
  215.   OPENSEARCH_USER: ${OPENSEARCH_USER:-admin}
  216.   OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin}
  217.   OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true}
  218.   TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1}
  219.   TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify}
  220.   TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30}
  221.   TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify}
  222.   TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify}
  223.   TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1}
  224.   TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2}
  225.   ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0}
  226.   ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200}
  227.   ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic}
  228.   ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic}
  229.   KIBANA_PORT: ${KIBANA_PORT:-5601}
  230.   BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287}
  231.   BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000}
  232.   BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root}
  233.   BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify}
  234.   BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify}
  235.   BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1}
  236.   BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3}
  237.   VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak}
  238.   VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk}
  239.   VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai}
  240.   VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com}
  241.   VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http}
  242.   VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30}
  243.   VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30}
  244.   LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070}
  245.   LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm}
  246.   LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm}
  247.   OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase}
  248.   OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881}
  249.   OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test}
  250.   OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
  251.   OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test}
  252.   OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
  253.   OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
  254.   OCEANBASE_ENABLE_HYBRID_SEARCH: ${OCEANBASE_ENABLE_HYBRID_SEARCH:-false}
  255.   OPENGAUSS_HOST: ${OPENGAUSS_HOST:-opengauss}
  256.   OPENGAUSS_PORT: ${OPENGAUSS_PORT:-6600}
  257.   OPENGAUSS_USER: ${OPENGAUSS_USER:-postgres}
  258.   OPENGAUSS_PASSWORD: ${OPENGAUSS_PASSWORD:-Dify@123}
  259.   OPENGAUSS_DATABASE: ${OPENGAUSS_DATABASE:-dify}
  260.   OPENGAUSS_MIN_CONNECTION: ${OPENGAUSS_MIN_CONNECTION:-1}
  261.   OPENGAUSS_MAX_CONNECTION: ${OPENGAUSS_MAX_CONNECTION:-5}
  262.   OPENGAUSS_ENABLE_PQ: ${OPENGAUSS_ENABLE_PQ:-false}
  263.   UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io}
  264.   UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify}
  265.   TABLESTORE_ENDPOINT: ${TABLESTORE_ENDPOINT:-https://instance-name.cn-hangzhou.ots.aliyuncs.com}
  266.   TABLESTORE_INSTANCE_NAME: ${TABLESTORE_INSTANCE_NAME:-instance-name}
  267.   TABLESTORE_ACCESS_KEY_ID: ${TABLESTORE_ACCESS_KEY_ID:-xxx}
  268.   TABLESTORE_ACCESS_KEY_SECRET: ${TABLESTORE_ACCESS_KEY_SECRET:-xxx}
  269.   UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15}
  270.   UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5}
  271.   ETL_TYPE: ${ETL_TYPE:-dify}
  272.   UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-}
  273.   UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-}
  274.   SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true}
  275.   PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512}
  276.   CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024}
  277.   MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64}
  278.   UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10}
  279.   UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100}
  280.   UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50}
  281.   SENTRY_DSN: ${SENTRY_DSN:-}
  282.   API_SENTRY_DSN: ${API_SENTRY_DSN:-}
  283.   API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
  284.   API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
  285.   WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-}
  286.   NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public}
  287.   NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-}
  288.   NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-}
  289.   NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-}
  290.   MAIL_TYPE: ${MAIL_TYPE:-resend}
  291.   MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-}
  292.   RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com}
  293.   RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key}
  294.   SMTP_SERVER: ${SMTP_SERVER:-}
  295.   SMTP_PORT: ${SMTP_PORT:-465}
  296.   SMTP_USERNAME: ${SMTP_USERNAME:-}
  297.   SMTP_PASSWORD: ${SMTP_PASSWORD:-}
  298.   SMTP_USE_TLS: ${SMTP_USE_TLS:-true}
  299.   SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false}
  300.   INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000}
  301.   INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72}
  302.   RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5}
  303.   CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194}
  304.   CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox}
  305.   CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807}
  306.   CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808}
  307.   CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5}
  308.   CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20}
  309.   CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000}
  310.   CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30}
  311.   CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30}
  312.   CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000}
  313.   CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10}
  314.   CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60}
  315.   CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10}
  316.   TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000}
  317.   WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500}
  318.   WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200}
  319.   WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5}
  320.   MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800}
  321.   WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3}
  322.   WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10}
  323.   HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760}
  324.   HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576}
  325.   HTTP_REQUEST_NODE_SSL_VERIFY: ${HTTP_REQUEST_NODE_SSL_VERIFY:-True}
  326.   SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128}
  327.   SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128}
  328.   LOOP_NODE_MAX_COUNT: ${LOOP_NODE_MAX_COUNT:-100}
  329.   MAX_TOOLS_NUM: ${MAX_TOOLS_NUM:-10}
  330.   MAX_PARALLEL_LIMIT: ${MAX_PARALLEL_LIMIT:-10}
  331.   MAX_ITERATIONS_NUM: ${MAX_ITERATIONS_NUM:-5}
  332.   TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}
  333.   PGUSER: ${PGUSER:-${DB_USERNAME}}
  334.   POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}}
  335.   POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}}
  336.   PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
  337.   SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox}
  338.   SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release}
  339.   SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15}
  340.   SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true}
  341.   SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128}
  342.   SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128}
  343.   SANDBOX_PORT: ${SANDBOX_PORT:-8194}
  344.   WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate}
  345.   WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25}
  346.   WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true}
  347.   WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none}
  348.   WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1}
  349.   WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true}
  350.   WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
  351.   WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai}
  352.   WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true}
  353.   WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai}
  354.   CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456}
  355.   CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider}
  356.   CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE}
  357.   ORACLE_PWD: ${ORACLE_PWD:-Dify123456}
  358.   ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8}
  359.   ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision}
  360.   ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000}
  361.   ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296}
  362.   ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000}
  363.   MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin}
  364.   MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin}
  365.   ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379}
  366.   MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000}
  367.   MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true}
  368.   PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres}
  369.   PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
  370.   PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify}
  371.   PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
  372.   OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node}
  373.   OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true}
  374.   OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m}
  375.   OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m}
  376.   OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123}
  377.   OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1}
  378.   OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1}
  379.   OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536}
  380.   OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536}
  381.   NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_}
  382.   NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false}
  383.   NGINX_PORT: ${NGINX_PORT:-80}
  384.   NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443}
  385.   NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt}
  386.   NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}
  387.   NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}
  388.   NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}
  389.   NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}
  390.   NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65}
  391.   NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s}
  392.   NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s}
  393.   NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false}
  394.   CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com}
  395.   CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com}
  396.   CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-}
  397.   SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128}
  398.   SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid}
  399.   SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194}
  400.   SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox}
  401.   SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5}
  402.   SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5}
  403.   SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5}
  404.   SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5}
  405.   EXPOSE_NGINX_PORT: ${EXPOSE_NGINX_PORT:-80}
  406.   EXPOSE_NGINX_SSL_PORT: ${EXPOSE_NGINX_SSL_PORT:-443}
  407.   POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-}
  408.   POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-}
  409.   POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-}
  410.   POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-}
  411.   POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-}
  412.   POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-}
  413.   CSP_WHITELIST: ${CSP_WHITELIST:-}
  414.   CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false}
  415.   MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100}
  416.   TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10}
  417.   DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin}
  418.   EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002}
  419.   PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002}
  420.   PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi}
  421.   PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002}
  422.   PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
  423.   PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false}
  424.   PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0}
  425.   PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003}
  426.   EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
  427.   EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
  428.   PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
  429.   PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001}
  430.   ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}}
  431.   MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true}
  432.   MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
  433.   FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
  434.   PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
  435.   PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
  436.   PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
  437. services:
  438.   # API service
  439.   api:
  440.     image: langgenius/dify-api:1.1.4
  441.     restart: always
  442.     environment:
  443.       # Use the shared environment variables.
  444.       <<: *shared-api-worker-env
  445.       # Startup mode, 'api' starts the API server.
  446.       MODE: api
  447.       SENTRY_DSN: ${API_SENTRY_DSN:-}
  448.       SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
  449.       SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
  450.       PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
  451.       PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
  452.       PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
  453.       INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
  454.     depends_on:
  455.       - db
  456.       - redis
  457.     volumes:
  458.       # Mount the storage directory to the container, for storing user files.
  459.       - ./volumes/app/storage:/app/api/storage
  460.     networks:
  461.       - ssrf_proxy_network
  462.       - default
  463.     command: >
  464.       /wait-for-it.sh db:5432 -t 30 -- echo "DB is up" &&
  465.       /wait-for-it.sh redis:6379 -t 30 -- echo "Redis is up"
  466.   # worker service
  467.   # The Celery worker for processing the queue.
  468.   worker:
  469.     image: langgenius/dify-api:1.1.4
  470.     restart: always
  471.     environment:
  472.       # Use the shared environment variables.
  473.       <<: *shared-api-worker-env
  474.       # Startup mode, 'worker' starts the Celery worker for processing the queue.
  475.       MODE: worker
  476.       SENTRY_DSN: ${API_SENTRY_DSN:-}
  477.       SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
  478.       SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
  479.       PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
  480.       INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
  481.     depends_on:
  482.       - db
  483.       - redis
  484.     volumes:
  485.       # Mount the storage directory to the container, for storing user files.
  486.       - ./volumes/app/storage:/app/api/storage
  487.     networks:
  488.       - ssrf_proxy_network
  489.       - default
  490.     command: >
  491.       /wait-for-it.sh db:5432 -t 30 -- echo "DB is up" &&
  492.       /wait-for-it.sh redis:6379 -t 30 -- echo "Redis is up"
  493.   # Frontend web application.
  494.   web:
  495.     image: langgenius/dify-web:1.1.3
  496.     restart: always
  497.     environment:
  498.       CONSOLE_API_URL: ${CONSOLE_API_URL:-}
  499.       APP_API_URL: ${APP_API_URL:-}
  500.       SENTRY_DSN: ${WEB_SENTRY_DSN:-}
  501.       NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0}
  502.       TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}
  503.       CSP_WHITELIST: ${CSP_WHITELIST:-}
  504.       MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
  505.       MARKETPLACE_URL: ${MARKETPLACE_URL:-https://marketplace.dify.ai}
  506.       TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-}
  507.       INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-}
  508.       PM2_INSTANCES: ${PM2_INSTANCES:-2}
  509.       LOOP_NODE_MAX_COUNT: ${LOOP_NODE_MAX_COUNT:-100}
  510.       MAX_TOOLS_NUM: ${MAX_TOOLS_NUM:-10}
  511.       MAX_PARALLEL_LIMIT: ${MAX_PARALLEL_LIMIT:-10}
  512.       MAX_ITERATIONS_NUM: ${MAX_ITERATIONS_NUM:-5}
  513.   # The postgres database.
  514.   db:
  515.     image: postgres:15-alpine
  516.     restart: always
  517.     environment:
  518.       PGUSER: ${PGUSER:-postgres}
  519.       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
  520.       POSTGRES_DB: ${POSTGRES_DB:-dify}
  521.       PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
  522.     command: >
  523.       postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
  524.                -c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'
  525.                -c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
  526.                -c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
  527.                -c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
  528.     volumes:
  529.       - ./volumes/db/data:/var/lib/postgresql/data
  530.     healthcheck:
  531.       test: [ 'CMD', 'pg_isready' ]
  532.       interval: 1s
  533.       timeout: 3s
  534.       retries: 30
  535.   # The redis cache.
  536.   redis:
  537.     image: redis:6-alpine
  538.     restart: always
  539.     environment:
  540.       REDISCLI_AUTH: ${REDIS_PASSWORD:-difyai123456}
  541.     volumes:
  542.       # Mount the redis data directory to the container.
  543.       - ./volumes/redis/data:/data
  544.     # Set the redis password when startup redis server.
  545.     command: redis-server --requirepass ${REDIS_PASSWORD:-difyai123456}
  546.     healthcheck:
  547.       test: [ 'CMD', 'redis-cli', 'ping' ]
  548.    
  549.   # The DifySandbox
  550.   sandbox:
  551.     image: langgenius/dify-sandbox:0.2.11
  552.     restart: always
  553.     environment:
  554.       # The DifySandbox configurations
  555.       # Make sure you are changing this key for your deployment with a strong key.
  556.       # You can generate a strong key using `openssl rand -base64 42`.
  557.       API_KEY: ${SANDBOX_API_KEY:-dify-sandbox}
  558.       GIN_MODE: ${SANDBOX_GIN_MODE:-release}
  559.       WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15}
  560.       ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true}
  561.       HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128}
  562.       HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128}
  563.       SANDBOX_PORT: ${SANDBOX_PORT:-8194}
  564.     volumes:
  565.       - ./volumes/sandbox/dependencies:/dependencies
  566.       - ./volumes/sandbox/conf:/conf
  567.     healthcheck:
  568.       test: [ 'CMD', 'curl', '-f', 'http://localhost:8194/health' ]
  569.     networks:
  570.       - ssrf_proxy_network
  571.   # plugin daemon
  572.   plugin_daemon:
  573.     image: langgenius/dify-plugin-daemon:0.0.7-local
  574.     restart: always
  575.     environment:
  576.       # Use the shared environment variables.
  577.       <<: *shared-api-worker-env
  578.       DB_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin}
  579.       SERVER_PORT: ${PLUGIN_DAEMON_PORT:-5002}
  580.       SERVER_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi}
  581.       MAX_PLUGIN_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
  582.       PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false}
  583.       DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001}
  584.       DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
  585.       PLUGIN_REMOTE_INSTALLING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0}
  586.       PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003}
  587.       PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd}
  588.       FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
  589.       PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
  590.       PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
  591.       PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
  592.     ports:
  593.       - "${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}:${PLUGIN_DEBUGGING_PORT:-5003}"
  594.     volumes:
  595.       - ./volumes/plugin_daemon:/app/storage
  596.     depends_on:
  597.       - db
  598.     command: >
  599.        /wait-for-it.sh db:5432 -t 30 -- /bin/bash -c "/app/entrypoint.sh"
  600.   # ssrf_proxy server
  601.   # for more information, please refer to
  602.   # https://docs.dify.ai/learn-more/faq/install-faq#id-18.-why-is-ssrf_proxy-needed
  603.   ssrf_proxy:
  604.     image: ubuntu/squid:latest
  605.     restart: always
  606.     volumes:
  607.       - ./ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template
  608.       - ./ssrf_proxy/docker-entrypoint.sh:/docker-entrypoint-mount.sh
  609.     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" ]
  610.     environment:
  611.       # pls clearly modify the squid env vars to fit your network environment.
  612.       HTTP_PORT: ${SSRF_HTTP_PORT:-3128}
  613.       COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid}
  614.       REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194}
  615.       SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox}
  616.       SANDBOX_PORT: ${SANDBOX_PORT:-8194}
  617.     networks:
  618.       - ssrf_proxy_network
  619.       - default
  620.   # Certbot service
  621.   # use `docker-compose --profile certbot up` to start the certbot service.
  622.   certbot:
  623.     image: certbot/certbot
  624.     profiles:
  625.       - certbot
  626.     volumes:
  627.       - ./volumes/certbot/conf:/etc/letsencrypt
  628.       - ./volumes/certbot/www:/var/www/html
  629.       - ./volumes/certbot/logs:/var/log/letsencrypt
  630.       - ./volumes/certbot/conf/live:/etc/letsencrypt/live
  631.       - ./certbot/update-cert.template.txt:/update-cert.template.txt
  632.       - ./certbot/docker-entrypoint.sh:/docker-entrypoint.sh
  633.     environment:
  634.       - CERTBOT_EMAIL=${CERTBOT_EMAIL}
  635.       - CERTBOT_DOMAIN=${CERTBOT_DOMAIN}
  636.       - CERTBOT_OPTIONS=${CERTBOT_OPTIONS:-}
  637.     entrypoint: [ '/docker-entrypoint.sh' ]
  638.     command: [ 'tail', '-f', '/dev/null' ]
  639.   # The nginx reverse proxy.
  640.   # used for reverse proxying the API service and Web service.
  641.   nginx:
  642.     image: nginx:latest
  643.     restart: always
  644.     volumes:
  645.       - ./nginx/nginx.conf.template:/etc/nginx/nginx.conf.template
  646.       - ./nginx/proxy.conf.template:/etc/nginx/proxy.conf.template
  647.       - ./nginx/https.conf.template:/etc/nginx/https.conf.template
  648.       - ./nginx/conf.d:/etc/nginx/conf.d
  649.       - ./nginx/docker-entrypoint.sh:/docker-entrypoint-mount.sh
  650.       - ./nginx/ssl:/etc/ssl # cert dir (legacy)
  651.       - ./volumes/certbot/conf/live:/etc/letsencrypt/live # cert dir (with certbot container)
  652.       - ./volumes/certbot/conf:/etc/letsencrypt
  653.       - ./volumes/certbot/www:/var/www/html
  654.     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" ]
  655.     environment:
  656.       NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_}
  657.       NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false}
  658.       NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443}
  659.       NGINX_PORT: ${NGINX_PORT:-80}
  660.       # You're required to add your own SSL certificates/keys to the `./nginx/ssl` directory
  661.       # and modify the env vars below in .env if HTTPS_ENABLED is true.
  662.       NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt}
  663.       NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key}
  664.       NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3}
  665.       NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto}
  666.       NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M}
  667.       NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65}
  668.       NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s}
  669.       NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s}
  670.       NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false}
  671.       CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-}
  672.     depends_on:
  673.       - api
  674.       - web
  675.     ports:
  676.       - '${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}'
  677.       - '${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}'
  678.   # The Weaviate vector store.
  679.   weaviate:
  680.     image: semitechnologies/weaviate:1.19.0
  681.     profiles:
  682.       - ''
  683.       - weaviate
  684.     restart: always
  685.     volumes:
  686.       # Mount the Weaviate data directory to the con tainer.
  687.       - ./volumes/weaviate:/var/lib/weaviate
  688.     environment:
  689.       # The Weaviate configurations
  690.       # You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.
  691.       PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate}
  692.       QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25}
  693.       AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-false}
  694.       DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none}
  695.       CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1}
  696.       AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true}
  697.       AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih}
  698.       AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai}
  699.       AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true}
  700.       AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai}
  701.   # Qdrant vector store.
  702.   # (if used, you need to set VECTOR_STORE to qdrant in the api & worker service.)
  703.   qdrant:
  704.     image: langgenius/qdrant:v1.7.3
  705.     profiles:
  706.       - qdrant
  707.     restart: always
  708.     volumes:
  709.       - ./volumes/qdrant:/qdrant/storage
  710.     environment:
  711.       QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456}
  712.   # The Couchbase vector store.
  713.   couchbase-server:
  714.     build: ./couchbase-server
  715.     profiles:
  716.       - couchbase
  717.     restart: always
  718.     environment:
  719.       - CLUSTER_NAME=dify_search
  720.       - COUCHBASE_ADMINISTRATOR_USERNAME=${COUCHBASE_USER:-Administrator}
  721.       - COUCHBASE_ADMINISTRATOR_PASSWORD=${COUCHBASE_PASSWORD:-password}
  722.       - COUCHBASE_BUCKET=${COUCHBASE_BUCKET_NAME:-Embeddings}
  723.       - COUCHBASE_BUCKET_RAMSIZE=512
  724.       - COUCHBASE_RAM_SIZE=2048
  725.       - COUCHBASE_EVENTING_RAM_SIZE=512
  726.       - COUCHBASE_INDEX_RAM_SIZE=512
  727.       - COUCHBASE_FTS_RAM_SIZE=1024
  728.     hostname: couchbase-server
  729.     container_name: couchbase-server
  730.     working_dir: /opt/couchbase
  731.     stdin_open: true
  732.     tty: true
  733.     entrypoint: [ "" ]
  734.     command: sh -c "/opt/couchbase/init/init-cbserver.sh"
  735.     volumes:
  736.       - ./volumes/couchbase/data:/opt/couchbase/var/lib/couchbase/data
  737.     healthcheck:
  738.       # ensure bucket was created before proceeding
  739.       test: [ "CMD-SHELL", "curl -s -f -u Administrator:password http://localhost:8091/pools/default/buckets | grep -q '\\[{' || exit 1" ]
  740.       interval: 10s
  741.       retries: 10
  742.       start_period: 30s
  743.       timeout: 10s
  744.   # The pgvector vector database.
  745.   pgvector:
  746.     image: pgvector/pgvector:pg16
  747.     profiles:
  748.       - pgvector
  749.     restart: always
  750.     environment:
  751.       PGUSER: ${PGVECTOR_PGUSER:-postgres}
  752.       # The password for the default postgres user.
  753.       POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
  754.       # The name of the default postgres database.
  755.       POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify}
  756.       # postgres data directory
  757.       PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
  758.       # pg_bigm module for full text search
  759.       PG_BIGM: ${PGVECTOR_PG_BIGM:-false}
  760.       PG_BIGM_VERSION: ${PGVECTOR_PG_BIGM_VERSION:-1.2-20240606}
  761.     volumes:
  762.       - ./volumes/pgvector/data:/var/lib/postgresql/data
  763.       - ./pgvector/docker-entrypoint.sh:/docker-entrypoint.sh
  764.     entrypoint: [ '/docker-entrypoint.sh' ]
  765.     healthcheck:
  766.       test: [ 'CMD', 'pg_isready' ]
  767.       interval: 1s
  768.       timeout: 3s
  769.       retries: 30
  770.   # pgvecto-rs vector store
  771.   pgvecto-rs:
  772.     image: tensorchord/pgvecto-rs:pg16-v0.3.0
  773.     profiles:
  774.       - pgvecto-rs
  775.     restart: always
  776.     environment:
  777.       PGUSER: ${PGVECTOR_PGUSER:-postgres}
  778.       # The password for the default postgres user.
  779.       POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456}
  780.       # The name of the default postgres database.
  781.       POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify}
  782.       # postgres data directory
  783.       PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata}
  784.     volumes:
  785.       - ./volumes/pgvecto_rs/data:/var/lib/postgresql/data
  786.     healthcheck:
  787.       test: [ 'CMD', 'pg_isready' ]
  788.       interval: 1s
  789.       timeout: 3s
  790.       retries: 30
  791.   # Chroma vector database
  792.   chroma:
  793.     image: ghcr.io/chroma-core/chroma:0.5.20
  794.     profiles:
  795.       - chroma
  796.     restart: always
  797.     volumes:
  798.       - ./volumes/chroma:/chroma/chroma
  799.     environment:
  800.       CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456}
  801.       CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider}
  802.       IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE}
  803.   # OceanBase vector database
  804.   oceanbase:
  805.     image: oceanbase/oceanbase-ce:4.3.5.1-101000042025031818
  806.     container_name: oceanbase
  807.     profiles:
  808.       - oceanbase
  809.     restart: always
  810.     volumes:
  811.       - ./volumes/oceanbase/data:/root/ob
  812.       - ./volumes/oceanbase/conf:/root/.obd/cluster
  813.       - ./volumes/oceanbase/init.d:/root/boot/init.d
  814.     environment:
  815.       OB_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G}
  816.       OB_SYS_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
  817.       OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456}
  818.       OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai}
  819.       MODE: MINI
  820.     ports:
  821.       - "${OCEANBASE_VECTOR_PORT:-2881}:2881"
  822.   # Oracle vector database
  823.   oracle:
  824.     image: container-registry.oracle.com/database/free:latest
  825.     profiles:
  826.       - oracle
  827.     restart: always
  828.     volumes:
  829.       - source: oradata
  830.         type: volume
  831.         target: /opt/oracle/oradata
  832.       - ./startupscripts:/opt/oracle/scripts/startup
  833.     environment:
  834.       ORACLE_PWD: ${ORACLE_PWD:-Dify123456}
  835.       ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8}
  836.   # Milvus vector database services
  837.   etcd:
  838.     container_name: milvus-etcd
  839.     image: quay.io/coreos/etcd:v3.5.5
  840.     profiles:
  841.       - milvus
  842.     environment:
  843.       ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision}
  844.       ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000}
  845.       ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296}
  846.       ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000}
  847.     volumes:
  848.       - ./volumes/milvus/etcd:/etcd
  849.     command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
  850.     healthcheck:
  851.       test: [ 'CMD', 'etcdctl', 'endpoint', 'health' ]
  852.       interval: 30s
  853.       timeout: 20s
  854.       retries: 3
  855.     networks:
  856.       - milvus
  857.   minio:
  858.     container_name: milvus-minio
  859.     image: minio/minio:RELEASE.2023-03-20T20-16-18Z
  860.     profiles:
  861.       - milvus
  862.     environment:
  863.       MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin}
  864.       MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin}
  865.     volumes:
  866.       - ./volumes/milvus/minio:/minio_data
  867.     command: minio server /minio_data --console-address ":9001"
  868.     healthcheck:
  869.       test: [ 'CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live' ]
  870.       interval: 30s
  871.       timeout: 20s
  872.       retries: 3
  873.     networks:
  874.       - milvus
  875.   milvus-standalone:
  876.     container_name: milvus-standalone
  877.     image: milvusdb/milvus:v2.5.0-beta
  878.     profiles:
  879.       - milvus
  880.     command: [ 'milvus', 'run', 'standalone' ]
  881.     environment:
  882.       ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379}
  883.       MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000}
  884.       common.security.authorizationEnabled: ${MILVUS_AUTHORIZATION_ENABLED:-true}
  885.     volumes:
  886.       - ./volumes/milvus/milvus:/var/lib/milvus
  887.     healthcheck:
  888.       test: [ 'CMD', 'curl', '-f', 'http://localhost:9091/healthz' ]
  889.       interval: 30s
  890.       start_period: 90s
  891.       timeout: 20s
  892.       retries: 3
  893.     depends_on:
  894.       - etcd
  895.       - minio
  896.     ports:
  897.       - 19530:19530
  898.       - 9091:9091
  899.     networks:
  900.       - milvus
  901.   # Opensearch vector database
  902.   opensearch:
  903.     container_name: opensearch
  904.     image: opensearchproject/opensearch:latest
  905.     profiles:
  906.       - opensearch
  907.     environment:
  908.       discovery.type: ${OPENSEARCH_DISCOVERY_TYPE:-single-node}
  909.       bootstrap.memory_lock: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true}
  910.       OPENSEARCH_JAVA_OPTS: -Xms${OPENSEARCH_JAVA_OPTS_MIN:-512m} -Xmx${OPENSEARCH_JAVA_OPTS_MAX:-1024m}
  911.       OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123}
  912.     ulimits:
  913.       memlock:
  914.         soft: ${OPENSEARCH_MEMLOCK_SOFT:--1}
  915.         hard: ${OPENSEARCH_MEMLOCK_HARD:--1}
  916.       nofile:
  917.         soft: ${OPENSEARCH_NOFILE_SOFT:-65536}
  918.         hard: ${OPENSEARCH_NOFILE_HARD:-65536}
  919.     volumes:
  920.       - ./volumes/opensearch/data:/usr/share/opensearch/data
  921.     networks:
  922.       - opensearch-net
  923.   opensearch-dashboards:
  924.     container_name: opensearch-dashboards
  925.     image: opensearchproject/opensearch-dashboards:latest
  926.     profiles:
  927.       - opensearch
  928.     environment:
  929.       OPENSEARCH_HOSTS: '["https://opensearch:9200"]'
  930.     volumes:
  931.       - ./volumes/opensearch/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml
  932.     networks:
  933.       - opensearch-net
  934.     depends_on:
  935.       - opensearch
  936.   # opengauss vector database.
  937.   opengauss:
  938.     image: opengauss/opengauss:7.0.0-RC1
  939.     profiles:
  940.       - opengauss
  941.     privileged: true
  942.     restart: always
  943.     environment:
  944.       GS_USERNAME: ${OPENGAUSS_USER:-postgres}
  945.       GS_PASSWORD: ${OPENGAUSS_PASSWORD:-Dify@123}
  946.       GS_PORT: ${OPENGAUSS_PORT:-6600}
  947.       GS_DB: ${OPENGAUSS_DATABASE:-dify}
  948.     volumes:
  949.       - ./volumes/opengauss/data:/var/lib/opengauss/data
  950.     healthcheck:
  951.       test: ["CMD-SHELL", "netstat -lntp | grep tcp6 > /dev/null 2>&1"]
  952.       interval: 10s
  953.       timeout: 10s
  954.       retries: 10
  955.     ports:
  956.       - ${OPENGAUSS_PORT:-6600}:${OPENGAUSS_PORT:-6600}
  957.   # MyScale vector database
  958.   myscale:
  959.     container_name: myscale
  960.     image: myscale/myscaledb:1.6.4
  961.     profiles:
  962.       - myscale
  963.     restart: always
  964.     tty: true
  965.     volumes:
  966.       - ./volumes/myscale/data:/var/lib/clickhouse
  967.       - ./volumes/myscale/log:/var/log/clickhouse-server
  968.       - ./volumes/myscale/config/users.d/custom_users_config.xml:/etc/clickhouse-server/users.d/custom_users_config.xml
  969.     ports:
  970.       - ${MYSCALE_PORT:-8123}:${MYSCALE_PORT:-8123}
  971.   # https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html
  972.   # https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-prod-prerequisites
  973.   elasticsearch:
  974.     image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3
  975.     container_name: elasticsearch
  976.     profiles:
  977.       - elasticsearch
  978.       - elasticsearch-ja
  979.     restart: always
  980.     volumes:
  981.       - ./elasticsearch/docker-entrypoint.sh:/docker-entrypoint-mount.sh
  982.       - dify_es01_data:/usr/share/elasticsearch/data
  983.     environment:
  984.       ELASTIC_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic}
  985.       VECTOR_STORE: ${VECTOR_STORE:-}
  986.       cluster.name: dify-es-cluster
  987.       node.name: dify-es0
  988.       discovery.type: single-node
  989.       xpack.license.self_generated.type: basic
  990.       xpack.security.enabled: 'true'
  991.       xpack.security.enrollment.enabled: 'false'
  992.       xpack.security.http.ssl.enabled: 'false'
  993.     ports:
  994.       - ${ELASTICSEARCH_PORT:-9200}:9200
  995.     deploy:
  996.       resources:
  997.         limits:
  998.           memory: 2g
  999.     entrypoint: [ 'sh', '-c', "sh /docker-entrypoint-mount.sh" ]
  1000.     healthcheck:
  1001.       test: [ 'CMD', 'curl', '-s', 'http://localhost:9200/_cluster/health?pretty' ]
  1002.       interval: 30s
  1003.       timeout: 10s
  1004.       retries: 50
  1005.   # https://www.elastic.co/guide/en/kibana/current/docker.html
  1006.   # https://www.elastic.co/guide/en/kibana/current/settings.html
  1007.   kibana:
  1008.     image: docker.elastic.co/kibana/kibana:8.14.3
  1009.     container_name: kibana
  1010.     profiles:
  1011.       - elasticsearch
  1012.     depends_on:
  1013.       - elasticsearch
  1014.     restart: always
  1015.     environment:
  1016.       XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY: d1a66dfd-c4d3-4a0a-8290-2abcb83ab3aa
  1017.       NO_PROXY: localhost,127.0.0.1,elasticsearch,kibana
  1018.       XPACK_SECURITY_ENABLED: 'true'
  1019.       XPACK_SECURITY_ENROLLMENT_ENABLED: 'false'
  1020.       XPACK_SECURITY_HTTP_SSL_ENABLED: 'false'
  1021.       XPACK_FLEET_ISAIRGAPPED: 'true'
  1022.       I18N_LOCALE: zh-CN
  1023.       SERVER_PORT: '5601'
  1024.       ELASTICSEARCH_HOSTS: http://elasticsearch:9200
  1025.     ports:
  1026.       - ${KIBANA_PORT:-5601}:5601
  1027.     healthcheck:
  1028.       test: [ 'CMD-SHELL', 'curl -s http://localhost:5601 >/dev/null || exit 1' ]
  1029.       interval: 30s
  1030.       timeout: 10s
  1031.       retries: 3
  1032.   # unstructured .
  1033.   # (if used, you need to set ETL_TYPE to Unstructured in the api & worker service.)
  1034.   unstructured:
  1035.     image: downloads.unstructured.io/unstructured-io/unstructured-api:latest
  1036.     profiles:
  1037.       - unstructured
  1038.     restart: always
  1039.     volumes:
  1040.       - ./volumes/unstructured:/app/data
  1041. networks:
  1042.   # create a network between sandbox, api and ssrf_proxy, and can not access outside.
  1043.   ssrf_proxy_network:
  1044.     driver: bridge
  1045.     internal: true
  1046.   milvus:
  1047.     driver: bridge
  1048.   opensearch-net:
  1049.     driver: bridge
  1050.     internal: true
  1051. volumes:
  1052.   oradata:
  1053.   dify_es01_data:
复制代码
实际上,我只是对api、woker、plugin_daemon三个模块的启动参数做了修改,将image更换成上述生成的新镜像,并增加command部分,用wait-for-it.sh确保各模块的前序模块已经加载后,再运行自身的启动命令。其中plugin_daemon部分的command命令比力特殊:
  1. /wait-for-it.sh db:5432 -t 30 -- /bin/bash -c "/app/entrypoint.sh"
复制代码
wait-for-it.sh后的/bin/bash -c "/app/entrypoint.sh"是利用如下使命获得的:
  1. docker inspect <plugin_daemon_container_name> --format '{{.Config.Cmd}}'
复制代码
注意<plugin_daemon_container_name>要更换成plugin_daemon的容器名(可以用容器ID),而不是镜像名。
5.在dify\docker目录中,运行如下命令:
  1. docker compose up -d
复制代码
6.在docker destkop的containers页面中,点击"docker"就可以看到dify启动的log。点击docker下一层的plugin_daemon-1,可以看到db的初始化情况。
至此,failed to initialize database错误消散。
上述方法是在我的windows11、docker desktop环境下实现,其他环境未做测试。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表