{"owner":"diegosouzapw","repo":"OmniRoute","hasDocker":true,"hasCompose":true,"hasDockerfile":false,"composePath":"docker-compose.yml","servicesCount":10,"services":[{"name":"redis","image":"docker.io/library/redis:8.6.5-alpine","restart":"unless-stopped","command":"redis-server --save 60 1 --loglevel warning","ports":["${REDIS_BIND_HOST:-127.0.0.1}:${REDIS_PORT:-6379}:6379"],"volumes":["redis-data:/data"]},{"name":"omniroute-base","image":"omniroute:base","build":{"context":"."},"restart":"unless-stopped","ports":["${APP_BIND_HOST:-127.0.0.1}:${DASHBOARD_PORT:-20128}:${DASHBOARD_PORT:-20128}","${APP_BIND_HOST:-127.0.0.1}:${API_PORT:-20129}:${API_PORT:-20129}","${APP_BIND_HOST:-127.0.0.1}:${LIVE_WS_PORT:-20132}:${LIVE_WS_PORT:-20132}"],"environment":["DATA_DIR=/app/data","OMNIROUTE_BASE_PATH=${OMNIROUTE_BASE_PATH:-}","PORT=${PORT:-20128}","DASHBOARD_PORT=${DASHBOARD_PORT:-20128}","API_PORT=${API_PORT:-20129}","API_HOST=${API_HOST:-127.0.0.1}","LIVE_WS_PORT=${LIVE_WS_PORT:-20132}","LIVE_WS_HOST=${LIVE_WS_HOST:-127.0.0.1}","LIVE_WS_ALLOWED_ORIGINS=${LIVE_WS_ALLOWED_ORIGINS:-http://localhost:20128,http://127.0.0.1:20128}","REDIS_URL=${REDIS_URL:-redis://redis:6379}","NODE_OPTIONS=--max-old-space-size=2048","OMNIROUTE_CODEX_APPSERVER_WS=${OMNIROUTE_CODEX_APPSERVER_WS:-ws://codex-app-server:1456}","OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE=${OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE:-/run/codex-appserver/token}"],"volumes":["./data:/app/data","codex-appserver-token:/run/codex-appserver","codex-appserver-home:/home/node/.codex"]},{"name":"omniroute-web","image":"omniroute:web","build":{"context":"."},"restart":"unless-stopped","ports":["${APP_BIND_HOST:-127.0.0.1}:${DASHBOARD_PORT:-20128}:${DASHBOARD_PORT:-20128}","${APP_BIND_HOST:-127.0.0.1}:${API_PORT:-20129}:${API_PORT:-20129}","${APP_BIND_HOST:-127.0.0.1}:${LIVE_WS_PORT:-20132}:${LIVE_WS_PORT:-20132}"],"environment":["DATA_DIR=/app/data","PORT=${PORT:-20128}","DASHBOARD_PORT=${DASHBOARD_PORT:-20128}","API_PORT=${API_PORT:-20129}","API_HOST=${API_HOST:-127.0.0.1}","LIVE_WS_PORT=${LIVE_WS_PORT:-20132}","LIVE_WS_HOST=${LIVE_WS_HOST:-127.0.0.1}","LIVE_WS_ALLOWED_ORIGINS=${LIVE_WS_ALLOWED_ORIGINS:-http://localhost:20128,http://127.0.0.1:20128}","REDIS_URL=${REDIS_URL:-redis://redis:6379}","OMNIROUTE_BASE_PATH=${OMNIROUTE_BASE_PATH:-}","CHATGPT_WEB_CODEX_CDP_URL=http://chatgpt-web-codex-browser:9223","CDP_PROXY_TOKEN=${CDP_PROXY_TOKEN:-}","CDP_PROXY_TOKEN_FILE=/cdp-token/token"],"volumes":["chatgpt-web-codex-cdp-token:/cdp-token:ro"],"depends_on":["chatgpt-web-codex-browser"]},{"name":"chatgpt-web-codex-browser","image":"omniroute:chatgpt-web-codex-browser","build":{"context":".","dockerfile":"docker/chatgpt-web-codex-browser/Dockerfile"},"restart":"unless-stopped","environment":["CDP_PROXY_TOKEN=${CDP_PROXY_TOKEN:-}","CDP_PROXY_TOKEN_FILE=/cdp-token/token"],"volumes":["chatgpt-web-codex-browser-data:/browser-profile","chatgpt-web-codex-cdp-token:/cdp-token"]},{"name":"omniroute-cli","image":"omniroute:cli","build":{"context":"."},"restart":"unless-stopped","ports":["${APP_BIND_HOST:-127.0.0.1}:${DASHBOARD_PORT:-20128}:${DASHBOARD_PORT:-20128}","${APP_BIND_HOST:-127.0.0.1}:${API_PORT:-20129}:${API_PORT:-20129}","${APP_BIND_HOST:-127.0.0.1}:${LIVE_WS_PORT:-20132}:${LIVE_WS_PORT:-20132}"],"environment":["DATA_DIR=/app/data","OMNIROUTE_BASE_PATH=${OMNIROUTE_BASE_PATH:-}","PORT=${PORT:-20128}","DASHBOARD_PORT=${DASHBOARD_PORT:-20128}","API_PORT=${API_PORT:-20129}","API_HOST=${API_HOST:-127.0.0.1}","LIVE_WS_PORT=${LIVE_WS_PORT:-20132}","LIVE_WS_HOST=${LIVE_WS_HOST:-127.0.0.1}","LIVE_WS_ALLOWED_ORIGINS=${LIVE_WS_ALLOWED_ORIGINS:-http://localhost:20128,http://127.0.0.1:20128}","REDIS_URL=${REDIS_URL:-redis://redis:6379}","NODE_OPTIONS=--max-old-space-size=2048","OMNIROUTE_CODEX_APPSERVER_WS=${OMNIROUTE_CODEX_APPSERVER_WS:-ws://codex-app-server:1456}","OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE=${OMNIROUTE_CODEX_APPSERVER_WS_TOKEN_FILE:-/run/codex-appserver/token}"],"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"]},{"name":"omniroute-host","image":"omniroute:base","build":{"context":"."},"restart":"unless-stopped","ports":["${APP_BIND_HOST:-127.0.0.1}:${DASHBOARD_PORT:-20128}:${DASHBOARD_PORT:-20128}","${APP_BIND_HOST:-127.0.0.1}:${API_PORT:-20129}:${API_PORT:-20129}","${APP_BIND_HOST:-127.0.0.1}:${LIVE_WS_PORT:-20132}:${LIVE_WS_PORT:-20132}"],"environment":["DATA_DIR=/app/data","PORT=${PORT:-20128}","DASHBOARD_PORT=${DASHBOARD_PORT:-20128}","API_PORT=${API_PORT:-20129}","API_HOST=${API_HOST:-127.0.0.1}","LIVE_WS_PORT=${LIVE_WS_PORT:-20132}","LIVE_WS_HOST=${LIVE_WS_HOST:-127.0.0.1}","LIVE_WS_ALLOWED_ORIGINS=${LIVE_WS_ALLOWED_ORIGINS:-http://localhost:20128,http://127.0.0.1:20128}","CLI_MODE=host","CLI_EXTRA_PATHS=/host-local/bin:/host-node/bin","CLI_CONFIG_HOME=/host-home","CLI_ALLOW_CONFIG_WRITES=true"],"volumes":["./data:/app/data","~/.local/bin:/host-local/bin:ro","~/.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"]},{"name":"qdrant","image":"docker.io/qdrant/qdrant:v1.12.4","restart":"unless-stopped","ports":["${QDRANT_BIND_HOST:-127.0.0.1}:${QDRANT_PORT:-6333}:6333","${QDRANT_BIND_HOST:-127.0.0.1}:${QDRANT_GRPC_PORT:-6334}:6334"],"environment":["QDRANT__SERVICE__GRPC_PORT=6334"],"volumes":["qdrant-data:/qdrant/storage"]},{"name":"bifrost","image":"ghcr.io/maximhq/bifrost:v1.6.11","restart":"unless-stopped","ports":["${BIFROST_BIND_HOST:-127.0.0.1}:${BIFROST_PORT:-8080}:8080"],"environment":["BIFROST_LOG_LEVEL=${BIFROST_LOG_LEVEL:-info}"],"volumes":["bifrost-data:/data"]},{"name":"cliproxyapi","image":"docker.io/eceasy/cli-proxy-api:v6.9.7","restart":"unless-stopped","ports":["${CLIPROXY_BIND_HOST:-127.0.0.1}:${CLIPROXYAPI_PORT:-8317}:${CLIPROXYAPI_PORT:-8317}"],"environment":["PORT=${CLIPROXYAPI_PORT:-8317}","HOST=0.0.0.0","MANAGEMENT_PASSWORD=${CLIPROXYAPI_MANAGEMENT_KEY:-}"],"volumes":["cliproxyapi-data:/root/.cli-proxy-api"]},{"name":"codex-app-server","image":"omniroute:base","restart":"unless-stopped","command":"set -e\nTOKEN_FILE=/run/codex-appserver/token\nmkdir -p /run/codex-appserver\nif [ ! -s \"$$TOKEN_FILE\" ]; then\n  # 32-byte hex capability token; shared with the app via the token volume.\n  TF=\"$$TOKEN_FILE\" node -e 'require(\"fs\").writeFileSync(process.env.TF, require(\"crypto\").randomBytes(32).toString(\"hex\"))' 2>/dev/null || \\\n    { head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \\n' > \"$$TOKEN_FILE\"; }\n  chmod 600 \"$$TOKEN_FILE\"\nfi\nexec codex app-server \\\n  --listen ws://0.0.0.0:1456 \\\n  --ws-auth capability-token \\\n  --ws-token-file \"$$TOKEN_FILE\"\n","environment":["CODEX_HOME=/home/node/.codex","RUST_LOG=${CODEX_APPSERVER_RUST_LOG:-warn}"],"volumes":["codex-appserver-token:/run/codex-appserver","codex-appserver-home:/home/node/.codex"]}],"exposedPorts":["6379","6333","6334","8080"],"dockerRunCommand":"docker run -d --name omniroute -p 6379:6379 --restart always omniroute:base","podmanRunCommand":"podman run -d --name omniroute -p 6379:6379 --restart always omniroute:base","skopeoInspectCommand":"skopeo inspect docker://docker.io/library/omniroute:base","orasPullCommand":"oras pull omniroute:base","registryMeta":{"provider":"dockerhub","image":"library/omniroute","canonicalImage":"docker.io/library/omniroute:base","latestTag":"base","cliCommands":{"dockerRun":"docker run -d --name omniroute -p 6379:6379 --restart always omniroute:base","dockerPull":"docker pull omniroute:base","podmanRun":"podman run -d --name omniroute -p 6379:6379 --restart always omniroute:base","skopeoInspect":"skopeo inspect docker://docker.io/library/omniroute:base","orasPull":"oras pull omniroute:base","composeYaml":"services:\n  omniroute:\n    image: omniroute:base\n    restart: unless-stopped\n    ports:\n      - \"6379:6379\""}}}