图龙网络科技

问答社区

原创作者: 图龙网络科技 发布时间: 2023-09-23 229.8K 人阅读

Dify智能语言大模型框架云服务部署,你无需自己部署即可使用大模型的完整功能

太极混元 发布于 6个月前 分类:CHATGPT

Dify 为所有人提供了云服务,你无需自己部署即可使用 Dify 的完整功能。要使用 Dify 云服务,你需要有一个 GitHub 或 Google 账号。

登录 Dify 云服务,创建一个或加入已有的 Workspace

配置你的模型供应商,或使用我们提供的托管模型供应商
可以创建应用了!

目前我们没有收费计划,如果你喜欢请将这款 LLMOps 产品介绍给身边的朋友😄。

建议:单独部署

第一种方法:部署社区版

  • CPU >= 2 Core
  • RAM >= 4GB

Clone Dify
Clone Dify 源代码至本地

1):复制
git clone https://gitee.com/tulong_co/dify.git
Start Dify
进入 dify 源代码的 docker 目录,执行一键启动命令:

复制以下cd dify/docker下执行代码:
docker compose up -d

如果您的系统安装了 Docker Compose V2 而不是 V1,请使用 docker compose 而不是 docker-compose。通过$ docker compose version检查这是否为情况。在这里阅读更多信息。

部署结果:

复制
[+] Running 7/7
✔ Container docker-web-1 Started 1.0s
✔ Container docker-redis-1 Started 1.1s
✔ Container docker-weaviate-1 Started 0.9s
✔ Container docker-db-1 Started 0.0s
✔ Container docker-worker-1 Started 0.7s
✔ Container docker-api-1 Started 0.8s
✔ Container docker-nginx-1 Started
最后检查是否所有容器都正常运行:

复制
docker compose ps
包括 3 个业务服务 api / worker / web,以及 4 个基础组件 weaviate / db / redis / nginx。

复制
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" api 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 4 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp
docker-nginx-1 nginx:latest "/docker-entrypoint.…" nginx 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 4 seconds ago Up 3 seconds 6379/tcp
docker-weaviate-1 semitechnologies/weaviate:1.18.4 "/bin/weaviate --hos…" weaviate 4 seconds ago Up 3 seconds
docker-web-1 langgenius/dify-web:0.3.2 "/entrypoint.sh" web 4 seconds ago Up 3 seconds 80/tcp, 3000/tcp
docker-worker-1 langgenius/dify-api:0.3.2 "/entrypoint.sh" worker 4 seconds ago Up 2 seconds 80/tcp, 5001/tcp
Upgrade Dify
进入 dify 源代码的 docker 目录,按顺序执行以下命令:

复制
cd dify/docker
git pull origin main
docker compose down
docker compose pull
docker compose up -d
Access Dify
访问 Difyll在浏览器中输入 http://localhost 访问 Dify。

第二种:本地源码启动:

Clone Dify 代码:
git clone https://gitee.com/tulong_co/dify.git
在启用业务服务之前,我们需要先部署 PostgresSQL / Redis / Weaviate(如果本地没有的话),可以通过以下命令启动:

cd docker
docker compose -f docker-compose.middleware.yaml up -d

服务端部署
API 接口服务

Worker 异步队列消费服务

安装基础环境
服务端启动需要使用到 Python 3.10.x,推荐使用 Anaconda 来快速安装 Python 环境,内部已包含 pip 包管理工具。

复制
# 创建名为 dify 的 Python 3.10 环境
conda create --name dify python=3.10
# 切换至 dify Python 环境
conda activate dify
启动步骤
进入 api 目录

复制
cd api
复制环境变量配置文件

复制
cp .env.example .env
生成随机密钥,并替换 .env 中 SECRET_KEY 的值

复制
openssl rand -base64 42
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env
安装依赖包

复制
pip install -r requirements.txt
执行数据库迁移

将数据库结构迁移至最新版本。

复制
flask db upgrade
启动 API 服务

复制
flask run --host 0.0.0.0 --port=5001 --debug
正确输出:

复制
* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5001
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 695-801-919
启动 Worker 服务

用于消费异步队列任务,如数据集文件导入、更新数据集文档等异步操作。 Linux / MacOS 启动:

