Dify在windows本地部署流程,配置本地ollama,解决管理密码遗忘

dify的组成部分

本次部署的是dify社区版本,github地址是:https://github.com/langgenius/dify
dify有以下几个组成部分

组件名称实现方式作用
webnext.js,在dify项目的web文件夹下前端web界面
apipython,在dify项目的的api文件夹下web前端界面的后台api,负责接收前端发起的功能请求
workerpython,在dify项目的的api文件夹下
sandboxdify使用go自研,https://github.com/langgenius/dify-sandbox专门用于运行不可信代码的沙箱环境
plugin_daemondify使用go自研,https://github.com/langgenius/dify-plugin-daemon管理dify插件
weaviateWeaviate开源向量数据库
dbpostgresql持久化数据库
redisredis开源组件提供内存数据库或当做缓存使用
ssrf_proxy使用squidweb http,https,ftp的缓存

Dify的部署计划

本次部署按照官方源码部署文档的思想,一部分选择本地代码部署,另外一部分使用docker进行部署

组件名称方式
web源码
api源码
worker源码
sandboxdocker
plugin_daemondocker
weaviatedocker
dbdocker
redisdocker
ssrf_proxydocker

系统使用windows11

部署结果

web

在这里插入图片描述

api

worker

在这里插入图片描述

docker

在这里插入图片描述

运行界面

在这里插入图片描述

部署过程

官方的部署文档:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/local-source-code

安装docker

通过官方下载docker desktop.
在安装的过程中需要开启windows的虚拟化支持,和开启wsl2
docker的官方文档:https://docs.docker.com/desktop/setup/install/windows-install/#wsl-2-backend

下载 Dify代码到本地

在这里插入图片描述
然后把下载下来的代码解压出来放到一个自己习惯的目录中,主要路径最好不要有中文.我放在了D:\work1中
在这里插入图片描述

启动docker

cd docker
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d

这里启动完成在docker的管理端应该能看到docker的启动结果了.需要注意docker的状态为运行中,也就是绿色的点
在这里插入图片描述
到此为止,dify所有使用docker启动的项目已经部署完毕,如pg,redis,沙箱,plugin管理,http缓存,下面需要进入web,api,worker的代码部署环节

安装uv 为python提供虚拟环境

一般的在本机部署python项目的时候都需要先构建一个python虚拟环境,不然项目多了python的版本非常不好控制,我这次使用的是conda的虚拟环境.conda可以创建出很多个python环境,然后在部署项目的时候选择一个环境激活就可以,这样就可以做到环境隔离.

在cmd命令行下执行一下uv,如果发现没有uv命令需要安装,

pip install uv

如果pip命令也没有,那么需要从官网下载并安装一个python
https://www.python.org/downloads/

配置uv软件源(可选,只是加快uv下载软件的速度)

激活了python虚拟环境后需要更改pip软件源到国内,这样可以加快软件包下载速度.
https://zhuanlan.zhihu.com/p/1930714592423703026
比较懒可以跳过这个步骤,

部署api服务(无debug需求版)

1命令行进入到api文件夹下
2把.env.example复制一份并改名叫 .env 这个文件里面是dify的配置信息
3生成随机密钥并替换 .env 文件中的 SECRET_KEY 值
这个是api服务用来加密cookie的值,官方文档给了一个awk命令,我们在windows下面可以手动替换
SECRET_KEY= 成下面文字,毕竟是测试部署,如果在生产环境,需要自己重新生成一个秘钥

# Your App secret key will be used for securely signing the session cookie
# Make sure you are changing this key for your deployment with a strong key.
# You can generate a strong key using `openssl rand -base64 42`.
# Alternatively you can set it with `SECRET_KEY` environment variable.
SECRET_KEY=6ENPIckuXNN2ReA3Qdqfx668WKc4seM6k/tmY8p/5QSVGKclv99fG9IU

4使用uv安装python依赖,
这个要在api文件夹下执行,并且确定使用的是python虚拟环境正确

uv sync

在这里插入图片描述
5 安装依赖完成后需要执行数据库初始化
因为docker运行起来的postgresql并没有dify的数据库结构,所以需要初始化表结构

uv run flask db upgrade

6启动api服务

uv run 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

如果报错提示5432端口连接不上,需要检查docker的db服务是否启动成功,
如果报错提示5432端口连接不上或者连接拒绝,请检查是不是使用了本地pg数据库,并且用户名密码没有在dify中设置.
如果报错其他端口连接不上,同样检查redis,等服务是否开启正常.

下面是pg无法连接的报错信息:

psycopg2.OperationalError: connection to server at "localhost" (::1), port 5432 failed: Connection refused (0x0000274D/10061)
        Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused (0x0000274D/10061)
        Is the server running on that host and accepting TCP/IP connections?

部署api服务(需要debug 源代码版)

本届需要先按照上一节(部署api服务(无debug需求版)) 把api服务跑起来.

如果需要使用vscode进行源码级debug,那么需要麻烦一点.

