未来中森网站建设天津网站建设吐鲁番地区
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 自行安装。
 
🚀 启动服务器
-  
确保
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
 -  
克隆仓库:
$ git clone https://github.com/infiniflow/ragflow.git
 -  
进入 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,可能需要更长时间下载,请耐心等待。 
 - 如果你想下载并运行特定版本的 RAGFlow slim Docker 镜像,请在 docker/.env 文件中找到 
 -  
服务器启动成功后再次确认服务器状态:
$ 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 可能并未完全启动成功。 -  
在你的浏览器中输入你的服务器对应的 IP 地址并登录 RAGFlow。
上面这个例子中,您只需输入 http://IP_OF_YOUR_MACHINE 即可:未改动过配置则无需输入端口(默认的 HTTP 服务端口 80)。
 -  
在 service_conf.yaml 文件的
user_default_llm栏配置 LLM factory,并在API_KEY栏填写和你选择的大模型相对应的 API key。详见 llm_api_key_setup。
好戏开始,接着奏乐接着舞!
 
🔧 系统配置
系统配置涉及以下三份文件:
- .env:存放一些基本的系统环境变量,比如 
SVR_HTTP_PORT、MYSQL_PASSWORD、MINIO_PASSWORD等。 - service_conf.yaml:配置各类后台服务。
 - docker-compose.yml: 系统依赖该文件完成启动。
 
请务必确保 .env 文件中的变量设置与 service_conf.yaml 文件中的配置保持一致!
如果不能访问镜像站点hub.docker.com或者模型站点huggingface.co,请按照.env注释修改RAGFLOW_IMAGE和HF_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博客