复制
celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail --loglevel INFO
如果使用 Windows 系统启动,请替换为该命令:

复制
celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail --loglevel INFO
正确输出:

复制
-------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus)
--- ***** -----
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: app:0x7fb568572a10
- ** ---------- .> transport: redis://:**@localhost:6379/1
- ** ---------- .> results: postgresql://postgres:**@localhost:5432/dify
- *** --- * --- .> concurrency: 1 (gevent)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> dataset exchange=dataset(direct) key=dataset
.> generation exchange=generation(direct) key=generation
.> mail exchange=mail(direct) key=mail

[tasks]
. tasks.add_document_to_index_task.add_document_to_index_task
. tasks.clean_dataset_task.clean_dataset_task
. tasks.clean_document_task.clean_document_task
. tasks.clean_notion_document_task.clean_notion_document_task
. tasks.create_segment_to_index_task.create_segment_to_index_task
. tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task
. tasks.document_indexing_sync_task.document_indexing_sync_task
. tasks.document_indexing_task.document_indexing_task
. tasks.document_indexing_update_task.document_indexing_update_task
. tasks.enable_segment_to_index_task.enable_segment_to_index_task
. tasks.generate_conversation_summary_task.generate_conversation_summary_task
. tasks.mail_invite_member_task.send_invite_member_mail_task
. tasks.remove_document_from_index_task.remove_document_from_index_task
. tasks.remove_segment_from_index_task.remove_segment_from_index_task
. tasks.update_segment_index_task.update_segment_index_task
. tasks.update_segment_keyword_index_task.update_segment_keyword_index_task

