mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-26 09:52:11 +03:00
Hide admin password entry during setup, make doctor degrade to warnings when source-only runtime checks are unavailable, and improve stop behavior by attempting graceful shutdown before force killing ports. Also use SQLite's backup API for safer snapshots under WAL, align CLI key writes with the current provider_connections schema, and include follow-on compatibility fixes for GLM provider detection, stream error sanitization, and auth-aware test coverage.
160 lines
5.5 KiB
YAML
160 lines
5.5 KiB
YAML
# ──────────────────────────────────────────────────────────────────────
|
|
# OmniRoute — Docker Compose
|
|
# ──────────────────────────────────────────────────────────────────────
|
|
#
|
|
# Profiles:
|
|
# base → minimal image, no CLI tools
|
|
# cli → CLIs installed inside the container (portable)
|
|
# host → runner-base + host-mounted CLI binaries (Linux-first)
|
|
# cliproxyapi → CLIProxyAPI sidecar on port 8317
|
|
#
|
|
# Usage:
|
|
# docker compose --profile base up -d
|
|
# docker compose --profile cli up -d
|
|
# docker compose --profile host up -d
|
|
# docker compose --profile cliproxyapi up -d
|
|
# docker compose --profile cli --profile cliproxyapi up -d
|
|
#
|
|
# Before first run, copy .env.example → .env and edit your secrets.
|
|
# ──────────────────────────────────────────────────────────────────────
|
|
|
|
x-common: &common
|
|
restart: unless-stopped
|
|
stop_grace_period: 40s
|
|
env_file: .env
|
|
environment:
|
|
- DATA_DIR=/app/data # Must match the volume mount below
|
|
- PORT=${PORT:-20128}
|
|
- DASHBOARD_PORT=${DASHBOARD_PORT:-${PORT:-20128}}
|
|
- API_PORT=${API_PORT:-20129}
|
|
- API_HOST=${API_HOST:-0.0.0.0}
|
|
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
|
|
volumes:
|
|
- ./data:/app/data
|
|
healthcheck:
|
|
test: ["CMD", "node", "healthcheck.mjs"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 15s
|
|
|
|
services:
|
|
# ── Redis (Rate Limiter Backend) ──────────────────────────────────
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: omniroute-redis
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${REDIS_PORT:-6379}:6379"
|
|
volumes:
|
|
- redis-data:/data
|
|
command: redis-server --save 60 1 --loglevel warning
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 3
|
|
|
|
# ── Profile: base (minimal, no CLI tools) ──────────────────────────
|
|
omniroute-base:
|
|
<<: *common
|
|
container_name: omniroute
|
|
build:
|
|
context: .
|
|
target: runner-base
|
|
image: omniroute:base
|
|
ports:
|
|
- "${DASHBOARD_PORT:-${PORT:-20128}}:${DASHBOARD_PORT:-${PORT:-20128}}"
|
|
- "${API_PORT:-20129}:${API_PORT:-20129}"
|
|
profiles:
|
|
- base
|
|
|
|
# ── Profile: cli (CLIs installed inside container) ─────────────────
|
|
omniroute-cli:
|
|
<<: *common
|
|
container_name: omniroute
|
|
build:
|
|
context: .
|
|
target: runner-cli
|
|
image: omniroute:cli
|
|
ports:
|
|
- "${DASHBOARD_PORT:-${PORT:-20128}}:${DASHBOARD_PORT:-${PORT:-20128}}"
|
|
- "${API_PORT:-20129}:${API_PORT:-20129}"
|
|
volumes:
|
|
- ./data:/app/data
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- /usr/libexec/docker/cli-plugins:/usr/libexec/docker/cli-plugins:ro
|
|
- ${AUTO_UPDATE_HOST_REPO_DIR:-.}:/workspace/omniroute:rw
|
|
profiles:
|
|
- cli
|
|
|
|
# ── Profile: host (host-mounted CLI binaries, Linux-first) ────────
|
|
omniroute-host:
|
|
<<: *common
|
|
container_name: omniroute
|
|
build:
|
|
context: .
|
|
target: runner-base
|
|
image: omniroute:base
|
|
ports:
|
|
- "${DASHBOARD_PORT:-${PORT:-20128}}:${DASHBOARD_PORT:-${PORT:-20128}}"
|
|
- "${API_PORT:-20129}:${API_PORT:-20129}"
|
|
environment:
|
|
- DATA_DIR=/app/data
|
|
- PORT=${PORT:-20128}
|
|
- DASHBOARD_PORT=${DASHBOARD_PORT:-${PORT:-20128}}
|
|
- API_PORT=${API_PORT:-20129}
|
|
- API_HOST=${API_HOST:-0.0.0.0}
|
|
- CLI_MODE=host
|
|
- CLI_EXTRA_PATHS=/host-local/bin:/host-node/bin
|
|
- CLI_CONFIG_HOME=/host-home
|
|
- CLI_ALLOW_CONFIG_WRITES=true
|
|
# Uncomment per-tool overrides as needed:
|
|
# - CLI_CURSOR_BIN=agent
|
|
# - CLI_CLINE_BIN=cline
|
|
# - CLI_CONTINUE_BIN=cn
|
|
volumes:
|
|
- ./data:/app/data
|
|
# ── Host binary mounts (read-only) ──
|
|
# Adjust paths below to match YOUR host system.
|
|
- ~/.local/bin:/host-local/bin:ro
|
|
# Node global binaries (adjust node version path)
|
|
# - ~/.nvm/versions/node/v24.14.1/bin:/host-node/bin:ro
|
|
# ── Host config mounts (read-write) ──
|
|
- ~/.codex:/host-home/.codex:rw
|
|
- ~/.claude:/host-home/.claude:rw
|
|
- ~/.factory:/host-home/.factory:rw
|
|
- ~/.openclaw:/host-home/.openclaw:rw
|
|
- ~/.cursor:/host-home/.cursor:rw
|
|
- ~/.config/cursor:/host-home/.config/cursor:rw
|
|
profiles:
|
|
- host
|
|
|
|
# ── Profile: cliproxyapi (CLIProxyAPI as sidecar) ─────────────────
|
|
cliproxyapi:
|
|
container_name: cliproxyapi
|
|
image: ghcr.io/router-for-me/cliproxyapi:v6.9.7
|
|
restart: unless-stopped
|
|
ports:
|
|
- "${CLIPROXYAPI_PORT:-8317}:${CLIPROXYAPI_PORT:-8317}"
|
|
volumes:
|
|
- cliproxyapi-data:/root/.cli-proxy-api
|
|
environment:
|
|
- PORT=${CLIPROXYAPI_PORT:-8317}
|
|
- HOST=0.0.0.0
|
|
healthcheck:
|
|
test:
|
|
["CMD", "wget", "--spider", "-q", "http://127.0.0.1:${CLIPROXYAPI_PORT:-8317}/v1/models"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
profiles:
|
|
- cliproxyapi
|
|
|
|
volumes:
|
|
cliproxyapi-data:
|
|
name: cliproxyapi-data
|
|
redis-data:
|
|
name: omniroute-redis-data
|