保姆级教程:windows本地源码部署Dify-v1.1.3

Dify 是一款专注于 快速构建和部署 AI 应用 的开源平台,旨在帮助开发者、企业甚至非技术用户轻松利用大型语言模型(如 GPT-4、Claude、Llama 等)开发智能应用,例如聊天机器人、知识库助手、自动化工作流等。

核心功能

  1. 低代码/无代码开发:提供可视化界面,通过拖拽式操作设计 AI 应用的工作流程,无需深入编程即可完成开发;支持自定义提示词(Prompt)优化、数据接入(如文本、文件、API)和模型调参。

  2. 多模型支持:兼容主流大语言模型(如 OpenAI、Anthropic、Hugging Face、本地部署模型等),用户可灵活切换或混合使用不同模型;支持模型微调(Fine-tuning)和 RAG(检索增强生成)技术,提升回答准确性和专业性。

  3. 数据处理与知识库:可上传文档、网页、CSV 等数据,自动构建向量知识库,使 AI 应用基于私有数据生成更精准的回答;支持数据清洗、分块、嵌入(Embedding)和检索优化,降低幻觉(Hallucination)风险。

  4. 团队协作与部署:提供多角色权限管理(开发者、管理员、普通用户),支持团队协作开发;一键部署为 API、Web 应用或集成到现有系统(如 Slack、钉钉等)。

  5. 监控与优化:实时跟踪应用使用情况(如请求量、响应时间、成本),分析用户交互日志以优化模型表现。


 其实按照官方给出的源码配置步骤跟着就安装好了,但是为了防止有些小伙伴有些步骤跟不上或者有报错在这里再走一遍流程,仅作自己流程的分享。 

安装步骤:

一、Docker部署

# 克隆化项目

git clone https://github.com/langgenius/dify.git

因为我这里是用的最新版v1.1.3,也可以在官网https://github.com/langgenius/dify的tags里下载压缩包到本地,然后用pycharm打开整个项目。

 

# 部署依赖服务

然后在启用业务服务之前,我们需要先部署 PostgreSQL / Redis / Weaviate(如果本地没有的话),我们可以使用以下命令启动它们:

cd docker 
#在终端输入你的项目文件,进入docker这个文件夹,用我的举例 cd D:\PycharmProjects\dify-1.1.3\api
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d

 执行完了之后会在docker里面出现如下图:

 二、部署后端服务

# 基础环境安装

 因为官方说最好用python3.12,所以咱们创建一个虚拟环境

conda create -n dify python=3.12
conda activate dify

激活dify环境后,运行如下代码,

# 还是以我自己的项目地址为例,请替换成你们自己的地址/api
cd D:\PycharmProjects\dify-1.1.3\api

# 复制环境变量配置文件:
cp .env.example .env

# 生成随机密钥,执行完后会生成一串密钥
openssl rand -base64 42

# 替换.env文件中SECRET_KEY的值:
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env

注意:windows可能在sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env这里执行时会报错,原因是什么无法识别sed指令还是啥,我忘记了,反正博主这里报错了。 可以直接在api文件下的.env里直接添加生成出来的密钥,如下图

# 安装所需的依赖项、数据库迁移、启动 API 服务器

# 会弹出来一行绿色的代码
poetry env use 3.12

# Dify API 服务使用Poetry来管理依赖项
poetry install

# 执行数据库迁移到最新版本
poetry run flask db upgrade

# 启动 API 服务器
poetry run flask run --host 0.0.0.0 --port=5001 --debug
# 运行结果如下图

注意要在你的环境文件.env里面把对应数据库信息改成你自己的数据库信息,不然会出现类似报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 61: invalid continuation byte。特别是我画框这两个部分,我密码是对的但是我的库里面没有一个dify的数据库,我添加了一个以后就正常了

正常运行:

启动API服务器正常运行:

# 启动 Worker 服务 

要使用队列中的异步任务(例如数据集文件导入和数据集文档更新),请按照以下步骤在windows系统下启动Worker服务,运行结果如下图:

poetry run celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO

3.前端服务部署 

# 基础环境的安装:

要启动 Web 前端服务,您将需要Node.js v18.x (LTS)NPM 版本 8.xxYarn

  • 安装 NodeJS + NPM

请访问Node.js — Download Node.js®并选择适合您操作系统的安装包,即 v18.x 或更高版本。建议下载稳定版本,默认包含 NPM。

因为在安装nodejs的时候会自动安装对应版本的npm,但是他这里只需要版本8.xx的,所以给他降一下版本

# 降级 npm 到 8.19.4(最后一个 8.x 版本)
npm install -g npm@8.19.4

# 验证 npm 版本
npm -v  # 应输出 8.19.4

# 安装依赖包

# 前端代码在 web 文件夹,还是以我自己的为例
cd D:\PycharmProjects\dify-1.1.3\web

npm install
或者
pnpm install

# 如果担心安装很慢 可以切换源,先执行这一步再执行上一步
npm config set registry https://registry.npm.taobao.org

# 配置环境变量

在web目录下创建文件 .env.local,并复制 .env.example 中的内容,全部复制过去就行了

# 构建代码(如果是本地部署可以不用这一步,反正我没用直接pnpm dev就跑起了)

npm run build

# 启动 Web 服务

npm run start
# or
yarn start
# or
pnpm start

# npm、pnpm、yarn 是前端开发中最常用的工具
# 因为我npm启动有问题,所以我用的如下启动指令:
pnpm dev

启动了之后运行如下图:

点击链接:

因为我是创建过的 第二次就是让我登陆了

### 各组件及其版本的功能与集成方式 #### 1. **langgenius/dify-api:0.6.6** `langgenius/dify-api:0.6.6` 是 Dify API 的核心容器镜像,提供了一个 RESTful 接口来管理 AI 应用程序的创建、训练和推理功能。它集成了多种工具支持,如搜索引擎、天气预报等[^1]。此镜像是整个系统的控制中心,负责接收外部请求并协调其他服务完成任务。 集成方式通常通过 Docker Compose 文件定义其运行环境变量和服务端口映射关系。例如: ```yaml version: &#39;3&#39; services: api: image: langgenius/dify-api:0.6.6 ports: - "8000:8000" environment: DATABASE_URL: postgres://user:password@db:5432/dify_db ``` --- #### 2. **postgres:15-alpine** PostgreSQL 数据库用于存储结构化数据,比如用户的配置文件、历史记录以及其他元数据信息。版本 `15-alpine` 表示 PostgreSQL 15 版本,并采用轻量 Alpine Linux 基础镜像构建而成。该数据库对于持久保存应用状态至关重要[^3]。 为了确保高可用性和性能优化,在实际部署过程中可以考虑设置主从复制机制或者定期备份策略。以下是简单的 compose 配置片段: ```yaml db: image: postgres:15-alpine environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: dify_db volumes: - ./data:/var/lib/postgresql/data ``` --- #### 3. **redis:6-alpine** Redis 主要作为缓存层服务于高频读取操作场景下提升响应速度的任务需求。此外还可以充当消息队列角色实现异步处理逻辑。这里选用的是 Redis 6 版本搭配 alpine 发行版以减少资源消耗。 下面展示如何将其加入到 docker-compose.yml 中并与其它微服务交互: ```yaml cache: image: redis:6-alpine ports: - "6379:6379" ``` 随后可以在应用程序内部指定连接字符串指向这个实例地址。 --- #### 4. **semitechnologies/weaviate:1.19.0** Weaviate 是一种矢量搜索引擎,能够高效检索嵌入向量空间中的相似项。这使得复杂自然语言查询变得可行,从而增强了语义理解能力。在此项目里使用的特定标签号表明开发者希望锁定兼容性良好的稳定发行版而非最新边缘特性预览版。 启动 Weaviate 实例时需注意初始化参数设定以便适配目标工作负载特征: ```yaml weaviate: image: semitechnologies/weaviate:1.19.0 ports: - "8080:8080" environment: QUERY_DEFAULTS_LIMIT: 25 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: &#39;true&#39; ``` --- #### 5. **langgenius/dify-sandbox:0.1.0** `sandbox` 容器扮演着隔离测试环境的角色,允许用户在一个受控区域内尝试新想法而不会影响生产流程。尽管当前仅处于早期迭代阶段 (v0.1.0),但它已经具备基本框架用来验证概念证明型实验成果。 典型应用场景可能涉及加载定制插件模块或是调整算法超参组合等等动作。相应部分声明如下所示: ```yaml sandbox: image: langgenius/dify-sandbox:0.1.0 depends_on: - db - cache ``` 上述例子强调了依赖链条顺序的重要性——即必须等待基础支撑设施完全就绪之后再激活高业务单元。 --- #### 6. **nginx:latest** 最后提到 Nginx 负责反向代理职责,统一入口流量分发至下游多个后端节点上执行具体事务处理活动。由于官方维护积极频繁更新补丁修复漏洞等原因,“latest” 标签代表获取最近一次发布的通用二进制包集合[^2]。 下面是关于如何配置 SSL/TLS 加密通信链路的一个简单示范脚本节选: ```nginx server { listen 443 ssl; server_name localhost; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; location / { proxy_pass http://api:8000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值