下载文件
git clone https://github.com/langgenius/dify.git
cd dify/docker
配置环境
cp .env.example .env
启动服务 如果你使用的是Docker Compose V2:
docker compose up -d
如果你使用的是Docker Compose V1:
docker-compose up -d
(llm) [root@localhost docker]# docker-compose up -d
[+] Running 48/81
[+] Running 81/81] Pulling 541.3s
✔ db Pulled 705.7s
✔ sandbox Pulled 183.5s
✔ weaviate Pulled 541.9s
✔ redis Pulled 558.6s
✔ api Pulled 750.7s
✔ ssrf_proxy Pulled 516.2s
✔ worker Pulled 750.7s
✔ web Pulled 237.9s
✔ plugin_daemon Pulled 629.4s
✔ nginx Pulled 620.8s
WARN[0751] Found orphan containers ([ragflow-es-01 ragflow-mysql]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
[+] Running 13/13
✔ Network docker_default Created 0.1s
✔ Network docker_ssrf_proxy_network Created 0.0s
✔ Container docker-weaviate-1 Started 2.9s
✔ Container docker-ssrf_proxy-1 Started 3.6s
✔ Container docker-db-1 Healthy 6.1s
✔ Container ragflow-redis Recreated 2.4s
✔ Container docker-web-1 Started 3.6s
✔ Container docker-sandbox-1 Started 2.9s
✔ Container docker-plugin_daemon-1 Started 4.4s
✔ Container docker-worker-1 Started 4.5s
✔ Container docker-api-1 Started 4.4s
✔ Container docker-nginx-1 Started 4.7s
✔ Container docker-redis-1 Started 1.1s
检查服务状态:
docker compose ps
所有容器都应该显示 Up 状态
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:1.3.1 "/bin/bash /entrypoi…" api 17 minutes ago Up 17 minutes 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db 17 minutes ago Up 17 minutes (healthy) 5432/tcp
docker-nginx-1 nginx:latest "sh -c 'cp /docker-e…" nginx 17 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp
docker-plugin_daemon-1 langgenius/dify-plugin-daemon:0.0.9-local "/bin/bash -c /app/e…" plugin_daemon 17 minutes ago Up 17 minutes 0.0.0.0:5003->5003/tcp, [::]:5003->5003/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis 17 minutes ago Up 17 minutes (healthy) 6379/tcp
docker-sandbox-1 langgenius/dify-sandbox:0.2.11 "/main" sandbox 17 minutes ago Up 17 minutes (healthy)
docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy 17 minutes ago Up 17 minutes 3128/tcp
docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate 17 minutes ago Up 17 minutes
docker-web-1 langgenius/dify-web:1.3.1 "/bin/sh ./entrypoin…" web 17 minutes ago Up 17 minutes 3000/tcp
docker-worker-1 langgenius/dify-api:1.3.1 "/bin/bash /entrypoi…" worker 17 minutes ago Up 17 minutes 5001/tcp
ragflow-es-01 elasticsearch:8.11.3 "/bin/tini -- /usr/l…" es01 22 hours ago Up 30 minutes (healthy) 9300/tcp, 0.0.0.0:1200->9200/tcp, [::]:1200->9200/tcp
通过本机访问服务器端部署的Dify
# Local environment
http://localhost/install
# Server environment -http://10.213.120.228/install
http://your_server_ip/install
查看docker状态并启动docker
systemctl status docker
systemctl start docker
安装ollama
docker run -d -v /qjp/software/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
进入 Docker 容器
docker exec -it ollama bash
下载模型
ollama run qwen3:32b
都安装好之后
dify基础配置:打开.env文件,配置以下关键参数:
CONSOLE_URL=http://localhost
SERVICE_API_URL=http://localhost
UPLOAD_FILE_SIZE_LIMIT=50 # 文件上传限制,单位MB
UPLOAD_FILE_MIME_TYPES=.pdf,.doc,.docx,.txt # 允许上传的文件类型
配置模型
配置好之后,问题也出现了,反应速度极慢
如果 Ollama 没启用 GPU,会走 CPU 推理
猜想可能是Ollama 官方暂不原生支持昇腾Ascend/NPU。
验证猜想,确实是纯cpu在推理
(llm) [root@localhost ~]# docker logs ollama
load_tensors: CPU model buffer size = 492.75 MiB
llama_context: constructing llama_context
llama_context: n_ctx_per_seq (4096) < n_ctx_train (40960) -- the full capacity of the model will not be utilized
llama_context: CPU output buffer size = 1.17 MiB
init: kv_size = 8192, offload = 1, type_k = 'f16', type_v = 'f16', n_layer = 28, can_shift = 1
init: CPU KV buffer size = 896.00 MiB
llama_context: KV self size = 896.00 MiB, K (f16): 448.00 MiB, V (f16): 448.00 MiB
llama_context: CPU compute buffer size = 300.75 MiB
换个思维,获取gpustack/gpustack:latest-npu镜像。
docker pull gpustack/gpustack:latest-npu
创建容器
docker run -d --name gpustack \
--shm-size=16g \
--privileged=true \
--restart=always \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/:/usr/local/sbin/ \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
--network=host \
--ipc=host \
-v /data:/var/lib/gpustack \
gpustack/gpustack:latest-npu
# 其中-v /data:/var/lib/gpustack是将物理机的/data挂载到容器/var/lib/gpustack目录下
检查容器是否正常运行
docker logs -f gpustack
在浏览器中打开 http://服务器IP 以访问 GPUStack UI
使用用户名 admin 和默认密码登录 GPUStack。可以运行以下命令来获取默认设置的密码:
docker exec -it gpustack cat /var/lib/gpustack/initial_admin_password
尝试之后,最后结果就是dify和gpustack端口冲突问题,都需要访问80端口才能进入web,经过许多次创建容器时候设置端口映射,但都无法通过http://10.213.120.228:8090访问gpustack,放弃。
1.在dify中添加vllm插件
2.后台运行模型,开放正确的端口:8000
cd /data01/downloadModel/Qwen
vllm serve Qwen3-0.6B --port 8000 --enable-reasoning --reasoning-parser deepseek_r1
3. 第一步第二步成功之后,才能设置正确的模型名称和API endpoint URL,否则dify会报错:
An error occurred during credentials validation: HTTPConnectionPool(host='10.213.120.228', port=8000):
Max retries exceeded with url: /v1/chat/completions (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xffff98d1cc20>:
Failed to establish a new connection: [Errno 111] Connection refused'))
成功配置
dify容器异常时,可以通过以下命令重启服务(不会删除本地数据): 停止服务
cd dify/docker
docker-compose down
#重新启动dify服务
cd dify/docker
docker-compose up -d
现可在浏览器成功访问http://10.213.120.228
附:docker指令
docker pull <image>
: 从 Docker Hub 拉取镜像。docker create <image>
: 从镜像创建容器。docker start <container_name/container_id>
: 启动容器。docker stop <container_name/container_id>
: 停止容器。docker kill <container_name/container_id>
: 强制停止容器的入口进程。docker rm <container_name/container_id>
: 删除容器。docker ps
: 列出所有运行中的容器。docker ps -a
: 列出所有容器。docker run --name <container_name> -p <host_port>:<container_port> <image>
: 拉取、创建、启动并运行容器。docker run -d <image>
: 在分离模式下运行容器。docker run -e <key>=<value> <image>
: 设置环境变量并运行容器。docker run -it <image> <command>
: 运行容器并覆盖默认命令。docker run -it --entrypoint <entrypoint_command> <image>
: 运行容器并覆盖默认入口点。docker inspect <container_name>
: 获取容器详细信息。docker exec -it <image_name> <command>
: 在运行中的容器内执行命令。docker volume ls
: 列出所有卷。docker network create <network_name>
: 创建用户定义的网络。docker build <path>
: 构建 Docker 镜像。docker tag <image_name> <company>/<new_image_name>:<version>
: 为镜像添加标签。docker push <company>/<new_image_name>:<version>
: 推送镜像到仓库。docker stop $(docker ps -a -q)
: 停止所有容器。docker rm $(docker ps -a -q)
: 删除所有容器。docker image rm $(docker image ls -q)
: 删除所有镜像。docker compose build
: 构建 Docker Compose 的所有服务。docker compose create
: 创建服务。docker compose start
: 启动服务。docker compose restart
: 重启服务。docker compose pause
: 暂停服务。docker compose unpause
: 恢复服务。docker compose run
: 在服务中运行命令。docker compose stop
: 停止服务。docker compose rm
: 移除已停止的容器。docker compose up
: 创建并启动容器。docker compose down
: 停止并移除容器。docker compose logs -f --tail <lines_count>
: 打印并监控所有服务的日志。docker compose up --scale <service>=<count>
: 创建、启动容器并扩展服务数量。docker compose pull
: 拉取所有服务的镜像,常用于更新服务镜像。reference:
https://blog.csdn.net/2201_75299183/article/details/145954317
https://mp.weixin.qq.com/s?__biz=MzIzMzQyMzUzNw==&mid=2247488132&idx=1&sn=b167ef534c5228021033246b9719e38c&scene=21#wechat_redirect
https://blog.csdn.net/u014796292/article/details/147694085
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有