Skip to content

Self-hosting with bin/vol

The whole backend — RAGFlow, the GPU services, vol-api and the Cloudflare tunnel — is managed by one script at the root of the monorepo: bin/vol. It replaces the old collection of screen sessions.

  1. Configure — copy infra/compose/.env.example to infra/compose/.env and fill in the RAGFlow API key, Supabase project URL, tunnel token and other secrets.

  2. Start everything

    Terminal window
    bin/vol up

    This starts the existing RAGFlow containers (docker start only), Ollama and the reranker, warms up bge-m3 on the GPU, then brings up vol-api and cloudflared with Docker Compose and prints a status table.

  3. Check

    Terminal window
    bin/vol status
    curl http://localhost:8010/v1/health

    vol-api also serves interactive OpenAPI docs at http://localhost:8010/docs.

Command What it does
bin/vol up Start RAGFlow, GPU services, vol-api and the tunnel
bin/vol down [--all] Stop vol-api and the tunnel; --all also stops RAGFlow and GPU (never deletes)
bin/vol status Status of every container plus a vol-api health check
bin/vol logs [service] Follow logs (vol-api, cloudflared)
bin/vol restart [service] Restart VOL services
bin/vol dev Dev servers: web :4321, app :5173, docs :4322
bin/vol pnpm <args> Run pnpm inside the dev container
bin/vol sh Shell inside the dev container
bin/vol obs up|down Observability stack (Grafana, Loki, Langfuse, GlitchTip)
bin/vol install-service Print the sudo commands to start VOL at boot with systemd

Node and pnpm run inside a dev container (infra/dev), with node_modules on Docker volumes. Never run node or pnpm on the host:

Terminal window
bin/vol pnpm install
bin/vol pnpm --filter @vol/docs build
bin/vol pnpm --filter @vol/sdk test
bin/vol dev

The architecture behind the public deployment is described in Architecture and Operations.