当前位置: 首页 > ai >正文

【部署】win10的wsl环境下调试dify的api后端服务

回到目录

标题:win10的wsl环境下,远程调试dify的api后端服务

0. 上一篇讲解web前端服务的启动方法,本篇内容是vscode的调试模式启动api后端服务。文章4000字左右,阅读时间15-20分钟。

dify官方运行环境要求较低2U4G,可以通过docker镜像启动全套组件。目前手头这台笔记本,八代i5-8265U,原来8G内存,运行全套前后端程序+docker中间件,内存90%以上。内存16G后,可以正常运行。居家、通勤、旅游都可以用一台电脑完成dify代码调试。步骤参考官网指引略有调整:https://docs.dify.ai/en/getting-started/install-self-hosted/local-source-code

1. wsl 安装 pyenv

参考:https://github.com/pyenv/pyenv
如果机器已经安装pyenv可以直接跳过本部分内容

1.1.自动安装 (需要科学上网)

$ curl -fsSL https://pyenv.run | bash

1.2. 建议使用 手动安装

1.2.1. 拉源代码

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

1.2.2.配置和验证 pyenv

1.2.2.1. 增加配置到 ~/.profile:

$ echo ‘export PYENV_ROOT=“$HOME/.pyenv”’ >> ~/.profile
$ echo ‘[[ -d KaTeX parse error: Expected 'EOF', got '&' at position 19: …NV_ROOT/bin ]] &̲& export PATH="PYENV_ROOT/bin:$PATH"’ >> ~/.profile
$ echo ‘eval “$(pyenv init - bash)”’ >> ~/.profile

1.2.2.2. 增加配置到 ~/.bash_profile:

$ echo ‘export PYENV_ROOT=“$HOME/.pyenv”’ >> ~/.bash_profile
$ echo ‘[[ -d KaTeX parse error: Expected 'EOF', got '&' at position 19: …NV_ROOT/bin ]] &̲& export PATH="PYENV_ROOT/bin:$PATH"’ >> ~/.bash_profile
$ echo ‘eval “$(pyenv init - bash)”’ >> ~/.bash_profile

1.2.2.3. 执行 .profile

这一步与官网不太一样,wsl在.profile的处理上可能与原生的ubuntu有差异
$ source .profile

1.2. 验证安装成功

$ pyenv --version
pyenv 2.5.7

1.3. 安装pyenv依赖工具

$ sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev
libbz2-dev libreadline-dev libsqlite3-dev curl git
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

1.4. 下载、安装、切换特定版本python

1.4.1. 配置国内镜像源

$ export PYTHON_BUILD_MIRROR_URL=“https://mirrors.tuna.tsinghua.edu.cn/pyenv/”

1.4.2. 在线安装3.12版本python

这个很慢,推荐使用1.4.3的离线安装方法
$ pyenv install 3.12

1.4.3. 推荐使用 离线安装

1.4.3.1. 互联网机器下载安装包

https://www.python.org/ftp/python/3.12.10/Python-3.12.10.tar.xz

1.4.3.2. 手动安装python包

参考:https://www.cnblogs.com/yinchaows/p/18791400
$ mkdir ~/.pyenv/cache
$ mv ./Python-3.12.10.tar.xz .pyenv/cache/
$ pyenv install -v 3.12.10

1.4.3.3. 确认正常安装

$ ls ~/.pyenv/versions
3.12.10

1.4.3.4. 切换3.12版本python

$ pyenv global 3.12
$ python --version
Python 3.12.10

dify后端程序需要python 3.12版本,到这里pyenv安装步骤完成

2. 安装和启动 api service

2.1. 参考官网指引,下载源代码

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

2.2. 启动中间件的docker 镜像

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

2.3. pip 安装 uv

$ pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.4. 进入dify的api目录,安装依赖包

$ uv sync -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.5. 启动celery worker

$ uv run celery -A app.celery worker -P gevent -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace
如下图表示服务开启成功,接下来最后一步在vscode里面调试模式启动api service
在这里插入图片描述
[图3]
这个ubuntu窗口放在这里,接下来打开vscode

