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

【部署】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源代码调试和分析方面内容。

相关文章:

  • 初学者入门指南:什么是网络拓扑结构?
  • Java后端开发day46--多线程(二)
  • 互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解
  • rust-candle学习笔记12-实现因果注意力
  • 数据结构精解:优先队列、哈希表与树结构
  • 【Redis】string
  • Exploring Temporal Event Cues for Dense Video Captioning in Cyclic Co-Learning
  • 【C++指南】STL容器的安全革命:如何封装Vector杜绝越界访问与迭代器失效?
  • [论文阅读]BadPrompt: Backdoor Attacks on Continuous Prompts
  • 提高工作效率的新选择[特殊字符]——Element Plus UI库
  • HNUST湖南科技大学-软件测试期中复习考点(保命版)
  • window环境下,如何通过USB接口控制打印机
  • Spring MVC 视图解析器 (ViewResolver) 如何配置? Spring Boot 是如何自动配置常见视图解析器的?
  • idea如何快速生成测试类
  • 【DLF】基于语言的多模态情感分析
  • 如何阅读、学习 Linux 2 内核源代码 ?
  • 《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南
  • 2025数维杯数学建模A题完整参考论文(共36页)(含模型、可运行代码、数据)
  • 内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命
  • mmcv低版本报错大全
  • 沃旭能源因成本上升放弃英国海上风电项目,或损失近40亿元
  • 习近平会见塞尔维亚总统武契奇
  • “毛茸茸”的画,诗意、温暖又治愈
  • 上海“世行对标改革”的税务样本:设立全国首个税务审判庭、制定首个税务行政复议简易程序
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • OpenAI任命了一位新CEO