windows环境本地部署Dify(小白记录自己的搭建过程)

首先感谢两位的帖子,从而根据自己电脑整理出文档
https://blog.csdn.net/weixin_45153791/article/details/146589654
https://blog.csdn.net/u013305783/article/details/146601076

1. 准备环境

  1. 安装WSL(适用于 Linux 的 Windows 子系统)

  2. 下载dify代码(最新版安装依赖的时候无法识别项目,目前用的老版本)

    git clone https://github.com/langgenius/dify.git
    git reset --hard e4d175780e2eab98fafcc82aa6a42f73b265cba2
    
  3. 安装docker Desktop(无配置,无需登录)

  4. docker部署中间件(要梯子)

    1. 运行docker Desktop

    2. 进入dify文件夹,进入linux shell

    3. 进入文件夹

      cd docker
      
    4. 复制文件

      cp middleware.env.example middleware.env
      
    5. 部署中间件,包括 PostgreSQL / Redis / Weaviate(用docker运行文件中对应的镜像,从而无需安装环境)

      docker compose -f docker-compose.middleware.yaml up -d
      
    6. 检查已经运行的docker

      docker ps
      

第5步遇到的问题

  1. 没有外网(备注1)
  2. postgres:15-alpine 不断重启失败(备注2)

2. 部署后端API接口和Worker 服务

  1. 下载并安装Python 3.11 至 3.12(不可以是3.13)

  2. 下载并安装anaconda(管理虚拟环境)

  3. 安装 Microsoft visual c++ 14.0,勾选MSVCv142、windows10 SDK

  4. 进入dify的api文件夹,进入linux shell

  5. 复制文件

    cp .env.example .env
    
  6. 给.env文件生成新密钥

    awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env
    
  7. 进入dify的api文件夹,进入powershell

  8. 创建虚拟环境

    conda create --name dify_env python=3.12
    
  9. 激活虚拟环境

    conda activate dify_env
    
  10. 在虚拟环境中安装依赖(这一步经常网络超时或遗漏依赖、poetry shell)

poetry install
  1. 执行数据库迁移
poetry run flask db upgrade
  1. 成功标识

    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
    
  2. 启动 API 服务

    flask run --host 0.0.0.0 --port=5001 --debug
    
  3. 进入dify的api文件夹,进入powershell

  4. 再次激活虚拟环境

    conda activate dify_env
    
  5. 启动 Worker 服务

    celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO
    
  6. 成功标识为打印出一个c

步骤9遇到的问题

  1. 缺少库(备注3)

3. 部署前端

  1. 进入dify的web文件夹,进入powershell

  2. 安装依赖包

    npm i
    
  3. 复制.env.local文件

    cp .env.example .env.local
    
  4. 前端代码打包(打包启动速度快、不打包可以直接npm run dev)

    npm run build
    
  5. 复制文件

    cp -r .next/static .next/standalone/.next/static && cp -r public .next/standalone/public
    
  6. 找到package.json,创建一个新命令,并写入

    "s": "cross-env PORT=$npm_config_port HOSTNAME=$npm_config_host node .next/standalone/server.js",
    
  7. 启动前端服务

    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 再连公司服务器下载

  1. 公司服务器优先下载好对应镜像(根据docker-compose.middleware.yaml文件夹的镜像)

    postgres:15-alpine
    redis:6-alpine
    langgenius/dify-sandbox:0.2.10
    ubuntu/squid:latest
    semitechnologies/weaviate:1.19.0
    
  2. 打开docker Desktop,打开设置,加入私有服务器地址

    "insecure-registries": [
    	"192.168.0.110:88"// 公司服务器地址
    ],
    
  3. 拉取5条已经存在服务器上的docker镜像

    docker pull 192.168.0.110:88/library/postgres
    等等
    
  4. 给5条镜像改名(因为运行时需要名字匹配)

    docker tag 本地镜像 tag名称:新镜像名称
    docker tag 192.168.0.110:88/library/postgres 15-alpine:postgres:15-alpine
    
  5. 再次启动并运行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. 缺少库

  1. 缺少什么直接下载 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. 虚拟环境已经创建,部分文件无法覆盖问题

  1. 完全删除旧环境
    conda env remove --name dify_env
    
  2. 清理 Conda 缓存
    conda clean --all
    
  3. 重新创建虚拟环境
    conda create --name dify_env python=3.11
    

问答和生成

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