dify离线安装
背景:此篇由大模型离线部署docker(推荐)拆分而来
- dify使用文档(官方)
- dify社区版源码(github)
dify的离线安装
-
离线安装dify插件(对症)
- dify plugin 离线打包工具github源码地址
-
有个前提在联网状态将需要的插件进行安装,避免环境依赖问题,安装后将docker-plugin-deamon提交并重新打成镜像使用
- windows上使用docker启动dify时会遇到80端口限制权限问题。需要修改docker目录下.env文件中EXPOSE_NGINX_PORT和NGINX_PORT端口号为18080不是1024以下端口即可,这两个变量会用于docker-compose.yaml中
- 打包镜像
# 下面这几步适用于升级也可以修复
# 1. 将容器docker-plugin_daemon容器创建为镜像langgenius/dify-plugin-daemon:0.0.6-local-15
docker commit docker-plugin_daemon-1 langgenius/dify-plugin-daemon:0.0.6-local-15
# 2.移除现有容器内容
docker compose down
# 3.创建新镜像的引用。这样在docker-compose时可以找到新的镜像,就无需修改镜像名了,只需要创建一个引用名称与原镜像名称即可。执行此步骤前记得删除原镜像docker rmi <镜像id>
docker tag langgenius/dify-plugin-daemon:0.0.6-local-15 langgenius/dify-plugin-daemon:0.0.6-local
# 4. 启动
docker compose up -d
- 已经将需要的镜像上传到了服务器。
- 安装步骤
- 指南
# 涉及docker安装及操作均为root dify可以通过普通用户操作 需要加入docker组
#docker安装
1. 解压并安装
tar xzvf docker-24.0.7.tgz
sudo cp docker/* /usr/bin/2. 配置 Docker 服务# 创建 systemd 服务
sudo tee /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
After=network.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP \$MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process[Install]
WantedBy=multi-user.target
EOF3. 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
4. 验证安装
docker --version#docker-compose安装
cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version# 手动创建 docker 组
sudo groupadd docker
授权devuser加入docker组
sudo usermod -aG docker devuser# 以下的tar都是在本地dify源码目录docker文件夹中使用docker-compose -f docker-compose.yaml -f docker-compose.middleware.yaml up -d 执行安装后进行打包生成的(使用docker save命令)
# 在github下载最新版源码使用main分支即可# 离线镜像导入
docker load -i nginx.tar
docker load -i dify-plugin-daemon.tar
docker load -i dify-web.tar
docker load -i dify-api.tar
docker load -i postgres.tar
docker load -i dify-sandbox.tar
docker load -i redis.tar
docker load -i weaviate.tar
docker load -i squid.tar# 或使用脚本导入
for tarfile in *.tar; do docker load -i "$tarfile"; done重启docker
sudo systemctl restart docker修改并替换IP
.env docker-compose.middleware.yaml docker-compose.yaml middleware.env
192.168.100.105 替换为部署服务器IP
# 此处的docker目录在dify源文件中,一定要进入目录后启动应用,否则会报错
加入docker组的用户 上传dify源文件 并进入docker目录启动应用
docker-compose -f docker-compose.yaml -f docker-compose.middleware.yaml up -d
检查
docker ps登录dify首页
http://ip
首次登录需要注册 记住用户名和密码
- 解压tar文件
# 打包
tar -czvf filename.tar.gz C:\My Folder
# 解压缩
tar -xzvf filename.tar.gz
- 执行
# 批量导入所有镜像
docker load -i dify-api.tar
docker load -i dify-web.tar
docker load -i nginx.tar
docker load -i postgres.tar
docker load -i redis.tar
docker load -i weaviate.tar
docker load -i dify-sandbox.tar
docker load -i dify-plugin-daemon.tar
docker load -i squid.tar# 查看导入的镜像
docker images# 给执行权限(如果需要)
chmod +x docker-compose-linux-x86_64# 直接运行
./docker-compose-linux-x86_64 up -d# 等基础服务正常后,再单独处理 nginx
./docker-compose-linux-x86_64 up -d nginx# 指定启动
./docker-compose-linux-x86_64 -f docker-compose.yml up -d# 直接使用 docker ps 查看,按名称过滤
docker ps --filter "name=$(basename $(pwd))" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"# 查看服务状态(格式化看的更清楚)
./docker-compose-linux-x86_64 ps# 查看日志
./docker-compose-linux-x86_64 logs redis# 查看所有服务的完整日志
./docker-compose-linux-x86_64 logs --tail=20# 停止所有服务,但保留容器和数据
./docker-compose-linux-x86_64 stop# 停止并移除所有容器(但保留数据卷和镜像)
./docker-compose-linux-x86_64 down# 强制快速停止
./docker-compose-linux-x86_64 down --timeout=0# 检查是否所有服务都停止了
./docker-compose-linux-x86_64 pshttp://你的服务器IP# 检查所有容器是否正常运行
docker ps# 检查服务健康状态
curl http://localhost/v1/health
- 如果使用docker compose 二进制文件直接运行需要知道volumn映射的位置
# 如果有 docker-compose.yml 文件
cat docker-compose.yml | grep -A 10 -B 2 volumes# 或者查看完整的 compose 配置
./docker-compose-linux-x86_64 config
- 查看特定服务的 volume
# 查看 postgres 的 volume 映射
docker inspect $(./docker-compose-linux-x86_64 ps -q postgres) | grep -A 10 -B 5 Mounts# 或者使用 format
docker inspect $(./docker-compose-linux-x86_64 ps -q postgres) --format='{{range .Mounts}}{{.Source}}:{{.Destination}}{{end}}'
- 假设你想查看 Dify 项目的 volume 映射
# 1. 首先启动服务(如果还没启动)
./docker-compose-linux-x86_64 up -d# 2. 查看所有服务的 volume 映射
echo "=== 所有服务的 Volume 映射 ==="
./docker-compose-linux-x86_64 ps -q | while read container_id; docontainer_name=$(docker inspect --format='{{.Name}}' $container_id)echo "容器: $container_name"docker inspect --format='{{range .Mounts}}源: {{.Source}} -> 目标: {{.Destination}} (类型: {{.Type}})
{{end}}' $container_idecho "---"
done# 3. 查看创建的 volumes
echo "=== Docker Volumes ==="
docker volume ls | grep $(basename $(pwd))# 4. 查看 compose 配置中的 volume 定义
echo "=== Compose 文件中的 Volume 配置 ==="
./docker-compose-linux-x86_64 config | grep -A 20 volumes
- 装好后需要从桌面直接访问http://ip即可,会跳转至http://ip/apps页面。
- 关注点版本号。如果用于测试,本地与生产环境尽可能一致。经测试。1.9版本dify导出的工作流文件也能够在1.5.1版本dify上导入并成功打开。待运行测试
配置大模型访问地址
- 参考此文章(Dify - 配置 vllm 模型)需要去dify市场下载openai-api-comatible
- 下载后是后缀为difypkg的文件
- 再进行插件安装
处理无法像插件中添加模型
# 实时跟踪 vLLM 服务器日志
# 查看最近100行并实时跟踪(推荐)
docker logs -ft--tail 50 vllm-server
# 若遇到模型报错,进到后台日志发现网络问题,可以进入docker容器测试
docker exec -it <容器名> /bin/bash
curl http://ip:8000
# 为了测试,docker run时增加了api-key
docker run -itd --gpus all --shm-size=2g -p 8000:8000 -v /data/soft/model/deepseek/deepseekR1-14B:/app/models/deepseek-14b --name vllm-server vllm-custom python3 -m vllm.entrypoints.openai.api_server --model /app/models/deepseek-14b --served-model-name deepseek-14b --tensor-parallel-size 2 --gpu-memory-utilization 0.9 --max-model-len 32000 --api-key sk-test-123
# 增加了api-key部署vllm后,这样测试
curl -H"Authorization: Bearer sk-test-123" http://<可达地址>:8000/v1/models
# 停止并卸载指定容器
docker-compose down service-name