claude-flow
Version:
Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration
110 lines (104 loc) • 3.84 kB
YAML
# RuFlo Chat UI (ruvocal fork) + MCP Bridge
# All secrets via environment variables. Never commit .env files with keys.
#
# Usage:
# cp .env.example .env # fill in your API keys
# docker compose up -d
services:
# --- MongoDB ---
mongodb:
image: mongo:7
restart: unless-stopped
volumes:
- mongo-data:/data/db
ports:
- "27017:27017"
environment:
MONGO_INITDB_DATABASE: ${MONGODB_DB_NAME:-chat-db}
# --- MCP Bridge (ruvocal version — Gemini grounded search, autopilot SSE) ---
mcp-bridge:
build:
context: ./src/ruvocal/mcp-bridge
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "3001:3001"
environment:
PORT: "3001"
NODE_ENV: production
# AI Provider Keys (required: at least one)
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
GOOGLE_API_KEY: ${GOOGLE_API_KEY:-}
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
# Backend service URLs (add your own)
SEARCH_API_URL: ${SEARCH_API_URL:-}
RESEARCH_API_URL: ${RESEARCH_API_URL:-}
# --- Tool Groups (MCP_GROUP_*) ---
# Default-on groups
MCP_GROUP_INTELLIGENCE: ${MCP_GROUP_INTELLIGENCE:-true}
MCP_GROUP_AGENTS: ${MCP_GROUP_AGENTS:-true}
MCP_GROUP_MEMORY: ${MCP_GROUP_MEMORY:-true}
MCP_GROUP_DEVTOOLS: ${MCP_GROUP_DEVTOOLS:-true}
# Opt-in groups
MCP_GROUP_SECURITY: ${MCP_GROUP_SECURITY:-false}
MCP_GROUP_BROWSER: ${MCP_GROUP_BROWSER:-false}
MCP_GROUP_NEURAL: ${MCP_GROUP_NEURAL:-false}
MCP_GROUP_AGENTIC_FLOW: ${MCP_GROUP_AGENTIC_FLOW:-false}
MCP_GROUP_CLAUDE_CODE: ${MCP_GROUP_CLAUDE_CODE:-false}
MCP_GROUP_GEMINI: ${MCP_GROUP_GEMINI:-false}
MCP_GROUP_CODEX: ${MCP_GROUP_CODEX:-false}
# API keys for optional groups
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://localhost:3001/health').then(r => process.exit(r.ok ? 0 : 1))"]
interval: 30s
timeout: 5s
retries: 3
# --- Nginx reverse proxy (brand injection, CORS, static assets) ---
nginx:
build:
context: ./src/nginx
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "3000:3000"
depends_on:
- chat-ui
- mcp-bridge
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"]
interval: 30s
timeout: 5s
retries: 3
# --- RuFlo Chat UI (ruvocal SvelteKit fork — built from source) ---
chat-ui:
build:
context: ./src/ruvocal
dockerfile: Dockerfile
args:
INCLUDE_DB: "false"
restart: unless-stopped
expose:
- "3000"
environment:
# Runtime config injected via DOTENV_LOCAL (entrypoint.sh writes .env.local)
DOTENV_LOCAL: |
MONGODB_URL=mongodb://mongodb:27017
MONGODB_DB_NAME=${MONGODB_DB_NAME:-chat-db}
PUBLIC_APP_NAME=${BRAND_NAME:-RuFlo}
PUBLIC_APP_DESCRIPTION=${BRAND_DESCRIPTION:-Enterprise AI Agent Orchestration Platform}
PUBLIC_APP_ASSETS=chatui
PUBLIC_ORIGIN=
LLM_SUMMARIZATION=true
ENABLE_DATA_EXPORT=true
ALLOW_IFRAME=true
OPENAI_BASE_URL=http://mcp-bridge:3001
OPENAI_API_KEY=${OPENAI_API_KEY:-sk-placeholder}
MCP_SERVERS=[{"name":"Core Tools","url":"http://mcp-bridge:3001/mcp/core"},{"name":"Intelligence & Learning","url":"http://mcp-bridge:3001/mcp/intelligence"},{"name":"Agents & Orchestration","url":"http://mcp-bridge:3001/mcp/agents"},{"name":"Memory & Knowledge","url":"http://mcp-bridge:3001/mcp/memory"},{"name":"Dev Tools & Analysis","url":"http://mcp-bridge:3001/mcp/devtools"}]
COOKIE_SECURE=${COOKIE_SECURE:-false}
COOKIE_SAMESITE=${COOKIE_SAMESITE:-lax}
depends_on:
- mongodb
- mcp-bridge
volumes:
mongo-data: