当前位置: 首页 > news >正文

搭建RAGFlow

RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。 

前提条件

  • CPU >= 4 核
  • RAM >= 16 GB
  • Disk >= 50 GB
  • Docker >= 24.0.0 & Docker Compose >= v2.26.1

    如果你并没有在本机安装 Docker(Windows、Mac,或者 Linux), 可以参考文档 Install Docker Engine 自行安装。

🚀 启动服务器

  1. 确保 vm.max_map_count 不小于 262144:

    如需确认 vm.max_map_count 的大小:

    $ sysctl vm.max_map_count

    如果 vm.max_map_count 的值小于 262144,可以进行重置:

    # 这里我们设为 262144:
    $ sudo sysctl -w vm.max_map_count=262144

    你的改动会在下次系统重启时被重置。如果希望做永久改动,还需要在 /etc/sysctl.conf 文件里把 vm.max_map_count 的值再相应更新一遍:

    vm.max_map_count=262144
  2. 克隆仓库:

    $ git clone https://github.com/infiniflow/ragflow.git
  3. 进入 docker 文件夹,利用提前编译好的 Docker 镜像启动服务器:

    运行以下命令会自动下载 dev 版的 RAGFlow slim Docker 镜像(dev-slim),该镜像并不包含 embedding 模型以及一些 Python 库,因此镜像大小约 1GB。

    $ cd ragflow/docker
    $ docker compose -f docker-compose.yml up -d
    • 如果你想下载并运行特定版本的 RAGFlow slim Docker 镜像,请在 docker/.env 文件中找到 RAGFLOW_IMAGE 变量,将其改为对应版本。例如 RAGFLOW_IMAGE=infiniflow/ragflow:v0.13.0-slim,然后再运行上述命令。
    • 如果您想安装内置 embedding 模型和 Python 库的 dev 版本的 Docker 镜像,需要将 docker/.env 文件中的 RAGFLOW_IMAGE 变量修改为: RAGFLOW_IMAGE=infiniflow/ragflow:dev
    • 如果您想安装内置 embedding 模型和 Python 库的指定版本的 RAGFlow Docker 镜像,需要将 docker/.env 文件中的 RAGFLOW_IMAGE 变量修改为: RAGFLOW_IMAGE=infiniflow/ragflow:v0.13.0(当前改的这个)。修改后,再运行上面的命令。 注意: 安装内置 embedding 模型和 Python 库的指定版本的 RAGFlow Docker 镜像大小约 9 GB,可能需要更长时间下载,请耐心等待。
  4. 服务器启动成功后再次确认服务器状态:

    $ docker logs -f ragflow-server

    出现以下界面提示说明服务器启动成功:

         ____   ___    ______ ______ __               / __ \ /   |  / ____// ____// /____  _      __/ /_/ // /| | / / __ / /_   / // __ \| | /| / // _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ / /_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/  * Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:9380* Running on http://x.x.x.x:9380INFO:werkzeug:Press CTRL+C to quit

    如果您跳过这一步系统确认步骤就登录 RAGFlow,你的浏览器有可能会提示 network anormal 或 网络异常,因为 RAGFlow 可能并未完全启动成功。

  5. 在你的浏览器中输入你的服务器对应的 IP 地址并登录 RAGFlow。

    上面这个例子中,您只需输入 http://IP_OF_YOUR_MACHINE 即可:未改动过配置则无需输入端口(默认的 HTTP 服务端口 80)。

  6. 在 service_conf.yaml 文件的 user_default_llm 栏配置 LLM factory,并在 API_KEY 栏填写和你选择的大模型相对应的 API key。

    详见 llm_api_key_setup。

    好戏开始,接着奏乐接着舞!

🔧 系统配置

系统配置涉及以下三份文件:

  • .env:存放一些基本的系统环境变量,比如 SVR_HTTP_PORTMYSQL_PASSWORDMINIO_PASSWORD 等。
  • service_conf.yaml:配置各类后台服务。
  • docker-compose.yml: 系统依赖该文件完成启动。

请务必确保 .env 文件中的变量设置与 service_conf.yaml 文件中的配置保持一致!

如果不能访问镜像站点hub.docker.com或者模型站点huggingface.co,请按照.env注释修改RAGFLOW_IMAGEHF_ENDPOINT

./docker/README 文件提供了环境变量设置和服务配置的详细信息。请一定要确保 ./docker/README 文件当中列出来的环境变量的值与 service_conf.yaml 文件当中的系统配置保持一致。

如需更新默认的 HTTP 服务端口(80), 可以在 docker-compose.yml 文件中将配置 80:80 改为 <YOUR_SERVING_PORT>:80

所有系统配置都需要通过系统重启生效:

$ docker compose -f docker-compose.yml up -d

按照上面的文档默认启动后,检查日志是有报错的。

 错误信息:

处理办法:更换镜像版本,注意查看红色的代码位置

最终的文件修改如下:

