# RAGFlow

Retrieval-augmented generation engine that parses documents and answers questions about them.

- Replaces: [Glean](https://openlogs.fyi/alternatives/glean)
- Summary: Paid enterprise search and knowledge assistant services, such as Glean.
- Stack: Go (language)
- Deployment: docker_compose
- License: Apache-2.0 (osi) [source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md), read 2026-10-22)
- Difficulty: medium. 1 service, 3 volume mounts, 6 env values to set, no elevated host access. Heuristic score 3 of 11: medium. The file includes other files, so counts may be low. A source checkout is needed, so the rating is at least medium.
- Requirements: not stated
- Repository: [infiniflow/ragflow](https://github.com/infiniflow/ragflow)

## Install

1. Docker with the Compose plugin and git ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md))

   ```text
   A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
   ```

2. Get the source at commit 4fd8c43 ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md))

   ```bash
   git init ragflow
   cd ragflow
   git remote add origin https://github.com/infiniflow/ragflow.git
   git sparse-checkout init --cone
   git sparse-checkout set docker
   git fetch --depth 1 --filter=blob:none origin 4fd8c439af2cf31e19731675e27bbb9ccb854bf1
   git checkout FETCH_HEAD
   ```

3. Go to the folder the docs use ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md))

   ```bash
   cd docker
   ```

4. The compose file in the checkout: docker/docker-compose.yml (shown here for reading) ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml))

   ```yaml
   include:
     - ./docker-compose-base.yml
   # To ensure that the container processes the locally modified `service_conf.yaml.template` instead of the one included in its image, you need to mount the local `service_conf.yaml.template` to the container.
   services:
   
     ragflow-cpu:
       depends_on:
         mysql:
           condition: service_healthy
           required: false
       profiles:
         - cpu
       image: ${RAGFLOW_IMAGE}
       ulimits:
         nofile:
           soft: 65535
           hard: 65535
         nproc:
           soft: 65535
           hard: 65535
       # MCP is served in-process by the API server (POST /mcp on the 9380 port).
   
       # Example configuration to start Admin server:
       command:
         - --enable-adminserver
         - --init-superuser
         #- --init-model-provider-tables
       ports:
         - ${SVR_WEB_HTTP_PORT}:80
         - ${SVR_WEB_HTTPS_PORT}:443
         - ${SVR_HTTP_PORT}:9380
         - ${ADMIN_SVR_HTTP_PORT}:9381
       volumes:
         - ./ragflow-logs:/ragflow/logs
         # - ./nginx/ragflow.conf:/etc/nginx/conf.d/ragflow.conf
         # - ./nginx/proxy.conf:/etc/nginx/proxy.conf
         # - ./nginx/nginx.conf:/etc/nginx/nginx.conf
         - ./service_conf.yaml.template:/ragflow/conf/service_conf.yaml.template
         - ./entrypoint.sh:/ragflow/entrypoint.sh
         # - ${RAGFLOW_SSH_KNOWN_HOSTS:-${HOME}/.ssh/known_hosts}:${SSH_KNOWN_HOSTS:-/etc/ragflow/ssh_known_hosts}:ro
       env_file: .env
       # Route the Go services' cache/queue backend to the separate Kvrocks service.
       # The Python services use the Valkey `redis` service, which the Go deployment
       # disables (see the `redis` profile override above). KVROCKS_HOST/KVROCKS_PORT
       # are the IN-NETWORK coordinates the Go process uses to reach `kvrocks:6379`; the
       # host-published port is KVROCKS_PORT (see docker-compose-base.yml), which CI
       # offsets per job and keeps distinct from REDIS_PORT.
       environment:
         - KVROCKS_HOST=kvrocks
         - KVROCKS_PORT=6379
       networks:
         - ragflow
       restart: unless-stopped
       # https://docs.docker.com/engine/daemon/prometheus/#create-a-prometheus-configuration
       # If you use Docker Desktop, the --add-host flag is optional. This flag ensures that the host's internal IP is exposed to the Prometheus container.
       extra_hosts:
         - "host.docker.internal:host-gateway"
   ```

5. What the compose file check ran with ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md))

   ```text
   The compose file check ran in a checkout of infiniflow/ragflow at 4fd8c439af2cf31e19731675e27bbb9ccb854bf1 (a sparse checkout: the top-level files and the folder docker), in the folder docker. The README tells the reader to clone the repository, go into the docker folder and run docker compose up.
   ```

6. Start it ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md))

   ```bash
   docker compose up -d
   ```

7. Open the app ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml))

   ```text
   Open http://localhost:80. The compose file publishes host port 80 for the ragflow-cpu service. The README tells the reader to enter the IP address of the server in a browser and log in.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- The compose file includes other files: It reads more services from ./docker-compose-base.yml. Those files are not part of this entry, so the compose file does not run on its own. ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./ragflow-logs at /ragflow/logs (ragflow-cpu), ./service_conf.yaml.template at /ragflow/conf/service_conf.yaml.template (ragflow-cpu), ./entrypoint.sh at /ragflow/entrypoint.sh (ragflow-cpu). ([source](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 1317
- Stars: 92649, forks: 11069
- Last push: 2026-10-22 (0 days ago)
- Latest release: v1.0.0-rc2 on 2026-10-16 (6 days ago)

## Sources

- [Repository: https://github.com/infiniflow/ragflow](https://github.com/infiniflow/ragflow)
- [License: https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/LICENSE](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/LICENSE)
- [Business model: https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/README.md)
- [Compose file: https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml](https://github.com/infiniflow/ragflow/blob/4fd8c439af2cf31e19731675e27bbb9ccb854bf1/docker/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/ragflow  
Last updated: 2026-10-22
