云计算百科
云计算领域专业知识百科平台

无网络环境下 RAGFlow 离线部署流程记录(WSL2+Docker)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、环境准备
  • 二、源机器操作:镜像导出 + 配置打包
    • 1.分批次导出镜像,不然容易卡崩(PowerShell 脚本)
    • 记得很多命令都是在RAGFlow的docker文件夹里运行的哦
    • 2. 确认导出文件
  • 三、目标机器部署:全流程操作
    • 1. 环境初始化(必做!)
    • 2. 文件传输与目录准备
    • 3. 批量导入镜像(按大小顺序)
  • 镜像导入校验(关键!但是我没验证,应该没啥毛病)​
    • 4. 配置文件处理
    • 5. 启动服务与验证
  • 四、故障排查与解决方案
  • 五、长期维护与优化(无了不知道写啥,感觉没什么用)
  • 六 .总结

前言

` 在无网络 / 内网环境中部署 RAGFlow 时,需解决镜像无法拉取、服务依赖冲突、内存不足崩溃三大核心问题。本文通过分批次镜像处理、WSL 资源限制、配置固化等方案,实现标准化离线部署,流程可复用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境准备

  • 源机器(有网络,已部署 RAGFlow) 安装 Docker Desktop 和 WSL2(建议 Ubuntu 分发版);​ 确保 RAGFlow 及依赖服务(MySQL、Elasticsearch、MinIO、Valkey)已正常运行。
  • 目标机器(无网络) 安装 Docker Desktop 和 WSL2(同架构,如 x86_64);​ 关闭防火墙。
  • 二、源机器操作:镜像导出 + 配置打包

    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.然后直接把下面内容复制粘贴到 exportragflow.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 ExportImage {
    param($img)
    $filename = ($img replace '[/:]', '_') + '.tar' # 替换特殊字符,避免文件名错误
    WriteHost "🔄 开始导出: $img"
    docker save o $filename $img # 执行导出
    StartSleep Seconds 20 # 休眠20秒,降低CPU/内存压力
    WriteHost "✅ 完成导出: $filename"
    }

    # 先导出小镜像
    foreach ($img in $smallImages) { ExportImage $img }

    # 最后导出大镜像(单独处理)
    foreach ($img in $bigImages) { ExportImage $img }

    # 打包配置文件(不含镜像,避免体积过大)
    $configFiles = GetChildItem Exclude "*.tar" # 包含dockercompose.yml、.env等
    CompressArchive Path $configFiles DestinationPath ragflowconfig.zip Force
    WriteHost "✅ 配置包已生成: 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 个配置包:ragflowconfig.zip(含dockercompose.yml、dockercomposebase.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

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 无网络环境下 RAGFlow 离线部署流程记录(WSL2+Docker)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!