root@node11:~/ragflow/docker# ll
total 6656
drwxr-xr-x  4 root root    4096 11月 18 12:32 ./
drwxr-xr-x 16 root root    4096 11月 13 15:01 ../
-rw-r--r--  1 root root     924 11月 13 15:01 docker-compose-admin-tool.yml
-rw-r--r--  1 root root    3416 11月 18 10:24 docker-compose-base.yml
-rw-r--r--  1 root root     767 11月 13 15:01 docker-compose-CN-oc9.yml
-rw-r--r--  1 root root     925 11月 13 15:01 docker-compose-gpu-CN-oc9.yml
-rw-r--r--  1 root root     853 11月 18 10:36 docker-compose-gpu.yml
-rw-r--r--  1 root root    1059 11月 13 15:01 docker-compose.yml
-rwxr-xr-x  1 root root     841 11月 13 15:01 entrypoint.sh*
-rw-r--r--  1 root root    4407 11月 18 12:32 .env
-rwxr-xr-x  1 root root    2631 11月 13 15:01 init-kibana.sh*
-rw-r--r--  1 root root      53 11月 13 15:01 init.sql
-rw-r--r--  1 root root    2733 11月 13 15:01 launch_backend_service.sh
drwxr-xr-x  2 root root    4096 11月 13 15:01 nginx/
-rw-r--r--  1 root root 4582686 11月 15 09:49 r1.log
-rw-r--r--  1 root root 2107770 11月 14 00:28 rag1.log
drwxr-xr-x  4 root root    4096 11月 18 12:29 ragflow-logs/
-rw-r--r--  1 root root    5037 11月 13 15:58 rag.log
-rwxr-xr-x  1 root root     198 11月 13 16:14 rag.sh*
-rw-r--r--  1 root root    6864 11月 13 15:01 README.md
-rw-r--r--  1 root root     945 11月 16 19:41 r.log
-rwxr-xr-x  1 root root      84 11月 14 09:03 r.sh*
-rw-r--r--  1 root root    1740 11月 18 10:41 service_conf.yaml
-rw-r--r--  1 root root    8700 11月 18 09:28 service_conf.yaml-bak
-rw-r--r--  1 root root    2024 11月 13 15:01 service_conf.yaml.template
root@node11:~/ragflow/docker# more docker-compose-base.yml
services:
  es01:
    container_name: ragflow-es-01
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - ${ES_PORT}:9200
    env_file: .env
    environment:
      - node.name=es01
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - bootstrap.memory_lock=false
      - discovery.type=single-node
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=false
      - xpack.security.transport.ssl.enabled=false
      - TZ=${TIMEZONE}
    mem_limit: ${MEM_LIMIT}
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:9200"]
      interval: 10s
      timeout: 10s
      retries: 120
    networks:
      - ragflow
    restart: on-failure

  # infinity:
  #   container_name: ragflow-infinity
  #   image: infiniflow/infinity:v0.5.0-dev2
  #   volumes:
  #     - infinity_data:/var/infinity
  #   ports:
  #     - ${INFINITY_THRIFT_PORT}:23817
  #     - ${INFINITY_HTTP_PORT}:23820
  #     - ${INFINITY_PSQL_PORT}:5432
  #   env_file: .env
  #   environment:
  #     - TZ=${TIMEZONE}
  #   mem_limit: ${MEM_LIMIT}
  #   ulimits:
  #     nofile:
  #       soft: 500000
  #       hard: 500000
  #   networks:
  #     - ragflow
  #   healthcheck:
  #     test: ["CMD", "curl", "http://localhost:23820/admin/node/current"]
  #     interval: 10s
  #     timeout: 10s
  #     retries: 120
  #   restart: on-failure


  mysql:
    # mysql:5.7 linux/arm64 image is unavailable.
    image: mysql:8.0.39-debian
    container_name: ragflow-mysql
    env_file: .env
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
      - TZ=${TIMEZONE}
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
      --tls_version="TLSv1.2,TLSv1.3"
      --init-file /data/application/init.sql
    ports:
      - ${MYSQL_PORT}:3306
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init.sql:/data/application/init.sql
    networks:
      - ragflow
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-uroot", "-p${MYSQL_PASSWORD}"]
      interval: 10s
      timeout: 10s
      retries: 3
    restart: on-failure

  minio:
#   image: quay.io/minio/minio:RELEASE.2023-04-28T18-11-17Z
    image: quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z
    container_name: ragflow-minio
    command: server --console-address ":9001" /data
    ports:
      - ${MINIO_PORT}:9000
      - ${MINIO_CONSOLE_PORT}:9001
    env_file: .env
    environment:
      - MINIO_ROOT_USER=${MINIO_USER}
      - MINIO_ROOT_PASSWORD=${MINIO_PASSWORD}
      - TZ=${TIMEZONE}
    volumes:
      - minio_data:/data
    networks:
      - ragflow
    restart: on-failure

  redis:
    image: redis:7.2.4
