使用 Docker 搭建 Dify 1.0.1 开源 LLM 应用平台:基于 1panel 定制化部署与官方文档的完整教程
本文详细介绍如何使用 Docker 部署 Dify 1.0.1 —— 一个开源 LLM 应用开发平台。我们将逐步讲解从源码获取、环境变量配置、通过 1panel 上传部署、Docker 部署到域名反向代理的全流程,帮助你快速从原型转为生产级应用。
本文详细介绍如何使用 Docker 部署 Dify 1.0.1 —— 一个开源 LLM 应用开发平台。我们将逐步讲解从源码获取、环境变量配置、通过 1panel 上传部署、Docker 部署到域名反向代理的全流程,帮助你快速从原型转为生产级应用。
一、Dify 官方简介与核心亮点
Dify 是一个开源的 LLM 应用开发平台,其直观界面整合了 Agentic AI 工作流、RAG 管道、代理功能、模型管理以及可观察性功能,让你能低代码快速搭建各类 AI 应用。
主要功能亮点:
市场主流模型接入:支持多种主流模型,灵活对接。
低代码开发:提供后端 API、插件系统和工作流功能,降低开发门槛。
多功能集成:集成绘画、联网搜索、HTTP 请求、Python 代码执行等多种工具,满足多种业务需求。
应用场景广泛:可用于构建个人知识库、企业客服系统或定制专属工具。
二、获取 Dify
方式 1:Git 克隆
在终端中执行以下命令将 Dify 源码克隆到本地:
git clone https://github.com/langgenius/dify.git
方式 2:GitHub 下载
直接访问 Dify GitHub 页面 点击 “Download ZIP” 下载源码压缩包。
三、通过 1panel 图形化操作部署 Dify 前置准备
如果你使用 1panel 管理服务器,可按以下步骤操作:
上传源码
将下载或克隆的 Dify 压缩包上传至服务器目录(自己自定义目录)例如: /opt/1panel/apps/
新建目录并解压
在上传目录中新建文件夹(如 dify),将压缩包(dify-main.zip)解压到该目录内。
使用 1panel 管理工具
通过 1panel 的图形化界面打开目录 /opt/1panel/apps/dify/,确保文件结构完整后,进行后续 Docker 编排部署。
四、Docker 部署指南
下面提供两种 Docker 部署方案:
4.1 (可选)依据 Dify 官方 Docker 文档部署
如果你倾向于参考 Dify 官方 Docker 文档部署方案,请参见官方文档:Docker 部署指南
主要步骤包括:
#1. 进入到docker目录
cd opt/1panel/apps/dify/dify-main/docker
#2.复制配置好的 .env 文件
cp .env.example .env
#根据需要自定义.env文件。请参阅.env.example文件以了解详细的配置选项。
#3. (可选)如需要独立中间件,复制并配置 middleware.env
#用于docker-compose.middleware.yaml设置必要的中间件服务,如数据库和缓存。
cp middleware.env.example middleware.env
#4. (可选)如需要执行中间件并启动服务
docker-compose -f docker-compose.middleware.yaml up --env-file middleware.env -d
#5. 运行dify服务,从上述目录中执行docker来启动服务。
docker compose up
#6. SSL 证书设置,(生产环境必要)请参阅 docker/certbot/README.md 使用 Certbot 设置 SSL 证书。
#请提前配置好DNS解析
4.2 基于 1panel 部署(推荐)
在 1panel 环境下,您可以直接利用图形化界面完成 Docker 部署。1panel 本身使用基于 Nginx 的 OpenResty,包含反向代理和 SSL 证书申请等功能,极大简化了部署流程。
(可选)在 1panel 中安装必要组件
首先,建议在 1panel 应用商店一键安装以下组件:
OpenResty:提供基于 Nginx 的反向代理和 SSL 证书管理
PostgreSQL:数据库服务
Redis:内存缓存服务
MinIO:开源 S3 存储服务
这些组件为 Dify 部署提供了基础环境支持。
4.3如何避免重复部署并复用已安装的组件?
复用已安装组件:若这些服务(OpenResty, PostgreSQL, Redis, MinIO)已经在 1panel 中安装,可以避免使用 Dify 官方命令再次进行部署。在此情况下,您只需根据需求修改相关的环境变量和配置文件。
翻译环境变量和 Docker YAML 文件:使用 ChatGPT 对环境变量和 Docker YAML 文件进行翻译。以下是已翻译过的文件,可以根据自己的需求进行更改。翻译过程对照官方原版文件,逐行比对,确保没有任何删减,只包含纯粹的翻译和注释(标点和行数保持一致)。
重要注意事项
.env.example 文件:在某些情况下,.env.example 文件会去掉前面的点(.),请自行加上。
docker-compose-template.yaml 文件:在此文件中,您需要根据需要进行调整。确保正确配置各项服务。
4.4下载翻译后的配置文件
翻译后的.env.example 和 docker-compose-template.yaml (可直接修改后使用)
提取码: GSMp
.env.example和docker-compose-template.yaml对照每一行后面#注释翻译,(只能参考)
提取码: HtX2
4.5修改 .env.example 配置文件
1. 通用变量(重要)
APP_URL:
如果是局域网环境,填写局域网的 IP 地址。
如果是公网环境,填写你要使用的域名。
2. 服务器配置
调试模式:
开启 DEBUG=true,日志级别为 DEBUG,方便排查问题。
其他配置根据实际需求填写。
3. 数据库配置(复用 1)
在 1Panel 中新建一个 PostgreSQL 数据库:
进入 数据库 > pgSQL > 创建数据库。
注意填写正确的 用户名、数据库名、密码、Host 地址 和 端口。
4. Redis 配置(复用 2)
在 1Panel 中查看 Redis 连接信息:
进入 数据库 > Redis > 连接信息。
用户名一般为空或 default,其他配置根据需求填写。
5. 跨域配置
如果公网访问,建议限制请求域名,以增强安全性。
6. 文件存储配置(复用 3)
在 1Panel 中查看 MinIO 信息,并新建一个存储桶(Bucket)并配置好key。
注意:OPENDAL_SCHEME=s3,如果使用云存储(如 AWS S3),请修改为对应的配置。
7. 向量存储类型(建议)
大多数用户没有现成的向量数据库,可以根据需求选择类型。
推荐使用 Weaviate,功能强大且易于集成。
8. 知识库配置(可选)
建议自建 Unstructured:
支持自托管,但资源占用较高(仅容器就接近 6GB+)。
如果服务器配置足够高,建议安装。
官方 SaaS 也采用 Unstructured。
9. Nginx 配置(复用 4)
直接删除相关配置,使用 1Panel 自带的 OpenResty 替代。
10. SMTP 配置(必填)
从 1.0.0 版本开始,SMTP 配置为必填项,否则 API 容器会报错很难排查。
确保填写正确的 SMTP 服务器信息。
4.6修改.env.example的内容
# ------------------------------
# API 服务和工作者的环境变量
# ------------------------------
# ------------------------------
# 公共变量
# ------------------------------
# 控制台 API 的后端 URL,
# 用于连接授权回调。
# 如果为空,则为相同的域名。(xxx改成你自己的)
# 示例: https://api.console.dify.ai
CONSOLE_API_URL=https://xxx.xxx.com
# 控制台 Web 的前端 URL,
# 用于连接一些前端地址和 CORS 配置。
# 如果为空,则为相同的域名。
# 示例: https://console.dify.ai
CONSOLE_WEB_URL=https://xxx.xxx.com
# 服务 API URL,
# 用于将服务 API 基础 URL 显示到前端。
# 如果为空,则为相同的域名。
# 示例: https://api.dify.ai
SERVICE_API_URL=https://xxx.xxx.com
# WebApp API 后端 URL,
# 用于声明前端 API 的后端 URL。
# 如果为空,则为相同的域名。
# 示例: https://api.app.dify.ai
APP_API_URL=https://xxx.xxx.com
# WebApp URL,
# 用于将 WebAPP API 基础 URL 显示到前端。
# 如果为空,则为相同的域名。
# 示例: https://app.dify.ai
APP_WEB_URL=https://xxx.xxx.com
# 文件预览或下载 URL 前缀。
# 用于将文件预览或下载 URL 显示到前端或作为多模型输入;
# URL 会签名并且有过期时间。
FILES_URL=https://xxx.xxx.com
# ------------------------------
# 服务器配置
# ------------------------------
# 应用程序的日志级别。
# 支持的值有 `DEBUG`、`INFO`、`WARNING`、`ERROR`、`CRITICAL`(先改为DEBUG测试好后在改生产)
LOG_LEVEL=DEBUG
# 日志文件路径
LOG_FILE=/app/logs/server.log
# 日志文件最大大小,单位是 MB
LOG_FILE_MAX_SIZE=20
# 日志文件最大备份数量
LOG_FILE_BACKUP_COUNT=5
# 日志日期格式
LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S
# 日志时区
LOG_TZ=UTC
# 设置管理员用户初始化密码。
# 如果未设置,管理员用户在创建初始管理员帐户时将不会被提示输入密码。
# 创建初始管理员帐户时。
# 密码的长度不能超过30个字符。(可以留空可以填写,看自己)
INIT_PASSWORD=
# 部署环境。
# 支持的值为 `PRODUCTION`,`TESTING`。默认值是 `PRODUCTION`。
# 测试环境。前端页面上将有一个不同的颜色标签,
# 表示这是一个测试环境。(测试的时候用TESTING没问题再切换PRODUCTION)
DEPLOY_ENV=TESTING
# ------------------------------
# 数据库配置
# 数据库使用 PostgreSQL。请使用公共模式。
# 它与下面“db”服务中的配置一致。
# ------------------------------
#数据库用户名
DB_USERNAME=dify_xxxx
#数据库密码
DB_PASSWORD=xxxx
#数据库地址
DB_HOST=1Panel-postgresql-xxxx
#数据库端口,默认即可
DB_PORT=5432
#数据库名称,创建的表名
DB_DATABASE=dify_xxxx
# 数据库连接池的大小。
# 默认是 30 个连接,可以适当增加。
SQLALCHEMY_POOL_SIZE=30
# 数据库连接池回收时间,默认是 3600 秒。
SQLALCHEMY_POOL_RECYCLE=3600
# 是否打印 SQL,默认值是 false。
SQLALCHEMY_ECHO=false
# 数据库的最大连接数
# 默认是 100
#
# 参考:https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS
POSTGRES_MAX_CONNECTIONS=100
# ------------------------------
# Redis 配置
# 该 Redis 配置用于缓存和在对话过程中进行发布/订阅。
# ------------------------------
#redis地址
REDIS_HOST=1Panel-redis-APsA
#redis端口
REDIS_PORT=6379
#redis用户名,在1panel数据库页面找到redis 打开就看的到终端 输入 acl list 显示default或者其他就是你的用户名
REDIS_USERNAME=default
#redis数据库密码
REDIS_PASSWORD=ZR36UAiQF5Ab40ONl
REDIS_USE_SSL=false
REDIS_DB=0
# ------------------------------
# Celery 配置
# ------------------------------
# 使用 redis 作为代理,redis db 1 作为 celery 代理。
# 格式如下:`redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>`
# 示例:redis://:difyai123456@redis:6379/1
# 如果使用 Redis Sentinel,格式如下:`sentinel://<sentinel_username>:<sentinel_password>@<sentinel_host>:<sentinel_port>/<redis_database>`
# 示例:sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1
#第一个xxxx是密码,第二个xxxx填写你1panel容器的名称后四位
CELERY_BROKER_URL=redis://default:xxxx@1Panel-redis-xxxx:6379/1
BROKER_USE_SSL=false
# S3 配置
#在1panel容器的地址http:// 要加上
S3_ENDPOINT=http://1Panel-minio-kSyJ:9001
#us-east-1 默认即可
S3_REGION=us-east-1
#S3数据库名称difyai 需要去minio里面创建这个名称的 或者改成你想要的,这里要同步修改
S3_BUCKET_NAME=difyai
#两个密钥,自己创建后填写
S3_ACCESS_KEY=xxxx
S3_SECRET_KEY=xxxx
# 是否使用 AWS 管理的 IAM 角色进行 S3 服务的身份验证。
# 如果设置为 false,则必须提供访问密钥和密钥。
S3_USE_AWS_MANAGED_IAM=false
# ------------------------------
# 向量数据库配置
# ------------------------------
# 要使用的向量存储类型。
# 支持的值有 `weaviate`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `tidb_vector`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `oceanbase`。
VECTOR_STORE=weaviate
#这里默认即可
# Weaviate 端点 URL。仅在 VECTOR_STORE 为 `weaviate` 时可用。
WEAVIATE_ENDPOINT=http://weaviate:8080
WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
# ------------------------------
# 知识库配置
# ------------------------------
# 上传文件大小限制,默认 15M。(自行修改)
UPLOAD_FILE_SIZE_LIMIT=15
# 一次可以上传的最大文件数量,默认 5。(自行修改)
UPLOAD_FILE_BATCH_LIMIT=5
# ETL 类型,支持:`dify`, `Unstructured`
# `dify` Dify 的专有文件提取方案
# `Unstructured` Unstructured.io 文件提取方案
ETL_TYPE=dify
# ------------------------------
# 模型配置
# ------------------------------
# 提示生成允许的最大 token 数量。
# 此设置控制 LLM 在提示生成工具中生成提示时可以使用的最多 token 数量。
# 当在提示生成工具中生成提示时。
# 默认值:512 tokens。(自行修改)
PROMPT_GENERATION_MAX_TOKENS=512
# 代码生成允许的最大 token 数量。
# 此设置控制 LLM 在代码生成工具中生成代码时可以使用的最多 token 数量。
# 当在代码生成工具中生成代码时。
# 默认值:1024 tokens。(自行修改)
CODE_GENERATION_MAX_TOKENS=1024
# ------------------------------
# 多模态配置
# ------------------------------
# 多模态模型输入时发送的图像/视频/音频/文档的格式,
# 默认为 base64,可选 url。
# url 模式下的调用延迟会低于 base64 模式。
# 通常建议使用兼容性更强的 base64 模式。
# 如果配置为 url,则需要配置 FILES_URL 为外部可访问的地址,以便多模态模型可以访问图像/视频/音频/文档。
MULTIMODAL_SEND_FORMAT=base64
# 上传图像文件大小限制,默认 10M。(自行修改)
UPLOAD_IMAGE_FILE_SIZE_LIMIT=10
# 上传视频文件大小限制,默认 100M。(自行修改)
UPLOAD_VIDEO_FILE_SIZE_LIMIT=100
# 上传音频文件大小限制,默认 50M。(自行修改)
UPLOAD_AUDIO_FILE_SIZE_LIMIT=50
# ------------------------------
# 邮件相关配置
# ------------------------------
# 邮件类型,支持:resend, smtp(邮箱开启了smtp去所在邮箱提供商找到文档进行配置)
MAIL_TYPE=smtp
# 默认发件人邮箱地址,如果未指定
MAIL_DEFAULT_SEND_FROM=
# Resend 邮件提供商的 API-Key,当 MAIL_TYPE 为 `resend` 时使用。
RESEND_API_URL=https://api.resend.com
RESEND_API_KEY=your-resend-api-key
# SMTP 服务器配置,当 MAIL_TYPE 为 `smtp` 时使用
#邮箱通信地址
SMTP_SERVER=smtp.xxx.xxx.com
#465是SSL链接方式的端口号 ,默认
SMTP_PORT=465
#邮箱地址
SMTP_USERNAME=hello@xxx.com
#邮箱密码或者两步验证码
SMTP_PASSWORD=xxxx
#默认关闭,反之开启
SMTP_USE_TLS=false
SMTP_OPPORTUNISTIC_TLS=false
# ------------------------------
# Weaviate 服务的环境变量
# (仅在 VECTOR_STORE 为 weaviate 时使用)
# ------------------------------
WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate
WEAVIATE_QUERY_DEFAULTS_LIMIT=25
WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
WEAVIATE_DEFAULT_VECTORIZER_MODULE=none
WEAVIATE_CLUSTER_HOSTNAME=node1
WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true
WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
WEAVIATE_AUTHENTICATION_APIKEY_USERS=hello@xxx.com
WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED=true
WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=hello@xxx.com
#邮箱改成自己的
#后面基本上没什么要改的了,如果需要深度定制可以复制每一个参数发送给AI 让他帮你配置。
4.7修改 docker-compose-template.yaml 配置文件
在 docker-compose-template.yaml 文件中,删除不需要的容器代码,仅保留以下核心服务:
api:提供核心 API 服务,负责处理业务逻辑和数据交互。
worker:用于异步任务处理,支持高并发场景。
web:前端服务,提供用户界面和交互功能。
sandbox:沙箱环境,用于安全执行用户代码。
plugin_daemon:插件守护进程,支持插件管理和运行。
ssrf_proxy:SSRF 防护代理,增强服务安全性。
weaviate:向量数据库,用于高效存储和检索向量数据。
通过精简容器配置数量配置复用,可以显著减少资源占用,同时确保核心功能的正常运行。优化后的配置文件更简洁,便于维护和扩展。
4.8修改docker-compose-template .yaml的内容
#这里只需要简单的修改和删除很多创建的多余容器即可。
#例如API服里面有 db和网络选项删行即可,可以直接复制我的使用,也可以照着我的自己进行修改。
#除了以下的内容,多余的全部删除
x-shared-env: &shared-api-worker-env
services:
# API 服务
api:
image: langgenius/dify-api:1.0.1
restart: always
environment:
# 使用共享的环境变量。
<<: *shared-api-worker-env
# 启动模式,'api' 启动 API 服务器。
MODE: api
SENTRY_DSN: ${API_SENTRY_DSN:-}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
volumes:
# 将存储目录挂载到容器中,用于存储用户文件。
- ./volumes/app/storage:/app/api/storage
networks:
- 1panel-network
ports:
- "5001:5001"
# worker 服务
# 用于处理队列的 Celery worker。
worker:
image: langgenius/dify-api:1.0.1
restart: always
environment:
# 使用共享的环境变量。
<<: *shared-api-worker-env
# 启动模式下,“worker”启动Celery worker以处理队列。
MODE: worker
SENTRY_DSN: ${API_SENTRY_DSN:-}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
volumes:
# 将存储目录挂载到容器中,用于存储用户文件。
- ./volumes/app/storage:/app/api/storage
networks:
- 1panel-network
# 前端web应用程序。
web:
image: langgenius/dify-web:1.0.1
restart: always
environment:
CONSOLE_API_URL: ${CONSOLE_API_URL:-}
APP_API_URL: ${APP_API_URL:-}
SENTRY_DSN: ${WEB_SENTRY_DSN:-}
NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0}
TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000}
CSP_WHITELIST: ${CSP_WHITELIST:-}
MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
MARKETPLACE_URL: ${MARKETPLACE_URL:-https://marketplace.dify.ai}
TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-}
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-}
PM2_INSTANCES: ${PM2_INSTANCES:-2}
LOOP_NODE_MAX_COUNT: ${LOOP_NODE_MAX_COUNT:-100}
MAX_TOOLS_NUM: ${MAX_TOOLS_NUM:-10}
networks:
- 1panel-network
ports:
- "3000:3000"
# Dify 沙箱。
sandbox:
image: langgenius/dify-sandbox:0.2.10
restart: always
environment:
# Dify 沙箱配置。
# 请确保在部署时将此密钥更改为一个强密钥。
# 您可以使用 `openssl rand -base64 42` 生成一个强密钥。
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}
SANDBOX_PORT: ${SANDBOX_PORT:-8194}
volumes:
- ./volumes/sandbox/dependencies:/dependencies
- ./volumes/sandbox/conf:/conf
healthcheck:
test: [ 'CMD', 'curl', '-f', 'http://localhost:8194/health' ]
networks:
- 1panel-network
# 插件守护进程
plugin_daemon:
image: langgenius/dify-plugin-daemon:0.0.4-local
restart: always
environment:
# 使用共享的环境变量。
<<: *shared-api-worker-env
DB_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin}
SERVER_PORT: ${PLUGIN_DAEMON_PORT:-5002}
SERVER_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi}
MAX_PLUGIN_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false}
DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001}
DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
PLUGIN_REMOTE_INSTALLING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0}
PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120}
PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600}
PIP_MIRROR_URL: ${PIP_MIRROR_URL:-}
ports:
- "${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}:${PLUGIN_DEBUGGING_PORT:-5003}"
volumes:
- ./volumes/plugin_daemon:/app/storage
networks:
- 1panel-network
# ssrf_proxy 服务
# 更多信息,请参考
# https://docs.dify.ai/learn-more/faq/install-faq#id-18.-why-is-ssrf_proxy-needed
ssrf_proxy:
image: ubuntu/squid:latest
restart: always
volumes:
- ./ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template
- ./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" ]
environment:
# pls clearly modify the squid env vars to fit your network environment.
HTTP_PORT: ${SSRF_HTTP_PORT:-3128}
COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid}
REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194}
SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox}
SANDBOX_PORT: ${SANDBOX_PORT:-8194}
networks:
- 1panel-network
# Weaviate 向量存储。
weaviate:
image: semitechnologies/weaviate:1.19.0
profiles:
- ''
- weaviate
restart: always
volumes:
# 将 Weaviate 数据目录挂载到容器中。
- ./volumes/weaviate:/var/lib/weaviate
environment:
# Weaviate 配置
# 您可以参考 [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) 文档以获取更多信息
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@edirk.com}
AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true}
AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@edirk.com}
networks:
- 1panel-network
networks:
# 在 sandbox、api 和 ssrf_proxy 之间创建一个网络,并且无法访问外部。
1panel-network:
external: true
volumes:
oradata:
dify_es01_data:
.env.example和docker-compose-template.yaml按需要修改填入即可
提取码:kFJV
五、开始生成生成docker-compose.yaml的配置文件,准备部署
打开目录/opt/1panel/apps/dify/dify-main/docker删除目录下原本的.env.example和docker-compose-template.yaml文件,然后把下载的这两个文件替换进去。
使用你的SSH终端(推荐)或者1panel面板里面的自带终端输入命令
cp .env.example .env 复制环境变量
./generate_docker_compose 自动生成docker-compose.yaml部署文件
docker compose up -d 开始启动自动部署容器
docker compose down 关闭容器
5.1前提条件
在完成以上步骤之前,请确保已安装并配置好以下服务:
MinIO:用于文件存储。
Redis:用于缓存和任务队列。
PostgreSQL:用于数据存储。
只有在这些服务正常运行后,才能顺利进行后续操作。
5.2使用1panel创建容器编排(可选)
六、如何使用域名进行访问?
6.1在1panel网站里面新建一个反向代理
然后点开网站的配置开始设置域名后端的访问反向地址,不配置可能一直卡引导安装界面无法访问(必要)
(api接口)
api /api http://127.0.0.1:5001
(后端API接口)
consoleapi /console/api http://127.0.0.1:5001
(文件地址)
files /files http://127.0.0.1:5001
(模型接口)
v1 /v1 http://127.0.0.1:5001
七、为你的域名开启SSL,(可选)
如果你在配置文件里面填入的6个地址是HTTPS开头的地址这里就必须要配置SSL
你需要上传你的域名证书,或者通过1panel面板进行申请免费的SSL证书(有效期3个月)自动续期,创建一个ACME账户和填入你自己的服务器DNS解析访问控制账户,申请好证书后去域名配置里面选择HTTPS开启SSL,我使用的是阿里云的服务,这里自行研究。
八、最后访问你设置的域名验证是否成功搭建完毕。
输入网站后第一次进入需要等待至多5分钟(看服务器配置),然后开始配置邮箱密码就进入了主页面,如果迟迟不进入一直转圈,可以打开容器的日志页面查看当前的容器信息,例如docker-worker-1这个容器
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)