离线安装 Dify:在无网络linux环境下部署 AI 应用开发平台
Dify 是一个开源的 LLM 应用开发平台,支持通过可视化界面快速构建基于大语言模型的聊天机器人、知识库问答系统等。然而,在某些企业或政府环境中,服务器无法直接访问互联网,这就要求我们采用“离线安装”的方式部署 Dify。本文将详细介绍如何在完全离线的环境中完成 Dify 的部署。通过上述步骤,我们成功在无网络环境中部署了 Dify,为企业内部构建私有化 AI 应用提供了基础平台。离线部署虽然步
文章目录
一、前言
Dify 是一个开源的 LLM 应用开发平台,支持通过可视化界面快速构建基于大语言模型的聊天机器人、知识库问答系统等。然而,在某些企业或政府环境中,服务器无法直接访问互联网,这就要求我们采用“离线安装”的方式部署 Dify。本文将详细介绍如何在完全离线的环境中完成 Dify 的部署。
二、前置条件
在开始之前,请确保你的系统已安装以下工具:
Docker 20.10+
Docker Compose 2.0+
你可以通过以下命令验证是否已安装:
docker --version
# 示例输出:Docker version 20.10.0, build 7287ab3
docker-compose --version
# 示例输出:Docker Compose version v2.3.2
三、下载源码包及镜像
1、dify源码下载:
下载地址:https://github.com/langgenius/dify/archive/refs/tags/1.9.2.zip
2、镜像下载(需要找一台联网的机器拉取镜像):
需要的镜像如下:
备注:直接使用docker pull 可能会导致网络问题无法正常拉取,需要配置docker加速,或者在无法拉取的镜像前面加docker.1ms.run
例如:docker pull langgenius/dify-web:1.9.2无法拉取,
则使用: docker pull docker.1ms.run/langgenius/dify-web:1.9.2
拉取完后重新给镜像打标签,后续用到,
docker tag docker.1ms.run/langgenius/dify-web:1.9.2 langgenius/dify-web:1.9.2
其他镜像同理。
最终拉取的镜像如下所示
docker images
## 示例输出
REPOSITORY TAG IMAGE ID CREATED SIZE
langgenius/dify-web 1.9.2 eeecff942cc8 9 days ago 571MB
langgenius/dify-api 1.9.2 9beedc03fb54 9 days ago 2.42GB
nginx latest 9d0e6f6199dc 9 days ago 152MB
langgenius/dify-plugin-daemon 0.3.3-local f1b5df78ac77 2 weeks ago 1.49GB
ubuntu/squid latest dabbf93b6765 3 weeks ago 207MB
postgres 15-alpine ba05c11fe977 3 weeks ago 273MB
redis 6-alpine a58b74ba639d 5 weeks ago 30.2MB
milvusdb/milvus v2.5.15 4d85dedc45c3 3 months ago 1.96GB
langgenius/dify-sandbox 0.2.12 ba1b250b9505 6 months ago 578MB
semitechnologies/weaviate 1.27.0 f24b5f0e68e6 12 months ago 161MB
langgenius/qdrant v1.7.3 69f6f6622b52 22 months ago 232MB
minio/minio RELEASE.2023-03-20T20-16-18Z 400c20c8aac0 2 years ago 252MB
quay.io/coreos/etcd v3.5.5 673f29d03de9 3 years ago 182MB
3、保存镜像
vi save_images.sh
## 插入以下内容
#!/bin/bash
# 定义要保存的镜像列表
images_to_save=(
"langgenius/dify-web:1.9.2"
"langgenius/dify-api:1.9.2"
"nginx:latest"
"langgenius/dify-plugin-daemon:0.3.3-local"
"ubuntu/squid:latest"
"postgres:15-alpine"
"redis:6-alpine"
"milvusdb/milvus:v2.5.15"
"langgenius/dify-sandbox:0.2.12"
"semitechnologies/weaviate:1.27.0"
"langgenius/qdrant:v1.7.3"
"minio/minio:RELEASE.2023-03-20T20-16-18Z"
"quay.io/coreos/etcd:v3.5.5"
)
echo "正在拉取所有镜像(如果本地不存在)..."
for image in "${images_to_save[@]}"; do
docker pull "$image" 2>/dev/null || echo "警告:无法拉取 $image,将尝试使用本地镜像。"
done
echo "正在保存所有镜像到单个归档文件..."
docker save "${images_to_save[@]}" | gzip > dify_all_images.tar.gz
echo "完成!所有镜像已保存并压缩为 dify_all_images.tar.gz"
# 保存退出 :wq
# 执行脚本:sh save_images.sh
## 将dify_all_images.tar.gz传至无外网的服务器上
4、导入镜像
## 所有镜像会被打包进一个名为 dify_all_images.tar.gz 的压缩文件。将dify_all_images.tar.gz传至无外网的服务器上
## 该文件可通过 docker load < dify_all_images.tar.gz 或 gunzip -c dify_all_images.tar.gz | docker load 加载回 Docker。
docker load < dify_all_images.tar.gz
# 或
gunzip -c dify_all_images.tar.gz | docker load
四、安装部署dify
## 创建安装目录,将dify源码上传至/opt目录下
cd /opt
unzip 1.9.2.zip
cd dify-1.9.2/docker
cp .env.example .env
cp docker-compose.yaml cp docker-compose.yamlbak
## 如果需要修改dify访问端口(默认80),改.env
NGINX_PORT=80 -> NGINX_PORT=8888
EXPORT_NGINX_PORT=80 -> EXPORT_NGINX_PORT=8888
# 启动
docker-compose up -d
## 查看状态是否正常,正常状态都是running
docker-compose ps -a
## 示例输出:
[root@master docker]# docker-compose ps -a
NAME COMMAND SERVICE STATUS PORTS
docker-api-1 "/bin/bash /entrypoi…" api running 5001/tcp
docker-db-1 "docker-entrypoint.s…" db running (healthy) 5432/tcp
docker-nginx-1 "sh -c 'cp /docker-e…" nginx running 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, :::80->80/tcp, :::443->443/tcp
docker-plugin_daemon-1 "/bin/bash -c /app/e…" plugin_daemon running 0.0.0.0:5003->5003/tcp, :::5003->5003/tcp
docker-redis-1 "docker-entrypoint.s…" redis running (healthy) 6379/tcp
docker-sandbox-1 "/main" sandbox running (healthy)
docker-ssrf_proxy-1 "sh -c 'cp /docker-e…" ssrf_proxy running 3128/tcp
docker-web-1 "/bin/sh ./entrypoin…" web running 3000/tcp
docker-worker-1 "/bin/bash /entrypoi…" worker running 5001/tcp
docker-worker_beat-1 "/bin/bash /entrypoi…" worker_beat running 5001/tcp
五、浏览器访问:
浏览器输入访问地址(修改为部署服务器的ip及端口):
http://192.168.80.100:80/apps
设置账号并登录:

六、常见问题与注意事项
-
Q1:是否必须使用 Weaviate?
-
A:Dify 默认使用 Weaviate 作为向量数据库,但也可替换为 Milvus、Qdrant 或 PGVector。若需更换,请修改 docker-compose.yaml 并调整 .env 中的 VECTOR_STORE 配置。
-
Q2:如何更新 Dify 版本?
-
A:在中转机上拉取新版本镜像并重新打包,然后在离线服务器上 docker load 新镜像,并更新 docker-compose.yaml 中的镜像标签。
-
Q3:数据持久化在哪?
-
A:Dify 默认将数据挂载到 ./volumes/ 目录下(如 ./volumes/db, ./volumes/weaviate),请确保该目录有足够空间并做好备份。
七、结语
通过上述步骤,我们成功在无网络环境中部署了 Dify,为企业内部构建私有化 AI 应用提供了基础平台。离线部署虽然步骤稍显繁琐,但能有效保障数据安全与合规性。
如果你有更多定制需求(如集成私有大模型、对接企业认证系统等),欢迎继续探索 Dify 的高级功能!
📌 项目地址 https://github.com/langgenius/dify
📚 官方文档:https://docs.dify.ai
更多推荐


所有评论(0)