提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、环境准备
- 二、源机器操作:镜像导出 + 配置打包
-
- 1.分批次导出镜像,不然容易卡崩(PowerShell 脚本)
- 记得很多命令都是在RAGFlow的docker文件夹里运行的哦
- 2. 确认导出文件
- 三、目标机器部署:全流程操作
-
- 1. 环境初始化(必做!)
- 2. 文件传输与目录准备
- 3. 批量导入镜像(按大小顺序)
- 镜像导入校验(关键!但是我没验证,应该没啥毛病)
-
- 4. 配置文件处理
- 5. 启动服务与验证
- 四、故障排查与解决方案
- 五、长期维护与优化(无了不知道写啥,感觉没什么用)
- 六 .总结
前言
` 在无网络 / 内网环境中部署 RAGFlow 时,需解决镜像无法拉取、服务依赖冲突、内存不足崩溃三大核心问题。本文通过分批次镜像处理、WSL 资源限制、配置固化等方案,实现标准化离线部署,流程可复用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、环境准备
二、源机器操作:镜像导出 + 配置打包
1.分批次导出镜像,不然容易卡崩(PowerShell 脚本)
创建 export-ragflow.ps1 脚本,按先小后大顺序导出镜像(减少内存占用):
记得很多命令都是在RAGFlow的docker文件夹里运行的哦
如: PS C:\\Users\\32591> cd “F:\\AI\\0AImodle\\DeepSeek+RagFlow\\ragflow-main\\docker”
1.先进入项目目录里 :
#PS C:\\Users\\32591> cd "F:\\AI\\0AImodle\\DeepSeek+RagFlow\\ragflow-main\\docker"
______________________________________________________________________________
2.然后直接把下面内容复制粘贴到 export–ragflow.ps1 里保存👇
===================================================================================
# 分批次定义镜像(小镜像优先)
$smallImages = @(
"valkey/valkey:8", # 112MB(替代Redis)
"mysql:8.0.39", # 572MB
"quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z" # 150MB
)
$bigImages = @(
"elasticsearch:8.11.3", # 1.4GB
"infiniflow/ragflow:v0.19.1" # 14.8GB(带嵌入模型)
)
# 导出函数(含休眠,释放系统资源)
function Export–Image {
param($img)
$filename = ($img –replace '[/:]', '_') + '.tar' # 替换特殊字符,避免文件名错误
Write–Host "🔄 开始导出: $img"
docker save –o $filename $img # 执行导出
Start–Sleep –Seconds 20 # 休眠20秒,降低CPU/内存压力
Write–Host "✅ 完成导出: $filename"
}
# 先导出小镜像
foreach ($img in $smallImages) { Export–Image $img }
# 最后导出大镜像(单独处理)
foreach ($img in $bigImages) { Export–Image $img }
# 打包配置文件(不含镜像,避免体积过大)
$configFiles = Get–ChildItem –Exclude "*.tar" # 包含docker–compose.yml、.env等
Compress–Archive –Path $configFiles –DestinationPath ragflow–config.zip –Force
Write–Host "✅ 配置包已生成: ragflow-config.zip"
===================================================================================
执行脚本导出文件:
.\\export-ragflow.ps1
最后这出现六个包:
2. 确认导出文件
导出后应包含至少 6 个文件:
5 个镜像包:valkey_valkey_8.tar、 mysql_8.0.39.tar、quay.io_minio_minio_xxx.tar、 elasticsearch_8.11.3.tar、 infiniflow_ragflow_v0.19.1.tar;
1 个配置包:ragflow–config.zip(含docker–compose.yml、docker–compose–base.yml、.env)。
该处使用的url网络请求的数据。
三、目标机器部署:全流程操作
1. 环境初始化(必做!)
(1)WSL2 资源配置(避免内存崩溃) 在目标机器 C:\\Users<用户名>\\ 中新创建一个 .wslconfig 文件 并 写入:
# .wslconfig
#根据本机性能自行配置
[wsl2]
memory=12GB # 至少12GB,RAGFlow及依赖内存需求高
processors=8 # 建议≥4核,根据主机配置调整
swap=0 # 禁用swap,减少磁盘IO压力
localhostForwarding=true # 确保localhost端口访问正常
重启 WSL 生效:
wsl –shutdown
wsl –start
(2)Docker 权限配置(我没配)
2. 文件传输与目录准备
将源机器的 5 个.tar 镜像 和 ragflow-config.zip 复制到目标机器任意目录(如 D:\\ragflow-offline); 确保目录路径 无中文 / 空格(避免 PowerShell 解析错误)。
3. 批量导入镜像(按大小顺序)
**1. 方法一(一键导入多个包):**打开 PowerShell 7(管理员),进入部署目录,执行导入:
cd D:\\ragflow-offline
# 批量导入(小镜像优先加载,减少内存压力;整体等待时间较长,镜像越大时间越长)
Get-ChildItem -Filter "*.tar" | ForEach-Object {
Write-Host "📥 导入镜像: $($_.Name)"
docker load -i $_.FullName
# 大镜像导入后额外休眠30秒(可选,降低系统负载)
if ($_.Name -match "elasticsearch|infiniflow") {
Start-Sleep -Seconds 30
}
}
**2. 方法二(手动分步导入):**具体命令(对应 5 个核心镜像,每次单独执行),适合批量命令出错时逐次操作(因为这里用这个脚本导入等了半天-镜像太大,所以我还是一个一个的导入吧,不过还是等了好久):
# 执行下面的命令:
# ==============================================
# 分步导入镜像命令(按实际执行顺序,批量命令失败时使用)
# 适用场景:批量导入因文件名解析、资源占用过高失败时,逐个导入排查问题
# ==============================================
PS C:\\11TheFile\\RAGFlow\\ragflow-offline>
# 1. 导入Elasticsearch镜像(搜索引擎,大镜像)
# 作用:加载Elasticsearch服务镜像,用于RAGFlow的向量存储与检索
docker load -i elasticsearch_8.11.3.tar
Start-Sleep -Seconds 30 # 大镜像导入后休眠30秒,释放系统资源
# 2. 导入RAGFlow主镜像(核心服务,最大镜像)
# 作用:加载RAGFlow主程序镜像,包含模型与业务逻辑
docker load -i infiniflow_ragflow_v0.19.1.tar
Start-Sleep -Seconds 30 # 超大镜像导入后延长休眠,避免系统卡顿
# 3. 导入Valkey镜像(替代Redis,缓存服务,小镜像)
# 作用:加载Valkey镜像(Redis兼容替代品),用于服务缓存与会话管理
docker load -i valkey_valkey_8.tar
# 4. 导入MySQL镜像(数据库服务,中镜像)
# 作用:加载MySQL镜像,用于RAGFlow的元数据与结构化数据存储
docker load -i mysql_8.0.39.tar
# 5. 导入MinIO镜像(对象存储服务,小镜像)
# 作用:加载MinIO镜像,用于存储文档、图片等非结构化数据
# 注意:文件名保留"quay.io"中的".", 仅将"/"替换为"_", 与导出时一致
docker load -i quay.io_minio_minio_RELEASE.2023-12-20T01-00-02Z.tar
镜像导入校验(关键!但是我没验证,应该没啥毛病)
导入后必须验证所有镜像存在,避免遗漏: 检查核心镜像(版本必须完全匹配,真实名称请查看自己本机RAGFlow的实际版本) docker images | findstr “infiniflow/ragflow:v0.19.1” docker images | findstr “mysql:8.0.39” docker images | findstr “elasticsearch:8.11.3” docker images | findstr “valkey/valkey:8” docker images | findstr “quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z” 若有缺失,重新传输并导入对应 .tar 文件。
4. 配置文件处理
解压配置包并覆盖到部署目录:
# 解压配置文件(-Force确保覆盖旧文件)
Expand-Archive -Path .\\ragflow-config.zip -DestinationPath .\\ -Force
关键配置检查,导入失败强制换成实际版本(下面是示例): docker-compose.yml:
services: ragflow: image: infiniflow/ragflow:v0.19.1 # 硬编码本地镜像,禁用远程拉取 depends_on: mysql: condition: service_started # 绕开MySQL健康检查误判
docker-compose-base.yml:
services: mysql: image: mysql:8.0.39 # 硬编码本地镜像 # 注释健康检查(避免无网络环境误判) # healthcheck: # test: [“CMD”, “mysqladmin”, “ping”, “-uroot”, “-p${MYSQL_PASSWORD}”]
.env:确认端口、密码与本地环境匹配(我没看,只在这个文件开头加入了:)。
RAGFLOW_IMAGE=infiniflow/ragflow:v0.19.1 VALKEY_IMAGE=valkey/valkey:8 MYSQL_IMAGE=mysql:8.0.39 MINIO_IMAGE=quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z ELASTICSEARCH_IMAGE=elasticsearch:8.11.3
5. 启动服务与验证
(1)启动服务
# 兼容docker compose和docker-compose两种命令格式
try { docker compose up -d } catch { docker-compose up -d }
运行完就成功了: 直接在浏览器中进入127.0.0.1地址就可以了(还没打开就占用7G运存,差0.5G就又崩溃了……)
(2)部署验证
# 检查容器状态(所有服务应为Up)
docker compose ps
# 验证RAGFlow API可用性(返回200 OK)
curl http://localhost:9380/api/v1/health
四、故障排查与解决方案
五、长期维护与优化(无了不知道写啥,感觉没什么用)
六 .总结
本流程通过 分批次镜像处理、WSL 资源限制、配置固化,解决了无网络环境下 RAGFlow 部署的核心痛点: 镜像复用:修改后的 docker-compose.yml、docker-compose-base.yml、.env 可直接替换到压缩包,实现 “解压即部署”; 稳定性保障:WSL 配置和权限处理避免了内存崩溃、权限不足等隐性问题; 可维护性:故障排查和长期维护方案确保服务持续稳定运行。 建议将修改后的配置文件永久归档,作为离线部署的标准化模板复用。
RR
评论前必须登录!
注册