# ЁЯР│ 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) ┬╖ ЁЯЗоЁЯЗ│ [mr](../../../mr/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) ┬╖ ЁЯЗ│ЁЯЗ▒ [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 рд╕рд╛рдЗрдбрдХрд╛рд░](#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` рдорд╛рдЙрдиреНрдЯред** > `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рд▓реЗ `/var/run/docker.sock` рд▓рд╛рдИ bind-mount рдЧрд░реНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдХрдиреНрдЯреЗрдирд░рднрд┐рддреНрд░рдХреЛ > рд╕реНрд╡рддрдГ-рдЕрдкрдбреЗрдЯрд░рд▓реЗ рд╣реЛрд╕реНрдЯ рдбреЗрдордирдмрд╛рдЯ рд╕реНрдЯреНрдпрд╛рдХ рдкреБрдирдГ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫ > (`src/lib/system/autoUpdate.ts` рд▓реЗ рдЙрдХреНрдд рд╕рдХреЗрдЯрдХреЛ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫ рд░ рддреНрдпреЛ > рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реБрдБрджрд╛ Docker рдкрде рдЫреЛрдбреНрдЫ)ред рдЙрдХреНрдд рд╕рдХреЗрдЯ **рд╣реЛрд╕реНрдЯ-root рд╡рд┐рд╢реНрд╡рд╛рд╕ > рд╕реАрдорд╛** рд╣реЛ: рддреНрдпрд╕рдорд╛ рдкрд╣реБрдБрдЪ рдкреБрдЧреНрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЪреАрдЬрд▓реЗ рд╣реЛрд╕реНрдЯрдХреЛ Docker рдбреЗрдордирд▓рд╛рдИ > root рдХрд╛ рд░реВрдкрдорд╛ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдЫ тАФ рдпрд╕рд▓реЗ рд╣реЛрд╕реНрдЯрдХреЛ рдХреБрдиреИ рдкрдирд┐ рдХрдиреНрдЯреЗрдирд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рдирд┐рд░реАрдХреНрд╖рдг рдЧрд░реНрди, рд░реЛрдХреНрди рд░ рд╣рдЯрд╛рдЙрди рд╕рдХреНрдЫред > рдпрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡рд╣рд░реВ: > > 1. **`cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рдХреЛ рдкреЛрд░реНрдЯрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдХрд╣рд┐рд▓реНрдпреИ рдирдЦреЛрд▓реНрдиреБрд╣реЛрд╕реНред** рдпрд╕рд▓рд╛рдИ > `127.0.0.1` рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (`ports: "127.0.0.1:${DASHBOARD_PORT:-20128}:..."`) > тАФ LAN рдмрд╛рдЯ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп `cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рд▓реЗ рдбреНрдпрд╛рд╕рдмреЛрд░реНрдб-рд╕реНрддрд░рдХреЛ рдХреБрдиреИ рдкрдирд┐ RCE рд▓рд╛рдИ > рдкреВрд░реНрдг рд╣реЛрд╕реНрдЯ рдирд┐рдпрдиреНрддреНрд░рдгрдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрдЫред > 2. **`cli` рдкреНрд░реЛрдлрд╛рдЗрд▓рдорд╛ рдХреБрдиреИ рдкрдирд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрд╕реНрдЯ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА bind рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред** > 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` рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред ## 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` рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрджрд╛ рддрдкрд╛рдИрдВрдХреЛ LAN рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯрдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд╡рд┐рд╣реАрди Redis рдЦреБрд▓рд╛ рд╣реБрдиреЗрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ > `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`, Redis рдХреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдпрдорд╛ рдирд┐рд░реНрднрд░ `depends_on` рдЧреЗрдЯрд╕рд╣рд┐рдд | рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛: ```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 рдХреЛ standalone рдЖрдЙрдЯрдкреБрдЯрд╕рд╣рд┐рддрдХреЛ рдЙрддреНрдкрд╛рджрди рд░рдирдЯрд╛рдЗрдоред **рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рджрд╛рдпрдХ 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`ред **рддреА рдкреНрд░рджрд╛рдпрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдпреЛ рдЫрд╛рдиреНрдиреБрд╣реЛрд╕реН** тАФ рдпреЛ рдирднрдП рд╕рд╛рдорд╛рдиреНрдп рдЗрдореЗрдЬ рдЕрдиреБрд░реЛрдзрдХреЛ рд╕рдордпрдорд╛ рдЕрд╕рдлрд▓ рд╣реБрдиреНрдЫ (Release Channels рдЕрдиреНрддрд░реНрдЧрддрдХреЛ `-web` рдЯрд┐рдкреНрдкрдгреА рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН)ред | рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ target рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН: ```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 . ``` ### рдирд┐рд░реНрдорд╛рдг-рд╕рдордпрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рддреАрдирд╡рдЯрд╛ build arg рд▓реЗ `builder` рдЪрд░рдгрдХреЛ рд╕реНрд░реЛрдд рд▓рд╛рдЧрдд рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдЫрдиреНред рддрд┐рдиреАрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг-рд╕рдордпрдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рд╣реБрдиреН тАФ `OMNIROUTE_MEMORY_MB` (рддрд▓) рдЫреБрдЯреНрдЯреИ рд░рдирдЯрд╛рдЗрдо рд╕рдорд╛рдпреЛрдЬрди рд╣реЛред | Build arg | рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд | рдкреНрд░рднрд╛рд╡ | | --------------------------- | -------------- | ---------------------------------------------------------------------------------------------- | | `OMNIROUTE_USE_TURBOPACK` | `1` | `0` рд▓реЗ рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ webpack рдорд╛рд░реНрдлрдд рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдЫред рдЕрдзрд┐рдХрддрдо рдореЗрдореЛрд░реА рдХрдо, рддрд░ рдврд┐рд▓реЛред | | `OMNIROUTE_BUILD_MEMORY_MB` | `6144` | рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ `next build` рдХрд╛ рд▓рд╛рдЧрд┐ V8 heap рд╕реАрдорд╛ (`--max-old-space-size`)ред | | `OMNIROUTE_BUILD_WORKERS` | `2` | `CIRCLE_NODE_TOTAL` рд▓рд╛рдИ рдорд╛рди рджрд┐рдиреНрдЫ; Next рд▓реЗ рдкреГрд╖реНрда-рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рдирдХрд╛ рд▓рд╛рдЧрд┐ `workers = N - 1` рдирд┐рдХрд╛рд▓реНрдЫред | рдареВрд▓реЛ builder рдорд╛ рдмрдврд╛рдЙрдиреБрдкрд░реНрдиреЗ рд░ рд╕реАрдорд┐рдд рд╕реНрд░реЛрдд рднрдПрдХреЛ build **рдкрдЫрд┐** `тЬУ Compiled successfully` рдорд╛ рдЕрд╕рдлрд▓ рд╣реБрдБрджрд╛ рд╢рдЩреНрдХрд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╕рдорд╛рдпреЛрдЬрди `OMNIROUTE_BUILD_WORKERS` рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ page-data worker рдЖрдлреНрдиреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ, рд░ рдореВрд▓ `next build` рдкрдирд┐ рдЫреБрдЯреНрдЯреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛ; рдкреНрд░рддреНрдпрдХреНрд╖ VPS рдкреБрдирд░реБрддреНрдкрд╛рджрди (issue #7518) рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдЕрдзрд┐рдХрддрдо RSS рд▓рд╛рдИ `NODE_OPTIONS` heap flag рдмрд╛рдЯ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ ~4.5 GB рдорд╛рдкрди рдЧрд░реНрдпреЛ (Turbopack рд▓реЗ V8 heap рдмрд╛рд╣рд┐рд░рдХреЛ native/Rust рдореЗрдореЛрд░реАрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ)ред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд `2` (тЖТ 1 worker, рдЬрдореНрдорд╛ 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ) рдкреНрд░рдХрд╛рд╢рди pipeline рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ 16 GB / 4 vCPU GitHub-hosted runner рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рд╣реЛред `8` (тЖТ 7 workers) рдорд╛ рддреНрдпреЛ runner рдХреЛ рдореЗрдореЛрд░реА рд╕рдХрд┐рдпреЛ рд░ buildkit рд▓реЗ `ResourceExhausted: ... cannot allocate memory` рд╕рд╣рд┐рдд рдЪрд░рдг рдЕрд╕рдлрд▓ рдЧрд░реНрдпреЛ; рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ RSS рдЕрдиреБрдорд╛рди рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рдкрди рдЧрд░реЗрдкрдЫрд┐ `3` (тЖТ 2 workers) рдкрдирд┐ рдЕрдЯреЗрдиред `tests/unit/docker-build-memory-budget.test.ts` рд▓реЗ рдорд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдЖрдБрдХрдбрд╛рдХрд╛ рдЖрдзрд╛рд░рдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрдЫ рд░ рдХреБрдиреИ рдкрдирд┐ рд╕рдорд╛рдпреЛрдЬрди runner рдХреЛ рдХреНрд╖рдорддрд╛рднрдиреНрджрд╛ рдмрдвреЗрдорд╛ рдЕрд╕рдлрд▓ рд╣реБрдиреНрдЫред Turbopack рд▓реЗ V8 heap рдХреЛ **рдмрд╛рд╣рд┐рд░** рд░рд╣рдиреЗ native Rust рдореЗрдореЛрд░реАрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ, рддреНрдпрд╕реИрд▓реЗ `OMNIROUTE_BUILD_MEMORY_MB` рд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реАрдорд┐рдд рдЧрд░реНрджреИрдиред рдореЗрдореЛрд░реА рд╕реАрдорд╛ рднрдПрдХреЛ host рдорд╛ build рд▓рд╛рдИ рддреНрдпрд╕рдкрдЫрд┐ OOM killer рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рддреНрд░реБрдЯрд┐ рдкрд╛рдардмрд┐рдирд╛ SIGKILL рдЧрд░реНрдЫ тАФ рдпреЛ `Creating an optimized production build` рдХреЛ рдмреАрдЪрдореИ рд░реЛрдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдореЗрдореЛрд░реА рд╕рдХрд┐рдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рднрдиреНрджрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдбреНрдХрд┐рдПрдХреЛ рдЬрд╕реНрддреЛ рджреЗрдЦрд╛рдЙрдБрдЫред рдпрджрд┐ build host рд╕реАрдорд┐рдд рдЫ рднрдиреЗ bundler рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реН: ```bash docker build --target runner-base \ --build-arg OMNIROUTE_USE_TURBOPACK=0 \ -t omniroute:base . ``` `webpackBuildWorker` рд╕рдХреНрд╖рдо рдЫ, рддреНрдпрд╕реИрд▓реЗ `next build` рд▓реЗ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ **рд░** worker рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдЙрдБрдЫ рд░ рдкреНрд░рддреНрдпреЗрдХрд▓реЗ `OMNIROUTE_BUILD_MEMORY_MB` рд▓рд╛рдИ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рдкрд╛рд▓рдирд╛ рдЧрд░реНрдЫред рдХрдиреНрдЯреЗрдирд░рдХреЛ рд╕реАрдорд╛ рдЙрдХреНрдд рдорд╛рдирдХреЛ рдПрдХ рдЧреБрдгрд╛ рд╣реЛрдЗрди, рд▓рдЧрднрдЧ рджреБрдИ рдЧреБрдгрд╛рднрдиреНрджрд╛ рдорд╛рдерд┐ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕ tree рдорд╛ рдорд╛рдкрди рдЧрд░рд┐рдПрдХреЛ (`--target runner-base`, `OMNIROUTE_BUILD_MEMORY_MB=6144`): | Bundler | рдХрдиреНрдЯреЗрдирд░ рд╕реАрдорд╛ | рдкрд░рд┐рдгрд╛рдо | | --------- | -------------- | --------------------------------- | | Turbopack | 8 GiB / 16 GiB | рджреБрд╡реИрдорд╛ рдХреБрдиреИ рд╕рдиреНрджреЗрд╢рдмрд┐рдирд╛ OOM-killed | | webpack | 8 GiB | build worker SIGKILL рднрдпреЛ | | webpack | 12 GiB | рд╕рдлрд▓ рднрдпреЛ, рдЕрдзрд┐рдХрддрдо 11.1 GiB рдкреБрдЧреНрдпреЛ | ### рд░рдирдЯрд╛рдЗрдордХрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ `runner-base` рджреНрд╡рд╛рд░рд╛ export рдЧрд░рд┐рдПрдХрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд╣рд░реВ: `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=` рдердкреНрдЫред - Node рд▓реЗ рджреЛрд╣реЛрд░рд┐рдПрдХреЛ `--max-old-space-size` рдХреЛ рдЕрдиреНрддрд┐рдо рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ, рддреНрдпрд╕реИрд▓реЗ `OMNIROUTE_MEMORY_MB` рд╕реЗрдЯ рдЧрд░реНрджрд╛ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА Docker heap рд╕реАрдорд╛ рдирд┐рдпрдиреНрддреНрд░рдг рд╣реБрдиреНрдЫред - рдЗрдореЗрдЬрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕рдзреИрдБ рд╕реЗрдЯ рдЧрд░реНрдиреЗ рднрдПрдХрд╛рд▓реЗ, launcher рдХреЛ рдЖрдлреНрдиреИ RAM-рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд fallback Docker рдЕрдиреНрддрд░реНрдЧрдд рдХрд╣рд┐рд▓реНрдпреИ рд▓рд╛рдЧреВ рд╣реБрдБрджреИрдиред workload рдХрд╛ рд▓рд╛рдЧрд┐ рдпрд╕рд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдмрдврд╛рдЙрдиреБрд╣реЛрд╕реН (рддрд▓рдХреЛ рддрд╛рд▓рд┐рдХрд╛)ред coding-agent `/v1/responses` рдХрд╛ рд▓рд╛рдЧрд┐ `2048` рдЕрдЭреИ рдкрдирд┐ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдЫред ### coding agent рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ runtime RAM 1тАпGiB рдХреЛ Docker default dashboard/рд╣рд▓реНрдХрд╛-chat рдХрд╛ рд▓рд╛рдЧрд┐ рдиреНрдпреВрдирддрдо рд╕реАрдорд╛ рд╣реЛ, production рдЖрдХрд╛рд░ рд╣реЛрдЗрдиред рд▓рд╛рдореЛ `POST /v1/responses` body рд╣рд░реВрд▓реЗ (рд╕рдпреМрдБ message, рджрд░реНрдЬрдиреМрдБ tool) compression рдХрд╛ рдХреНрд░рдордорд╛ memory рднрд┐рддреНрд░ рдзреЗрд░реИ graph рдХрд╛рдпрдо рд░рд╛рдЦреНрдЫрдиреНред рдПрдХреИ рд╕рдордпрдорд╛ рдЪрд▓реЗрдХрд╛ ~3тАпMiB / ~750k-token рдХрд╛ рджреБрдИ request рд▓реЗ **12тАпGiB** old-space рдорд╛ V8 рд▓рд╛рдИ abort рдЧрд░рд╛рдПрдХрд╛ рдЫрдиреН (`FATAL ERROR: Reached heap limit`) рд░ 16тАпGiB cgroup OOM рдкрдирд┐ рдирд┐рдореНрддреНрдпрд╛рдПрдХрд╛ рдЫрдиреНред [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849) рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред **cgroup `--memory` рд▓рд╛рдИ heap рднрдиреНрджрд╛ рдорд╛рдерд┐** рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН тАФ native buffer, SQLite, рд░ compression рдХрд╛ intermediate рд╣рд░реВ V8 рдмрд╛рд╣рд┐рд░ рд░рд╣рдиреНрдЫрдиреНред | Workload | `OMNIROUTE_MEMORY_MB` | Container / cgroup | рдЯрд┐рдкреНрдкрдгреА | | ------------------------------------- | -------------------------- | --------------------------- | -------------------------------------------------------------------------------------------- | | Dashboard, рдПрдЙрдЯрд╛ рд╣рд▓реНрдХрд╛ chat | `1024` (рдЗрдореЗрдЬ default) | тЙе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 abort | | рдПрдХреИ рд╕рдордпрдорд╛ рддреАрди рд╡рд╛ рдмрдвреА рд▓рд╛рдореЛ context | рдПрдЙрдЯреИ process рдорд╛ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН | рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реН / рдердк RAM | default heavyweight admission рдорд╛ 1 in-flight рд╣реБрдиреНрдЫ; RAM рдирдмрдврд╛рдИ рдпрд╕рд▓рд╛рдИ рдмрдврд╛рдЙрдБрджрд╛ abort рдлреЗрд░рд┐ рд╣реБрдиреНрдЫ | bare metal рдорд╛ `omniroute serve` рд▓реЗ `OMNIROUTE_MEMORY_MB` **рд╕реЗрдЯ рдирдЧрд░рд┐рдПрдХреЛ** рдЕрд╡рд╕реНрдерд╛рдорд╛ RAM рдХреЛ ~35% рдЕрдиреБрд╕рд╛рд░ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрдЫ (`[512, 4096]` рднрд┐рддреНрд░ рд╕реАрдорд┐рдд)ред Docker рд▓реЗ рд╕рдзреИрдБ `1024` рд╕реЗрдЯ рдЧрд░реНрдиреЗ рднрдПрдХрд╛рд▓реЗ official image рдорд╛ рддреНрдпреЛ calibration рдХрд╣рд┐рд▓реНрдпреИ рдЪрд▓реНрджреИрдиред ```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` | рд░рдирдЯрд╛рдЗрдо рдкреНрд▓рдЧрдЗрди рд╕реНрдХреНрдпрд╛рдирд░рд▓реЗ рдкрдвреНрдиреЗ рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАред рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдмрд╛рдЗрдиреНрдб-рдорд╛рдЙрдиреНрдЯ рдЧрд░рд┐рдПрдХрд╛ рд╣реБрдБрджрд╛ рдпрд╕рд▓рд╛рдИ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН: рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирд▓реЗ `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 рд▓реЗ SSR рдПрд╕реЗрдЯ URL рд╣рд░реВ `assetPrefix` рдмрд╛рдЯ рдорд╛рддреНрд░ рд░реЗрдиреНрдбрд░ рдЧрд░реНрдЫ тАФ рдкреНрдпрд╛рдЪрд░рд▓реЗ рдпрд╕рдорд╛ рдкрдирд┐ рд╕рдмрдкрд╛рде рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫ), рдмрд┐рд▓реНрдбрдореИ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдПрдХрд╛ `/_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 build-arg рд░ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рднреЗрд░рд┐рдПрдмрд▓ рджреБрд╡реИрдХрд╛ рд░реВрдкрдорд╛ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдЫред ### рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рдд рд░реБрдЯ рдЗрдореЗрдЬ + рд░рдирдЯрд╛рдЗрдо рд╕рдмрдкрд╛рде рдкреНрд░рдХрд╛рд╢рд┐рдд `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 рд▓реЗ OAuth рдХрд▓рдмреНрдпрд╛рдХ рд░ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓рд┐рдЩреНрдХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ `NEXT_PUBLIC_BASE_URL` рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдУрд░рд┐рдЬрд┐рдирдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ; рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЧрд░рд┐рдПрдХрд╛ рдбреНрдпрд╛рд╕рдмреЛрд░реНрдб рд▓реЗрдЦрдирд╣рд░реВрд▓реЗ рд╕реЗрд╕рдирд╕рдБрдЧ рдЖрдмрджреНрдз 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 Tunnels рд╕реНрд╡рддрдГ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рд╣реБрдБрджреИрдирдиреНред рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрд╛ рддрд┐рдирд▓рд╛рдИ рдбреНрдпрд╛рд╕рдмреЛрд░реНрдбрдмрд╛рдЯ рдкреБрдирдГ рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реНред - рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕реНрдерд╛рдкрдирд╛рд▓реЗ рд╣рд╛рд▓ Linux, macOS рд░ Windows рдорд╛ `x64` / `arm64` рд╕рдорд░реНрдерди рдЧрд░реНрдЫред - рд╕реАрдорд┐рдд рдХрдиреНрдЯреЗрдирд░ рд╡рд╛рддрд╛рд╡рд░рдгрд╣рд░реВрдорд╛ рдЖрдЙрдиреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ QUIC UDP рдмрдлрд░ рдЪреЗрддрд╛рд╡рдиреАрд╣рд░реВрдмрд╛рдЯ рдмрдЪреНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд Quick Tunnels рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ 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]: рдмрд╛рд╣реНрдп рдореЛрдбреНрдпреБрд▓ playwright рд▓реЛрдб рдЧрд░реНрди рдЕрд╕рдлрд▓: рддреНрд░реБрдЯрд┐: рдореЛрдбреНрдпреБрд▓ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдПрди '/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 kill | рдкреНрд░рдЧрддрд┐рдорд╛ рд░рд╣реЗрдХрд╛ 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` sleep рд▓реЗ 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` рд╣реЛрдЗрдиред ## рд╕реНрдХреЗрд▓-рдЖрдЙрдЯ: 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` рдХрд╛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрд╛рджрдирдХреЛ рд╣рд╛рд░реНрдб-рдЕрдзрд┐рдХрддрдо рджреБрдИ рд╣реЛрдЗрдиред рд╣реЗрднреАрд╡реЗрдЯ рдЪреНрдпрд╛рдЯ рдкреНрд░рд╡реЗрд╢рд▓рд╛рдИ рд╕реНрд╡рддрдГ рд╡реНрдпреБрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рдЗрдирдЬреЗрд╕реНрдЯ рдмрд╛рдЗрдЯ рдмрдЬреЗрдЯ (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES`, `src/shared/middleware/admissionBudget.ts`) рд▓реЗ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдЫ, рдЬрд╕рдХреЛ рдЖрдХрд╛рд░ рддреНрдпрд╣реА V8/cgroup рд╕реАрдорд╛рдмрд╛рдЯ рддрдп рд╣реБрдиреНрдЫ тАФ рдкрд╣рд┐рд▓реЗ рдиреИ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдпрд╕рд▓рд╛рдИ рдорд╛рдерд┐рддрд┐рд░ рдУрднрд░рд░рд╛рдЗрдб рдЧрд░реНрджрд╛ (рд╡рд╛ рдкреБрд░рд╛рдиреЛ `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` рдЕрдиреБрд░реЛрдз-рд╕рдЩреНрдЦреНрдпрд╛ рд╕реАрдорд╛ рд╕реЗрдЯ рдЧрд░реНрджрд╛) рдкреБрдирдГ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдиреНрдж рд╣реБрдиреЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрддрд┐рдиреНрдЫред рд╕рд╛рдирд╛ рдЪреНрдпрд╛рдЯрд╣рд░реВ, `/healthz`, `/v1/models`, рд░ MCP рдЙрдХреНрдд рд╕реАрдорд╛рднрд┐рддреНрд░ **рдкрд░реНрджреИрдирдиреН**ред ### рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛: рджреБрдИрднрдиреНрджрд╛ рдмрдвреА рд▓рд╛рдореЛ `/v1/responses` рдПрдЙрдЯрд╛ **рд╕реНрд╡рд╕реНрде** рдкреНрд░рдХреНрд░рд┐рдпрд╛ (heap `OMNIROUTE_CHAT_ADMISSION_HEAP_SHED_RATIO` рднрдиреНрджрд╛ рддрд▓, рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд `0.75`) рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛-рд╡реНрдпрд╛рдкреА рдЗрдирдлреНрд▓рд╛рдЗрдЯ-рдмрд╛рдЗрдЯ рдмрдЬреЗрдЯ (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110) рдорд╛ рдЕрдЭреИ рдард╛рдЙрдБ рд╣реБрдБрджрд╛ рдПрдХреИрд╕рд╛рде рджреБрдИрднрдиреНрджрд╛ рдмрдвреА рд▓рд╛рдореЛ `POST /v1/responses` рдЪрд▓рд╛рдЙрди **рд╕рдХреНрдЫ**ред `OMNIROUTE_CHAT_LARGE_BODY_BYTES` рдмрд░рд╛рдмрд░ рд╡рд╛ рддреНрдпрд╕рднрдиреНрджрд╛ рдареВрд▓рд╛ body рд╣рд░реВрд▓реЗ (рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд 256тАпKiB) рд╕рдВрд░рдЪрдирд╛-рднрд╛рд░реА рдЕрдиреБрд░реЛрдзрд╣рд░реВрд▓реЗ рдЬрд╕реНрддреИ рдЙрд╣реА рд╣реЗрднреАрд╡реЗрдЯ lease рд▓рд┐рдиреНрдЫрдиреН рд░ рдЙрд╣реА [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) `tryAcquireHealthyHeadroom` escape (`OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдПрдХреИрд╕рд╛рде рджрд░реНрдЬрдиреМрдБ рд▓рд╛рдореЛ SSE рдХреНрд▓рд╛рдЗрдиреНрдЯрд╣рд░реВ (рдЕрдкрд░реЗрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╛рдпрдГ 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 рдлрд╛рдЗрд▓рдорд╛ `replicas > 1` рд╕реЗрдЯ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН | | heap / inflight-byte рдмрдЬреЗрдЯрдмрд╛рдЯ heavy in-flight + healthy-headroom рдХреЛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН; 1тАУ2 рд░реВрдврд┐рд╡рд╛рджреА #7849 рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛ, рдЙрддреНрдкрд╛рджрдирдХреЛ рд╣рд╛рд░реНрдб рдЕрдзрд┐рдХрддрдо рд╣реЛрдЗрди | рдПрдЙрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ 8├Ч RAM рд░ рдЕрд╕реАрдорд┐рдд рд╕рдЩреНрдЦреНрдпрд╛ рд╕реАрдорд╛ рдирджрд┐рдиреБрд╣реЛрд╕реН | | рд╡реИрдХрд▓реНрдкрд┐рдХ: **рд╕рд╛рдЭрд╛ quota counters** рдХрд╛ рд▓рд╛рдЧрд┐ `QUOTA_STORE_DRIVER=redis` + `QUOTA_STORE_REDIS_URL` | Redis рд▓рд╛рдИ рд╕рд╛рдЭрд╛ SQLite рдирдард╛рдиреНрдиреБрд╣реЛрд╕реН тАФ рддреНрдпреЛ рд╣реЛрдЗрди | | рдкреНрд░рддреНрдпреЗрдХ instance рдорд╛ provider secrets рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рд╡рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд dashboards рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН) | instance рд╣рд░реВрднрд░рд┐ рдПрдЙрдЯреИ dashboard / рдПрдЙрдЯреИ call-log рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН | | рдЕрдЧрд╛рдбрд┐ рдХреБрдиреИ рдкрдирд┐ load balancer рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН; API key рд╡рд╛ session рдЕрдиреБрд╕рд╛рд░ sticky рдмрдирд╛рдЙрдиреБ рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреНрдЫ | vendor-рд╡рд┐рд╢рд┐рд╖реНрдЯ size-aware middleware рдЕрдирд┐рд╡рд╛рд░реНрдп рдирдард╛рдиреНрдиреБрд╣реЛрд╕реН | рд╣рд╛рд░реНрдбрд╡реЗрдпрд░: рдкреНрд░рддрд┐-instance рдПрдХреИрд╕рд╛рде рдЪрд▓реНрдиреЗ рд▓рд╛рдореЛ `/v1/responses` рдХреЛ рд╕рдЩреНрдЦреНрдпрд╛ **рдореЗрдореЛрд░реА-рдмрдЬреЗрдЯ** рдХреЛ рдкреНрд░рд╢реНрди рд╣реЛ (heap + inflight-byte / #10110)ред `N` рд╕реНрд╡рддрдиреНрддреНрд░ `DATA_DIR` рд╣рд░реВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ heap рд╣рд░реВ рдЧреБрдгрд╛ рдЧрд░реНрдЫрдиреН: host RAM рд▓реЗ `N ├Ч cgroup` рдзрд╛рдиреНрдиреБрдкрд░реНрдЫ, тАЬN=8 рднрдПрдХреЛ рдПрдЙрдЯреИ 16тАпGi podтАЭ рд╣реЛрдЗрдиред рдПрдЙрдЯреИ SQLite рдлрд╛рдЗрд▓рдорд╛ рдХрд╣рд┐рд▓реНрдпреИ рдкрдирд┐ `replicas > 1` рдирд░рд╛рдЦреНрдиреБрд╣реЛрд╕реНред Compose рдХреЛ рдирдореБрдирд╛ (рджреБрдИ heap, рджреБрдИ volume тАФ `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) рд╣реЛред рд╕рд╛рдЭрд╛ рдЯрд┐рдХрд╛рдЙ 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` рд╕рдиреНрджрд░реНрдн