[2023-07-31 12:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1
[2023-07-31 12:58:08,840: INFO/MainProcess] mingle: searching for neighbors
[2023-07-31 12:58:09,873: INFO/MainProcess] mingle: all alone
[2023-07-31 12:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1.
[2023-07-31 12:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready.
前端页面部署
Web 前端客户端页面服务

安装基础环境
Web 前端服务启动需要用到 Node.js v18.x (LTS) 、NPM 版本 8.x.x 或 Yarn。

安装 NodeJS + NPM

进入 https://nodejs.org/en/download,选择对应操作系统的 v18.x 以上的安装包下载并安装,建议 stable 版本,已自带 NPM。

启动步骤
进入 web 目录

复制
cd web
安装依赖包

复制
npm install
配置环境变量。在当前目录下创建文件 .env.local,并复制.env.example中的内容。根据需求修改这些环境变量的值:

复制
# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, 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/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, 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/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=
构建代码

复制
npm run build
启动 web 服务

复制
npm run start
# or
yarn start
# or
pnpm start
正常启动后,终端会输出如下信息:

复制
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
warn - You have enabled experimental feature (appDir) in next.config.js.
warn - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk.
info - Thank you for testing `appDir` please leave your feedback at https://nextjs.link/app-feedback
访问 Dify
最后,访问 http://127.0.0.1:3000 即可使用本地部署的 Dify。

第三种:单独启动前端 Docker 容器:

当单独开发后端时,可能只需要源码启动后端服务,而不需要本地构建前端代码并启动,因此可以直接通过拉取 docker 镜像并启动容器的方式来启动前端服务,以下为具体步骤:

直接使用 DockerHub 镜像
复制
docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 langgenius/dify-web:latest
源码构建 Docker 镜像
构建前端镜像

复制
cd web && docker build . -t dify-web
启动前端镜像

复制
docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web
当控制台域名和 Web APP 域名不一致时,可单独设置 CONSOLE_URL 和 APP_URL

本地访问 http://127.0.0.1:3000

环境变量说明:

公共变量
CONSOLE_API_URL
控制台 API 后端 URL,用于拼接授权回调,传空则为同域。范例:https://api.console.dify.ai。

CONSOLE_WEB_URL
控制台 web 前端 URL,用于拼接部分前端地址,以及 CORS 配置使用,传空则为同域。范例:https://console.dify.ai

SERVICE_API_URL
Service API URL,用于给前端展示 Service API Base URL,传空则为同域。范例:https://api.dify.ai

APP_API_URL
WebApp API 后端 URL,用于声明前端 API 后端地址,传空则为同域。范例:https://app.dify.ai

APP_WEB_URL
WebApp URL,用于给前端展示 WebAPP API Base URL,传空则为同域。范例:https://api.app.dify.ai

FILES_URL
文件预览或下载 URL 前缀,用于将文件预览或下载 URL 给前端展示或作为多模态模型输入; 为了防止他人伪造,图片预览 URL 是带有签名的,并且有 5 分钟过期时间。

服务端
MODE
启动模式,仅使用 docker 启动时可用,源码启动无效。

api

启动 API Server。

worker

启动异步队列 worker。

DEBUG
调试模式,默认 false,建议本地开发打开该配置,可防止 monkey patch 导致的一些问题出现。

FLASK_DEBUG
Flask 调试模式,开启可在接口输出 trace 信息,方便调试。

SECRET_KEY
一个用于安全地签名会话 cookie 并在数据库上加密敏感信息的密钥。初次启动需要设置改变量。可以使用openssl rand -base64 42生成一个强密钥。

DEPLOY_ENV
部署环境。

PRODUCTION(默认)

生产环境。

TESTING

测试环境,前端页面会有明显颜色标识,该环境为测试环境。

LOG_LEVEL
日志输出等级,默认为 INFO。生产建议设置为 ERROR。

MIGRATION_ENABLED
当设置为 true 时,会在容器启动时自动执行数据库迁移,仅使用 docker 启动时可用,源码启动无效。源码启动需要在 api 目录手动执行 flask db upgrade。

CHECK_UPDATE_URL
是否开启检查版本策略,若设置为 false,则不调用 https://updates.dify.ai 进行版本检查。由于目前国内无法直接访问基于 CloudFlare Worker 的版本接口,设置该变量为空,可以屏蔽该接口调用。

容器启动相关配置
仅在使用 docker 镜像或者 docker-compose 启动时有效。

DIFY_BIND_ADDRESS

API 服务绑定地址,默认:0.0.0.0,即所有地址均可访问。

DIFY_PORT

API 服务绑定端口号,默认 5001。

SERVER_WORKER_AMOUNT

API 服务 Server worker 数量,即 gevent worker 数量,公式:cpu 核心数 x 2 + 1可参考:https://docs.gunicorn.org/en/stable/design.html#how-many-workers

SERVER_WORKER_CLASS

默认为 gevent,若为 windows,可以切换为 sync 或 solo。

GUNICORN_TIMEOUT

请求处理超时时间,默认 200,建议 360,以支持更长的 sse 连接时间。

CELERY_WORKER_CLASS

和 SERVER_WORKER_CLASS 类似,默认 gevent,若为 windows,可以切换为 sync 或 solo。

CELERY_WORKER_AMOUNT

Celery worker 数量,默认为 1,按需设置。

HTTP_PROXY

HTTP 代理地址,用于解决国内无法访问 OpenAI、HuggingFace 的问题。注意,若代理部署在宿主机(例如http://127.0.0.1:7890),此处代理地址应当和接入本地模型时一样,使用docker容器内部的宿主机地址(例如http://192.168.1.100:7890或http://172.17.0.1:7890)。

HTTPS_PROXY

HTTPS 代理地址,用于解决国内无法访问 OpenAI、HuggingFace 的问题。同上。

数据库配置
数据库使用 PostgreSQL,请使用 public schema。

DB_USERNAME:用户名

DB_PASSWORD:密码

DB_HOST:数据库 host

DB_PORT:数据库端口号,默认 5432

DB_DATABASE:数据库 database

SQLALCHEMY_POOL_SIZE:数据库连接池大小,默认 30 个连接数,可适当增加。

SQLALCHEMY_POOL_RECYCLE:数据库连接池回收时间,默认 3600 秒。

SQLALCHEMY_ECHO:是否打印 SQL,默认 false。

Redis 配置
该 Redis 配置用于缓存以及对话时的 pub/sub。

REDIS_HOST:Redis host

REDIS_PORT:Redis port,默认 6379

REDIS_DB:Redis Database,默认为 0,请和 Session Redis、Celery Broker 分开用不同 Database。

REDIS_USERNAME:Redis 用户名,默认为空

REDIS_PASSWORD:Redis 密码,默认为空,强烈建议设置密码。

REDIS_USE_SSL:是否使用 SSL 协议进行连接,默认 false

Celery 配置
CELERY_BROKER_URL

格式如下

复制
redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>

范例:redis://:difyai123456@redis:6379/1

BROKER_USE_SSL

若设置为 true,则使用 SSL 协议进行连接,默认 false

CORS 配置
用于设置前端跨域访问策略。

CONSOLE_CORS_ALLOW_ORIGINS

控制台 CORS 跨域策略,默认为 *,即所有域名均可访问。

WEB_API_CORS_ALLOW_ORIGINS

WebAPP CORS 跨域策略,默认为 *,即所有域名均可访问。

详细配置可参考:跨域/身份相关指南

文件存储配置
用于存储数据集上传的文件、团队/租户的加密密钥等等文件。

STORAGE_TYPE

存储设施类型

local(默认)

本地文件存储,若选择此项则需要设置下方 STORAGE_LOCAL_PATH 配置。

s3

S3 对象存储,若选择此项则需要设置下方 S3_ 开头的配置。

azure-blob

Azure Blob 存储,若选择此项则需要设置下方 AZURE_BLOB_ 开头的配置。

STORAGE_LOCAL_PATH

默认为 storage,即存储在当前目录的 storage 目录下。若使用 docker 或 docker-compose 进行部署,请务必将两个容器中 /app/api/storage 目录挂载到同一个本机目录,否则可能会出现文件找不到的报错。

S3_ENDPOINT:S3 端点地址

S3_BUCKET_NAME:S3 桶名称

S3_ACCESS_KEY:S3 Access Key

S3_SECRET_KEY:S3 Secret Key

S3_REGION:S3 地域信息,如:us-east-1

AZURE_BLOB_ACCOUNT_NAME: your-account-name 如 'difyai'

AZURE_BLOB_ACCOUNT_KEY: your-account-key 如 'difyai'

AZURE_BLOB_CONTAINER_NAME: your-container-name 如 'difyai-container'

AZURE_BLOB_ACCOUNT_URL: 'https://<your_account_name>.blob.core.windows.net'

向量数据库配置
VECTOR_STORE

可使用的枚举类型包括:

weaviate

qdrant

milvus

zilliz 与 milvus 一致

pinecone (暂未开放)

WEAVIATE_ENDPOINT

Weaviate 端点地址,如:http://weaviate:8080。

WEAVIATE_API_KEY

连接 Weaviate 使用的 api-key 凭据。

WEAVIATE_BATCH_SIZE

Weaviate 批量创建索引 Object 的数量,默认 100。可参考此文档:https://weaviate.io/developers/weaviate/manage-data/import#how-to-set-batch-parameters

WEAVIATE_GRPC_ENABLED

是否使用 gRPC 方式与 Weaviate 进行交互,开启后性能会大大增加,本地可能无法使用,默认为 true。

QDRANT_URL

Qdrant 端点地址,如:https://your-qdrant-cluster-url.qdrant.tech/

QDRANT_API_KEY

连接 Qdrant 使用的 api-key 凭据。

PINECONE_API_KEY

连接 Pinecone 使用的 api-key 凭据。

PINECONE_ENVIRONMENT

Pinecone 所在的额环境,如:us-east4-gcp

MILVUS_HOST

Milvus host 配置。

MILVUS_PORT

Milvus post 配置。

MILVUS_USER

Milvus user 配置,默认为空。

MILVUS_PASSWORD

Milvus 密码配置,默认为空。

MILVUS_SECURE

Milvus 是否使用 SSL 连接,默认 false。

知识库配置
UPLOAD_FILE_SIZE_LIMIT

上传文件大小限制,默认 15M。

UPLOAD_FILE_BATCH_LIMIT

每次上传文件数上限,默认 5 个。

ETL_TYPE

可使用的枚举类型包括:

dify

Dify 自研文件 Extract 方案

Unstructured

Unstructured.io 文件 Extract 方案

UNSTRUCTURED_API_URL

Unstructured API 路径,当 ETL_TYPE 为 Unstructured 需要配置。

如:http://unstructured:8000/general/v0/general

多模态模型配置
MULTIMODAL_SEND_IMAGE_FORMAT

多模态模型输入时,发送图片的格式,默认为 base64,可选 url。 url 模式下,调用的延迟会比 base64 模式下低,一般建议使用兼容更好的 base64 模式。 若配置为 url,则需要将 FILES_URL 配置为外部可访问的地址,以便多模态模型可以访问到图片。

UPLOAD_IMAGE_FILE_SIZE_LIMIT

上传图片文件大小限制,默认 10M。

Sentry 配置
用于应用监控和错误日志跟踪。

SENTRY_DSN

Sentry DSN 地址,默认为空,为空时则所有监控信息均不上报 Sentry。

SENTRY_TRACES_SAMPLE_RATE

Sentry events 的上报比例,若为 0.01,则为 1%。

SENTRY_PROFILES_SAMPLE_RATE

Sentry profiles 的上报比例,若为 0.01,则为 1%。

Notion 集成配置
Notion 集成配置,变量可通过申请 Notion integration 获取:https://www.notion.so/my-integrations

NOTION_CLIENT_ID

NOTION_CLIENT_SECRET

邮件相关配置
MAIL_TYPE

resend

MAIL_DEFAULT_SEND_FROM
发件人的电子邮件名称,例如:no-reply no-reply@dify.ai,非必需。

RESEND_API_KEY
用于 Resend 邮件提供程序的 API 密钥,可以从 API 密钥获取。

smtp

SMTP_SERVER
SMTP 服务器地址

SMTP_PORT
SMTP 服务器端口号

SMTP_USERNAME
SMTP 用户名

SMTP_PASSWORD
SMTP 密码

SMTP_USE_TLS
是否使用 TLS,默认为 false

MAIL_DEFAULT_SEND_FROM
发件人的电子邮件名称,例如:no-reply no-reply@dify.ai,非必需。

其他
INVITE_EXPIRY_HOURS:成员邀请链接有效时间(小时),默认:72。

Web 前端
SENTRY_DSN
Sentry DSN 地址,默认为空,为空时则所有监控信息均不上报 Sentry。

已废弃
CONSOLE_URL
⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为:CONSOLE_API_URL 和 CONSOLE_WEB_URL。

控制台 URL,用于拼接授权回调、控制台前端地址,以及 CORS 配置使用,传空则为同域。范例:https://console.dify.ai。

API_URL
⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为 SERVICE_API_URL。

API Url,用于给前端展示 Service API Base Url,传空则为同域。范例:https://api.dify.ai

APP_URL
⚠️ 修改于 0.3.8,于 0.4.9 废弃,替代为 APP_API_URL 和 APP_WEB_URL。

WebApp Url,用于声明前端 API 后端地址,传空则为同域。范例:https://app.dify.ai

Session 配置
⚠️ 该配置从 0.3.24 版本起废弃。

仅 API 服务使用,用于验证接口身份。

SESSION_TYPE: Session 组件类型

redis(默认)

选择此项,则需要设置下方 SESSION_REDIS_ 开头的环境变量。

sqlalchemy

选择此项,则使用当前数据库连接,并使用 sessions 表进行读写 session 记录。

SESSION_REDIS_HOST:Redis host

SESSION_REDIS_PORT:Redis port,默认 6379

SESSION_REDIS_DB:Redis Database,默认为 0,请和 Redis、Celery Broker 分开用不同 Database。

SESSION_REDIS_USERNAME:Redis 用户名,默认为空

SESSION_REDIS_PASSWORD:Redis 密码,默认为空,强烈建议设置密码。

SESSION_REDIS_USE_SSL:是否使用 SSL 协议进行连接,默认 false

Cookie 策略配置
⚠️ 该配置从 0.3.24 版本起废弃。

用于设置身份校验的 Session Cookie 浏览器策略。

COOKIE_HTTPONLY

Cookie HttpOnly 配置,默认为 true。

COOKIE_SAMESITE

Cookie SameSite 配置,默认为 Lax。

COOKIE_SECURE

Cookie Secure 配置,默认为 false。

0个回复

  • 龙族们都在等待回复

提供中小企业建站高端正版精品系统

正品模板 购买协议