实战docker部署dify及注意点
缘起
上上周,因工作原因被要求参加一个生成式AI的职业技能竞赛,实操就是dify工作流,所以想着自己搭建一个环境用于学习和测试。
部署
dify开源是提供了docker部署的所有配置文件的,只需要按照指引即可完成部署。
直接拉取dify的代码
bash
git clone https://github.com/langgenius/dify.git
可以直接使用官方提供的配置文件启动:
bash
cd dify
cd docker
cp .env.example .env
docker compose up -d
其实至此,dify已经启动了,访问80端口页面如下:

但是实际使用中可能存在3个问题:
-
文件夹权限导致上传文件报错
-
代码执行环节节点权限
-
python代码是在沙箱执行的,可能缺少你需要的python库
注意点
文件夹权限
在此目录下,可以看到使用dify时候上传的文件:

这个是web docker容器的文件夹,查看web容器的dockerfile,查看构建文件:

所以必须修改宿主机文件夹的权限,如果是测试环境,还是直接给所有权限方便
bash
chmod -R 777 dify/docker/volumes/app/storage
如果是生成环境,在宿主机上 chown -R 1001:1001 目标目录,然后在 docker run 时使用 -u 1001:1001 显式指定用户。
代码沙箱权限
沙箱权限配置目录在:

这里权限分为2个:
-
网络权限,就是代码能否访问网络
-
系统调用的权限
这里我也是习惯分成2部分:
如果是测试,直接都给了:
yaml
allowed_syscalls: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,28,30,31,32,33,34,35,36,37,39,56,57,60,61,62,63,72,73,80,81,85,86,90,91,105,106,131,186,202,204,217,231,233,234,237,257,262,273,281,291,318,334,435,499]
如果是生产环境,给所有权限很容易导致安全文件,所以只给部分必须的权限。
什么叫必须的权限?就是都不给,然后要一个给一个。至于如何查哪个是必须的,可以通过官方的demo
bash
https://github.com/langgenius/dify-sandbox
按照如下路径找到文件,修改 cmd/test/syscall_dig/test.py,在 main 函数中添加你的代码或导入语句

执行后会得到类似这种结果:

提示:
执行这个测试环境还是需要点环境的:
启动环境sandbox:
bash
./build/build_amd64.sh
./main
默认启动的sanbox的uid是65537,这个有可能会根据你的环境导致异常:
如果你也遇到报错,改一下:

bash
id sandbox
usermod -u 1001 sandbox

代码沙箱python库
这个步骤就是启动沙箱的时候,安装三方库:

小结
官方提供的启动和配置脚本,实际用起来,还是有不少磕碰,记录一下。