标题: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]