使用vscode打开api这个文件夹,注意是api文件夹不是dify的文件夹
在这里插入图片描述
然后构建一个launch.js.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这样会生成一个launch.js的模板
然后复制下面的文件内容,直接写到这个模板中

{
 "version": "0.2.0",
    "configurations": [
        {
            "name": "Flask (conda dify环境)",
            "type": "python",
            "request": "launch",
            "module": "flask",  
            "args": [
                "run",
                "--host", "0.0.0.0",
                "--port", "5001",
                "--debug"
            ],
            "stopOnEntry":false,
             "justMyCode": false,
        "python": "${workspaceFolder}\\.venv\\Scripts\\python.exe"  
        }
    ]
}

然后就可以打断点运行了
在这里插入图片描述
比如我在知识库的获取列表的地方打了一个断点:
在这里插入图片描述
就可以在代码运行到的地方停住了
在这里插入图片描述

部署worker

同样在api目录下,确定是否在对应的python虚拟环境中执行如下命令

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

预期输出

2025-10-15 08:53:42,128 INFO [utils.py:162]  NumExpr defaulting to 16 threads.
D:\work1\dify-1.4.2\api\controllers\web\remote_files.py:7: UserWarning: To use python-magic guess MIMETYPE, you need to run `pip install python-magic-bin`
  from controllers.common import helpers
 
 -------------- celery@MS-DFVZOBLLJNXI v5.5.3 (immunity)
--- ***** -----
-- ******* ---- Windows-11-10.0.26100-SP0 2025-10-15 16:53:43
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         app_factory:0x29c7d494530
- ** ---------- .> transport:   redis://:**@localhost:6379/1
- ** ---------- .> results:     postgresql://postgres:**@localhost:5432/dify
- *** --- * --- .> concurrency: 16 (solo)
-- ******* ---- .> 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
                .> ops_trace        exchange=ops_trace(direct) key=ops_trace

node版本管理,和node,和pnpm

web服务同样有虚拟环境,我是用的nvm
安装nvm请参考:https://www.nvmnode.com/

根据dify文档要启动 web 前端服务,需要 Node.js v22 (LTS) 和 PNPM v10。
所以在安装完nvm之后可以执行
在这里插入图片描述
这样当前window使用的node版本就是node v22了
nvm 不用每个cmd窗口执行一次切换.

安装pnpm, pnpm是用来给前端项目安装依赖包的

npm i -g pnpm

pnpm可以切成国内的软件源,避免从国外下依赖包导致巨慢

pnpm config set registry https://registry.npmmirror.com/

部署web

1进入dify的web目录
2 执行下方代码用来下载依赖

pnpm install --frozen-lockfile

这一步要确定真的执行成功没有报错,如果报错可能是依赖版本冲突,或者网络问题,可以根据报错在网络上搜索解决方案.这部报错很头疼.

3 创建前端的配置文件
在web目录中创建一个名为 .env.local的文件,并从 .env.example复制内容
我完全copy了env.example的内容,放到了env.local里面

4构建web项目

pnpm build

5 使用dev模式运行服务

pnpm dev

预期输出

D:\work1\dify-1.4.2\web>pnpm dev

> dify-web@1.4.2 dev D:\work1\dify-1.4.2\web
> cross-env NODE_OPTIONS='--inspect' next dev

Debugger listening on ws://127.0.0.1:9229/63edbefd-5966-4e37-b7f9-913492f13e04
For help, see: https://nodejs.org/en/docs/inspector
Debugger listening on ws://127.0.0.1:9230/5f96684d-d9b0-49cd-b347-a1fe041d598d
For help, see: https://nodejs.org/en/docs/inspector
   the --inspect option was detected, the Next.js router server should be inspected at 9230.
   ▲ Next.js 15.2.3
   - Local:        http://localhost:3000
   - Network:      http://192.168.110.192:3000
   - Environments: .env.local

 ✓ Starting...
 ✓ Ready in 4.3s
 ○ Compiling /middleware ...
 ✓ Compiled /middleware in 511ms (108 modules)
 ○ Compiling /apps ...
Browserslist: browsers data (caniuse-lite) is 6 months old. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme

体验

我们访问http://localhost:3000就可以看到dify的窗口了.
第一次访问很慢,而且每点一个按钮都很慢,因为前端是懒加载的,第一次进页面前端才会完全执行编译,所以要有点耐心…

第一次进入dify需要设置管理员邮箱和密码,之后就能正常进入dify了

其他问题

如何配置llm访问本地ollma,

需要在dify中安装ollma插件,然后配置
在这里插入图片描述
配置ollama

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里要特别主要,我本地使用的是ollama运行的model,使用api访问一般都是使用http://127.0.0.1:11434做为url来访问ollama服务,如果我们这里填127.0.0.1会报错,原因是dify会说无法访问服务,因为我们的plugin运行在docker中,
需要把127.0.0.1改为http://host.docker.internal

一段时间不用了,管理员密码忘记了怎么办

找到下面这个代码文件,然后把168的代码的后半部分删除掉,
原来的代码的意思是校验密码是否存在,并且验证是否通过,我们改成只校验密码存在就行,然后重启api服务.(反正是本地实验)
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值