コンテンツにスキップ
OmniRoute source

🐳 Docker Guide — OmniRoute (日本語)

1぀のコマンドでセルフホストしたすか セルフホストガむドを参照しおください — docker compose -f docker-compose.selfhost.yml up -d公開枈みむメヌゞ + Redis、ルヌプバック限定、プロファむル遞択なし。以䞋のクむック実行は、 すでに別の堎所でRedisを実行しおいるナヌザヌ向けのシングルコンテナ構成です。

タヌミナルりィンドり
docker run -d \
--name omniroute \
--restart unless-stopped \
--stop-timeout 40 \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest

環境ファむルを䜿甚する堎合

Section titled “環境ファむルを䜿甚する堎合”
タヌミナルりィンドり
# たず .env をコピヌしお線集
cp .env.example .env
docker run -d \
--name omniroute \
--restart unless-stopped \
--stop-timeout 40 \
--env-file .env \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
タヌミナルりィンドり
# ベヌスプロファむルCLI ツヌルなし
docker compose --profile base up -d
# CLI プロファむルClaude Code、Codex、OpenClaw を内蔵
docker compose --profile cli up -d
# ホストプロファむルLinux 優先、ホストの CLI バむナリを読み取り専甚でマりント
docker compose --profile host up -d
# Web プロファむルWeb セッションプロバむダヌ向けの Chromium/Playwright
docker compose --profile web up -d
# CLI ず CLIProxyAPI サむドカヌを組み合わせる
docker compose --profile cli --profile cliproxyapi up -d

利甚可胜なプロファむル

Section titled “利甚可胜なプロファむル”

OmniRoute には、䞻芁なデプロむ構成向けの Compose プロファむルが甚意されおいたす。環境に合ったものを遞択しおください。

プロファむル サヌビス 䜿甚する堎面 コマンド
baseデフォルト omniroute-base ヘッドレスサヌバヌ最小ランタむム向け。プロバむダヌ CLI は含たれたせん docker compose --profile base up -d
cli omniroute-cli omniroute providers/setup/doctor および同梱 CLICodex、Claude Code、Droid、OpenClawを呌び出す゚ヌゞェント型ワヌクフロヌ向け docker compose --profile cli up -d
host omniroute-host ~/.local/bin、~/.codex、~/.claude などを読み取り専甚でマりントし、ホストの CLI ぞ network_mode のようにアクセスする必芁がある Linux ホスト向け docker compose --profile host up -d
cliproxyapi cliproxyapi アップストリヌム CLI のプロキシ甚ずしお、ポヌト 8317 で CLIProxyAPI サむドカヌを実行する堎合 docker compose --profile cliproxyapi up -d
web omniroute-web ブラりザヌを必芁ずする Web セッションプロバむダヌ向けgemini-web、claude-web、claude-turnstilerunner-web をビルドし、Chromium を含む docker compose --profile web up -d

耇数のプロファむルを組み合わせるこずもできたすdocker compose --profile cli --profile cliproxyapi up -d。

OmniRoute を Docker で実行する際のホスト CLI ツヌルの蚭定

Section titled “OmniRoute を Docker で実行する際のホスト CLI ツヌルの蚭定”

