windows环境本地部署Dify
wsl模式是下,本地数据卷无法映射到docker数据卷,导致postgres不断重启,是因为缺少本地数据卷的路径,导致显示无权限写入文件,修改docker-compose.middleware.yaml文件。公司服务器docker已经安装环境(没有就在公司服务器上下载好),自己docker 再连公司服务器下载。部署中间件,包括 PostgreSQL / Redis / Weaviate(用dock
windows环境本地部署Dify(小白记录自己的搭建过程)
首先感谢两位的帖子,从而根据自己电脑整理出文档
https://blog.csdn.net/weixin_45153791/article/details/146589654
https://blog.csdn.net/u013305783/article/details/146601076
1. 准备环境
-
安装WSL(适用于 Linux 的 Windows 子系统)
-
下载dify代码(最新版安装依赖的时候无法识别项目,目前用的老版本)
git clone https://github.com/langgenius/dify.git git reset --hard e4d175780e2eab98fafcc82aa6a42f73b265cba2 -
安装docker Desktop(无配置,无需登录)
-
docker部署中间件(要梯子)
-
运行docker Desktop
-
进入dify文件夹,进入linux shell
-
进入文件夹
cd docker -
复制文件
cp middleware.env.example middleware.env -
部署中间件,包括 PostgreSQL / Redis / Weaviate(用docker运行文件中对应的镜像,从而无需安装环境)
docker compose -f docker-compose.middleware.yaml up -d -
检查已经运行的docker
docker ps
-
第5步遇到的问题
- 没有外网(备注1)
- postgres:15-alpine 不断重启失败(备注2)
2. 部署后端API接口和Worker 服务
-
下载并安装Python 3.11 至 3.12(不可以是3.13)
-
下载并安装anaconda(管理虚拟环境)
-
安装 Microsoft visual c++ 14.0,勾选MSVCv142、windows10 SDK
-
进入dify的api文件夹,进入linux shell
-
复制文件
cp .env.example .env -
给.env文件生成新密钥
awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env -
进入dify的api文件夹,进入powershell
-
创建虚拟环境
conda create --name dify_env python=3.12 -
激活虚拟环境
conda activate dify_env -
在虚拟环境中安装依赖(这一步经常网络超时或遗漏依赖、poetry shell)
poetry install
- 执行数据库迁移
poetry run flask db upgrade
-
成功标识
Debug mode: on 2025-04-20 18:10:09.377 INFO [MainThread] [_internal.py:97] - 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 * Running on http://192.168.0.122:5001 2025-04-20 18:10:09.377 INFO [MainThread] [_internal.py:97] - Press CTRL+C to quit 2025-04-20 18:10:09.392 INFO [MainThread] [_internal.py:97] - * Restarting with stat None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used. 2025-04-21 02:10:26.549 WARNING [MainThread] [ext_mail.py:21] - MAIL_TYPE is not set 2025-04-21 02:11:17.844 WARNING [MainThread] [_internal.py:97] - * Debugger is active! 2025-04-21 02:11:17.848 INFO [MainThread] [_internal.py:97] - * Debugger PIN: 456-081-881 -
启动 API 服务
flask run --host 0.0.0.0 --port=5001 --debug -
进入dify的api文件夹,进入powershell
-
再次激活虚拟环境
conda activate dify_env -
启动 Worker 服务
celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO -
成功标识为打印出一个c
步骤9遇到的问题
-
缺少库(备注3)
3. 部署前端
-
进入dify的web文件夹,进入powershell
-
安装依赖包
npm i -
复制.env.local文件
cp .env.example .env.local -
前端代码打包(打包启动速度快、不打包可以直接npm run dev)
npm run build -
复制文件
cp -r .next/static .next/standalone/.next/static && cp -r public .next/standalone/public -
找到package.json,创建一个新命令,并写入
"s": "cross-env PORT=$npm_config_port HOSTNAME=$npm_config_host node .next/standalone/server.js", -
启动前端服务
npm run s看到如下为返回值则为成功
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
4. 访问dify
http://127.0.0.1:3000
5. 备注
1. 没有外网
自己电脑没外网,但公司服务器可以。公司服务器docker已经安装环境(没有就在公司服务器上下载好),自己docker 再连公司服务器下载
-
公司服务器优先下载好对应镜像(根据docker-compose.middleware.yaml文件夹的镜像)
postgres:15-alpine redis:6-alpine langgenius/dify-sandbox:0.2.10 ubuntu/squid:latest semitechnologies/weaviate:1.19.0 -
打开docker Desktop,打开设置,加入私有服务器地址
"insecure-registries": [ "192.168.0.110:88"// 公司服务器地址 ], -
拉取5条已经存在服务器上的docker镜像
docker pull 192.168.0.110:88/library/postgres 等等 -
给5条镜像改名(因为运行时需要名字匹配)
docker tag 本地镜像 tag名称:新镜像名称 docker tag 192.168.0.110:88/library/postgres 15-alpine:postgres:15-alpine -
再次启动并运行Docker容器
docker compose -f docker-compose.middleware.yaml up -d
2. postgres:15-alpine 不断重启失败
wsl模式是下,本地数据卷无法映射到docker数据卷,导致postgres不断重启,是因为缺少本地数据卷的路径,导致显示无权限写入文件,修改docker-compose.middleware.yaml文件
db:
image: postgres:15-alpine
restart: always
env_file:
- ./middleware.env
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456}
POSTGRES_DB: ${POSTGRES_DB:-dify}
PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata}
command: >
postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'
-c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'
-c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'
-c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'
-c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'
volumes:
# - ${PGDATA_HOST_VOLUME:-./volumes/db/data}:/var/lib/postgresql/data # 原内容
- /home/yijun/volumes/db/data:/var/lib/postgresql/data # 修改后
# 修改方式:
# 1.获取根据wsl的ubuntu地址,进入ubuntu窗口
# 2.输入pwd命令,得到wsl的ubuntu地址 /home/yijun
# 3.替换相对路径为绝对路径 /home/yijun/volumes/db/data:/var/lib/postgresql/data
# 可能原因:
# 1. 之前成功过,但是清除数据的时候,连数据卷的文件夹一起删除
ports:
- "${EXPOSE_POSTGRES_PORT:-5432}:5432"
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 1s
timeout: 3s
retries: 30
3. 缺少库
- 缺少什么直接下载 pip install xxx,但几个特殊的
ModuleNotFoundError: No module named 'Crypto'
执行
pip uninstall crypto pycryptodome
pip install pycryptodome
ModuleNotFoundError: No module named 'anthropic.types.beta.tools'
执行
pip install anthropic-tools
ModuleNotFoundError: No module named 'google.ai'
执行
pip install google-cloud-aiplatform
pip install google-generativeai
4. 虚拟环境已经创建,部分文件无法覆盖问题
-
完全删除旧环境
conda env remove --name dify_env -
清理 Conda 缓存
conda clean --all -
重新创建虚拟环境
conda create --name dify_env python=3.11
问答和生成
更多推荐



所有评论(0)