#    image: valkey/valkey:8
    container_name: ragflow-redis
    command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 128mb --maxmemory-policy allkeys-lru
    env_file: .env
    ports:
      - ${REDIS_PORT}:6379
    volumes:
      - redis_data:/data
    networks:
      - ragflow
    restart: on-failure

volumes:
  esdata01:
    driver: local
  infinity_data:
    driver: local
  mysql_data:
    driver: local
  minio_data:
    driver: local
  redis_data:
    driver: local

networks:
  ragflow:
    driver: bridge
root@node11:~/ragflow/docker# more docker-compose-admin-tool.yml
include:
  - path: ./docker-compose.yml
    env_file: ./.env

services:
  kibana:
    image: kibana:${STACK_VERSION}
    container_name: ragflow-kibana
    environment:
      ELASTICSEARCH_USERNAME: ${KIBANA_USER} 
      ELASTICSEARCH_PASSWORD: ${KIBANA_PASSWORD} 
      ELASTICSEARCH_HOSTS: "http://es01:9200"
    ports:
      - ${KIBANA_PORT}:5601
    depends_on:
      es01:
        condition: service_healthy
      kibana-user-init:
        condition: service_completed_successfully

    networks:
      - ragflow
  kibana-user-init:
    image: appropriate/curl
    depends_on:
      es01:
        condition: service_healthy
    volumes:
      - ./init-kibana.sh:/app/init-kibana.sh
    environment:
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - KIBANA_USER=${KIBANA_USER}
      - KIBANA_PASSWORD=${KIBANA_PASSWORD}
    command: /bin/sh -c "sh /app/init-kibana.sh"
    networks:
      - ragflow
    restart: 'no'
root@node11:~/ragflow/docker# cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       node11

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

root@node11:~/ragflow/docker# more .env|grep -v '#'|grep -v '$^'
STACK_VERSION=8.11.3

ES_HOST=es01

ES_PORT=1200

ELASTIC_PASSWORD=infini_rag_flow

KIBANA_PORT=6601
KIBANA_USER=rag_flow
KIBANA_PASSWORD=infini_rag_flow

MEM_LIMIT=8073741824

INFINITY_THRIFT_PORT=23817
INFINITY_HTTP_PORT=23820
INFINITY_PSQL_PORT=5432

MYSQL_PASSWORD=infini_rag_flow
MYSQL_HOST=mysql
MYSQL_DBNAME=rag_flow
MYSQL_PORT=5455

MINIO_HOST=minio
MINIO_CONSOLE_PORT=9001
MINIO_PORT=9000
MINIO_USER=rag_flow
MINIO_PASSWORD=infini_rag_flow

REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=infini_rag_flow

SVR_HTTP_PORT=9380

RAGFLOW_IMAGE=infiniflow/ragflow:v0.13.0


TIMEZONE='Asia/Shanghai'


root@node11:~/ragflow/docker# 

可参考连接:

https://github.com/infiniflow/ragflow/issues/2587

https://github.com/infiniflow/ragflow/issues/3418

RAG 实践- Ollama+RagFlow 部署本地知识库_ragflow本地化部署知识库-CSDN博客 

http://www.lryc.cn/news/487284.html

相关文章:

  • css中的box-sizing,记录
  • 使用useCallback引发对闭包的理解
  • gvim添加至右键、永久修改配置、放大缩小快捷键、ctrl + c ctrl +v 直接复制粘贴、右键和还原以前版本(V)冲突
  • 腾讯云-COS
  • 蓝桥杯每日真题 - 第16天
  • 基因组之全局互作热图可视化
  • 基于Lora通讯加STM32空气质量检测WIFI通讯
  • STM32 极速入门第一天基础拓展 驱动i2c屏幕 ( 使用PlatformIO开发STM32单片机 )
  • 【WPF】Prism学习(五)
  • RabbitMQ的基本概念和入门
  • Shell脚本6 -- 条件判断if
  • 经验笔记:从生成 SSH 密钥到成功连接测试(以Gitee为例)
  • Object.defineProperty和响应式
  • 前端web
  • DDNet 服务器配置教程 Linux 环境
  • Vue 2 —监视器实现动态切换表单属性值
  • Qt_day10_程序打包(完结)
  • golang通用后台管理系统09(系统操作日志记录)
  • 如何确保爬取的数据准确性和完整性?
  • 【java】JDK安装
  • 科技改变工作方式:群晖NAS安装内网穿透实现个性化办公office文档分享(1)
  • 基于Java Springboot甘肃旅游管理系统
  • 03-axios常用的请求方法、axios错误处理
  • 《天体》游戏配置要求介绍
  • 【企业级分布式系统】 Kafka集群
  • MySQL 中有哪几种锁?
  • kafka中节点如何服役和退役
  • HTML5实现剪刀石头布小游戏(附源码)
  • 集群聊天服务器(3)muduo网络库
  • 解决在Ubuntu 20.04中使用PyCharm时无法输入中文的问题