3. vscode调试模式启动api service

3.1. wsl终端打开sshd服务

vscode remote ssh方式打开dify的api项目需要用到sshd服务,wsl默认没有这个服务,需要手工添加
$ sudo apt update && sudo apt install openssh-server

3.2. 检查配置文件

$sudo vi /etc/ssh/sshd_config
确保下面两行没有被注销
Port 22
PasswordAuthentication yes
$ sudo service ssh start

3.3. 打开vscode安装插件 Python Debugger / Remote Explorer/ Remote Development / Remote - SSH / Remote - SSH: Editing Configuration Files

后面几个Remote开头的插件可能需要科学方式才能下载
在这里插入图片描述
[图7]
整个插件空间380MB左右
在这里插入图片描述
[图6]
如果您没有科学上网的方法,可以留言联系我获取这个压缩包,直接解压缩到 C:\Users[用户名].vscode\extensions 目录下面,就可以使用插件。

3.4. 通过remote ssh模式打开api工作目录

vscode 左下角 >< 按钮,连接目标服务器,按照提示连接本地目标服务器,中间按照提示,在wsl 安装python debug插件
在这里插入图片描述
[图4]

3.5. vscode的debug菜单 配置debug的 launch.json

{
“version”: “0.2.0”,
“configurations”: [

{"name": "Python: Flask","type": "python","request": "launch","program": "${workspaceFolder}/app.py","env": {"FLASK_APP": "app.py","FLASK_ENV": "development","FLASK_DEBUG": "1"},"args": ["run","--host=0.0.0.0","--port=5001"],"jinja": true
}

]
}

4. 测试断点

4.1. 登录页面login按钮增加断点

controllers/console/auth/login.py loginAPI() Line.44 增加断点

4.2. 浏览器点击登录按钮,vscode 成功捕获断点

在这里插入图片描述
[图5]

到这里整个dify后端的调试环境完成,总结来说,1、pyenv和uv等工具的安装;2、vscode的远程调试方法。后面,我们开始dify源代码调试和分析方面内容。

http://www.xdnf.cn/news/5163.html

相关文章:

  • PyTorch API 2 - 混合精度、微分、cpu、cuda、可视化
  • torch.nn 下的常用深度学习函数
  • uniapp-商城-48-后台 分类数据添加修改弹窗bug
  • Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南
  • Eclipse 插件开发 6 右键菜单
  • 从 JMS 到 ActiveMQ:API 设计与扩展机制分析(三)
  • 单脉冲前视成像多目标分辨算法——论文阅读
  • stm32之IIC
  • 基于STM32的居家环境监测报警Proteus仿真+程序设计+设计报告+讲解视频
  • 利用多AI协作实现AI编辑器高效开发:创新架构与实践基本构想
  • DeepSeek 实现趣味心理测试应用开发教程
  • JAVA自动装箱拆箱
  • 车载电子电器架构 --- 汽车网关概述
  • 【计算机视觉】OpenCV实战项目:Athlete-Pose-Detection 运动员姿态检测系统:基于OpenCV的实时运动分析技术
  • [面试]SoC验证工程师面试常见问题(五)TLM通信篇
  • 引言:Client Hello 为何是 HTTPS 安全的核心?
  • 前端HTMX技术详细解释
  • 第十七次博客打卡
  • AZScreenRecorder最新版:功能强大、操作简便的手机录屏软件
  • 网络编程套接字
  • [白话文] 从百草园RLHF到三味书屋DPO
  • 全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
  • MCP协议:大模型与外部工具交互的标准化创新方案
  • 从零开始跑通3DGS教程:(四)修改(缩放、空间变换)colmap生成的sfm结果
  • SpringBoot框架开发网络安全科普系统开发实现
  • 分布式事务快速入门
  • 小程序多线程实战
  • 功能齐全的菜谱管理器Tamari
  • [论文阅读]BadPrompt: Backdoor Attacks on Continuous Prompts
  • 23、Next.js:时空传送门——React 19 全栈框架