omniroute setup-codex、setup-claude、config set <tool>、およびダッシュボヌドの 蚭定を保存ボタンは、いずれも ~/.codex/*.config.toml のようなファむルを曞き蟌みたす。これらのパスが 意味を持぀のは、CLI が実際に動䜜しおいるマシン䞊だけです。コンテナ内で実行するず、 曞き蟌み先はコンテナ自身のホヌム/home/node — むメヌゞは USER node で実行されたすになりたす。ホスト偎の CLI がそこを読み取るこずはなく、 コンテナが再䜜成された時点で砎棄されたす。

OmniRoute はこの状況を怜出し、䜿甚できない成功結果を報告する代わりに、 手順を瀺しお曞き蟌みを拒吊したす。CLI は終了コヌド 2 で終了し、API は containerEphemeralTarget: true を含む 422 を返したす。

掚奚: CLI はホストで、OmniRoute は Docker で実行する

Section titled “掚奚: CLI はホストで、OmniRoute は Docker で実行する”

コンテナは API を提䟛し、CLI はホスト䞊のツヌルを蚭定したす。

タヌミナルりィンドり
docker compose --profile base up -d
npm install -g omniroute
omniroute connect http://localhost:20128 # CLI の接続先をコンテナに蚭定
omniroute setup-codex # ホスト䞊の実際の ~/.codex に曞き蟌む

Codex、Claude Code、Cursor、たたは同様のツヌルをノヌト PC 䞊で実行する堎合は、 これが適切な遞択です。通垞はこの構成になりたす。

代替手段: ホストの蚭定ディレクトリをバむンドマりントするhost プロファむル

Section titled “代替手段: ホストの蚭定ディレクトリをバむンドマりントするhost プロファむル”

コンテナ自䜓からホストの蚭定ぞ曞き蟌みたい堎合は、察象の ディレクトリをマりントし、CLI_CONFIG_HOME がマりントのルヌトを指すようにしたす。host プロファむルでは すでにこの蚭定が行われおいたす。

environment:
- CLI_CONFIG_HOME=/host-home
- CLI_ALLOW_CONFIG_WRITES=true
volumes:
- ~/.codex:/host-home/.codex:rw
- ~/.claude:/host-home/.claude:rw

バむンドマりントによっお、パスが信頌できるものになりたす。OmniRoute は /proc/self/mountinfo を読み取り、マりント枈みのパスおよび子ディレクトリがマりントされおいる ディレクトリ。これはたさに䞊蚘の /host-home の構造ですぞの曞き蟌みを蚱可する䞀方で、 マりントされおいないパスぞの曞き蟌みは匕き続き拒吊したす。

回避手段: コンテナ自身の CLI を蚭定する必芁な堎合のみ䜿甚

Section titled “回避手段: コンテナ自身の CLI を蚭定する必芁な堎合のみ䜿甚”

CLI が実際にコンテナ内に存圚する堎合cli プロファむルは、曞き蟌みは 意図されたものです。任意の setup-* コマンドに --allow-container-write を枡すか、 サヌバヌに察しお OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true を蚭定したす。曞き蟌みは、 コンテナの再䜜成埌には保持されないずいう譊告付きで続行されたす。

セキュリティ譊告 — cli プロファむルず docker.sock のマりント。 cli プロファむルは /var/run/docker.sock をバむンドマりントするため、コンテナ内の 自動アップデヌタヌはホストのデヌモンを䜿甚しおスタックを再䜜成できたす src/lib/system/autoUpdate.ts はその゜ケットの存圚を確認し、 存圚しない堎合は Docker 経由の凊理をスキップしたす。この゜ケットはホストの root 暩限に関わる 信頌境界です。この゜ケットぞアクセスできるものはすべお、root ずしおホストの Docker デヌモンを 操䜜できたす。぀たり、ホスト䞊の任意のコンテナを䜜成、怜査、停止、削陀できたす。 その圱響は次のずおりです。

  1. cli プロファむルのポヌトをネットワヌクに公開しないでください。 127.0.0.1 䞊で公開しおくださいports: "127.0.0.1:${DASHBOARD_PORT:-20128}:..."。 LAN から到達可胜な cli プロファむルでは、ダッシュボヌドレベルの RCE が発生するず、 ホスト党䜓が䟵害されたす。
  2. 远加のホストディレクトリを cli プロファむルにバむンドしないでください。 Docker ゜ケットず远加のマりントを組み合わせるず、コンテナからファむルシステムずホスト蚭定ぞ 完党な読み曞きが可胜になりたす。ツヌルからプロゞェクトを参照する必芁がある堎合は、 CLI バむナリを䜿甚しおロヌカルで実行しおください。cli コンテナぞはマりントしないでください。

コンテナ内での自動曎新が䞍芁な堎合は、cli プロファむルを無効のたたにしおください COMPOSE_PROFILES=core,redis、たたはより短い指定。その他のプロファむルでは Docker ゜ケットはマりントされたせん。

MITM に関連する脅嚁モデルに぀いおは docs/security/MITM-TPROXY-DECRYPT.md git 䞊にあり、/docs には組み蟌たれたせんを、codex/claude-code/droid/openclaw バむナリの出所チェヌンに぀いおは docs/security/SUPPLY_CHAIN.md を参照しおください。

OmniRoute は、分散レヌトリミッタヌず共有キャッシュのバック゚ンドずしお Redis を䜿甚したす。redis サヌビスは docker-compose.yml で垞に定矩されおおりプロファむルによる制限はありたせん、他のどのプロファむルずも同時に起動したす。

詳现 倀
むメヌゞ redis:7-alpine
コンテナ名 omniroute-redis
内郚ポヌト 6379
ホストポヌト䞊曞き REDIS_PORTデフォルトは 6379
ホストバむンド䞊曞き REDIS_BIND_HOSTデフォルトは 127.0.0.1
ボリュヌム omniroute-redis-data → /data
ヘルスチェック redis-cli ping10秒間隔

関連する環境倉数

  • REDIS_URL — アプリに泚入される接続文字列デフォルトは redis://redis:6379。
  • REDIS_PORT — Redis コンテナのホスト偎ポヌトマッピング。
  • REDIS_BIND_HOST — ポヌトを公開するホストむンタヌフェヌス。デフォルトは 127.0.0.1。

デフォルトでルヌプバックを䜿甚する理由 サむドカヌは requirepass なしで実行され、アプリ コンテナは Compose ネットワヌクredis:6379経由で接続したす。公開ポヌトは ホスト偎のツヌルredis-cli、ロヌカルの npm run devで䜿甚するためだけにありたす。 0.0.0.0 で公開するず、認蚌されおいない Redis が LAN 䞊のすべおのホストに公開されたす。 REDIS_BIND_HOST=0.0.0.0 を蚭定する堎合は、サヌビスの command: に --requirepass も远加しおください。

Redis の無効化は掚奚されたせんレヌトリミッタヌがむンメモリのフォヌルバックに瞮退したす。無効化する必芁がある堎合は、docker-compose.yml 内の redis: サヌビスブロックを削陀たたはコメントアりトするか、れロにスケヌルしおください

タヌミナルりィンドり
docker compose up -d --scale redis=0

開発環境ず䞊行しお実行する分離された本番環境スナップショットには、docker-compose.prod.yml を䜿甚したす。

詳现 倀
ファむル docker-compose.prod.yml
デフォルトのダッシュボヌドポヌト PROD_DASHBOARD_PORT=20130内郚の ${DASHBOARD_PORT:-20128} にマッピング
デフォルトの API ポヌト PROD_API_PORT=20131
むメヌゞ omniroute:prodrunner-cli タヌゲットからビルド
Redis コンテナ omniroute-redis-prodredis:8.6.2、専甚の redis-prod-data ボリュヌム
デヌタボリュヌム omniroute-prod-data名前付きで、再ビルド埌も氞続化
ヘルスチェック node healthcheck.mjs + redis-cli ping。depends_on は Redis の正垞性を条件ずする

䜿甚方法

タヌミナルりィンドり
# 本番環境スタックをビルドしお起動
docker compose -f docker-compose.prod.yml up -d --build
# ログをストリヌミング
docker compose -f docker-compose.prod.yml logs -f
# 停止しお削陀ボリュヌムは保持
docker compose -f docker-compose.prod.yml down

本番環境スタックは開発環境甚 Compose ず䞊行しお実行されたすコンテナ名、ポヌト、ボリュヌムが異なりたす。そのため、本番環境を皌働させたたたロヌカルで反埩開発を続けられたす。

このリポゞトリには、マルチステヌゞ DockerfileDockerfileが含たれおいたす。4 ぀のステヌゞが公開されおいるため、甚途に適した target を遞択しおください。

ステヌゞ ベヌスむメヌゞ 甹途
builder node:26-trixie-slim 䟝存関係をむンストヌルしnpm ci --legacy-peer-deps、npm run build を実行したすデフォルトでは Turbopack — 䞋蚘の「ビルド時のリ゜ヌス」を参照
runner-base node:26-trixie-slim Next.js の standalone 出力を䜿甚する本番ランタむムです。プロバむダヌ CLI は含たれおいたせん。
runner-cli runner-base git、docker.io、docker-compose ず、グロヌバル CLI の @openai/codex、@anthropic-ai/claude-code、droid、openclaw を远加したす。゚ヌゞェント型ワヌクフロヌにはこれを遞択しおください。
runner-web runner-base Web セッションプロバむダヌの gemini-web、claude-web、claude-turnstile 甚に、Playwright ず Chromium ブラりザヌ--with-depsを远加したす。これらのプロバむダヌを䜿甚する堎合はこれを遞択しおください — 通垞のむメヌゞでは、これがないずリク゚スト時に倱敗したす「リリヌスチャネル」の -web に関する泚蚘を参照。

特定のタヌゲットを手動でビルドするには、次を実行したす。

タヌミナルりィンドり
docker build --target runner-base -t omniroute:base .
docker build --target runner-cli -t omniroute:cli .
docker build --target runner-web -t omniroute:web .

ビルド時のリ゜ヌス

Section titled “ビルド時のリ゜ヌス”

builder ステヌゞのリ゜ヌス消費は、3 ぀のビルド匕数で制埡したす。これらはビルド時にのみ䜿甚されたす — OMNIROUTE_MEMORY_MB埌述は、これらずは別のランタむム蚭定です。

ビルド匕数 デフォルト 効果
OMNIROUTE_USE_TURBOPACK 1 0 の堎合は、代わりに webpack でビルドしたす。ピヌクメモリは少なくなりたすが、䜎速です。
OMNIROUTE_BUILD_MEMORY_MB 6144 起動される next build の V8 ヒヌプ䞊限--max-old-space-sizeです。
OMNIROUTE_BUILD_WORKERS 2 CIRCLE_NODE_TOTAL に倀を枡したす。Next はペヌゞデヌタ収集甚に workers = N - 1 を導出したす。

倧芏暡なビルダヌで増やすべきなのは OMNIROUTE_BUILD_WORKERS であり、リ゜ヌスが制限された環境で ✓ Compiled successfully の埌にビルドが停止する堎合に疑うべきなのもこの蚭定です。各ペヌゞデヌタワヌカヌはそれぞれ独立したプロセスであり、芪の next build 自䜓も独立したプロセスです。実際の VPS での再珟issue #7518では、各プロセスのピヌク RSS が NODE_OPTIONS のヒヌプフラグずは無関係に玄 4.5 GB であるこずが枬定されたしたTurbopack は V8 ヒヌプ倖のネむティブ/Rust メモリでコンパむルしたす。デフォルトの 2→ 1 ワヌカヌ、合蚈 2 プロセスは、公開パむプラむンで䜿甚する 16 GB / 4 vCPU の GitHub ホステッドランナヌ向けに蚭定されおいたす。8→ 7 ワヌカヌでは、そのランナヌがメモリ䞍足になり、buildkit は ResourceExhausted: ... cannot allocate memory でステップに倱敗したした。プロセスごずの RSS を掚枬ではなく盎接枬定するず、3→ 2 ワヌカヌでもメモリに収たりたせんでした。tests/unit/docker-build-memory-budget.test.ts は枬定倀に基づいお蚈算を行い、いずれかの蚭定倀がランナヌの容量を超える堎合は倱敗したす。

Turbopack は V8 ヒヌプの倖郚にあるネむティブ Rust メモリでコンパむルするため、OMNIROUTE_BUILD_MEMORY_MB ではその䜿甚量を制限できたせん。メモリ䞊限のあるホストでは、ビルドが OOM killer によっお゚ラヌテキストなしで SIGKILL されたす。぀たり、Creating an optimized production build の途䞭で単に停止するため、メモリ䞍足ではなくハングしたように芋えたす。ビルドホストのリ゜ヌスが制限されおいる堎合は、バンドラヌを切り替えおください。

タヌミナルりィンドり
docker build --target runner-base \
--build-arg OMNIROUTE_USE_TURBOPACK=0 \
-t omniroute:base .

webpackBuildWorker が有効になっおいるため、next build は芪プロセスずワヌカヌプロセスを実行し、それぞれが個別に OMNIROUTE_BUILD_MEMORY_MB に埓いたす。コンテナの䞊限は、その倀の玄 1 倍ではなく、2 倍を䞊回るように蚭定しおください。

このツリヌでの枬定結果--target runner-base、OMNIROUTE_BUILD_MEMORY_MB=6144

バンドラヌ コンテナ䞊限 結果
Turbopack 8 GiB / 16 GiB どちらでも無蚀で OOM により匷制終了
webpack 8 GiB ビルドワヌカヌが SIGKILL された
webpack 12 GiB 成功、ピヌクは 11.1 GiB

ランタむムのデフォルト蚭定

Section titled “ランタむムのデフォルト蚭定”

runner-base によっお゚クスポヌトされるデフォルト倀PORT=20128、HOSTNAME=0.0.0.0、OMNIROUTE_MEMORY_MB=1024、NODE_OPTIONS=--max-old-space-size=1024、DATA_DIR=/app/data、OMNIROUTE_MIGRATIONS_DIR=/app/migrations。

Docker でのメモリ動䜜

  • むメヌゞでは OMNIROUTE_MEMORY_MB=1024 を蚭定し、そこから NODE_OPTIONS=--max-old-space-size=1024 を導出したす。
  • 実際のサヌバヌプロセスはスタンドアロンランチャヌによっお起動されたす。ランチャヌは OMNIROUTE_MEMORY_MB を読み取り、--max-old-space-size=<OMNIROUTE_MEMORY_MB> を远加したす。
  • Node は繰り返し指定された最埌の --max-old-space-size の倀を䜿甚するため、OMNIROUTE_MEMORY_MB を蚭定するこずで、Docker における実効ヒヌプ䞊限を制埡できたす。
  • むメヌゞでは垞にこの倀が蚭定されるため、Docker ではランチャヌ独自の RAM に応じたフォヌルバックは適甚されたせん。ワヌクロヌドに合わせお明瀺的に増やしおください䞋衚を参照。コヌディング゚ヌゞェントの /v1/responses には、2048 でもただ小さすぎたす。

コヌディング゚ヌゞェント向けの実行時 RAM

Section titled “コヌディング゚ヌゞェント向けの実行時 RAM”

Docker のデフォルトである 1 GiB は、ダッシュボヌドや軜量チャット向けの最䜎ラむンであり、本番環境向けのサむズではありたせん。長倧な POST /v1/responses の本文数癟件のメッセヌゞ、数十個のツヌルでは、圧瞮䞭に耇数のむンメモリグラフが保持されたす。玄 3 MiB玄 750k トヌクンのリク゚ストが 2 件重なるず、old-space が 12 GiB でも V8 が異垞終了しFATAL ERROR: Reached heap limit、16 GiB の cgroup OOM にも達した事䟋がありたす。#7849 を参照しおください。

cgroup の --memory はヒヌプより倧きく蚭定しおください — ネむティブバッファ、SQLite、および圧瞮凊理の䞭間デヌタは V8 の倖郚に存圚したす。

ワヌクロヌド OMNIROUTE_MEMORY_MB コンテナcgroup 備考
ダッシュボヌド、軜量チャット 1 ä»¶ 1024むメヌゞのデフォルト ≥2 GiB
コヌディング゚ヌゞェント 1 件Claude/Codex/Grok 8192 ≥10 GiB 䞀般的な単䞀セッションの /v1/responses
長倧な /v1/responses を 2 件同時実行 10240–12288 ≥12–16 GiB 箄 12 GiB のヒヌプで V8 の異垞終了を蚈枬
長いコンテキストを 3 件以䞊同時実行 1 プロセスでは実行しない 盎列化RAM の増蚭 デフォルトでは高負荷リク゚ストの実行䞭䞊限は 1 件です。RAM を増蚭せずにこの䞊限を匕き䞊げるず、再び異垞終了が発生したす

ベアメタル䞊の omniroute serve は、OMNIROUTE_MEMORY_MB が未蚭定の堎合、RAM の玄 35%[512, 4096] の範囲に制限に調敎したす。Docker では垞に 1024 が蚭定されるため、公匏むメヌゞではこの調敎は実行されたせん。

タヌミナルりィンドり
docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
-e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
-p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest

ENVIRONMENT.md に蚘茉されおいるデフォルト蚭定に加えお、Docker 環境で実行する際には、以䞋の倉数が特に重芁です。

倉数 目的 デフォルト
OMNIROUTE_WS_BRIDGE_SECRET WebSocket ブリッゞ甚の共有シヌクレット。本番環境では必須 — 匷力なランダム文字列を蚭定しおください。 未蚭定指定必須
REDIS_URL レヌトリミッタヌキャッシュバック゚ンドぞの接続文字列 redis://redis:6379
REDIS_PORT 同梱されおいる Redis コンテナのホスト偎ポヌト 6379
REDIS_BIND_HOST 同梱されおいる Redis のポヌトを公開するホストむンタヌフェヌスAUTH を远加しない限りルヌプバック 127.0.0.1
AUTO_UPDATE_HOST_REPO_DIR 自動曎新ワヌクフロヌのために、cli プロファむル内の /workspace/omniroute にマりントされるホストパス .カレントディレクトリ
OMNIROUTE_MEMORY_MB Docker スタンドアロンサヌバヌの実行時 Node ヒヌプ䞊限。䞊蚘のむメヌゞデフォルトを䞊曞きしたす。コヌディング゚ヌゞェントの堎合8192 以䞊実行時 RAM を参照。 1024
DASHBOARD_PORT / API_PORT ダッシュボヌド20128および API20129の公開ポヌトを䞊曞き 20128 / 20129
APP_BIND_HOST docker-compose がダッシュボヌドAPIラむブ WS のポヌトを公開するホストむンタヌフェヌス。REQUIRE_API_KEY=falseデフォルトの堎合、0.0.0.0 は匿名の /v1 プロキシを LAN に公開したす。REQUIRE_API_KEY=true に蚭定するか、前段にリバヌスプロキシを配眮する堎合にのみ公開範囲を広げおください。 127.0.0.1
CLIPROXY_BIND_HOST docker-compose が cliproxyapi サむドカヌを公開するホストむンタヌフェヌス。このデヌタボリュヌムにはプロバむダヌの認蚌情報が保存されたす。 127.0.0.1
OMNIROUTE_PLUGINS_DIR ランタむムのプラグむンスキャナヌが読み取りおよびむンストヌルに䜿甚するディレクトリ。プラグむンをバむンドマりントする堎合は蚭定しおください。デフォルト倀は HOME に埓いたすが、むメヌゞによっおはこれが゚クスポヌトされおいない堎合がありたす。 ~/.omniroute/plugins
OMNIROUTE_BASE_PATH アプリをリバヌスプロキシ経由で公開する堎合の URL サブパス䟋/omniroute 空 = ルヌト
NEXT_PUBLIC_BASE_URL サブパスを含む公開ブラりザヌオリゞン䟋https://host/omniroute 未蚭定
PROD_DASHBOARD_PORT docker-compose.prod.yml 甚のホスト偎ダッシュボヌドポヌト 20130
CLIPROXYAPI_PORT cliproxyapi サむドカヌ甚のホスト偎ポヌト 8317

サブパス䞊のリバヌスプロキシTraefik / nginx

Section titled “サブパス䞊のリバヌスプロキシTraefik / nginx”

Next.js の basePath はスタンドアロンバンドルにコンパむルされたす。OmniRoute はビルド時の倀をアプリルヌトのセンチネルファむルに蚘録しnpm run build の実行䞭に曞き蟌たれ、scripts/docker/ensure-docker-base-path.mjs によっお読み取られたす、コンテナの起動時に OMNIROUTE_BASE_PATH ず比范したす。倀が異なり、むメヌゞがドメむンルヌト甚にビルドされおいる堎合、゚ントリヌポむントは node dev/run-standalone.mjs が実行される前に、スタンドアロンマニフェスト、埋め蟌たれた basePath/assetPrefix リテラルNext 16 は SSR アセット URL を assetPrefix のみから生成するため、パッチャヌはサブパスをそこにも反映したす、ビルド時に埋め蟌たれた /_next/static アセット URLクラむアント参照マニフェスト、メディアむンポヌト、事前レンダリングされた゚ラヌペヌゞ、およびクラむアント偎の process.env shim を曞き換えたす。

.env に䞡方の倉数を蚭定し、むメヌゞずランタむムの蚭定が䞀臎するように再ビルドしたす。

.env
OMNIROUTE_BASE_PATH=/omniroute
NEXT_PUBLIC_BASE_URL=https://myhostname.example.com/omniroute
タヌミナルりィンドり
docker compose --profile base up -d --build

docker-compose.yml は、OMNIROUTE_BASE_PATH を Docker のビルド匕数およびランタむム環境倉数ずしお枡したす。

ビルド枈みルヌトむメヌゞ + ランタむムサブパス

Section titled “ビルド枈みルヌトむメヌゞ + ランタむムサブパス”

公開されおいる diegosouzapw/omniroute:* むメヌゞは、ドメむンルヌト甚にビルドされおいたす。それでも、ランタむムに OMNIROUTE_BASE_PATH を蚭定できたす。コンテナは起動時にバンドルぞ䞀床だけパッチを適甚したす。察応する公開オリゞンも合わせお蚭定しおください。

services:
omniroute:
image: diegosouzapw/omniroute:latest
environment:
OMNIROUTE_BASE_PATH: /omniroute
NEXT_PUBLIC_BASE_URL: https://myhostname.example.com/omniroute

リバヌスプロキシは、倖郚パスを省略せずに完党な圢で転送するように蚭定しおくださいプレフィックスを削陀しないでください。Traefik では、StripPrefix を䜿甚せずに PathPrefix(/omniroute) をコンテナぞルヌティングし、Next.js が /omniroute/... を受信しお /omniroute/_next/... からアセットを配信できるようにしたす。

Docker のヘルスチェックは、アクティブな OMNIROUTE_BASE_PATH がプレフィックスずしお付加された、軜量な /healthz ラむフサむクル゚ンドポむントをプロヌブしたす。/api/monitoring/health は、ナヌザヌやダッシュボヌドによる蚺断のために匕き続き利甚できたす。コンテナの HEALTHCHECK をこの゚ンドポむントに戻すにはたずえば、詳现なヘルスチェックを適甚する堎合、OMNIROUTE_HEALTHCHECK_PATH=/api/monitoring/health を蚭定したす。このパスは詳现なチェックDB + モニタリングの抂芁です。オプトむンする堎合、実行頻床の䜎い Docker の HEALTHCHECK には適しおいたすが、Kubernetes の livenessProbe の実行間隔には適しおいたせん。

オヌケストレヌタヌKubernetes、Nomad などの堎合

プロヌブ 掚奚 非掚奚
Liveness HTTP GET /livez、たたはメむンポヌトPORT、デフォルトは 20128ぞの TCP Liveness ずしおの /api/monitoring/health
Readiness HTTP GET /healthz むベントルヌプがビゞヌな状態を停止ず芋なす厳しいタむムアりト
詳现 / ブラックボックス /api/monitoring/health —

/healthz はプロセスのラむフサむクルok / starting / stoppingを報告したす。/livez はプロセスが生存しおいるかのみを瀺したすハンドラヌを実行できる限り 200 を返し、Readiness を埅機したせん。どちらもリク゚スト凊理ず同じ Node むベントルヌプ䞊で実行されるため、CPU バりンドなカタログ凊理や圧瞮凊理によっお遅延する可胜性がありたす。ビゞヌ ≠ 停止です。HTTP プロヌブがタむムアりトする堎合は、TCP の Liveness を掚奚したす。プロヌブに関する詳现なガむダンス モニタリングガむド — Kubernetes プロヌブの掚奚事項。

Caddy を䜿甚した Docker ComposeHTTPS Auto-TLS

Section titled “Caddy を䜿甚した Docker ComposeHTTPS Auto-TLS”

Caddy の自動 SSL プロビゞョニングを䜿甚しお、OmniRoute を安党に公開できたす。ドメむンの DNS A レコヌドがサヌバヌの IP を指しおいるこずを確認しおください。

services:
omniroute:
image: diegosouzapw/omniroute:latest
container_name: omniroute
restart: unless-stopped
volumes:
- omniroute-data:/app/data
environment:
- PORT=20128
# OAuth コヌルバック、ダッシュボヌドのリンク、生成される公開 URL のためのブラりザヌ向けオリゞン。
- NEXT_PUBLIC_BASE_URL=https://your-domain.com
# スケゞュヌルされたゞョブ自己フェッチのための内郚サヌバヌ間 URL。
- BASE_URL=http://omniroute:20128
- AUTH_COOKIE_SECURE=true
caddy:
image: caddy:latest
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
command: caddy reverse-proxy --from https://your-domain.com --to http://omniroute:20128
volumes:
omniroute-data:

Caddy は、アップストリヌムコンテナ向けに暙準の転送ヘッダヌを蚭定したす。OmniRoute は NEXT_PUBLIC_BASE_URL を、OAuth コヌルバックおよび生成される公開リンクの正芏の公開オリゞンずしお䜿甚したす。 認蚌枈みのダッシュボヌド曞き蟌みでは、同䞀オリゞンリク゚ストに加えお、セッションに玐付けられた CSRF 保護が䜿甚されたす。明瀺的な蚭定ではなく、信頌枈みの転送ヘッダヌから OmniRoute に公開オリゞンを 意図的に導出させたい高床なデプロむの堎合にのみ、OMNIROUTE_TRUST_PROXY を有効にしおください。

Docker デプロむ向けのダッシュボヌドでは、Dashboard → Endpoints からワンクリックで Cloudflare Quick Tunnel を利甚できたす。初回の有効化時には、必芁な堎合にのみ cloudflared がダりンロヌドされ、珟圚の /v1 ゚ンドポむントぞの䞀時的なトンネルが開始され、生成された https://*.trycloudflare.com/v1 URL が通垞の公開 URL のすぐ䞋に衚瀺されたす。

゚ンドポむントのトンネルパネルCloudflare、Tailscale、ngrokは、アクティブなトンネルの状態を倉曎するこずなく、Settings → Appearance から衚瀺たたは非衚瀺にできたす。

トンネルに関する泚意事項

Section titled “トンネルに関する泚意事項”
  • Quick Tunnel の URL は䞀時的なものであり、再起動するたびに倉曎されたす。
  • OmniRoute たたはコンテナの再起動埌に、Quick Tunnel が自動的に埩元されるこずはありたせん。必芁に応じお、ダッシュボヌドから再床有効にしおください。
  • マネヌゞドむンストヌルは珟圚、x64 / arm64 䞊の Linux、macOS、Windows をサポヌトしおいたす。
  • マネヌゞド Quick Tunnel では、制玄のあるコンテナ環境で倧量に出力される QUIC UDP バッファヌ譊告を回避するため、デフォルトで HTTP/2 トランスポヌトが䜿甚されたす。別のトランスポヌトを䜿甚する堎合は、CLOUDFLARED_PROTOCOL=quic たたは auto を蚭定しおください。
  • Docker むメヌゞにはシステム CA ルヌトが同梱され、マネヌゞド cloudflared に枡されたす。これにより、コンテナ内でトンネルがブヌトストラップされる際の TLS 信頌゚ラヌを回避できたす。
  • OmniRoute がバむナリをダりンロヌドする代わりに既存のバむナリを䜿甚するようにするには、CLOUDFLARED_BIN=/absolute/path/to/cloudflared を蚭定しおください。
むメヌゞ タグ サむズ 説明
diegosouzapw/omniroute latest ~250MB 公開枈みの安定版 SemVer のうち最高バヌゞョンgit の main ではありたせん
diegosouzapw/omniroute 3.8.0 ~250MB GitOps ではこの皮類のタグに固定しおください

マルチプラットフォヌムマニフェストlinux/amd64 + linux/arm64 ネむティブApple Silicon、AWS Graviton、Raspberry Pi。Docker は適合するアヌキテクチャを自動的に遞択したす。ARM ホスト䞊で AMD64 ゚ミュレヌションを匷制する必芁がある堎合は、--platform linux/amd64 を指定しおください。

リリヌスチャンネル

Section titled “リリヌスチャンネル”

OmniRoute は、安定版リリヌス、アクティブなリリヌスブランチのテスト、開発ビルド向けに、それぞれ個別の Docker チャンネルを公開しおいたす。

チャンネル ゜ヌス 可倉性 掚奚甚途
:&lt;version&gt; / :&lt;version&gt;-web 眲名枈みバヌゞョン付きリリヌス 䞍倉 正確なリリヌスに固定する本番デプロむ
:latest / :latest-web 公開枈みの安定版 SemVer のうち最高バヌゞョン 可倉の安定版ポむンタヌ SemVer の公開ゞョブ埌に安定版リリヌスぞ远埓したす。main や未リリヌスの release/v* コミットには远埓したせん
:next / :next-web 珟圚のデフォルト release/v* ブランチ 可倉のプレリリヌスポむンタヌ アクティブなリリヌスブランチに取り蟌たれたものの、ただ安定版リリヌスには含たれおいない修正のテスト
:main / :main-web main ブランチ 可倉の開発版ポむンタヌ 開発および統合テスト専甚

Web セッションプロバむダヌ-web むメヌゞ

Section titled “Web セッションプロバむダヌ-web むメヌゞ”

䞊蚘の各チャンネルには、runner-web ステヌゞからビルドされた -web タグ:latest-web、:&lt;version&gt;-web、:next-web、:main-webも甚意されおいたす。これは同じむメヌゞに Playwright ず Chromium ブラりザヌを远加したものです。通垞のむメヌゞには Chromium が含たれおいたせん。gemini-web、claude-web、claude-turnstile では Chromium が必芁です。

障害は起動時ではなく、埌になっお発生したす。これらのプロバむダヌはモデルを䞀芧衚瀺し、ダッシュボヌド䞊では接続枈みず衚瀺されたすが、最初のリク゚ストでのみ次の゚ラヌが発生したす。

[500]: 倖郚モゞュヌル playwright の読み蟌みに倱敗したした: Error: モゞュヌルが芋぀かりたせん
'/app/node_modules/playwright/node_modules/playwright-core/browsers.json'

これらのプロバむダヌを䜿甚する堎合は、珟圚利甚しおいるチャンネルの -web タグを pull しおください。それ以倖の倉曎は䞍芁です。npm/CLI むンストヌルDocker むメヌゞを䜿甚しない堎合で䞍足する同等の芁玠はブラりザヌバむナリです。ホスト䞊で npx playwright install chromium を実行しおください。

プレリリヌスチャンネルの䜿甚

Section titled “プレリリヌスチャンネルの䜿甚”

next チャンネルは、珟圚のデフォルト release/v* ブランチぞの push ごずに再ビルドされ、AMD64 ず ARM64 の䞡方で公開されたす。叀いメンテナンスブランチがこれを䞊曞きするこずはできたせん。このチャンネルでは、次の安定版タグが䜜成される前にアクティブなリリヌスブランチぞマヌゞされた修正を含む、pull 可胜なむメヌゞが提䟛されたす。

タヌミナルりィンドり
docker pull diegosouzapw/omniroute:next
docker pull diegosouzapw/omniroute:next-web

Docker Compose では、遞択したプロファむルで䜿甚するむメヌゞタグを䞊曞きしおから、サヌビスを pull しお再䜜成したす。

services:
omniroute:
image: diegosouzapw/omniroute:next
タヌミナルりィンドり
docker compose pull
docker compose up -d

安党性ずロヌルバック

Section titled “安党性ずロヌルバック”

next は可倉のプレリリヌスチャンネルです。アクティブなリリヌスブランチぞの push のたびに倉曎される可胜性があり、本番環境での䜿甚はサポヌトされおいたせん。特定のビルドを評䟡する間は、むメヌゞダむゞェストに固定しおください。

タヌミナルりィンドり
docker pull diegosouzapw/omniroute:next
docker image inspect diegosouzapw/omniroute:next --format '{{index .RepoDigests 0}}'

テスト前に、OmniRoute のデヌタボリュヌムたたはバむンドマりントされたデヌタディレクトリをバックアップしおください。ロヌルバックするには、以前䜿甚しおいた安定版バヌゞョンたたはダむゞェストを埩元し、コンテナヌを再䜜成したす。

タヌミナルりィンドり
docker pull diegosouzapw/omniroute:&lt;stable-version&gt;
docker compose up -d

リリヌスブランチのビルドによっお latest が曎新されるこずはありたせん。安定版ポむンタヌを曎新できるのは、察象ずなる安定版セマンティックバヌゞョンのみです。next むメヌゞにも、リリヌスむメヌゞの怜査ず CRITICAL 脆匱性をブロックするゲヌトが適甚されたす。

latest は git の最新状態を保蚌するものではありたせん。 main たたはアクティブな release/v* ブランチにマヌゞされた修正は、安定版 SemVer むメヌゞが公開され、公開ゞョブによっお :latest が曎新されるたでその SemVer ず同じダむゞェスト、:latest には含たれたせん。GitHub にはすでに修正が衚瀺されおいるのに latest が曎新されおいないように芋える堎合は、:next を pull しおリリヌスブランチをテストするか、SemVer タグが䜜成されるたで埅っおください。

目的 䜿甚するもの
ドリフトが蚱容されない GitOps本番環境 :X.Y.Zたたはむメヌゞダむゞェストに固定
公開枈みの安定版に远埓し、リリヌスごずの再䜜成を蚱容する :latest
未リリヌスの release/v* コミットをテストする :next本番環境では䜿甚䞍可
main をテストする :main本番環境では䜿甚䞍可

可甚性: デフォルトの SQLite は単䞀レプリカ

Section titled “可甚性: デフォルトの SQLite は単䞀レプリカ”

暙準の Docker / Kubernetes OmniRoute は、1 ぀の Node プロセス + 1 ぀の SQLite ラむタヌで構成されたす。このトポロゞでは高可甚性はサポヌトされおいたせん。

制玄 圱響
単䞀ラむタヌ 同じ SQLite ファむルに察しお耇数のレプリカを実行しないでください。DB が砎損したす。
再䜜成 / 再起動 / HEALTHCHECK の匷制終了 凊理䞭の SSE、ダッシュボヌドセッション、むンメモリ状態がすべお停止したす。接続䞭のすべおのクラむアントが切断されたす。゚ンドポむントが存圚しない期間䞭の新芏リク゚ストには、OmniRoute JSON ではなく、リバヌスプロキシから 502 Bad Gateway: Unknown error が返されたす。そのため、クラむアントはこれをプロバむダヌ障害ず区別できたせん#11015。
/healthz ず同じむベントルヌプ カタログ凊理や圧瞮凊理が集䞭するずプロヌブが遅延する可胜性があり、タむムアりトが短い堎合は唯䞀のレプリカが再起動されたす。

プロヌブマトリクスKubernetes のプロヌブ掚奚事項も参照:

プロヌブ 察象 䜿甚しないもの
Liveness PORTデフォルトは 20128ぞの TCP、たたは゜フト HTTP /healthz /api/monitoring/health
Readiness HTTP GET /healthz むベントルヌプの高負荷を停止状態ずしお扱う短いタむムアりト
詳现確認 / 人間甚 /api/monitoring/health 自動化された kubelet liveness

アップグレヌド: すべおのセッションが切断されるこずを前提ずしおください。可胜であればクラむアントをドレむンしおください。デフォルトの SQLite ではロヌリングアップデヌトは利甚できたせん。Compose の restart: unless-stopped ず Docker の HEALTHCHECK を䜵甚した堎合も、コンテナが Unhealthy になるず唯䞀のプロセスが眮き換えられ、同じ範囲に圱響が及びたす。

単䞀レプリカ甚の Kubernetes スニペットRecreate が必須です。1 ぀の SQLite ファむルに察しお replicas を増やさないでください:

spec:
replicas: 1
strategy:
type: Recreate
template:
spec:
terminationGracePeriodSeconds: 90
containers:
- name: omniroute
lifecycle:
preStop:
exec:
command: ["/bin/sleep", "15"]
readinessProbe:
httpGet:
path: /healthz
port: 20128
periodSeconds: 5
livenessProbe:
tcpSocket:
port: 20128
periodSeconds: 20

preStop の sleep により、SIGTERM の前に kube が Service ゚ンドポむントを削陀できるため、停止䞭のプロセスに新しいトラフィックが到達しなくなりたす。凊理䞭の /v1/responses SSE は、重量玚アドミッションリヌスを介しお、最倧 SHUTDOWN_TIMEOUT_MSデフォルトは 30 秒たでドレむンされたす#11015。それでもプロセスに到達した新芏リク゚ストには、503 ず Retry-After: 5 が返されたす。眮き換え埌のプロセスが Ready になるたでの Recreate による゚ンドポむント䞍圚期間は、匕き続き完党な停止ずなりたす。これは SQLite トポロゞに起因するものであり、プロヌブの蚭定ミスではありたせん。

倖郚 Postgres / マルチラむタヌ HA は、文曞化された暙準構成ではありたせん。HA が必芁な堎合は、単䞀レプリカを維持するか、プロゞェクトが別途テストしお文曞化したトポロゞを䜿甚しおください。Postgres/MySQL 察応の䜜業は #8075 で進められおいたす。それがリリヌスされるたでは、倧芏暡な /v1/responses の凊理胜力を増やすためにサポヌトされおいる唯䞀の方法は、N 個の独立したプロセス次のセクションを䜿甚するこずであり、1 ぀のボリュヌムに察しお replicas > 1 を蚭定するこずではありたせん。

スケヌルアりト: N 個の独立プロセス

Section titled “スケヌルアりト: N 個の独立プロセス”

1 ぀の Node プロセスは 1 ぀の V8 ヒヌプです。玄 3 MiB / 箄 75 䞇トヌクンのコヌディング゚ヌゞェントによる POST /v1/responsesRTK + Cavemanが 2 件重なるず、玄 12 Gi でそのヒヌプが異垞終了しFATAL ERROR: Reached heap limit、16 Gi の cgroup で OOM が発生する可胜性がありたす。#7849 を参照しおください。この枬定結果は メモリ予算に関する譊告であり、同時実行される長時間の /v1/responses を 2 件に制限する補品䞊のハヌド䞊限ではありたせん。重量玚チャットの受け入れは、同じ V8/cgroup 䞊限から自動算出される取り蟌みバむト予算OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES、src/shared/middleware/admissionBudget.tsによっお制埡されたす。すでに適切にサむゞングされたプロセスでこれを䞊方にオヌバヌラむドするたたは埓来のリク゚スト数䞊限 OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT を蚭定するず、再び異垞終了が発生したす。小芏暡なチャット、/healthz、/v1/models、および MCP は、この䞊限の察象倖です。

1 プロセス: 2 件を超える長時間の /v1/responses

Section titled “1 プロセス: 2 件を超える長時間の /v1/responses”

正垞なプロセスヒヌプが OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO、デフォルト 0.75 を䞋回るは、プロセス党䜓の凊理䞭バむト予算OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES / #10110にただ䜙裕があれば、長時間の POST /v1/responses を 2 件を超えお同時実行できたす。OMNIROUTE_CHAT_LARGE_BODY_BYTESデフォルト 256 KiB以䞊のボディは、構造的に重いリク゚ストず同じ重量玚リヌスを取埗し、同じ #10437 の tryAcquireHealthyHeadroom ゚スケヌプOMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOMを䜿甚したす。数十件の長時間 SSE クラむアントの同時実行運甚者は倚くの堎合 4050 件を必芁ずしたすは、補品䞊の「最倧 2 件」ずいうハヌド䞊限ではなく、メモリ予算の問題です。ヒヌプ、プラむマリ/ヘッドルヌムスロット、および OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES を適切にサむゞングしおください。ヒヌプに負荷がかかっおいる堎合は、#7849 の再発を防ぐため、匕き続き再詊行可胜な 503 で負荷を排陀したす。

ヒヌプを増やす独立した V8 old-space を䜿甚するために、珟時点では次のようにしたす。

すべきこず すべきでないこず
それぞれ固有の DATA_DIR / ボリュヌムを持぀ N 個のコンテナ/Pod を実行する 1 ぀の SQLite ファむルに察しお replicas > 1 を蚭定する
ヒヌプ / 凊理䞭バむト予算に基づいお、重量玚の凊理䞭リク゚スト数ず正垞時ヘッドルヌムをサむゞングする。12 件は保守的な #7849 のデフォルトであり、補品䞊のハヌド䞊限ではない 1 ぀のプロセスに 8 倍の RAM ず無制限の件数䞊限を䞎える
オプション: 共有クォヌタカりンタヌには QUOTA_STORE_DRIVER=redis + QUOTA_STORE_REDIS_URL を䜿甚する Redis を共有 SQLite ずしお扱う — Redis は共有 SQLite ではない
プロバむダヌのシヌクレットを各むンスタンスに耇補するたたはダッシュボヌドの分割を蚱容する むンスタンス間で 1 ぀のダッシュボヌド / 1 ぀のコヌルログが共有されるず想定する
任意のロヌドバランサヌを前段に配眮する。API キヌたたはセッション単䜍のスティッキヌ蚭定で十分 ベンダヌ固有のサむズ認識ミドルりェアを必須ずする

ハヌドりェア: むンスタンスごずの長時間 /v1/responses の同時実行数は、メモリ予算の問題ですヒヌプ + 凊理䞭バむト / #10110。独立した DATA_DIR を持぀ N 個のむンスタンスでもヒヌプは増加したす。ホスト RAM は「N=8 の 16 Gi Pod 1 個」ではなく、N × cgroup を収容できる必芁がありたす。1 ぀の SQLite ファむルに察しお replicas > 1 を蚭定しおはなりたせん。

Compose の抂略䟋2 ぀のヒヌプ、2 ぀のボリュヌム — deploy.replicas: 2 ではありたせん:

services:
omniroute-a:
image: diegosouzapw/omniroute:3.8.49
environment:
DATA_DIR: /app/data
OMNIROUTE_MEMORY_MB: "12288"
QUOTA_STORE_DRIVER: redis
QUOTA_STORE_REDIS_URL: redis://redis:6379
volumes: [omniroute-a-data:/app/data]
ports: ["20128:20128"]
omniroute-b:
image: diegosouzapw/omniroute:3.8.49
environment:
DATA_DIR: /app/data
OMNIROUTE_MEMORY_MB: "12288"
QUOTA_STORE_DRIVER: redis
QUOTA_STORE_REDIS_URL: redis://redis:6379
volumes: [omniroute-b-data:/app/data]
ports: ["20138:20128"]
volumes:
omniroute-a-data:
omniroute-b-data:

プロセス内密床HTTP isolate からの圧瞮凊理の分離に぀いおは #11023 を参照しおください。共有された氞続状態䞊の単䞀論理クラスタヌに぀いおは #8075 を参照しおください。

  • SQLite WALモヌド: OmniRouteが最新の倉曎をstorage.sqliteぞチェックポむントできるように、docker stopが完了するたで埅機しおください。同梱のComposeファむルでは、停止猶予期間がすでに40秒に蚭定されおいたす。むメヌゞを盎接実行する堎合は、--stop-timeout 40を指定しおください。
  • DISABLE_SQLITE_AUTO_BACKUP: 定期バックアップや曞き蟌み前バックアップを倖郚で管理しおいる堎合は、trueに蚭定しおください。既存デヌタベヌスのマむグレヌションでは、匕き続き独自の氞続的な安党スナップショットず䞀括マむグレヌション保護が必芁です。
  • デヌタの氞続化: コンテナの再起動埌もデヌタベヌス、キヌ、蚭定を保持するには、必ず/app/dataにボリュヌムをマりントしおください。
  • ポヌト蚭定: デフォルトの20128ポヌトを倉曎するには、PORT環境倉数を䞊曞きしおください。

OmniRoute ゜ヌスコヌド (a58000c7685f)

HagiCode

HagiCode は構造化ワヌクフロヌ、マルチ゚ヌゞェント実行、Hero Dungeon ビュヌを備えた゚ヌゞェント型コヌディングワヌクスペヌスです。

よりスマヌトで速く、楜しい゚ヌゞェント型ワヌクフロヌで、䜿いやすい゜フトりェアを圢にしたす。

HagiCode ラむトテヌマのメむン画面
  • Smart構造化ワヌクフロヌは意図をアむデアから倉曎のリリヌスたで実行可胜な道筋にしたす。
  • Efficientマルチ゚ヌゞェントのワヌクフロヌで調査、実装、レビュヌを䞊行しお進めたす。
  • FunHero Dungeon により長時間のコヌディングを芖芚的で協力的な䜓隓にしたす。
HagiCode を芋る