# ЁЯР│ Docker Guide тАФ OmniRoute (рдорд░рд╛рдареА) ЁЯМР **Languages:** ЁЯЗ║ЁЯЗ╕ [English](../../../../guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╣ [am](../../../am/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗж [ar](../../../ar/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ┐ [az](../../../az/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗзЁЯЗм [bg](../../../bg/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗзЁЯЗй [bn](../../../bn/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗзЁЯЗж [bs](../../../bs/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ┐ [cs](../../../cs/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗйЁЯЗ░ [da](../../../da/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗйЁЯЗк [de](../../../de/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗмЁЯЗ╖ [el](../../../el/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╕ [es](../../../es/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗкЁЯЗк [et](../../../et/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╖ [fa](../../../fa/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗлЁЯЗо [fi](../../../fi/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗлЁЯЗ╖ [fr](../../../fr/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗк [ga](../../../ga/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [gu](../../../gu/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ha](../../../ha/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ▒ [he](../../../he/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [hi](../../../hi/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ╖ [hr](../../../hr/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ║ [hu](../../../hu/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ▓ [hy](../../../hy/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗй [id](../../../id/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ig](../../../ig/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╣ [it](../../../it/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗпЁЯЗ╡ [ja](../../../ja/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗмЁЯЗк [ka](../../../ka/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗн [km](../../../km/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [kn](../../../kn/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗ╖ [ko](../../../ko/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╣ [lt](../../../lt/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╗ [lv](../../../lv/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ml](../../../ml/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╛ [ms](../../../ms/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╣ [mt](../../../mt/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ▓ [my](../../../my/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ╡ [ne](../../../ne/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ▒ [nl](../../../nl/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ┤ [no](../../../no/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [or](../../../or/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [pa](../../../pa/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗн [phi](../../../phi/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ▒ [pl](../../../pl/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ╣ [pt](../../../pt/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗзЁЯЗ╖ [pt-BR](../../../pt-BR/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ┤ [ro](../../../ro/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ║ [ru](../../../ru/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ░ [si](../../../si/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗ░ [sk](../../../sk/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗо [sl](../../../sl/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ╕ [sr](../../../sr/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗк [sv](../../../sv/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗк [sw](../../../sw/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ta](../../../ta/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [te](../../../te/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗн [th](../../../th/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╖ [tr](../../../tr/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗж [uk-UA](../../../uk-UA/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ░ [ur](../../../ur/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗ┐ [uz](../../../uz/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╗ЁЯЗ│ [vi](../../../vi/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [yo](../../../yo/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ│ [zh-CN](../../../zh-CN/docs/guides/DOCKER_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╝ [zh-TW](../../../zh-TW/docs/guides/DOCKER_GUIDE.md) --- > рд╕рдВрдкреВрд░реНрдг Docker рдЙрдкрдпреЛрдЬрди рд╕рдВрджрд░реНрдн. рдЭрдЯрдкрдЯ рд╕реБрд░реБрд╡рд╛рддреАрд╕рд╛рдареА, [README рдордзреАрд▓ Docker рд╡рд┐рднрд╛рдЧ](../README.md#-docker) рдкрд╣рд╛. ## рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ - [рдЭрдЯрдкрдЯ рдЪрд╛рд▓рд╡рд╛](#quick-run) - [рдкрд░реНрдпрд╛рд╡рд░рдг рдлрд╛рдЗрд▓рд╕рд╣](#with-environment-file) - [Docker Compose](#docker-compose) - [рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрдлрд╛рдЗрд▓реНрд╕](#available-profiles) - [OmniRoute Docker рдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЕрд╕рддрд╛рдирд╛ рд╣реЛрд╕реНрдЯ CLI рд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ](#configuring-host-cli-tools-when-omniroute-runs-in-docker) - [Redis Sidecar](#redis-sidecar) - [рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА Compose](#production-compose) - [Dockerfile рдЯрдкреНрдкреЗ](#dockerfile-stages) - [рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд▓](#critical-environment-variables) - [Caddy (HTTPS) рд╕рд╣ Docker Compose](#docker-compose-with-caddy-https-auto-tls) - [Cloudflare рдЭрдЯрдкрдЯ рдЯрдиреЗрд▓](#cloudflare-quick-tunnel) - [рдЗрдореЗрдЬ рдЯреЕрдЧреНрд╕](#image-tags) - [рдЙрдкрд▓рдмреНрдзрддрд╛: рдбреАрдлреЙрд▓реНрдЯ SQLite рдПрдХрд▓-рдкреНрд░рддрд┐рдХреГрддреА рдЖрд╣реЗ](#availability-default-sqlite-is-single-replica) - [рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдиреЛрдВрджреА](#important-notes) --- ## рдЭрдЯрдкрдЯ рдЪрд╛рд▓рд╡рд╛ > **рдПрдХрд╛ рдЖрджреЗрд╢рд╛рдиреЗ рд╕реНрд╡рддрдГ рд╣реЛрд╕реНрдЯ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ?** > [рд╕реНрд╡рдпрдВ-рд╣реЛрд╕реНрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ](../getting-started/SELF_HOST_GUIDE.md) рдкрд╣рд╛ тАФ > `docker compose -f docker-compose.selfhost.yml up -d` (рдкреНрд░рдХрд╛рд╢рд┐рдд рдЗрдореЗрдЬ + > Redis, рдлрдХреНрдд рд▓реВрдкрдмреЕрдХ, рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд┐рд╡рдб рдирд╛рд╣реА). рдЦрд╛рд▓реАрд▓ рдЭрдЯрдкрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд > рдЖрдзреАрдкрд╛рд╕реВрди рдЗрддрд░рддреНрд░ Redis рдЪрд╛рд▓рд╡рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдПрдХрд▓-рдХрдВрдЯреЗрдирд░ рдорд╛рд░реНрдЧ рдЖрд╣реЗ. ```bash docker run -d \ --name omniroute \ --restart unless-stopped \ --stop-timeout 40 \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest ``` ## рдкрд░реНрдпрд╛рд╡рд░рдг рдлрд╛рдЗрд▓рд╕рд╣ ```bash # рдкреНрд░рдердо .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 ``` ## Docker Compose ```bash # рдмреЗрд╕ рдкреНрд░реЛрдлрд╛рдЗрд▓ (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 # рд╡реЗрдм рдкреНрд░реЛрдлрд╛рдЗрд▓ (рд╡реЗрдм-рд╕рддреНрд░ рдкреНрд░рджрд╛рддреНрдпрд╛рдВрд╕рд╛рдареА Chromium/Playwright) docker compose --profile web up -d # CLI + CLIProxyAPI рд╕рд╛рдЗрдбрдХрд╛рд░ рдПрдХрддреНрд░ рдХрд░рд╛ docker compose --profile cli --profile cliproxyapi up -d ``` ## рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрдлрд╛рдЗрд▓реНрд╕ 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](https://github.com/router-for-me/CLIProxyAPI) рд╕рд╛рдЗрдбрдХрд╛рд░ рдЪрд╛рд▓рд╡рд╛ | `docker compose --profile cliproxyapi up -d` | | `web` | `omniroute-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 рд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреЗ `omniroute setup-codex`, `setup-claude`, `config set ` рдЖрдгрд┐ рдбреЕрд╢рдмреЛрд░реНрдбрдЪреЗ **рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬрддрди рдХрд░рд╛** рдмрдЯрдг рд╣реЗ рд╕рд░реНрд╡ `~/.codex/*.config.toml` рд╕рд╛рд░рдЦреНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рд▓рд┐рд╣рд┐рддрд╛рдд. рддреНрдпрд╛ рдкрд╛рдердирд╛ рдлрдХреНрдд CLI рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЬреНрдпрд╛ рдорд╢реАрдирд╡рд░ рдЪрд╛рд▓рддреЗ рддрд┐рдереЗрдЪ рдЕрд░реНрде рдЕрд╕рддреЛ. рддреНрдпрд╛ рдХрдВрдЯреЗрдирд░рдЪреНрдпрд╛ рдЖрдд рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╕, рд▓реЗрдЦрди рдХрдВрдЯреЗрдирд░рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╣реЛрдордордзреНрдпреЗ (`/home/node` тАФ рдЗрдореЗрдЬ `USER node` рдореНрд╣рдгреВрди рдЪрд╛рд▓рддреЗ) рд╣реЛрддреЗ, рдЬрд┐рдереВрди рдХреЛрдгрддреЗрд╣реА рд╣реЛрд╕реНрдЯ CLI рдХрдзреАрд╣реА рддреЗ рд╡рд╛рдЪрдгрд╛рд░ рдирд╛рд╣реА рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рд╣реЛрддрд╛рдЪ рддреЗ рд╣рдЯрд╡рд▓реЗ рдЬрд╛рддреЗ. OmniRoute рд╣реЗ рдУрд│рдЦрддреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рддрд╛ рди рдпреЗрдгрд╛рд░реЗ рдпрд╢ рдиреЛрдВрджрд╡рдгреНрдпрд╛рдРрд╡рдЬреА рд╕реВрдЪрдирд╛рдВрд╕рд╣ рд▓реЗрдЦрдирд╛рд╕ рдирдХрд╛рд░ рджреЗрддреЗ: CLI `2` рд╕рд╣ рдмрдВрдж рд╣реЛрддреЗ рдЖрдгрд┐ API `containerEphemeralTarget: true` рд╕рд╣ `422` рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЗ. ### рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реА рдкрджреНрдзрдд: CLI рд╣реЛрд╕реНрдЯрд╡рд░ рдЖрдгрд┐ OmniRoute Docker рдордзреНрдпреЗ рдЪрд╛рд▓рд╡рд╛ рдХрдВрдЯреЗрдирд░ API рдкреБрд░рд╡рддреЛ; CLI рддреБрдордЪреА рд╣реЛрд╕реНрдЯ рд╕рд╛рдзрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рддреЗ. ```bash docker compose --profile base up -d npm install -g omniroute omniroute connect http://localhost:20128 # CLI рд▓рд╛ рдХрдВрдЯреЗрдирд░рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рд╛ omniroute setup-codex # рддреБрдордЪреНрдпрд╛ рд╣реЛрд╕реНрдЯрд╡рд░реАрд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ ~/.codex рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЗ ``` Codex, Claude Code, Cursor рдХрд┐рдВрд╡рд╛ рддрддреНрд╕рдо рд╕рд╛рдзрдиреЗ рддреБрдордЪреНрдпрд╛ рд▓реЕрдкрдЯреЙрдкрд╡рд░ рдЪрд╛рд▓рдд рдЕрд╕рддреАрд▓ рддреЗрд╡реНрд╣рд╛ рд╣рд╛ рдпреЛрдЧреНрдп рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ тАФ рдЖрдгрд┐ рд╣реАрдЪ рдиреЗрд╣рдореАрдЪреА рдорд╛рдВрдбрдгреА рдЕрд╕рддреЗ. ### рдкрд░реНрдпрд╛рдп: рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдбрд┐рд░реЗрдХреНрдЯрд░реА bind-mount рдХрд░рд╛ (`host` рдкреНрд░реЛрдлрд╛рдЗрд▓) рдХрдВрдЯреЗрдирд░рдиреЗрдЪ рддреБрдордЪреЗ рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд┐рд╣рд╛рд╡реЗ рдЕрд╕реЗ рд╡рд╛рдЯрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдбрд┐рд░реЗрдХреНрдЯрд░реА рдорд╛рдЙрдВрдЯ рдХрд░рд╛ рдЖрдгрд┐ `CLI_CONFIG_HOME` рд▓рд╛ рдорд╛рдЙрдВрдЯ рд░реВрдЯрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рд╛. `host` рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗ рдЖрдзреАрдЪ рдХрд░рддреЗ: ```yaml environment: - CLI_CONFIG_HOME=/host-home - CLI_ALLOW_CONFIG_WRITES=true volumes: - ~/.codex:/host-home/.codex:rw - ~/.claude:/host-home/.claude:rw ``` bind mount рдореБрд│реЗрдЪ рдкрд╛рде рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдмрдирддреЛ: OmniRoute `/proc/self/mountinfo` рд╡рд╛рдЪрддреЗ рдЖрдгрд┐ рдорд╛рдЙрдВрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрд╛рдерд╡рд░ (рддрд╕реЗрдЪ рдЬреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдВрдЪреА рдЪрд╛рдЗрд▓реНрдб рдбрд┐рд░реЗрдХреНрдЯрд░реА рдорд╛рдЙрдВрдЯ рдЖрд╣реЗрдд рддреНрдпрд╛рдВрд╡рд░, рдЬреЗ рд╡рд░реАрд▓ `/host-home` рдЪреНрдпрд╛ рд░рдЪрдиреЗрд╕ рддрдВрддреЛрддрдВрдд рд▓рд╛рдЧреВ рд╣реЛрддреЗ) рд▓реЗрдЦрди рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рддрд╕реЗрдЪ рдорд╛рдЙрдВрдЯ рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрд╛рдердирд╛ рдирдХрд╛рд░ рджреЗрдгреЗ рд╕реБрд░реВ рдареЗрд╡рддреЗ. ### рдкрд░реНрдпрд╛рдпреА рдорд╛рд░реНрдЧ: рдХрдВрдЯреЗрдирд░рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ CLI рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛ (рдЬрдкреВрди рд╡рд╛рдкрд░рд╛) CLI рдЦрд░реЛрдЦрд░рдЪ рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдЕрд╕рддреАрд▓ (`cli` рдкреНрд░реЛрдлрд╛рдЗрд▓), рддреЗрд╡реНрд╣рд╛ рд▓реЗрдЦрди рд╣реЗрддреБрдкреБрд░рд╕реНрд╕рд░ рдЕрд╕рддреЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА `setup-*` рдХрдорд╛рдВрдбрд▓рд╛ `--allow-container-write` рджреНрдпрд╛ рдХрд┐рдВрд╡рд╛ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true` рд╕реЗрдЯ рдХрд░рд╛. рд╣реЗ рд▓реЗрдЦрди рдХрдВрдЯреЗрдирд░рдирдВрддрд░ рдЯрд┐рдХрдгрд╛рд░ рдирд╛рд╣реА, рдЕрд╢рд╛ рдЗрд╢рд╛рд▒реНрдпрд╛рд╕рд╣ рдкреБрдвреЗ рдЬрд╛рддреЗ. > **рд╕реБрд░рдХреНрд╖рд╛ рдЗрд╢рд╛рд░рд╛ тАФ `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓ + `docker.sock` рдорд╛рдЙрдВрдЯ.** > рдХрдВрдЯреЗрдирд░рдордзреАрд▓ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЕрдкрдбреЗрдЯрд░рд▓рд╛ рд╣реЛрд╕реНрдЯ daemon рд╡рд░реВрди рд╕реНрдЯреЕрдХ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рддрд╛ рдпрд╛рд╡рд╛ рдореНрд╣рдгреВрди > `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓ `/var/run/docker.sock` bind-mount рдХрд░рддреЗ > (`src/lib/system/autoUpdate.ts` рддреНрдпрд╛ socket рдЪреА рддрдкрд╛рд╕рдгреА рдХрд░рддреЗ рдЖрдгрд┐ рддреЛ > рдЕрдиреБрдкрд╕реНрдерд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕ Docker рдкрд╛рде рд╡рдЧрд│рддреЗ). рддреЛ socket рд╣реА **рд╣реЛрд╕реНрдЯ-root рд╡рд┐рд╢реНрд╡рд╛рд╕ > рд╕реАрдорд╛** рдЖрд╣реЗ: рддреНрдпрд╛рдЪреНрдпрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрдгрд╛рд░реА рдХреЛрдгрддреАрд╣реА рдЧреЛрд╖реНрдЯ рд╣реЛрд╕реНрдЯ Docker daemon рд▓рд╛ > root рдореНрд╣рдгреВрди рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ тАФ рддреА рд╣реЛрд╕реНрдЯрд╡рд░реАрд▓ рдХреЛрдгрддрд╛рд╣реА рдХрдВрдЯреЗрдирд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЗ, рддрдкрд╛рд╕реВ рд╢рдХрддреЗ, рдерд╛рдВрдмрд╡реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдХрд╛рдвреВрди рдЯрд╛рдХреВ рд╢рдХрддреЗ. > рдкрд░рд┐рдгрд╛рдо: > > 1. **`cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рдЪреЗ port рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рдХрдзреАрд╣реА рдЙрдШрдбреЗ рдХрд░реВ рдирдХрд╛.** рддреЗ > `127.0.0.1` рд╡рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рд╛ (`ports: "127.0.0.1:${DASHBOARD_PORT:-20128}:..."`) > тАФ LAN рд╡рд░реВрди рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдгрд╛рд░реЗ `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓ рдбреЕрд╢рдмреЛрд░реНрдб-рд╕реНрддрд░реАрдп рдХреЛрдгрддреНрдпрд╛рд╣реА RCE рдЪреЗ > рд╕рдВрдкреВрд░реНрдг рд╣реЛрд╕реНрдЯ рддрд╛рдмреНрдпрд╛рдд рдШреЗрдгреНрдпрд╛рдд рд░реВрдкрд╛рдВрддрд░ рдХрд░рддреЗ. > 2. **`cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрд╕реНрдЯ рдбрд┐рд░реЗрдХреНрдЯрд░реА bind рдХрд░реВ рдирдХрд╛.** > Docker socket рд╕реЛрдмрдд рдХреЛрдгрддреЗрд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд mount рджрд┐рд▓реНрдпрд╛рд╕ рдХрдВрдЯреЗрдирд░рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдЖрдгрд┐ > рд╣реЛрд╕реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╡рд░ рдкреВрд░реНрдг рд╡рд╛рдЪрди/рд▓реЗрдЦрди рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рддреЛ. рдПрдЦрд╛рджреНрдпрд╛ рд╕рд╛рдзрдирд╛рд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, > рддреЗ CLI binary рд╕рд╣ рд╕реНрдерд╛рдирд┐рдХрд░реАрддреНрдпрд╛ рдЪрд╛рд▓рд╡рд╛ тАФ рддреЗ `cli` рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ > рдорд╛рдЙрдВрдЯ рдХрд░реВ рдирдХрд╛. > > рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдВрдЯреЗрдирд░рдордзреАрд▓ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдЕрдкрдбреЗрдЯрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╕рд▓реНрдпрд╛рд╕, `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓ рдмрдВрдж рдареЗрд╡рд╛ > (`COMPOSE_PROFILES=core,redis` рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рд╣реВрди рд▓рд╣рд╛рди). рдЗрддрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ > Docker socket рдорд╛рдЙрдВрдЯ рдХрд░рдд рдирд╛рд╣реАрдд. > > MITM рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдзреЛрдХрд╛ рдореЙрдбреЗрд▓ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА `docs/security/MITM-TPROXY-DECRYPT.md` (git рдордзреНрдпреЗ; `/docs` рдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА) рдкрд╣рд╛ > рдЖрдгрд┐ `codex`/`claude-code`/`droid`/`openclaw` binary рдЙрдЧрдо-рд╕рд╛рдЦрд│реАрд╕рд╛рдареА > `docs/security/SUPPLY_CHAIN.md` рдкрд╣рд╛. ## Redis рд╕рд╛рдЗрдбрдХрд╛рд░ 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` (10s рдЕрдВрддрд░рд╛рдиреЗ) | рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд▓: - `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:` рд╕реЗрд╡рд╛ рдмреНрд▓реЙрдХ рдХрд╛рдвреВрди рдЯрд╛рдХрд╛/рдЯрд┐рдкреНрдкрдгреАрдмрджреНрдз рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ рддрд┐рдЪреЗ рдкреНрд░рдорд╛рдг рд╢реВрдиреНрдпрд╛рд╡рд░ рдЖрдгрд╛: ```bash docker compose up -d --scale redis=0 ``` ## рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА Compose рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕реЛрдмрдд рд╕реНрд╡рддрдВрддреНрд░ рдЙрддреНрдкрд╛рджрди рд╕реНрдиреЕрдкрд╢реЙрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА `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 рдЪреНрдпрд╛ рдЖрд░реЛрдЧреНрдпрд╛рдиреБрд╕рд╛рд░ рдорд░реНрдпрд╛рджрд┐рдд рдХреЗрд▓реЗрд▓реЗ | рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд: ```bash # рдЙрддреНрдкрд╛рджрди рд╕реНрдЯреЕрдХ рдмрд┐рд▓реНрдб рдХрд░рд╛ рдЖрдгрд┐ рд╕реБрд░реВ рдХрд░рд╛ 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 (`Dockerfile`) рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдЪрд╛рд░ рдЯрдкреНрдкреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд; рддреБрдордЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд╕рд╛рдареА рдпреЛрдЧреНрдп `target` рдирд┐рд╡рдбрд╛. | рдЯрдкреНрдкрд╛ | рдореВрд│ рдЗрдореЗрдЬ | рдЙрджреНрджреЗрд╢ | | ------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `builder` | `node:26-trixie-slim` | рдЕрд╡рд▓рдВрдмрдиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ (`npm ci --legacy-peer-deps`) рдЖрдгрд┐ `npm run build` рдЪрд╛рд▓рд╡рддреЛ (рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ Turbopack тАФ рдЦрд╛рд▓реАрд▓ рдмрд┐рд▓реНрдб-рд╡реЗрд│ рд╕рдВрд╕рд╛рдзрдиреЗ рдкрд╛рд╣рд╛) | | `runner-base` | `node:26-trixie-slim` | Next.js рдЪреНрдпрд╛ рд╕реНрд╡рддрдВрддреНрд░ рдЖрдЙрдЯрдкреБрдЯрд╕рд╣ рдЙрддреНрдкрд╛рджрди рд░рдирдЯрд╛рдЗрдо. **рдХреЛрдгрддреЗрд╣реА рдкреНрд░рджрд╛рддрд╛ CLI рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╛рд╣реАрдд.** | | `runner-cli` | `runner-base` | `git`, `docker.io`, `docker-compose` рдЖрдгрд┐ рдЧреНрд▓реЛрдмрд▓ CLI рдЬреЛрдбрддреЛ: `@openai/codex`, `@anthropic-ai/claude-code`, `droid`, `openclaw`. **рдПрдЬрдВрдЯрд┐рдХ рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╛рдВрд╕рд╛рдареА рд╣рд╛ рдирд┐рд╡рдбрд╛.** | | `runner-web` | `runner-base` | рд╡реЗрдм-рд╕рддреНрд░ рдкреНрд░рджрд╛рддреНрдпрд╛рдВрд╕рд╛рдареА Playwright + Chromium рдмреНрд░рд╛рдЙрдЭрд░ (`--with-deps`) рдЬреЛрдбрддреЛ: `gemini-web`, `claude-web`, `claude-turnstile`. **рд╣реЗ рдкреНрд░рджрд╛рддреЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕ рд╣рд╛ рдирд┐рд╡рдбрд╛** тАФ рдпрд╛рд╢рд┐рд╡рд╛рдп рд╕рд╛рдзреА рдЗрдореЗрдЬ рд╡рд┐рдирдВрддреАрдЪреНрдпрд╛ рд╡реЗрд│реА рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрддреЗ (рдкреНрд░рдХрд╛рд╢рди рдЪреЕрдиреЗрд▓реНрд╕рдЦрд╛рд▓реАрд▓ `-web` рдЯреАрдк рдкрд╛рд╣рд╛). | рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рд╕реНрд╡рд╣рд╕реНрддреЗ рдмрд┐рд▓реНрдб рдХрд░рд╛: ```bash docker build --target runner-base -t omniroute:base . docker build --target runner-cli -t omniroute:cli . docker build --target runner-web -t omniroute:web . ``` ### рдмрд┐рд▓реНрдб-рд╡реЗрд│ рд╕рдВрд╕рд╛рдзрдиреЗ рддреАрди рдмрд┐рд▓реНрдб рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ `builder` рдЯрдкреНрдкреНрдпрд╛рдЪрд╛ рд╕рдВрд╕рд╛рдзрди-рд╡рд╛рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛рдд. рддреЗ рдХреЗрд╡рд│ рдмрд┐рд▓реНрдбрдЪреНрдпрд╛ рд╡реЗрд│реА рд▓рд╛рдЧреВ рд╣реЛрддрд╛рдд тАФ `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 рдкреБрдирд░реБрддреНрдкрд╛рджрдирд╛рдд (рд╕рдорд╕реНрдпрд╛ #7518) `NODE_OPTIONS` рд╣реАрдк рдлреНрд▓реЕрдЧрдкрд╛рд╕реВрди рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рдЪрд╛ рдХрдорд╛рд▓ RSS ~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 рдХрд┐рд▓рд░рдХрдбреВрди SIGKILL рдХреЗрд▓рд╛ рдЬрд╛рддреЛ тАФ рддреЛ `Creating an optimized production build` рдЪреНрдпрд╛ рдордзреНрдпрд╛рддрдЪ рдерд╛рдВрдмрддреЛ, рддреНрдпрд╛рдореБрд│реЗ рдореЗрдорд░реА рд╕рдВрдкрд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ рд╡рд╛рдЯрдгреНрдпрд╛рдРрд╡рдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдбрдХрд▓реНрдпрд╛рд╕рд╛рд░рдЦреА рджрд┐рд╕рддреЗ. рдмрд┐рд▓реНрдб рд╣реЛрд╕реНрдЯрд╡рд░ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рдорд░реНрдпрд╛рджрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рдмрдВрдбрд▓рд░ рдмрджрд▓рд╛: ```bash docker build --target runner-base \ --build-arg OMNIROUTE_USE_TURBOPACK=0 \ -t omniroute:base . ``` `webpackBuildWorker` рд╕рдХреНрд╖рдо рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ `next build` рдПрдХ рдореВрд│ **рдЖрдгрд┐** рдПрдХ рд╡рд░реНрдХрд░ рдкреНрд░реЛрд╕реЗрд╕ рдЪрд╛рд▓рд╡рддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ `OMNIROUTE_BUILD_MEMORY_MB` рдЪреЗ рдкрд╛рд▓рди рдХрд░рддреЗ. рдХрдВрдЯреЗрдирд░рдЪреА рдорд░реНрдпрд╛рджрд╛ рддреНрдпрд╛ рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рдПрдХрдкрдЯ рдирд╡реНрд╣реЗ, рддрд░ рд╕рд╛рдзрд╛рд░рдг рджреБрдкреНрдкрдЯ рдореВрд▓реНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдареЗрд╡рд╛. рдпрд╛ рдЯреНрд░реАрд╡рд░ рдореЛрдЬрд▓реЗрд▓реЗ рдкрд░рд┐рдгрд╛рдо (`--target runner-base`, `OMNIROUTE_BUILD_MEMORY_MB=6144`): | рдмрдВрдбрд▓рд░ | рдХрдВрдЯреЗрдирд░рдЪреА рдорд░реНрдпрд╛рджрд╛ | рдкрд░рд┐рдгрд╛рдо | | --------- | ---------------- | ------------------------------------------------- | | Turbopack | 8 GiB / 16 GiB | рджреЛрдиреНрд╣реА рдорд░реНрдпрд╛рджрд╛рдВрд╡рд░ рдХреЛрдгрддрд╛рд╣реА рд╕рдВрджреЗрд╢ рди рджреЗрддрд╛ OOM-killed | | webpack | 8 GiB | рдмрд┐рд▓реНрдб рд╡рд░реНрдХрд░ SIGKILLed рдЭрд╛рд▓рд╛ | | webpack | 12 GiB | рдпрд╢рд╕реНрд╡реА; рдХрдорд╛рд▓ рд╡рд╛рдкрд░ 11.1 GiB | ### рд░рдирдЯрд╛рдЗрдо рдбреАрдлреЙрд▓реНрдЯреНрд╕ `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` рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. - рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ standalone launcher рджреНрд╡рд╛рд░реЗ рд╕реБрд░реВ рдХреЗрд▓реА рдЬрд╛рддреЗ; рддреЛ `OMNIROUTE_MEMORY_MB` рд╡рд╛рдЪрддреЛ рдЖрдгрд┐ `--max-old-space-size=` рдЬреЛрдбрддреЛ. - рд╡рд╛рд░рдВрд╡рд╛рд░ рджрд┐рд▓реЗрд▓реНрдпрд╛ `--max-old-space-size` рдореВрд▓реНрдпрд╛рдВрдкреИрдХреА рд╢реЗрд╡рдЯрдЪреЗ рдореВрд▓реНрдп Node рд╡рд╛рдкрд░рддреЛ, рддреНрдпрд╛рдореБрд│реЗ `OMNIROUTE_MEMORY_MB` рд╕реЗрдЯ рдХреЗрд▓реНрдпрд╛рдиреЗ рдкреНрд░рднрд╛рд╡реА Docker heap рдорд░реНрдпрд╛рджрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ. - рдЗрдореЗрдЬ рдиреЗрд╣рдореАрдЪ рддреЗ рд╕реЗрдЯ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, Docker рдЕрдВрддрд░реНрдЧрдд launcher рдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ RAM-рдХреЕрд▓рд┐рдмреНрд░реЗрдЯреЗрдб fallback рдХрдзреАрд╣реА рд▓рд╛рдЧреВ рд╣реЛрдд рдирд╛рд╣реА. рдХрд╛рд░реНрдпрднрд╛рд░рд╛рд╕рд╛рдареА рддреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╡рд╛рдврд╡рд╛ (рдЦрд╛рд▓реАрд▓ рддрдХреНрддрд╛). coding-agent `/v1/responses` рд╕рд╛рдареА `2048` рдЕрдЬреВрдирд╣реА рдЦреВрдк рдХрдореА рдЖрд╣реЗ. ### рдХреЛрдбрд┐рдВрдЧ рдПрдЬрдВрдЯреНрд╕рд╕рд╛рдареА рд░рдирдЯрд╛рдЗрдо RAM 1тАпGiB рдЪреА Docker рдбреАрдлреЙрд▓реНрдЯ рдорд░реНрдпрд╛рджрд╛ рд╣реА dashboard/рд╣рд▓рдХреЗ-chat рдпрд╛рдВрд╕рд╛рдареАрдЪреА рдХрд┐рдорд╛рди рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗ, production рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ рдирд╛рд╣реА. рдореЛрдареНрдпрд╛ `POST /v1/responses` bodies (рд╢реЗрдХрдбреЛ messages, рдЕрдиреЗрдХ tools) compression рджрд░рдореНрдпрд╛рди рдЕрдиреЗрдХ in-memory graphs рд░рд╛рдЦреВрди рдареЗрд╡рддрд╛рдд. рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рд╕реБрдорд╛рд░реЗ 3тАпMiB / рд╕реБрдорд╛рд░реЗ 750k-token рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рджреЛрди requests рдореБрд│реЗ **12тАпGiB** old-space рд╡рд░ V8 рдмрдВрдж рдкрдбрд▓реЗ рдЖрд╣реЗ (`FATAL ERROR: Reached heap limit`) рдЖрдгрд┐ 16тАпGiB cgroup OOM рджреЗрдЦреАрд▓ рдЭрд╛рд▓реЗ рдЖрд╣реЗ. [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) рдкрд╣рд╛. **cgroup `--memory` рдЪрд╛ рдЖрдХрд╛рд░ heap рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдареЗрд╡рд╛** тАФ native buffers, SQLite рдЖрдгрд┐ compression intermediates рд╣реЗ V8 рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдЕрд╕рддрд╛рдд. | рдХрд╛рд░реНрдпрднрд╛рд░ | `OMNIROUTE_MEMORY_MB` | Container / cgroup | рдиреЛрдВрджреА | | --------------------------------------- | ------------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | | Dashboard, рдПрдХ рд╣рд▓рдХреЗ chat | `1024` (рдЗрдореЗрдЬ рдбреАрдлреЙрд▓реНрдЯ) | тЙе2тАпGiB | | | рдПрдХ coding agent (Claude/Codex/Grok) | `8192` | тЙе10тАпGiB | рд╕рд╛рдорд╛рдиреНрдп single-session `/v1/responses` | | рдПрдХрд╛рдЪ рд╡реЗрд│реА рджреЛрди рджреАрд░реНрдШ `/v1/responses` | `10240`тАУ`12288` | тЙе12тАУ16тАпGiB | рд╕реБрдорд╛рд░реЗ 12тАпGiB heap рд╡рд░ V8 рдмрдВрдж рдкрдбрд▓реНрдпрд╛рдЪреЗ рдореЛрдЬрд▓реЗ рдЧреЗрд▓реЗ | | рдПрдХрд╛рдЪ рд╡реЗрд│реА рддреАрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рджреАрд░реНрдШ contexts | рдПрдХрд╛ process рд╡рд░ рдЪрд╛рд▓рд╡реВ рдирдХрд╛ | рдХреНрд░рдорд╛рдиреЗ рдЪрд╛рд▓рд╡рд╛ / рдЕрдзрд┐рдХ RAM | рдбреАрдлреЙрд▓реНрдЯ heavyweight admission рдордзреНрдпреЗ 1 in-flight request рдЕрдиреБрдордд рдЖрд╣реЗ; RAM рди рд╡рд╛рдврд╡рддрд╛ рд╣реА рдорд░реНрдпрд╛рджрд╛ рд╡рд╛рдврд╡рд▓реНрдпрд╛рд╕ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдВрдж рдкрдбреЗрд▓ | bare metal рд╡рд░ `omniroute serve`, `OMNIROUTE_MEMORY_MB` **рд╕реЗрдЯ рдирд╕рддрд╛рдирд╛**, RAM рдЪреНрдпрд╛ рд╕реБрдорд╛рд░реЗ 35% рд╡рд░ рдХреЕрд▓рд┐рдмреНрд░реЗрдЯ рд╣реЛрддреЗ (`[512, 4096]` рдордзреНрдпреЗ рдорд░реНрдпрд╛рджрд┐рдд). Docker рдиреЗрд╣рдореА `1024` рд╕реЗрдЯ рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЕрдзрд┐рдХреГрдд рдЗрдореЗрдЬрдордзреНрдпреЗ рд╣реЗ рдХреЕрд▓рд┐рдмреНрд░реЗрд╢рди рдХрдзреАрд╣реА рдЪрд╛рд▓рдд рдирд╛рд╣реА. ```bash 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](../reference/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` | рд╕реНрд╡рдпрдВ-рдЕрджреНрдпрддрди рдХрд╛рд░реНрдпрдкреНрд░рд╡рд╛рд╣рд╛рдВрд╕рд╛рдареА `/workspace/omniroute` рдпреЗрдереЗ `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ рдорд╛рдЙрдВрдЯ рдХреЗрд▓реЗрд▓рд╛ рд╣реЛрд╕реНрдЯ рдкрде | `.` (рд╕рдзреНрдпрд╛рдЪреА рдбрд┐рд░реЗрдХреНрдЯрд░реА) | | `OMNIROUTE_MEMORY_MB` | Docker рд╕реНрдЯрдБрдбрдЕрд▓реЛрди рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА рд░рдирдЯрд╛рдЗрдо Node рд╣реАрдкрдЪреА рдХрдорд╛рд▓ рдорд░реНрдпрд╛рджрд╛; рд╡рд░реАрд▓ рдЗрдореЗрдЬ рдбреАрдлреЙрд▓реНрдЯрд▓рд╛ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рддреЗ. рдХреЛрдбрд┐рдВрдЧ рдПрдЬрдВрдЯ: `8192`+ ([рд░рдирдЯрд╛рдЗрдо RAM](#runtime-ram-for-coding-agents) рдкрд╣рд╛). | `1024` | | `DASHBOARD_PORT` / `API_PORT` | рдбреЕрд╢рдмреЛрд░реНрдб (20128) рдЖрдгрд┐ API (20129) рд╕рд╛рдареА рдЙрдШрдбреЗ рдХреЗрд▓реЗрд▓реЗ рдкреЛрд░реНрдЯ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рддреЗ | `20128` / `20129` | | `APP_BIND_HOST` | docker-compose рдЬреНрдпрд╛ рд╣реЛрд╕реНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдбреЕрд╢рдмреЛрд░реНрдб/API/live-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` | рд░рдирдЯрд╛рдЗрдо рдкреНрд▓рдЧрдЗрди рд╕реНрдХреЕрдирд░ рдЬреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреВрди рд╡рд╛рдЪрддреЛ рдЖрдгрд┐ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЛ рддреА рдбрд┐рд░реЗрдХреНрдЯрд░реА. рдкреНрд▓рдЧрдЗрди bind-mounted рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдирд╛ рд╣реЗ рд╕реЗрдЯ рдХрд░рд╛: рдбреАрдлреЙрд▓реНрдЯ `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) 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 рдХреЗрд╡рд│ `assetPrefix` рд╡рд░реВрди SSR рдЕреЕрд╕реЗрдЯ URL рд░реЗрдВрдбрд░ рдХрд░рддреЗ тАФ рдкреЕрдЪрд░ рддреНрдпрд╛рддрд╣реА рдЙрдкрдкрде рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддреЛ), рдмрд┐рд▓реНрдбрд╡реЗрд│реА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реЗ `/_next/static` рдЕреЕрд╕реЗрдЯ URL (рдХреНрд▓рд╛рдпрдВрдЯ-рд░реЗрдлрд░рдиреНрд╕ рдореЕрдирд┐рдлреЗрд╕реНрдЯ, рдореАрдбрд┐рдпрд╛ рдЗрдореНрдкреЛрд░реНрдЯреНрд╕, рдкреНрд░реАрд░реЗрдВрдбрд░ рдХреЗрд▓реЗрд▓реА рддреНрд░реБрдЯреА рдкреГрд╖реНрдареЗ) рдЖрдгрд┐ рдХреНрд▓рд╛рдпрдВрдЯ `process.env` рд╢рд┐рдо рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рддреЛ. ### Compose рдмрд┐рд▓реНрдб (рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ) `.env` рдордзреНрдпреЗ рджреЛрдиреНрд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╕реЗрдЯ рдХрд░рд╛, рддреНрдпрд╛рдирдВрддрд░ рдЗрдореЗрдЬ рдЖрдгрд┐ рд░рдирдЯрд╛рдЗрдо рдЬреБрд│рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдиреНрд╣рд╛ рдмрд┐рд▓реНрдб рдХрд░рд╛: ```bash # .env OMNIROUTE_BASE_PATH=/omniroute NEXT_PUBLIC_BASE_URL=https://myhostname.example.com/omniroute ``` ```bash docker compose --profile base up -d --build ``` `docker-compose.yml`, `OMNIROUTE_BASE_PATH` рд▓рд╛ Docker рдмрд┐рд▓реНрдб рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдореНрд╣рдгреВрди рдЖрдгрд┐ рд░рдирдЯрд╛рдЗрдо рдПрдиреНрд╡реНрд╣рд╛рдпрд░реНрдирдореЗрдВрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореНрд╣рдгреВрди рдлреЙрд░рд╡рд░реНрдб рдХрд░рддреЗ. ### рдЖрдзреАрдЪ рдмрд┐рд▓реНрдб рдХреЗрд▓реЗрд▓реА рд░реВрдЯ рдЗрдореЗрдЬ + рд░рдирдЯрд╛рдЗрдо рдЙрдкрдкрде рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ `diegosouzapw/omniroute:*` рдЗрдореЗрдЬреЗрд╕ рдбреЛрдореЗрди рд░реВрдЯрд╕рд╛рдареА рдмрд┐рд▓реНрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рддрд░реАрд╣реА рддреБрдореНрд╣реА рд░рдирдЯрд╛рдЗрдорд╡реЗрд│реА `OMNIROUTE_BASE_PATH` рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛; рдХрдВрдЯреЗрдирд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрд╡реЗрд│реА рдмрдВрдбрд▓ рдПрдХрджрд╛ рдкреЕрдЪ рдХрд░рддреЛ. рддреНрдпрд╛рд╕ рдЬреБрд│рдгрд╛рд▒реНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд░рд┐рдЬрд┐рдирд╕рд╣ рд╡рд╛рдкрд░рд╛: ```yaml 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 рдЗрддреНрдпрд╛рджреА): | рдкреНрд░реЛрдм | рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреНрдпрд╛ | рдЯрд╛рд│рд╛ | | ----------------- | ---------------------------------------------------------------------- | -------------------------------------------------------- | | рд▓рд╛рдЗрд╡реНрд╣рдиреЗрд╕ | HTTP `GET /livez`, рдХрд┐рдВрд╡рд╛ рдореБрдЦреНрдп рдкреЛрд░реНрдЯрд╡рд░реАрд▓ TCP (`PORT`, рдбреАрдлреЙрд▓реНрдЯ `20128`) | рд▓рд╛рдЗрд╡реНрд╣рдиреЗрд╕ рдореНрд╣рдгреВрди `/api/monitoring/health` | | рд░реЗрдбреАрдиреЗрд╕ | HTTP `GET /healthz` | рдЗрд╡реНрд╣реЗрдВрдЯ-рд▓реВрдк рд╡реНрдпрд╕реНрдд рдЕрд╕рдгреНрдпрд╛рд▓рд╛ рдмрдВрдж рдкрдбрдгреЗ рдорд╛рдирдгрд╛рд░реЗ рдХрдореА рдЯрд╛рдЗрдордЖрдЙрдЯ | | рд╕рдЦреЛрд▓ / рдмреНрд▓реЕрдХрдмреЙрдХреНрд╕ | `/api/monitoring/health` | тАФ | `/healthz` рдкреНрд░реЛрд╕реЗрд╕ рд▓рд╛рдЗрдлрд╕рд╛рдпрдХрд▓ (`ok` / `starting` / `stopping`) рдХрд│рд╡рддреЛ. `/livez` рдХреЗрд╡рд│ рдкреНрд░реЛрд╕реЗрд╕ рдЪрд╛рд▓реВ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рддреЛ (рд╣рдБрдбрд▓рд░ рдЪрд╛рд▓реВ рд╢рдХрдд рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдиреЗрд╣рдореА 200; рддреЛ рд░реЗрдбреАрдиреЗрд╕рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдд рдирд╛рд╣реА). рджреЛрдиреНрд╣реАрд╣реА рд╡рд┐рдирдВрддреА рд╣рд╛рддрд╛рд│рдгреАрдкреНрд░рдорд╛рдгреЗ рддреНрдпрд╛рдЪ Node рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдкрд╡рд░ рдЪрд╛рд▓рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ CPU-рдмрд╛рдЙрдВрдб рдХреЕрдЯрд▓реЙрдЧ рдХрд┐рдВрд╡рд╛ рдХреЙрдореНрдкреНрд░реЗрд╢рди рдХрд╛рдорд╛рдореБрд│реЗ рддреНрдпрд╛рдВрдирд╛ рд╡рд┐рд▓рдВрдм рд╣реЛрдК рд╢рдХрддреЛ тАФ рд╡реНрдпрд╕реНрдд тЙа рдмрдВрдж. HTTP рдкреНрд░реЛрдмреНрд╕ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рд╕ TCP рд▓рд╛рдЗрд╡реНрд╣рдиреЗрд╕рд▓рд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреНрдпрд╛. рдкреНрд░реЛрдмреНрд╕рд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рди: [рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ тАФ Kubernetes рдкреНрд░реЛрдм рд╢рд┐рдлрд╛рд░рд╕реА](../ops/MONITORING_GUIDE.md#kubernetes-probe-recommendations). ## Caddy рд╕рд╣ Docker Compose (HTTPS Auto-TLS) Caddy рдЪреНрдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд SSL рдкреНрд░реЛрд╡реНрд╣рд┐рдЬрдирд┐рдВрдЧрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди OmniRoute рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рдЙрдкрд▓рдмреНрдз рдХрд░рддрд╛ рдпреЗрддреЗ. рдЖрдкрд▓реНрдпрд╛ рдбреЛрдореЗрдирдЪрд╛ DNS A рд░реЗрдХреЙрд░реНрдб рдЖрдкрд▓реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ IP рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛. ```yaml 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_TRUST_PROXY` рд╕рдХреНрд╖рдо рдХрд░рд╛ рдЬрд┐рдереЗ рд╕реНрдкрд╖реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдРрд╡рдЬреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдлреЙрд░рд╡рд░реНрдбреЗрдб рд╣реЗрдбрд░рдордзреВрди OmniRoute рдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд░рд┐рдЬрд┐рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рд╛рд╡реЗ рдЕрд╕реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗрддреБрдкреБрд░рд╕реНрд╕рд░ рд╡рд╛рдЯрддреЗ. ## Cloudflare Quick Tunnel Docker рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╛рдареА рдбреЕрд╢рдмреЛрд░реНрдб рд╕рдорд░реНрдердирд╛рдордзреНрдпреЗ `Dashboard тЖТ Endpoints` рд╡рд░ рдПрдХрд╛ рдХреНрд▓рд┐рдХрдордзреНрдпреЗ рд╡рд╛рдкрд░рддрд╛ рдпреЗрдгрд╛рд░реЗ **Cloudflare Quick Tunnel** рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдкреНрд░рдердордЪ рд╕рдХреНрд╖рдо рдХреЗрд▓реНрдпрд╛рд╡рд░ рдХреЗрд╡рд│ рдЧрд░рдЬ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ `cloudflared` рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдкрд▓реНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ `/v1` рдПрдВрдбрдкреЙрдЗрдВрдЯрд╕рд╛рдареА рддрд╛рддреНрдкреБрд░рддрд╛ рдЯрдиреЗрд▓ рд╕реБрд░реВ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓рд╛ `https://*.trycloudflare.com/v1` URL рдЖрдкрд▓реНрдпрд╛ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ URL рдЪреНрдпрд╛ рдереЗрдЯ рдЦрд╛рд▓реА рджрд╛рдЦрд╡рд▓рд╛ рдЬрд╛рддреЛ. рд╕рдХреНрд░рд┐рдп рдЯрдиреЗрд▓рдЪреА рд╕реНрдерд┐рддреА рди рдмрджрд▓рддрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЯрдиреЗрд▓ рдкреЕрдиреЗрд▓ (Cloudflare, Tailscale, ngrok) `Settings тЖТ Appearance` рдордзреВрди рджрд╛рдЦрд╡рддрд╛ рдХрд┐рдВрд╡рд╛ рд▓рдкрд╡рддрд╛ рдпреЗрддрд╛рдд. ### рдЯрдиреЗрд▓рд╡рд┐рд╖рдпреА рдЯрд┐рдкрд╛ - Quick Tunnel URL рддрд╛рддреНрдкреБрд░рддреЗ рдЕрд╕рддрд╛рдд рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реАрд╕реНрдЯрд╛рд░реНрдЯрдирдВрддрд░ рдмрджрд▓рддрд╛рдд. - OmniRoute рдХрд┐рдВрд╡рд╛ рдХрдВрдЯреЗрдирд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ Quick Tunnel рдЖрдкреЛрдЖрдк рдкреВрд░реНрд╡рд╡рдд рд╣реЛрдд рдирд╛рд╣реАрдд. рдЧрд░рдЬ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдбреЕрд╢рдмреЛрд░реНрдбрдордзреВрди рддреЗ рдкреБрдиреНрд╣рд╛ рд╕рдХреНрд╖рдо рдХрд░рд╛. - рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕рдзреНрдпрд╛ Linux, macOS рдЖрдгрд┐ Windows рд╡рд░реАрд▓ `x64` / `arm64` рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ. - рдорд░реНрдпрд╛рджрд┐рдд рдХрдВрдЯреЗрдирд░ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреАрд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ QUIC UDP рдмрдлрд░ рдЪреЗрддрд╛рд╡рдгреНрдпрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд Quick Tunnel рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ 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` рджреНрдпрд╛. ### рд░рд┐рд▓реАрдЬ рдЪреЕрдиреЗрд▓ OmniRoute рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ, рд╕рдХреНрд░рд┐рдп рд░рд┐рд▓реАрдЬ-рдмреНрд░рдБрдЪ рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдмрд┐рд▓реНрдбрд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ Docker рдЪреЕрдиреЗрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЛ. | рдЪреЕрдиреЗрд▓ | рд╕реНрд░реЛрдд | рдмрджрд▓рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ | рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓рд╛ рд╡рд╛рдкрд░ | | ------------------------------- | ---------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- | | `:` / `:-web` | рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реЗ/рдЖрд╡реГрддреНрддреАрдмрджреНрдз рд░рд┐рд▓реАрдЬ | рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп | рдЕрдЪреВрдХ рд░рд┐рд▓реАрдЬ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгрд╛рд░реА рдкреНрд░реЙрдбрдХреНрд╢рди рдЙрдкрдпреЛрдЬрдиреЗ | | `:latest` / `:latest-web` | рд╕рд░реНрд╡реЛрдЪреНрдЪ **рдкреНрд░рдХрд╛рд╢рд┐рдд** рд╕реНрдерд┐рд░ SemVer | рдмрджрд▓рдгрд╛рд░рд╛ рд╕реНрдерд┐рд░ рдкреЙрдЗрдВрдЯрд░ | SemVer рдкреНрд░рдХрд╛рд╢рди рдЬреЙрдмрдирдВрддрд░ рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЛ тАФ `main` рдХрд┐рдВрд╡рд╛ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд `release/v*` рдХрдорд┐рдЯрдЪреЗ рдЕрдиреБрд╕рд░рдг **рдХрд░рдд рдирд╛рд╣реА** | | `:next` / `:next-web` | рд╕рдзреНрдпрд╛рдЪреА рдбреАрдлреЙрд▓реНрдЯ `release/v*` рдмреНрд░рдБрдЪ | рдмрджрд▓рдгрд╛рд░рд╛ рдкреНрд░реА-рд░рд┐рд▓реАрдЬ рдкреЙрдЗрдВрдЯрд░ | рд╕рдХреНрд░рд┐рдп рд░рд┐рд▓реАрдЬ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЭрд╛рд▓реЗрд▓реЗ, рдкрд░рдВрддреБ рдЕрджреНрдпрд╛рдк рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬрдордзреНрдпреЗ рдирд╕рд▓реЗрд▓реЗ рдирд┐рд░рд╛рдХрд░рдг рддрдкрд╛рд╕рдгреЗ | | `:main` / `:main-web` | `main` рдмреНрд░рдБрдЪ | рдмрджрд▓рдгрд╛рд░рд╛ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдкреЙрдЗрдВрдЯрд░ | рдХреЗрд╡рд│ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдЖрдгрд┐ рдЗрдВрдЯрд┐рдЧреНрд░реЗрд╢рди рдЪрд╛рдЪрдгреАрд╕рд╛рдареА | #### рд╡реЗрдм-рд╕реЗрд╢рди рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░: `-web` рдЗрдореЗрдЬ рд╡рд░реАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЪреЕрдиреЗрд▓рд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд `-web` рдЯреЕрдЧрд╣реА рдЕрд╕рддреЛ (`:latest-web`, `:-web`, `:next-web`, `:main-web`), рдЬреЛ `runner-web` рд╕реНрдЯреЗрдЬрдордзреВрди рдмрд┐рд▓реНрдб рдХреЗрд▓рд╛ рдЬрд╛рддреЛ тАФ рддреАрдЪ рдЗрдореЗрдЬ, рддрд╕реЗрдЪ Playwright рдЖрдгрд┐ Chromium рдмреНрд░рд╛рдЙрдЭрд░. рд╕рд╛рдзреНрдпрд╛ рдЗрдореЗрдЬрдордзреНрдпреЗ Chromium **рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╕рддреЛ**; `gemini-web`, `claude-web` рдЖрдгрд┐ `claude-turnstile` рдпрд╛рдВрдирд╛ рддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ. рдЕрдкрдпрд╢ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдЪреНрдпрд╛ рд╡реЗрд│реА рди рд╣реЛрддрд╛ рдирдВрддрд░ рдШрдбрддреЗ: рд╣реЗ рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдореЙрдбреЗрд▓рдЪреА рд╕реВрдЪреА рджрд╛рдЦрд╡рддрд╛рдд рдЖрдгрд┐ рдбреЕрд╢рдмреЛрд░реНрдбрдордзреНрдпреЗ рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реЗ рджрд┐рд╕рддрд╛рдд, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдкрд╣рд┐рд▓реА рд╡рд┐рдирдВрддреА рдЦрд╛рд▓реАрд▓ рддреНрд░реБрдЯреАрд╕рд╣ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрддреЗ ``` [500]: Failed to load external module playwright: Error: Cannot find module '/app/node_modules/playwright/node_modules/playwright-core/browsers.json' ``` рддреБрдореНрд╣реА рд╣реЗ рдкреНрд░реЛрд╡реНрд╣рд╛рдпрдбрд░ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рд╕рдзреНрдпрд╛ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЪреЕрдиреЗрд▓рдЪрд╛ `-web` рдЯреЕрдЧ рдкреБрд▓ рдХрд░рд╛ тАФ рдЗрддрд░ рдХрд╛рд╣реАрд╣реА рдмрджрд▓рдд рдирд╛рд╣реА. npm/CLI рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рдирдордзреНрдпреЗ (Docker рдЗрдореЗрдЬрд╢рд┐рд╡рд╛рдп), рдпрд╛рдЪрд╛ рд╕рдорддреБрд▓реНрдп рдЧрд╣рд╛рд│ рдШрдЯрдХ рдореНрд╣рдгрдЬреЗ рдмреНрд░рд╛рдЙрдЭрд░ рдмрд╛рдпрдирд░реА: рд╣реЛрд╕реНрдЯрд╡рд░ `npx playwright install chromium` рдЪрд╛рд▓рд╡рд╛. #### рдкреНрд░реА-рд░рд┐рд▓реАрдЬ рдЪреЕрдиреЗрд▓ рд╡рд╛рдкрд░рдгреЗ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдбреАрдлреЙрд▓реНрдЯ `release/v*` рдмреНрд░рдБрдЪрд╡рд░реАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╢рдирдВрддрд░ `next` рдЪреЕрдиреЗрд▓ рдкреБрдиреНрд╣рд╛ рдмрд┐рд▓реНрдб рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ AMD64 рд╡ ARM64 рджреЛрдиреНрд╣реАрдВрд╕рд╛рдареА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдЬреБрдиреНрдпрд╛ рдореЗрдВрдЯреЗрдирдиреНрд╕ рдмреНрд░рдБрдЪ рддреЗ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдЯ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд. рдкреБрдвреАрд▓ рд╕реНрдерд┐рд░ рдЯреЕрдЧ рддрдпрд╛рд░ рд╣реЛрдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╕рдХреНрд░рд┐рдп рд░рд┐рд▓реАрдЬ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдорд░реНрдЬ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдирд┐рд░рд╛рдХрд░рдгрд╛рдВрд╕рд╛рдареА рд╣реЗ рдЪреЕрдиреЗрд▓ рдкреБрд▓ рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реА рдЗрдореЗрдЬ рдкреБрд░рд╡рддреЗ. ```bash docker pull diegosouzapw/omniroute:next docker pull diegosouzapw/omniroute:next-web ``` Docker Compose рд╕рд╛рдареА, рдирд┐рд╡рдбрд▓реЗрд▓реНрдпрд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдгрд╛рд░рд╛ рдЗрдореЗрдЬ рдЯреЕрдЧ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рд╛, рддреНрдпрд╛рдирдВрддрд░ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдкреБрд▓ рдХрд░реВрди рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рд╛: ```yaml services: omniroute: image: diegosouzapw/omniroute:next ``` ```bash docker compose pull docker compose up -d ``` #### рд╕реБрд░рдХреНрд╖рд┐рддрддрд╛ рдЖрдгрд┐ рд░реЛрд▓рдмреЕрдХ `next` рд╣реЗ рдмрджрд▓рддреЗ рдкреНрд░реА-рд░рд┐рд▓реАрдЬ рдЪреЕрдиреЗрд▓ рдЖрд╣реЗ. рд╕рдХреНрд░рд┐рдп рд░рд┐рд▓реАрдЬ рдмреНрд░рдБрдЪрд╡рд░реАрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреБрд╢рдирдВрддрд░ рддреЗ рдмрджрд▓реВ рд╢рдХрддреЗ рдЖрдгрд┐ **рдкреНрд░реЙрдбрдХреНрд╢рди рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рд╕рдорд░реНрдерд┐рдд рдирд╛рд╣реА**. рдПрдЦрд╛рджреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдбрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди рдХрд░рддрд╛рдирд╛ рдЗрдореЗрдЬ рдбрд╛рдпрдЬреЗрд╕реНрдЯ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛: ```bash docker pull diegosouzapw/omniroute:next docker image inspect diegosouzapw/omniroute:next --format '{{index .RepoDigests 0}}' ``` рдЪрд╛рдЪрдгреАрдкреВрд░реНрд╡реА OmniRoute рдбреЗрдЯрд╛ рд╡реНрд╣реЙрд▓реНрдпреВрдо рдХрд┐рдВрд╡рд╛ рдмрд╛рдЗрдВрдб-рдорд╛рдЙрдВрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЪрд╛ рдмреЕрдХрдЕрдк рдШреНрдпрд╛. рд░реЛрд▓рдмреЕрдХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░рд▓реЗрд▓реА рд╕реНрдерд┐рд░ рдЖрд╡реГрддреНрддреА рдХрд┐рдВрд╡рд╛ рдбрд╛рдпрдЬреЗрд╕реНрдЯ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рд╛: ```bash docker pull diegosouzapw/omniroute: docker compose up -d ``` рд░рд┐рд▓реАрдЬ-рдмреНрд░рдБрдЪ рдмрд┐рд▓реНрдб рдХрдзреАрд╣реА `latest` рд╣рд▓рд╡реВ рд╢рдХрдд рдирд╛рд╣реА; рдХреЗрд╡рд│ рдкрд╛рддреНрд░ рд╕реНрдерд┐рд░ рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдЖрд╡реГрддреНрддреА рд╕реНрдерд┐рд░ рдкреЙрдЗрдВрдЯрд░рд▓рд╛ рдкреБрдвреЗ рдиреЗрдК рд╢рдХрддреЗ. `next` рдЗрдореЗрдЬрдордзреНрдпреЗ рд░рд┐рд▓реАрдЬ рдЗрдореЗрдЬ рддрдкрд╛рд╕рдгреА рдЖрдгрд┐ CRITICAL-рдЕрд╕реБрд░рдХреНрд╖рд╛ рдЖрдврд│рд▓реНрдпрд╛рд╕ рд░реЛрдЦрдгрд╛рд░реЗ рдЧреЗрдЯ рдХрд╛рдпрдо рдЕрд╕рддреЗ. **`latest` рд╣реЗ git рдЕрджреНрдпрдпрд╛рд╡рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рд╣рдореА рдирд╛рд╣реА.** `main` рдХрд┐рдВрд╡рд╛ рд╕рдХреНрд░рд┐рдп `release/v*` рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдорд░реНрдЬ рдХреЗрд▓реЗрд▓реА рдирд┐рд░рд╛рдХрд░рдгреЗ рд╕реНрдерд┐рд░ SemVer рдЗрдореЗрдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЖрдгрд┐ рдкреНрд░рдХрд╛рд╢рди рдЬреЙрдмрдиреЗ `:latest` рдкреБрдвреЗ рдиреЗрдИрдкрд░реНрдпрдВрдд `:latest` рдордзреНрдпреЗ **рдирд╕рддрд╛рдд** (рддреНрдпрд╛ SemVer рд╕рд╛рд░рдЦрд╛рдЪ рдбрд╛рдпрдЬреЗрд╕реНрдЯ). GitHub рд╡рд░ рдирд┐рд░рд╛рдХрд░рдг рдЖрдзреАрдЪ рджрд┐рд╕рдд рдЕрд╕рддрд╛рдирд╛ `latest` рдмрджрд▓рд▓реЗрд▓реЗ рджрд┐рд╕рдд рдирд╕рд▓реНрдпрд╛рд╕, рд░рд┐рд▓реАрдЬ рдмреНрд░рдБрдЪрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА `:next` рдкреБрд▓ рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ SemVer рдЯреЕрдЧрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛. | рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рдЖрд╣реЗ | рд╡рд╛рдкрд░рд╛ | | ------------------------------------------------------------------------------------ | ------------------------------------------ | | рдмрджрд▓ рд╣реЛрдК рдирдпреЗ рдЕрд╕реЗ GitOps / рдкреНрд░реЙрдбрдХреНрд╢рди | `:X.Y.Z` (рдХрд┐рдВрд╡рд╛ рдЗрдореЗрдЬ рдбрд╛рдпрдЬреЗрд╕реНрдЯ) рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛ | | рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬрд╡реЗрд│реА рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реНрд╡реАрдХрд╛рд░рдгреЗ | `:latest` | | рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд `release/v*` рдХрдорд┐рдЯрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ | `:next` (рдкреНрд░реЙрдбрдХреНрд╢рдирд╕рд╛рдареА рдирд╛рд╣реА) | | `main` рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ | `:main` (рдкреНрд░реЙрдбрдХреНрд╢рдирд╕рд╛рдареА рдирд╛рд╣реА) | ## рдЙрдкрд▓рдмреНрдзрддрд╛: рдбреАрдлреЙрд▓реНрдЯ SQLite рдПрдХрд╛рдЪ рдкреНрд░рддрд┐рдХреГрддреАрдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ рдорд╛рдирдХ Docker / Kubernetes OmniRoute рдореНрд╣рдгрдЬреЗ **рдПрдХ Node рдкреНрд░рдХреНрд░рд┐рдпрд╛ + рдПрдХ SQLite рд▓реЗрдЦрдХ**. рдпрд╛ рдЯреЛрдкреЛрд▓реЙрдЬреАрд╡рд░ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ **рд╕рдорд░реНрдерд┐рдд рдирд╛рд╣реА**. | рдорд░реНрдпрд╛рджрд╛ | рдкрд░рд┐рдгрд╛рдо | | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | рдПрдХрдЪ рд▓реЗрдЦрдХ | рдПрдХрд╛рдЪ SQLite рдлрд╛рдЗрд▓рд╕рд╛рдареА рдЕрдиреЗрдХ рдкреНрд░рддрд┐рдХреГрддреА **рдЪрд╛рд▓рд╡реВ рдирдХрд╛**. рддреНрдпрд╛рдореБрд│реЗ DB рджреВрд╖рд┐рдд рд╣реЛрддреЛ. | | рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рддреА / рд░реАрд╕реНрдЯрд╛рд░реНрдЯ / HEALTHCHECK рдХрд┐рд▓ | рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ SSE, рдбреЕрд╢рдмреЛрд░реНрдб рд╕рддреНрд░реЗ рдЖрдгрд┐ рдЗрди-рдореЗрдорд░реА рд╕реНрдерд┐рддреА рдпрд╛рдВрдЪреЗ **рдкреВрд░реНрдг рдЖрдЙрдЯреЗрдЬ**. рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рдпрдВрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрддреЛ. рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЙрдкрд▓рдмреНрдз рдирд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрдд рдирд╡реАрди рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ OmniRoute JSON рдРрд╡рдЬреА рд░рд┐рд╡реНрд╣рд░реНрд╕-рдкреНрд░реЙрдХреНрд╕реАрдХрдбреВрди **`502 Bad Gateway: Unknown error`** рдорд┐рд│рддреЛ тАФ рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рд╣реЗ рдкреНрд░рджрд╛рддрд╛ рдЕрдкрдпрд╢рд╛рдкрд╛рд╕реВрди рд╡реЗрдЧрд│реЗ рдУрд│рдЦрддрд╛ рдпреЗрдд рдирд╛рд╣реА (#11015). | | `/healthz` рд╕рд╛рд░рдЦрд╛рдЪ рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдк | рд╡реНрдпрд╕реНрдд рдХреЕрдЯрд▓реЙрдЧ рдХрд┐рдВрд╡рд╛ рдХреЙрдореНрдкреНрд░реЗрд╢рди рдЯрд┐рдХрдореБрд│реЗ рдкреНрд░реЛрдмрд▓рд╛ рд╡рд┐рд▓рдВрдм рд╣реЛрдК рд╢рдХрддреЛ; рдХрдореА рдЯрд╛рдЗрдордЖрдЙрдЯрдореБрд│реЗ рдирдВрддрд░ **рдПрдХрдореЗрд╡** рдкреНрд░рддрд┐рдХреГрддреА рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрддреЗ. | **рдкреНрд░реЛрдм рдореЕрдЯреНрд░рд┐рдХреНрд╕** ([Kubernetes рдкреНрд░реЛрдм рд╢рд┐рдлрд╛рд░рд╕реА](../ops/MONITORING_GUIDE.md#kubernetes-probe-recommendations) рджреЗрдЦреАрд▓ рдкрд╣рд╛): | рдкреНрд░реЛрдм | рд▓рдХреНрд╖реНрдп | рд╡рд╛рдкрд░реВ рдирдХрд╛ | | ---------------------- | ------------------------------------------------------------ | -------------------------------------------------------- | | рд▓рд╛рдЗрд╡реНрд╣рдиреЗрд╕ | `PORT` рд╡рд░ TCP (рдбреАрдлреЙрд▓реНрдЯ `20128`), рдХрд┐рдВрд╡рд╛ рд╕реМрдореНрдп HTTP `/healthz` | `/api/monitoring/health` | | рд░реЗрдбреАрдиреЗрд╕ | HTTP `GET /healthz` | рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдк рд╡реНрдпрд╕реНрдд рдЕрд╕рдгреНрдпрд╛рд▓рд╛ рдмрдВрдж рдкрдбрдгреЗ рдорд╛рдирдгрд╛рд░реЗ рдХрдореА рдЯрд╛рдЗрдордЖрдЙрдЯ | | рд╕рдЦреЛрд▓ / рдорд╛рдирд╡реА рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА | `/api/monitoring/health` | рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд kubelet рд▓рд╛рдЗрд╡реНрд╣рдиреЗрд╕ | **рдЕрдкрдЧреНрд░реЗрдбреНрд╕:** рдкреНрд░рддреНрдпреЗрдХ рд╕рддреНрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдИрд▓ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд╛. рд╢рдХреНрдп рдЕрд╕рд▓реНрдпрд╛рд╕ рдХреНрд▓рд╛рдпрдВрдЯреНрд╕ рдбреНрд░реЗрди рдХрд░рд╛; рдбреАрдлреЙрд▓реНрдЯ SQLite рд╡рд░ рд░реЛрд▓рд┐рдВрдЧ рдЕрдкрдбреЗрдЯ рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реА. Compose `restart: unless-stopped` рдЖрдгрд┐ Docker `HEALTHCHECK` рдпрд╛рдВрдЪреЗ рд╕рдВрдпреЛрдЬрди рдХрдВрдЯреЗрдирд░ Unhealthy рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рдПрдХрдореЗрд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦреАрд▓ рдмрджрд▓реЗрд▓ тАФ рддреНрдпрд╛рдЪреА рдкрд░рд┐рдгрд╛рдорд╡реНрдпрд╛рдкреНрддреАрд╣реА рддрд┐рддрдХреАрдЪ рдЖрд╣реЗ. **рдПрдХрд╛рдЪ рдкреНрд░рддрд┐рдХреГрддреАрд╕рд╛рдареА** Kubernetes рд╕реНрдирд┐рдкреЗрдЯ (Recreate рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ; рдПрдХрд╛ SQLite рдлрд╛рдЗрд▓рд╕рд╛рдареА `replicas` рд╡рд╛рдврд╡реВ рдирдХрд╛): ```yaml 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` рд╕реНрд▓реАрдкрдореБрд│реЗ SIGTERM рдкреВрд░реНрд╡реА kube рд▓рд╛ Service рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛рдвреВрди рдЯрд╛рдХрддрд╛ рдпреЗрддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ **рдирд╡реАрди** рдЯреНрд░реЕрдлрд┐рдХ рдмрдВрдж рд╣реЛрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдХрдбреЗ рдЬрд╛рдгреЗ рдерд╛рдВрдмрддреЗ. рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЕрд╕рд▓реЗрд▓реЗ `/v1/responses` SSE рд╣реЗ рд╣реЗрд╡реАрд╡реЗрдЯ рдЕреЕрдбрдорд┐рд╢рди рд▓реАрдЬрджреНрд╡рд╛рд░реЗ (#11015) `SHUTDOWN_TIMEOUT_MS` рдкрд░реНрдпрдВрдд (рдбреАрдлреЙрд▓реНрдЯ 30s) рдбреНрд░реЗрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рддрд░реАрд╣реА рдкреНрд░рдХреНрд░рд┐рдпреЗрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдгрд╛рд▒реНрдпрд╛ рдирд╡реАрди рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ `503` + `Retry-After: 5` рдорд┐рд│рддреЗ. рдмрджрд▓реА рдкреНрд░рддрд┐рдХреГрддреА Ready рд╣реЛрдИрдкрд░реНрдпрдВрдд Recreate рдореБрд│реЗ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдгрд╛рд░рд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ-рд╡рд┐рд░рд╣рд┐рдд рдХрд╛рд▓рд╛рд╡рдзреА рд╣рд╛ рдкреВрд░реНрдг рдЖрдЙрдЯреЗрдЬрдЪ рд░рд╛рд╣рддреЛ тАФ рд╣реА SQLite рдЯреЛрдкреЛрд▓реЙрдЬреАрдЪреА рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗ, рдкреНрд░реЛрдмрдЪреНрдпрд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреА рдирд╛рд╣реА. рдмрд╛рд╣реНрдп Postgres / рдорд▓реНрдЯреА-рд░рд╛рдпрдЯрд░ HA рд╣рд╛ **рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХреЗрд▓реЗрд▓рд╛ рдорд╛рдирдХ рдорд╛рд░реНрдЧ рдирд╛рд╣реА**. рддреБрдореНрд╣рд╛рд▓рд╛ HA рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдПрдХрдЪ рдкреНрд░рддрд┐рдХреГрддреА рдареЗрд╡рд╛ рдХрд┐рдВрд╡рд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдиреЗ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдЪрд╛рдЪрдгреА рдХрд░реВрди рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХреЗрд▓реЗрд▓реА рдЯреЛрдкреЛрд▓реЙрдЬреА рдЪрд╛рд▓рд╡рд╛. Postgres/MySQL рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рдо [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075) рдордзреНрдпреЗ рд╕реБрд░реВ рдЖрд╣реЗ. рддреЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдИрдкрд░реНрдпрдВрдд, **рдореЛрдареНрдпрд╛** `/v1/responses` рдХреНрд╖рдорддреЗрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХрдореЗрд╡ рд╕рдорд░реНрдерд┐рдд рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ N рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧ), рдПрдХрд╛ рд╡реНрд╣реЙрд▓реНрдпреВрдорд╡рд░ `replicas > 1` рдирд╡реНрд╣реЗ. ## Scale-out: N рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ Node рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореНрд╣рдгрдЬреЗ **рдПрдХ V8 heap**. рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рдУрд╡реНрд╣рд░рд▓реЕрдк рд╣реЛрдгрд╛рд▒реНрдпрд╛ ~3тАпMiB / ~750k-token coding-agent `POST /v1/responses` (RTK + Caveman) рд╡рд┐рдирдВрддреНрдпрд╛ ~12тАпGi рд╡рд░ рддреНрдпрд╛ heap рд▓рд╛ рдирд┐рд░рд╕реНрдд рдХрд░рддрд╛рдд (`FATAL ERROR: Reached heap limit`) рдЖрдгрд┐ 16тАпGi cgroup рдордзреНрдпреЗ OOM рдШрдбрд╡реВ рд╢рдХрддрд╛рдд. [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) рдкрд╣рд╛. рд╣реЗ рдорд╛рдкрди рдПрдХ **рдореЗрдорд░реА-рдмрдЬреЗрдЯ** рдЗрд╢рд╛рд░рд╛ рдЖрд╣реЗ; рджреЛрди рд╕рдорд╡рд░реНрддреА рджреАрд░реНрдШ `/v1/responses` рд╣реА рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдХрдорд╛рд▓ рдХрдареЛрд░ рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реА. heavyweight chat рдкреНрд░рд╡реЗрд╢рд╛рд▓рд╛ рд╕реНрд╡рдпрдВ-рдирд┐рд░реНрдзрд╛рд░рд┐рдд ingest byte budget (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES`, `src/shared/middleware/admissionBudget.ts`) рджреНрд╡рд╛рд░реЗ рдорд░реНрдпрд╛рджрд╛ рдШрд╛рддрд▓реА рдЬрд╛рддреЗ; рддреНрдпрд╛рдЪрд╛ рдЖрдХрд╛рд░ рддреНрдпрд╛рдЪ V8/cgroup рдорд░реНрдпрд╛рджреЗрд╡рд░реВрди рдард░рд╡рд▓рд╛ рдЬрд╛рддреЛ тАФ рдЖрдзреАрдЪ рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рд╣реА рдорд░реНрдпрд╛рджрд╛ рд╡рд╛рдврд╡реВрди рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рдХреЗрд▓реНрдпрд╛рд╕ (рдХрд┐рдВрд╡рд╛ рдЬреБрдиреНрдпрд╛ `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` request-count рдорд░реНрдпрд╛рджреЗрдЪреЗ рдореВрд▓реНрдп рд╕реЗрдЯ рдХреЗрд▓реНрдпрд╛рд╕) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдиреНрд╣рд╛ рдирд┐рд░рд╕реНрдд рд╣реЛрдК рд╢рдХрддреЗ. рд▓рд╣рд╛рди chats, `/healthz`, `/v1/models`, рдЖрдгрд┐ MCP рдпрд╛рдВрдЪрд╛ рдпрд╛ рдорд░реНрдпрд╛рджреЗрдд **рд╕рдорд╛рд╡реЗрд╢ рдирд╛рд╣реА**. ### рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛: рджреЛрдирдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рджреАрд░реНрдШ `/v1/responses` рдПрдХ **рдирд┐рд░реЛрдЧреА** рдкреНрд░рдХреНрд░рд┐рдпрд╛ (heap рд╣реЗ `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` рдкреЗрдХреНрд╖рд╛ рдХрдореА; рдбреАрдлреЙрд▓реНрдЯ `0.75`) рдкреНрд░рдХреНрд░рд┐рдпрд╛-рд╡реНрдпрд╛рдкреА inflight-byte budget (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110) рдордзреНрдпреЗ рдЕрдЬреВрди рдЬрд╛рдЧрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рджреЛрдирдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рд╕рдорд╡рд░реНрддреА рджреАрд░реНрдШ `POST /v1/responses` рдЪрд╛рд▓рд╡реВ **рд╢рдХрддреЗ**. `OMNIROUTE_CHAT_LARGE_BODY_BYTES` рдЗрддрдХреНрдпрд╛ рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдореЛрдареНрдпрд╛ bodies (рдбреАрдлреЙрд▓реНрдЯ 256тАпKiB) structure-heavy рд╡рд┐рдирдВрддреНрдпрд╛рдВрдкреНрд░рдорд╛рдгреЗрдЪ heavyweight lease рдШреЗрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдЪ [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) `tryAcquireHealthyHeadroom` escape (`OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддрд╛рдд. рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рджреАрд░реНрдШ SSE clients (рдСрдкрд░реЗрдЯрд░рдирд╛ рдмрд╣реБрдзрд╛ 40тАУ50 рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддрд╛рдд) рдЪрд╛рд▓рд╡рдгреЗ рд╣рд╛ **рдореЗрдорд░реА-рдмрдЬреЗрдЯ**рдЪрд╛ рдкреНрд░рд╢реНрди рдЖрд╣реЗ тАФ heap + primary/headroom slots + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` рдпрд╛рдВрдирд╛ рдпреЛрдЧреНрдп рдЖрдХрд╛рд░ рджреНрдпрд╛ тАФ рд╣реА рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдХрдареЛрд░ тАЬрдХрдорд╛рд▓ 2тАЭ рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реА. рджрдмрд╛рд╡рд╛рдЦрд╛рд▓реАрд▓ heap рдЕрдЬреВрдирд╣реА рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛ рдпреЗрдгреНрдпрд╛рдЬреЛрдЧрд╛ `503` рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдКрди рднрд╛рд░ рдХрдореА рдХрд░рддреЗ, рдЬреЗрдгреЗрдХрд░реВрди #7849 рдкреБрдиреНрд╣рд╛ рдЙрджреНрднрд╡рдгрд╛рд░ рдирд╛рд╣реА. **рдЕрдиреЗрдХ heap рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА** (рд╕реНрд╡рддрдВрддреНрд░ V8 old-spaces) **рдЖрдЬрдЪ**: | рд╣реЗ рдХрд░рд╛ | рд╣реЗ рдХрд░реВ рдирдХрд╛ | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | **N containers/pods** рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪрд╛ **рд╕реНрд╡рддрдГрдЪрд╛** `DATA_DIR` / volume рд╡рд╛рдкрд░рд╛ | рдПрдХрд╛рдЪ SQLite file рд╕рд╛рдареА `replicas > 1` рд╕реЗрдЯ рдХрд░реВ рдирдХрд╛ | | heavy in-flight + healthy-headroom рдЪрд╛ рдЖрдХрд╛рд░ heap / inflight-byte budget рдиреБрд╕рд╛рд░ рдард░рд╡рд╛; 1тАУ2 рд╣рд╛ #7849 рд╕рд╛рдареА рд╕рд╛рд╡рдз рдбреАрдлреЙрд▓реНрдЯ рдЖрд╣реЗ, рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдХрдареЛрд░ рдХрдорд╛рд▓ рдорд░реНрдпрд╛рджрд╛ рдирд╛рд╣реА | рдПрдХрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ 8├Ч RAM рдЖрдгрд┐ рдЕрдорд░реНрдпрд╛рдж count cap рджреЗрдК рдирдХрд╛ | | рдкрд░реНрдпрд╛рдпреА: **рд╕рд╛рдорд╛рдпрд┐рдХ quota counters** рд╕рд╛рдареА `QUOTA_STORE_DRIVER=redis` + `QUOTA_STORE_REDIS_URL` | Redis рд▓рд╛ рд╕рд╛рдорд╛рдпрд┐рдХ SQLite рд╕рдордЬреВ рдирдХрд╛ тАФ рддреЗ рддрд╕реЗ рдирд╛рд╣реА | | рдкреНрд░рддреНрдпреЗрдХ instance рдордзреНрдпреЗ provider secrets рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рд╛ (рдХрд┐рдВрд╡рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд dashboards рд╕реНрд╡реАрдХрд╛рд░рд╛) | рд╕рд░реНрд╡ instances рд╕рд╛рдареА рдПрдХрдЪ dashboard / рдПрдХрдЪ call-log рдЕрдкреЗрдХреНрд╖рд┐рдд рдареЗрд╡реВ рдирдХрд╛ | | рдХреЛрдгрддрд╛рд╣реА load balancer рд╕рдореЛрд░ рд╡рд╛рдкрд░рд╛; API key рдХрд┐рдВрд╡рд╛ session рдиреБрд╕рд╛рд░ sticky routing рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ | vendor-specific size-aware middleware рдЕрдирд┐рд╡рд╛рд░реНрдп рд╕рдордЬреВ рдирдХрд╛ | рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░: рдкреНрд░рддреНрдпреЗрдХ instance рдордзреАрд▓ рд╕рдорд╡рд░реНрддреА рджреАрд░реНрдШ `/v1/responses` рд╣рд╛ **рдореЗрдорд░реА-рдмрдЬреЗрдЯ**рдЪрд╛ рдкреНрд░рд╢реНрди рдЖрд╣реЗ (heap + inflight-byte / #10110). `N` рд╕реНрд╡рддрдВрддреНрд░ `DATA_DIR` рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ heap рдЪреА рд╕рдВрдЦреНрдпрд╛рд╣реА рд╡рд╛рдврддреЗ: host RAM рдиреЗ `N ├Ч cgroup` рд╕рд╛рдВрднрд╛рд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ; тАЬN=8 рдЕрд╕рд▓реЗрд▓рд╛ рдПрдХ 16тАпGi podтАЭ рдкреБрд░реЗрд╕рд╛ рдирд╛рд╣реА. рдПрдХрд╛рдЪ SQLite file рд╡рд░ рдХрдзреАрд╣реА `replicas > 1` рд╡рд╛рдкрд░реВ рдирдХрд╛. Compose рдЖрд░рд╛рдЦрдбрд╛ (рджреЛрди heaps, рджреЛрди volumes тАФ `deploy.replicas: 2` рдирд╡реНрд╣реЗ): ```yaml 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: ``` In-process density (HTTP isolate рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ compression) рдпрд╛рд╕рд╛рдареА [#11023](https://github.com/diegosouzapw/OmniRoute/issues/11023) рдкрд╣рд╛. рд╕рд╛рдорд╛рдпрд┐рдХ durable state рд╡рд░реАрд▓ рдПрдХ logical cluster рдпрд╛рд╕рд╛рдареА [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075) рдкрд╣рд╛. ## рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдиреЛрдВрджреА - **SQLite WAL рдореЛрдб:** OmniRoute рд▓рд╛ рдирд╡реАрдирддрдо рдмрджрд▓ `storage.sqlite` рдордзреНрдпреЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХрд░рддрд╛ рдпрд╛рд╡реЗрдд рдпрд╛рд╕рд╛рдареА `docker stop` рд▓рд╛ рдкреВрд░реНрдг рд╣реЛрдК рджреНрдпрд╛рд╡реЗ. рд╕рдорд╛рд╡рд┐рд╖реНрдЯ Compose рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рдЖрдзреАрдЪ 40s рдЪрд╛ рд╕реНрдЯреЙрдк рдЧреНрд░реЗрд╕ рдХрд╛рд▓рд╛рд╡рдзреА рд╕реЗрдЯ рдХреЗрд▓реЗрд▓рд╛ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдЗрдореЗрдЬ рдереЗрдЯ рдЪрд╛рд▓рд╡рдд рдЕрд╕рд▓реНрдпрд╛рд╕, `--stop-timeout 40` рдХрд╛рдпрдо рдареЗрд╡рд╛. - **`DISABLE_SQLITE_AUTO_BACKUP`:** рдирд┐рдпрдорд┐рдд/рд▓реЗрдЦрди-рдкреВрд░реНрд╡ рдмреЕрдХрдЕрдк рдмрд╛рд╣реЗрд░реВрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдд рдЕрд╕рд▓реНрдпрд╛рд╕ рд╣реЗ `true` рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛. рд╡рд┐рджреНрдпрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕рдЪреНрдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рдирд╕рд╛рдареА рддрд░реАрд╣реА рд╕реНрд╡рддрдВрддреНрд░ рдЯрд┐рдХрд╛рдК рд╕реБрд░рдХреНрд╖рд┐рддрддрд╛ рд╕реНрдиреЕрдкрд╢реЙрдЯ рдЖрдгрд┐ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рддреАрд▓ рдорд╛рдЗрдЧреНрд░реЗрд╢рдирдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. - **рдбреЗрдЯрд╛ рд╕рд╛рддрддреНрдп:** рдХрдВрдЯреЗрдирд░ рд░реАрд╕реНрдЯрд╛рд░реНрдЯрджрд░рдореНрдпрд╛рди рддреБрдордЪрд╛ рдбреЗрдЯрд╛рдмреЗрд╕, рдХреАрдЬ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдиреНрд╕ рдЯрд┐рдХрд╡реВрди рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдиреЗрд╣рдореА `/app/data` рд╡рд░ рд╡реНрд╣реЙрд▓реНрдпреВрдо рдорд╛рдЙрдВрдЯ рдХрд░рд╛. - **рдкреЛрд░реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди:** рдбреАрдлреЙрд▓реНрдЯ `20128` рдкреЛрд░реНрдЯ рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА `PORT` рдПрдиреНрд╡реНрд╣рд╛рдпрд░реНрдирдореЗрдВрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рд╛. ## рд╣реЗ рджреЗрдЦреАрд▓ рдкрд╣рд╛ - [VM рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ](../ops/VM_DEPLOYMENT_GUIDE.md) тАФ VM + nginx + Cloudflare рд╕реЗрдЯрдЕрдк - [Fly.io рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ](../ops/FLY_IO_DEPLOYMENT_GUIDE.md) тАФ Fly.io рд╡рд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рд╛ - [рдПрдиреНрд╡реНрд╣рд╛рдпрд░реНрдирдореЗрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди](../reference/ENVIRONMENT.md) тАФ рд╕рдВрдкреВрд░реНрдг `.env` рд╕рдВрджрд░реНрдн