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

回到目录

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

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

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

回到目录

相关推荐
维克兜率天3 分钟前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
come1123413 分钟前
Codex 下不同场景 模式选择
python
神也畏惧菠萝1 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
言乐61 小时前
通过 3D 动画直观演示球形瓶内可滑动半圆机构在倾倒时防粘盖、回正时刮膏体的运动学过程
python·3d·django·virtualenv·pygame
是枚小菜鸡儿吖1 小时前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
quantdash_cc1 小时前
ETF 行情数据清洗实战:字段语义拆解、标的池整理与五个校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
小熊恋旧1 小时前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
噜哥带你玩转 AI 大模型2 小时前
从 “if-else“ 到 Agent:Dify 进阶实战,让 AI 自己判断、自己调工具
agent·工作流·dify·多轮对话·httpapi
威哥爱编程2 小时前
Python 智能体开发实战 05:一问教材内容它就编?先把答案从你自己的资料里检索出来
python·agent
java_prinln2 小时前
RAG 面试题介绍
python·agent