文章目录
Pre
LLM - Dify(1.0.1)搭建本地私有RAG知识库完整指南
引言
在企业的生产环境中,出于安全合规或网络限制的考虑,往往需要在离线环境中部署服务。接下来我将以开源AI应用框架Dify为例,手把手教你如何通过Docker实现跨网络环境的离线部署,涵盖镜像打包、文件迁移、环境验证等全流程操作.
一、离线部署原理
通过Docker的save/load
机制实现镜像的物理介质迁移,配合Docker Compose编排文件的环境适配能力,可在完全断网的环境中快速部署复杂应用。整个过程分为在线环境准备和离线环境还原两个阶段。
二、在线环境操作
1. 环境准备
- 在线环境:一台可以访问互联网的机器,安装好Docker和Docker Compose。
- 离线环境:目标部署机器,安装好Docker和Docker Compose
# 验证Docker环境
docker --version && docker-compose --version
2. 在线环境: 获取Dify资源
git clone https://github.com/langgenius/dify.git
cd dify/docker # 关键路径!
3. 拉取镜像(两种方式)
方式一:直接启动容器(自动下载)
docker-compose up -d # 自动拉取所有依赖镜像
方式二:显式拉取镜像(推荐)
docker-compose pull # 仅拉取镜像不启动容器
4. 镜像打包
# 查询所需镜像
docker images
# 多镜像打包(示例版本号以实际为准)
docker save -o dify_all.tar \
langgenius/dify-web:0.15.2 \
langgenius/dify-sandbox:0.2.10 \
postgres:13 \
redis:6.2
单镜像
将拉取的镜像保存为tar文件:
docker save -o myimage.tar myimage:tag
myimage.tar是你想要创建的tar文件的名字,myimage:tag是想要保存的镜像的名称和标签 , tag建议和 docker images 展示的tag保持一致 。
举个例子:如果想保存一个名为langgenius/dify-web、标签为1.0.1的镜像
docker save -o dify_web.tar langgenius/dify-web:1.0.1
多镜像批量打包
如果想保存一个名为langgenius/dify-web、标签为1.0.1 的镜像和名为langgenius/dify-sandbox、标签为0.2.10的镜像,以及其他所有的镜像
docker save -o dify_all.tar langgenius/dify-web:1.0.1 langgenius/dify-sandbox:0.2.10 .........(省略)
这样可以把所有Dify依赖的镜像打到一个dify_all.tar的包里面。
5. 文件整理
从Dify的官方GitHub仓库下载docker-compose.yml文件:
git clone https://github.com/langgenius/dify.git
docker目录下
传输包内容:
├── dify_all.tar # 镜像包
└── docker-compose.yml # 来自dify/docker目录
三、离线环境部署
1. 镜像导入
将dify_all.tar文件复制到离线环境的机器上,然后使用以下命令导入镜像
docker load -i dify_all.tar
# 验证导入结果
docker images | grep -E 'dify|postgres|redis'
2.部署Dify
将docker-compose.yml文件复制到离线环境的机器上,然后使用以下命令启动Dify
# 调整配置文件(如需)
vi docker-compose.yml # 修改端口、存储路径等
# 启动容器
docker-compose up -d
3. 部署验证
#查看Docker 镜像
docker images
# 查看容器状态
docker ps --format "table {
{.ID}}\t{
{.Names}}\t{
{.Status}}\t{
{.Ports}}"
# 预期输出示例:
CONTAINER ID NAMES STATUS PORTS
a1b2c3d4e5f6 dify-web-1 Up 2 hours 0.0.0.0:80->80/tcp
b2c3d4e5f6a7 dify-sandbox-1 Up 2 hours 3000/tcp
c3d4e5f6a7b8 postgres-1 Up 2 hours 5432/tcp
d4e5f6a7b8c9 redis-1 Up 2 hours 6379/tcp
4. 访问服务
浏览器访问 http://<服务器IP>:80
,若显示Dify初始化页面则表示部署成功。
四、常见问题排查
1. 镜像导入失败
# 检查文件完整性
sha256sum dify_all.tar # 对比在线/离线环境哈希值
2. 端口冲突
修改docker-compose.yml
中的端口映射:
services:
web:
ports:
- "8080:80" # 主机端口:容器端口
3. 存储持久化
volumes:
- /data/dify/pg_data:/var/lib/postgresql/data
- /data/dify/redis_data:/data
如果看到Dify相关的容器处于Up状态,说明部署成功。就可以通过浏览器访问Dify的Web界面,进行后续的配置和使用
结语
通过本篇博客的详细步骤,即使在没有互联网接入的隔离环境中,也能快速部署Dify服务。这种基于Docker的离线部署方案同样适用于其他容器化应用,为企业的安全部署提供了可靠的技术路径。
部署过程中如遇问题,可查看容器日志定位原因:
docker logs -f <容器ID>