# ๐Ÿณ 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) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [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) ยท ๐Ÿ‡ณ๐Ÿ‡ต [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) - [แƒฐแƒแƒกแƒขแƒ˜แƒก CLI แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช OmniRoute Docker-แƒจแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก](#configuring-host-cli-tools-when-omniroute-runs-in-docker) - [Redis-แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ—แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜](#redis-sidecar) - [แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ Compose](#production-compose) - [Dockerfile-แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜](#dockerfile-stages) - [แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜](#critical-environment-variables) - [Docker Compose Caddy-แƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ (HTTPS)](#docker-compose-with-caddy-https-auto-tls) - [Cloudflare-แƒ˜แƒก แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ’แƒ•แƒ˜แƒ แƒแƒ‘แƒ˜](#cloudflare-quick-tunnel) - [แƒ˜แƒ›แƒ˜แƒฏแƒ˜แƒก แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜](#image-tags) - [Dashboard-แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ Docker-แƒจแƒ˜](#dashboard-updates-in-docker) - [แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒ: แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ SQLite แƒ”แƒ แƒ— แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒแƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก](#availability-default-sqlite-is-single-replica) - [Gemini-แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒแƒœแƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ Docker-แƒจแƒ˜](#gemini-regional-errors-inside-docker) - [แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒ˜](#important-notes) --- ## แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ > **แƒ—แƒ•แƒ˜แƒ—แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—?** แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— > [แƒ—แƒ•แƒ˜แƒ—แƒฐแƒแƒกแƒขแƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ](../getting-started/SELF_HOST_GUIDE.md) โ€” > `docker compose -f docker-compose.selfhost.yml up -d` (แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ›แƒ˜แƒฏแƒ˜ + > Redis, แƒ›แƒฎแƒแƒšแƒแƒ“ loopback-แƒ–แƒ”, แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”). แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ > แƒ”แƒ แƒ—แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒแƒœแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒ แƒ˜แƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช 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` | Linux แƒฐแƒแƒกแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒฐแƒแƒกแƒขแƒ˜แƒก CLI-แƒ”แƒ‘แƒ–แƒ” `network_mode`-แƒ˜แƒก แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒกแƒฃแƒ แƒ— `~/.local/bin`, `~/.codex`, `~/.claude` แƒ“แƒ แƒกแƒฎแƒ•แƒแƒ—แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒ˜แƒ— | `docker compose --profile host up -d` | | `cliproxyapi` | `cliproxyapi` | แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)-แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ—แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ `8317` แƒžแƒแƒ แƒขแƒ–แƒ” แƒ–แƒ”แƒ“แƒ แƒ“แƒแƒœแƒ˜แƒก CLI-แƒ˜แƒก แƒžแƒ แƒแƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | `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`. ## แƒฐแƒแƒกแƒขแƒ˜แƒก CLI แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช OmniRoute Docker-แƒจแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก `omniroute setup-codex`, `setup-claude`, `config set ` แƒ“แƒ แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜แƒก **แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ** แƒฆแƒ˜แƒšแƒแƒ™แƒ˜ แƒฌแƒ”แƒ แƒ”แƒœ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ `~/.codex/*.config.toml`. แƒแƒ› แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ–แƒ” แƒแƒฅแƒ•แƒก, แƒกแƒแƒ“แƒแƒช CLI แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒ—แƒฃ แƒ›แƒแƒ— แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ’แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒ—, แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  home แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ (`/home/node` โ€” image แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก `USER node`-แƒ˜แƒ—) แƒ›แƒแƒฎแƒ•แƒ“แƒ”แƒ‘แƒ, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒ›แƒแƒก แƒฐแƒแƒกแƒขแƒ˜แƒก แƒแƒ แƒชแƒ”แƒ แƒ—แƒ˜ CLI แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒ“แƒ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ” แƒฌแƒแƒ˜แƒจแƒšแƒ”แƒ‘แƒ. OmniRoute แƒแƒ›แƒแƒก แƒแƒ›แƒแƒ˜แƒชแƒœแƒแƒ‘แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒฃแƒกแƒแƒ“แƒ”แƒ’แƒแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ แƒฃแƒแƒ แƒก แƒแƒ›แƒ‘แƒแƒ‘แƒก แƒฉแƒแƒฌแƒ”แƒ แƒแƒ–แƒ”: CLI แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ `2` แƒ™แƒแƒ“แƒ˜แƒ—, แƒฎแƒแƒšแƒ API แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก `422` แƒ™แƒแƒ“แƒ˜แƒ—แƒ แƒ“แƒ `containerEphemeralTarget: true`-แƒ˜แƒ—. ### แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜: แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— 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`-แƒก mount-แƒ˜แƒก root แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ—. `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`-แƒก แƒ“แƒ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก แƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒš แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒจแƒ˜ (แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒจแƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒ˜แƒช mount-แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒช แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒจแƒ”แƒ”แƒกแƒแƒ‘แƒแƒ›แƒ”แƒ‘แƒ แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš `/host-home` แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก), แƒฎแƒแƒšแƒ แƒ“แƒแƒฃแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒ”แƒš แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒแƒ–แƒ” แƒ™แƒ•แƒšแƒแƒ• แƒฃแƒแƒ แƒก แƒแƒ›แƒ‘แƒแƒ‘แƒก. ### แƒแƒ•แƒแƒ แƒ˜แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜: แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ CLI-แƒ”แƒ‘แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ (แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ–แƒแƒ›แƒ˜แƒ”แƒ แƒแƒ“) แƒ แƒแƒ“แƒ”แƒกแƒแƒช CLI-แƒ”แƒ‘แƒ˜ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—แƒแƒ (`cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜), แƒฉแƒแƒฌแƒ”แƒ แƒ แƒ’แƒแƒœแƒ–แƒ แƒแƒฎแƒฃแƒšแƒ˜แƒ. แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  `setup-*` แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก แƒ’แƒแƒ“แƒแƒ”แƒชแƒ˜แƒ— `--allow-container-write`, แƒแƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— `OMNIROUTE_ALLOW_CONTAINER_CONFIG_WRITE=true`. แƒฉแƒแƒฌแƒ”แƒ แƒ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒก แƒ•แƒ”แƒ  แƒ’แƒแƒ“แƒแƒฃแƒ แƒฉแƒ”แƒ‘แƒ. > **แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ โ€” `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ + `docker.sock` mount.** > `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ bind-mount-แƒ˜แƒ— แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒก `/var/run/docker.sock`-แƒก, แƒ แƒแƒ—แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒจแƒ˜ > แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ›แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ›แƒ แƒ’แƒแƒœแƒ›แƒแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒฐแƒแƒกแƒขแƒ˜แƒก daemon-แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก stack > (`src/lib/system/autoUpdate.ts` แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒแƒ› socket-แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ > แƒแƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ Docker-แƒ˜แƒก แƒ’แƒ–แƒแƒก แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก). แƒ”แƒก socket แƒแƒ แƒ˜แƒก **แƒฐแƒแƒกแƒขแƒ˜แƒก root แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก > แƒœแƒ“แƒแƒ‘แƒ˜แƒก แƒกแƒแƒ–แƒฆแƒ•แƒแƒ แƒ˜**: แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒกแƒแƒช แƒ›แƒแƒกแƒ—แƒแƒœ แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒแƒฅแƒ•แƒก, แƒฐแƒแƒกแƒขแƒ˜แƒก Docker daemon-แƒก > root-แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒ แƒ—แƒแƒ•แƒก โ€” แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒฐแƒแƒกแƒขแƒ–แƒ” แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, > แƒ’แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒฌแƒแƒจแƒšแƒ. > แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜: > > 1. **แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒ’แƒแƒฎแƒแƒ“แƒแƒ— `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜ แƒฅแƒกแƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜.** แƒ’แƒแƒ›แƒแƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ— > แƒ˜แƒก `127.0.0.1`-แƒ–แƒ” (`ports: "127.0.0.1:${DASHBOARD_PORT:-20128}:..."`) > โ€” LAN-แƒ˜แƒ“แƒแƒœ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜ แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜แƒก แƒ“แƒแƒœแƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  RCE-แƒก > แƒฐแƒแƒกแƒขแƒ˜แƒก แƒกแƒ แƒฃแƒš แƒ™แƒแƒ›แƒžแƒ แƒแƒ›แƒ”แƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ“ แƒแƒฅแƒชแƒ”แƒ•แƒก. > 2. **แƒแƒ  แƒ“แƒแƒแƒ›แƒแƒœแƒขแƒแƒŸแƒแƒ— แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ”แƒ‘แƒ˜ `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒจแƒ˜.** > 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 Sidecar OmniRoute แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก Redis-แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒแƒ–แƒ˜แƒแƒ แƒ แƒ™แƒ”แƒจแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒกแƒแƒญแƒ”แƒ แƒแƒ“. `redis` แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ **แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜แƒ** `docker-compose.yml`-แƒจแƒ˜ (แƒ›แƒแƒก แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒ— แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ แƒแƒ  แƒแƒฅแƒ•แƒก) แƒ“แƒ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ  แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ แƒ˜แƒจแƒ•แƒ”แƒ‘แƒ. | แƒ“แƒ”แƒขแƒแƒšแƒ˜ | แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ | | ------------------------ | --------------------------------------------- | | แƒ˜แƒ›แƒ˜แƒฏแƒ˜ | `redis:7-alpine` | | แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ | `omniroute-redis` | | แƒจแƒ˜แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜ | `6379` | | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜ (แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒ•แƒ) | `REDIS_PORT` (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ `6379`) | | แƒฐแƒแƒกแƒขแƒ–แƒ” แƒ›แƒ˜แƒ‘แƒ›แƒ (แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒ•แƒ) | `REDIS_BIND_HOST` (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ `127.0.0.1`) | | แƒขแƒแƒ›แƒ˜ | `omniroute-redis-data` โ†’ `/data` | | แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ | `redis-cli ping` (10-แƒฌแƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ˜) | แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜: - `REDIS_URL` โ€” แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒจแƒ˜ แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ `redis://redis:6379`). - `REDIS_PORT` โ€” Redis-แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก แƒžแƒแƒ แƒขแƒ˜แƒก แƒ›แƒ˜แƒ‘แƒ›แƒ. - `REDIS_BIND_HOST` โ€” แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒžแƒแƒ แƒขแƒ˜ แƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ”แƒ‘แƒ. แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒ `127.0.0.1`. > **แƒ แƒแƒขแƒแƒ› แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ loopback:** sidecar แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก `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-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ** แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก (แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒแƒฅแƒ•แƒก). แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒœ แƒฌแƒแƒจแƒแƒšแƒ”แƒ—/แƒ“แƒแƒแƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ”แƒ— `redis:` แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ‘แƒšแƒแƒ™แƒ˜ `docker-compose.yml`-แƒจแƒ˜, แƒแƒœ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜ แƒœแƒฃแƒšแƒแƒ›แƒ“แƒ” แƒจแƒ”แƒแƒ›แƒชแƒ˜แƒ แƒ”แƒ—: ```bash docker compose up -d --scale redis=0 ``` ## Production 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-แƒ˜แƒก 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`. **แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒ”แƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ› แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ”แƒ‘แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ—** โ€” แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ˜แƒ›แƒ˜แƒฏแƒ˜ แƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒ แƒแƒก แƒ›แƒแƒ แƒชแƒฎแƒ“แƒ”แƒ‘แƒ (แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— `-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` | `0` | `0` แƒแƒฌแƒงแƒแƒ‘แƒก webpack-แƒ˜แƒ—: แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒžแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒฃแƒคแƒ แƒ แƒœแƒ”แƒšแƒ. `1` แƒ แƒ—แƒแƒ•แƒก Turbopack-แƒก. | | `OMNIROUTE_BUILD_MEMORY_MB` | `6144` | V8 heap-แƒ˜แƒก แƒ–แƒ”แƒ“แƒ แƒ–แƒฆแƒ•แƒแƒ แƒ˜ (`--max-old-space-size`) แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ `next build`-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. | | `OMNIROUTE_BUILD_WORKERS` | `2` | แƒแƒฌแƒ•แƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก `CIRCLE_NODE_TOTAL`-แƒก; Next แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ˜แƒ—แƒ•แƒšแƒ˜แƒก `workers = N - 1`-แƒก. | `OMNIROUTE_BUILD_WORKERS` แƒแƒ แƒ˜แƒก แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒซแƒšแƒแƒ•แƒ  แƒแƒ›แƒฌแƒงแƒแƒ‘แƒ–แƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ–แƒแƒ แƒ“แƒแƒ— แƒ“แƒ แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒแƒช แƒ”แƒญแƒ•แƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ˜แƒขแƒแƒœแƒแƒ—, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒšแƒ˜ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒแƒฌแƒงแƒแƒ‘แƒ **`โœ“ Compiled successfully`-แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’** แƒฌแƒงแƒ“แƒ”แƒ‘แƒ. แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ worker แƒชแƒแƒšแƒ™แƒ” แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒ, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒแƒ•แƒแƒ“ แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ `next build`; แƒ แƒ”แƒแƒšแƒฃแƒ  VPS-แƒ–แƒ” แƒฉแƒแƒขแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ›แƒ แƒ แƒ”แƒžแƒ แƒแƒ“แƒฃแƒฅแƒชแƒ˜แƒแƒ› (issue #7518) แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒžแƒ˜แƒ™แƒฃแƒ แƒ˜ RSS ~4.5 GB-แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ–แƒ” แƒ’แƒแƒ–แƒแƒ›แƒ, `NODE_OPTIONS` heap-แƒ˜แƒก แƒแƒšแƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒšแƒแƒ“ (Turbopack แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒแƒก V8 heap-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ—, แƒœแƒแƒขแƒ˜แƒฃแƒ /Rust แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก). แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ `2` (โ†’ 1 worker, แƒกแƒฃแƒš 2 แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜) แƒ’แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜แƒ 16 GB / 4 vCPU-แƒ˜แƒแƒœ GitHub-แƒ˜แƒก แƒฐแƒแƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒš runner-แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ˜แƒก pipeline แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก. `8`-แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ (โ†’ 7 worker) แƒแƒ› runner-แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒแƒ›แƒแƒ”แƒฌแƒฃแƒ แƒ แƒ“แƒ buildkit-แƒ›แƒ แƒ”แƒขแƒแƒžแƒ˜ แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒ— `ResourceExhausted: ... cannot allocate memory`; `3`-แƒ˜แƒช (โ†’ 2 worker) แƒ•แƒ”แƒ  แƒ“แƒแƒ”แƒขแƒ˜แƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก RSS แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ’แƒแƒ–แƒแƒ›แƒ”แƒก แƒ“แƒ แƒแƒ แƒ แƒ˜แƒ แƒ˜แƒ‘แƒแƒ“ แƒจแƒ”แƒแƒคแƒแƒกแƒ”แƒก. `tests/unit/docker-build-memory-budget.test.ts` แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒก แƒ’แƒแƒ–แƒแƒ›แƒ˜แƒšแƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒแƒ แƒชแƒฎแƒ“แƒ”แƒ‘แƒ, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ runner-แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒก แƒ’แƒแƒ“แƒแƒแƒญแƒแƒ แƒ‘แƒ”แƒ‘แƒก. Turbopack แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒแƒชแƒ˜แƒแƒก แƒœแƒแƒขแƒ˜แƒฃแƒ  Rust แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช V8 heap-แƒ˜แƒก **แƒ’แƒแƒ แƒ”แƒ—แƒแƒ**, แƒแƒ›แƒ˜แƒขแƒแƒ› `OMNIROUTE_BUILD_MEMORY_MB` แƒ›แƒแƒก แƒแƒ  แƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒก. แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ–แƒฆแƒ•แƒ แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒฐแƒแƒกแƒขแƒ–แƒ” แƒแƒฌแƒงแƒแƒ‘แƒแƒก OOM killer แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” SIGKILL-แƒ˜แƒ— แƒฌแƒงแƒ•แƒ”แƒขแƒก โ€” แƒ˜แƒก แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ `Creating an optimized production build`-แƒ˜แƒก แƒจแƒฃแƒแƒจแƒ˜ แƒฉแƒ”แƒ แƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ›แƒแƒฌแƒฃแƒ แƒ•แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ’แƒแƒญแƒ”แƒ“แƒ•แƒแƒก แƒฐแƒ’แƒแƒ•แƒก. แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก `Dockerfile` แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ webpack-แƒก (`OMNIROUTE_USE_TURBOPACK=0`), แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ˜แƒ— `npm run dev` / `npm run build`-แƒ˜แƒกแƒ’แƒแƒœ, แƒกแƒแƒ“แƒแƒช แƒ™แƒแƒ“แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ Turbopack-แƒ˜แƒ: แƒจแƒ˜แƒจแƒ•แƒ”แƒšแƒ˜ `docker build .`, แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒก แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” (แƒ แƒแƒกแƒแƒช Railway แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒ˜ แƒฐแƒแƒกแƒขแƒ”แƒ‘แƒ˜ แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒœ), แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒš แƒแƒ›แƒฌแƒงแƒแƒ‘แƒ–แƒ” แƒฉแƒฃแƒ›แƒแƒ“ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฌแƒงแƒ“แƒ”แƒก. แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ›แƒ˜แƒฏแƒ”แƒ‘แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒ”แƒœ `OMNIROUTE_USE_TURBOPACK=0`-แƒก `docker-publish.yml`-แƒจแƒ˜. แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ RAM-แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒแƒ›แƒฌแƒงแƒแƒ‘แƒ–แƒ” แƒฃแƒคแƒ แƒ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ”แƒ— Turbopack: ```bash docker build --target runner-base \ --build-arg OMNIROUTE_USE_TURBOPACK=1 \ -t omniroute:base . ``` `webpackBuildWorker` แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› `next build` แƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒจแƒแƒ‘แƒ”แƒš, **แƒแƒกแƒ”แƒ•แƒ”** worker แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ“แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒชแƒแƒš-แƒชแƒแƒšแƒ™แƒ” แƒ˜แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒก `OMNIROUTE_BUILD_MEMORY_MB`-แƒก. แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ–แƒฆแƒ•แƒแƒ แƒ˜ แƒแƒ› แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒ–แƒ” แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒ แƒฏแƒ”แƒ  แƒ›แƒ”แƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒ“แƒ แƒแƒ แƒ แƒ”แƒ แƒ—แƒฎแƒ”แƒš. แƒ’แƒแƒ–แƒแƒ›แƒ˜แƒšแƒ˜แƒ แƒแƒ› แƒฎแƒ”แƒ–แƒ” (`--target runner-base`, `OMNIROUTE_BUILD_MEMORY_MB=6144`): | แƒ‘แƒแƒœแƒ“แƒšแƒ”แƒ แƒ˜ | แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ–แƒฆแƒ•แƒแƒ แƒ˜ | แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ | | --------- | ------------------ | -------------------------------------- | | Turbopack | 8 GiB / 16 GiB | แƒแƒ แƒ˜แƒ•แƒ” แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ OOM-แƒ˜แƒ— แƒจแƒ”แƒฌแƒงแƒ“แƒ, แƒฉแƒฃแƒ›แƒแƒ“ | | webpack | 8 GiB | build worker SIGKILL-แƒ˜แƒ— แƒจแƒ”แƒฌแƒงแƒ“แƒ | | 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`-แƒก. - แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ• แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒฃแƒจแƒ•แƒ”แƒ‘แƒก แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒจแƒ•แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก `OMNIROUTE_MEMORY_MB`-แƒก แƒ“แƒ แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก `--max-old-space-size=`-แƒก. - Node แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ‘แƒแƒšแƒ แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒฃแƒš `--max-old-space-size` แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› `OMNIROUTE_MEMORY_MB`-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก Docker-แƒ˜แƒก แƒ’แƒ แƒแƒ•แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ  แƒšแƒ˜แƒ›แƒ˜แƒขแƒก. - แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒ›แƒ˜แƒฏแƒ˜ แƒ›แƒแƒก แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒ“แƒ’แƒ”แƒœแƒก, Docker-แƒจแƒ˜ แƒ’แƒแƒ›แƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜, RAM-แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ“แƒแƒ™แƒแƒšแƒ˜แƒ‘แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ’แƒแƒ–แƒแƒ แƒ“แƒ”แƒ— (แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜). `2048` แƒ›แƒแƒ˜แƒœแƒช แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒชแƒ˜แƒ แƒ”แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ’แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก `/v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. ### แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒกแƒแƒญแƒ˜แƒ แƒ RAM แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ’แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Docker-แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ 1โ€ฏGiB แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ–แƒฆแƒ•แƒแƒ แƒ˜ แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒฉแƒแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒแƒ แƒ แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ. แƒ’แƒ แƒซแƒ”แƒšแƒ˜ `POST /v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜ (แƒแƒกแƒแƒ‘แƒ˜แƒ— แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ, แƒแƒ—แƒแƒ‘แƒ˜แƒ— แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜) แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒกแƒแƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ’แƒ แƒแƒคแƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒก. แƒแƒ แƒ›แƒ แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒฃแƒšแƒ›แƒ ~3โ€ฏMiB / ~750k-แƒขแƒแƒ™แƒ”แƒœแƒ˜แƒแƒœแƒ›แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ› V8-แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒจแƒ”แƒฌแƒงแƒ•แƒ˜แƒขแƒ **12โ€ฏGiB** old-space-แƒ–แƒ” (`FATAL ERROR: Reached heap limit`) แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒ 16โ€ฏGiB cgroup OOM. แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— [#7849](https://github.com/diegosouzapw/OmniRoute/issues/7849). cgroup-แƒ˜แƒก `--memory` แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ **แƒ’แƒ แƒแƒ•แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก** โ€” แƒœแƒแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒ˜, SQLite แƒ“แƒ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒจแƒฃแƒแƒšแƒ”แƒ“แƒฃแƒ แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ V8-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ— แƒ—แƒแƒ•แƒกแƒ“แƒ”แƒ‘แƒ. | แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ | `OMNIROUTE_MEMORY_MB` | แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ / cgroup | แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒ˜ | | --------------------------------------- | ---------------------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅแƒ˜ แƒฉแƒแƒขแƒ˜ | `1024` (แƒ˜แƒ›แƒ˜แƒฏแƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ) | โ‰ฅ2โ€ฏGiB | | | แƒ”แƒ แƒ—แƒ˜ แƒ™แƒแƒ“แƒ˜แƒก แƒแƒ’แƒ”แƒœแƒขแƒ˜ (Claude/Codex/Grok) | `8192` | โ‰ฅ10โ€ฏGiB | แƒขแƒ˜แƒžแƒฃแƒ แƒ˜ แƒ”แƒ แƒ—แƒกแƒ”แƒกแƒ˜แƒแƒœแƒ˜ `/v1/responses` | | แƒแƒ แƒ˜ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒ’แƒ แƒซแƒ”แƒšแƒ˜ `/v1/responses` | `10240`โ€“`12288` | โ‰ฅ12โ€“16โ€ฏGiB | แƒ’แƒแƒ–แƒแƒ›แƒ•แƒ˜แƒกแƒแƒก V8-แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒจแƒ”แƒฌแƒงแƒ“แƒ ~12โ€ฏGiB แƒ’แƒ แƒแƒ•แƒ˜แƒก แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒ–แƒ” | | แƒกแƒแƒ›แƒ˜ แƒแƒœ แƒ›แƒ”แƒขแƒ˜ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒ’แƒ แƒซแƒ”แƒšแƒ˜ แƒ™แƒแƒœแƒขแƒ”แƒฅแƒกแƒขแƒ˜ | แƒแƒ  แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒ”แƒ แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ | แƒกแƒ”แƒ แƒ˜แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ / แƒ›แƒ”แƒขแƒ˜ RAM | แƒ›แƒซแƒ˜แƒ›แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒšแƒ˜แƒ›แƒ˜แƒขแƒ˜แƒ 1 แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ; แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ RAM-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ–แƒ แƒ“แƒ แƒ™แƒ•แƒšแƒแƒ• แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒแƒก | `omniroute serve` แƒคแƒ˜แƒ–แƒ˜แƒ™แƒฃแƒ  แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒ–แƒ” แƒแƒ™แƒแƒšแƒ˜แƒ‘แƒ แƒ”แƒ‘แƒก RAM-แƒ˜แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 35%-แƒก (`[512, 4096]` แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒจแƒ˜), แƒ แƒแƒ“แƒ”แƒกแƒแƒช `OMNIROUTE_MEMORY_MB` **แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜**. 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-แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜ แƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ”แƒ‘แƒ (loopback, แƒ—แƒฃ AUTH-แƒก แƒแƒ  แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ‘แƒ—) | `127.0.0.1` | | `AUTO_UPDATE_HOST_REPO_DIR` | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒ•แƒ˜แƒ—แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒจแƒ˜ `/workspace/omniroute`-แƒ–แƒ” แƒ›แƒแƒœแƒขแƒแƒŸแƒ“แƒ”แƒ‘แƒ | `.` (แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ) | | `OMNIROUTE_MEMORY_MB` | Docker-แƒ˜แƒก แƒแƒ•แƒขแƒแƒœแƒแƒ›แƒ˜แƒฃแƒ แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Node-แƒ˜แƒก heap-แƒ˜แƒก แƒ–แƒ”แƒ“แƒ แƒ–แƒฆแƒ•แƒแƒ แƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก; แƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒก แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš image-แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก. แƒ™แƒแƒ“แƒ˜แƒก แƒฌแƒ”แƒ แƒ˜แƒก แƒแƒ’แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก: `8192`+ (แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— [แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก RAM](#runtime-ram-for-coding-agents)). | `1024` | | `DASHBOARD_PORT` / `API_PORT` | dashboard-แƒ˜แƒกแƒ (20128) แƒ“แƒ API-แƒ˜แƒก (20129) แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒแƒ แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒ•แƒ | `20128` / `20129` | | `APP_BIND_HOST` | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช docker-compose dashboard/API/live-WS แƒžแƒแƒ แƒขแƒ”แƒ‘แƒก แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช `REQUIRE_API_KEY=false` (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜), `0.0.0.0` แƒแƒœแƒแƒœแƒ˜แƒ›แƒฃแƒ  `/v1` แƒžแƒ แƒแƒฅแƒกแƒ˜แƒก LAN-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒก แƒฎแƒ“แƒ˜แƒก โ€” แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒ’แƒแƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ `REQUIRE_API_KEY=true`-แƒ˜แƒก แƒแƒœ แƒฌแƒ˜แƒœ แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ reverse proxy-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก. | `127.0.0.1` | | `CLIPROXY_BIND_HOST` | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช docker-compose `cliproxyapi` sidecar-แƒก แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒก โ€” แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒแƒ›แƒ˜ แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก. | `127.0.0.1` | | `OMNIROUTE_PLUGINS_DIR` | แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก plugin-แƒ”แƒ‘แƒ˜แƒก แƒกแƒ™แƒแƒœแƒ”แƒ แƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ“แƒ แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ—. แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ—, แƒ แƒแƒ“แƒ”แƒกแƒแƒช plugin-แƒ”แƒ‘แƒ˜ bind-mount-แƒ˜แƒ—แƒแƒ แƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ˜: แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ `HOME`-แƒก แƒ›แƒ˜แƒฐแƒงแƒ•แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒช image-แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ  แƒ›แƒแƒแƒฎแƒ“แƒ˜แƒœแƒแƒก. | `~/.omniroute/plugins` | | `OMNIROUTE_BASE_PATH` | URL-แƒ˜แƒก แƒฅแƒ•แƒ”แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒžแƒ˜ reverse proxy-แƒ˜แƒก แƒฃแƒ™แƒแƒœ แƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ”แƒ‘แƒ (แƒ›แƒแƒ’., `/omniroute`) | _(แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ = root)_ | | `NEXT_PUBLIC_BASE_URL` | แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒกแƒแƒฏแƒแƒ แƒ origin แƒฅแƒ•แƒ”แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ— (แƒ›แƒแƒ’., `https://host/omniroute`) | แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ | | `PROD_DASHBOARD_PORT` | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ˜แƒก dashboard-แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜ `docker-compose.prod.yml`-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | `20130` | | `CLIPROXYAPI_PORT` | แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜ `cliproxyapi` sidecar-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | `8317` | ## แƒฃแƒ™แƒฃแƒžแƒ แƒแƒฅแƒกแƒ˜ แƒฅแƒ•แƒ”แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ–แƒ” (Traefik / nginx) Next.js-แƒ˜แƒก `basePath` แƒ™แƒแƒ›แƒžแƒ˜แƒšแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ standalone-แƒžแƒแƒ™แƒ”แƒขแƒจแƒ˜. OmniRoute แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒš แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก root-แƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš sentinel-แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก (แƒ˜แƒฌแƒ”แƒ แƒ”แƒ‘แƒ `npm run build`-แƒ˜แƒก แƒ“แƒ แƒแƒก; แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ `scripts/docker/ensure-docker-base-path.mjs`-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ ) แƒ“แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒ“แƒแƒ แƒ”แƒ‘แƒก แƒ›แƒแƒก `OMNIROUTE_BASE_PATH`-แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒ“แƒ image แƒ“แƒแƒ›แƒ”แƒœแƒ˜แƒก root-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒ แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜, entrypoint แƒ’แƒแƒ“แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก standalone manifest-แƒ”แƒ‘แƒก, แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒš `basePath`/`assetPrefix` แƒšแƒ˜แƒขแƒ”แƒ แƒแƒšแƒ”แƒ‘แƒก (Next 16 SSR asset-แƒ˜แƒก URL-แƒ”แƒ‘แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ `assetPrefix`-แƒ˜แƒ“แƒแƒœ แƒฅแƒ›แƒœแƒ˜แƒก โ€” patcher แƒ›แƒแƒกแƒจแƒ˜ แƒฅแƒ•แƒ”แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒกแƒแƒช แƒแƒกแƒแƒฎแƒแƒ•แƒก), แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒš `/_next/static` asset-แƒ˜แƒก URL-แƒ”แƒ‘แƒก (client-reference manifest-แƒ”แƒ‘แƒก, แƒ›แƒ”แƒ“แƒ˜แƒ˜แƒก import-แƒ”แƒ‘แƒก, แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ“แƒแƒ แƒ”แƒœแƒ“แƒ”แƒ แƒ”แƒ‘แƒฃแƒš แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒก) แƒ“แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก `process.env` shim-แƒก, แƒกแƒแƒœแƒแƒ› `node dev/run-standalone.mjs` แƒ’แƒแƒ”แƒจแƒ•แƒ”แƒ‘แƒ. ### Compose-แƒ˜แƒ— แƒแƒ’แƒ”แƒ‘แƒ (แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜) แƒแƒ แƒ˜แƒ•แƒ” แƒชแƒ•แƒšแƒแƒ“แƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ— `.env`-แƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒแƒแƒ’แƒ”แƒ—, แƒ แƒแƒ—แƒ image-แƒ˜แƒกแƒ แƒ“แƒ runtime-แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒก แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒแƒ“แƒ”แƒก: ```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-แƒก แƒ“แƒ แƒ แƒแƒ’แƒแƒ แƒช runtime-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒก. ### แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ root-image + runtime-แƒ˜แƒก แƒฅแƒ•แƒ”แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ `diegosouzapw/omniroute:*` image-แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ›แƒ”แƒœแƒ˜แƒก root-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒ แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜. แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— runtime-แƒ˜แƒก แƒ“แƒ แƒแƒก แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— `OMNIROUTE_BASE_PATH`; แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒก แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ“แƒแƒแƒžแƒแƒขแƒฉแƒแƒ•แƒก. แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒกแƒแƒฏแƒแƒ แƒ origin-แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“: ```yaml services: omniroute: image: diegosouzapw/omniroute:latest environment: OMNIROUTE_BASE_PATH: /omniroute NEXT_PUBLIC_BASE_URL: https://myhostname.example.com/omniroute ``` แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ— แƒฃแƒ™แƒฃแƒžแƒ แƒแƒฅแƒกแƒ˜ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ›แƒแƒœ **แƒกแƒ แƒฃแƒšแƒ˜** แƒ’แƒแƒ แƒ” path แƒ’แƒแƒ“แƒแƒแƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒแƒก (แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜ แƒแƒ  แƒ›แƒแƒแƒจแƒแƒ แƒแƒ—). Traefik-แƒ›แƒ `PathPrefix(`/omniroute`)` แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒกแƒ™แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒแƒก `StripPrefix`-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ แƒแƒ—แƒ Next.js-แƒ›แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก `/omniroute/...` แƒ“แƒ asset-แƒ”แƒ‘แƒ˜ `/omniroute/_next/...`-แƒ“แƒแƒœ แƒ›แƒแƒ”แƒ›แƒกแƒแƒฎแƒฃแƒ แƒแƒก. Docker-แƒ˜แƒก healthcheck แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒ›แƒกแƒฃแƒ‘แƒฃแƒฅ `/healthz` lifecycle endpoint-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฌแƒ˜แƒœ แƒ”แƒ แƒ—แƒ•แƒ˜แƒก แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ `OMNIROUTE_BASE_PATH`. `/api/monitoring/health` แƒ™แƒ•แƒšแƒแƒ• แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒแƒœ dashboard-แƒ˜แƒ“แƒแƒœ แƒ“แƒ˜แƒแƒ’แƒœแƒแƒกแƒขแƒ˜แƒ™แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก; แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก HEALTHCHECK แƒ™แƒ•แƒšแƒแƒ• แƒ›แƒ˜แƒกแƒ™แƒ”แƒœ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒแƒ— (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฏแƒแƒœแƒ›แƒ แƒ—แƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒกแƒ˜แƒฆแƒ แƒ›แƒ˜แƒกแƒ”แƒฃแƒšแƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ’แƒแƒกแƒแƒฎแƒ“แƒ”แƒšแƒแƒ“), แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ— `OMNIROUTE_HEALTHCHECK_PATH=/api/monitoring/health`. แƒ”แƒก path แƒแƒ แƒ˜แƒก **แƒกแƒ˜แƒฆแƒ แƒ›แƒ˜แƒกแƒ”แƒฃแƒšแƒ˜** แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ (DB + แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒจแƒ”แƒฏแƒแƒ›แƒ”แƒ‘แƒ) โ€” แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜แƒ Docker-แƒ˜แƒก แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒ˜ `HEALTHCHECK`-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฃ แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก แƒ™แƒ•แƒšแƒแƒ• แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ—, แƒ—แƒฃแƒ›แƒชแƒ **แƒแƒ แƒ** Kubernetes-แƒ˜แƒก `livenessProbe` แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒแƒ แƒ™แƒ”แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (Kubernetes, Nomad แƒ“แƒ แƒกแƒฎแƒ•.): | แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ | แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜แƒ | แƒ›แƒแƒ”แƒ แƒ˜แƒ“แƒ”แƒ— | | ---------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------- | | แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒกแƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒแƒ‘แƒ | HTTP `GET /livez`, แƒแƒœ TCP แƒ›แƒ—แƒแƒ•แƒแƒ  แƒžแƒแƒ แƒขแƒ–แƒ” (`PORT`, แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ `20128`) | `/api/monitoring/health` แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒกแƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | | แƒ›แƒ–แƒแƒ“แƒงแƒแƒคแƒœแƒ | HTTP `GET /healthz` | แƒ›แƒแƒ™แƒšแƒ” timeout-แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช event loop-แƒ˜แƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒšแƒแƒ‘แƒแƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒแƒ“ แƒ›แƒ˜แƒ˜แƒฉแƒœแƒ”แƒ•แƒก | | แƒกแƒ˜แƒฆแƒ แƒ›แƒ˜แƒกแƒ”แƒฃแƒšแƒ˜ / blackbox | `/api/monitoring/health` | โ€” | `/healthz` แƒ˜แƒฃแƒฌแƒงแƒ”แƒ‘แƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก lifecycle-แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก (`ok` / `starting` / `stopping`). `/livez` แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒแƒก แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก (200, แƒ แƒแƒชแƒ handler-แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ; แƒ˜แƒก แƒ›แƒ–แƒแƒ“แƒงแƒแƒคแƒœแƒแƒก แƒแƒ  แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ). แƒแƒ แƒ˜แƒ•แƒ” แƒ›แƒแƒ˜แƒœแƒช แƒ˜แƒ›แƒแƒ•แƒ” Node event loop-แƒ–แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ”แƒ‘แƒ, แƒแƒ›แƒ˜แƒขแƒแƒ› CPU-แƒ–แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ›แƒ แƒ™แƒแƒขแƒแƒšแƒแƒ’แƒ˜แƒก แƒแƒœ แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒ•แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒจแƒ”แƒแƒคแƒ”แƒ แƒฎแƒแƒก โ€” แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒšแƒ˜ โ‰  แƒ’แƒแƒ—แƒ˜แƒจแƒฃแƒšแƒ˜. แƒ—แƒฃ HTTP-แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒก timeout แƒ”แƒฌแƒฃแƒ แƒ”แƒ‘แƒ, แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒ”แƒ— TCP แƒกแƒ˜แƒชแƒแƒชแƒฎแƒšแƒ˜แƒกแƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก. แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ: [แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ โ€” Kubernetes-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜](../ops/MONITORING_GUIDE.md#kubernetes-probe-recommendations). ## Docker Compose Caddy-แƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ (HTTPS Auto-TLS) OmniRoute-แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ“ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ Caddy-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  SSL-แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ“แƒแƒ›แƒ”แƒœแƒ˜แƒก 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-แƒ˜แƒก แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒแƒกแƒแƒ แƒ—แƒแƒ• **Cloudflare Quick Tunnel**-แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” `Dashboard โ†’ Endpoints`. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒกแƒแƒก `cloudflared` แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฉแƒแƒ›แƒแƒ˜แƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ‘แƒ, แƒ’แƒแƒ”แƒจแƒ•แƒ”แƒ‘แƒ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒ•แƒ˜แƒ แƒแƒ‘แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” `/v1` แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒกแƒ™แƒ”แƒœ แƒ“แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ `https://*.trycloudflare.com/v1` URL แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒกแƒแƒฏแƒแƒ แƒ URL-แƒ˜แƒก แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ’แƒแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ. แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒ•แƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก (Cloudflare, Tailscale, ngrok) แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ แƒแƒœ แƒ“แƒแƒ›แƒแƒšแƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ `Settings โ†’ Appearance`-แƒ“แƒแƒœ, แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ’แƒ•แƒ˜แƒ แƒแƒ‘แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. ### แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒ˜แƒ แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ - Quick Tunnel-แƒ˜แƒก URL-แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒ”แƒ‘แƒ˜แƒ—แƒ˜แƒ แƒ“แƒ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ. - Quick Tunnel-แƒ”แƒ‘แƒ˜ OmniRoute-แƒ˜แƒก แƒแƒœ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒ  แƒแƒฆแƒ“แƒ’แƒ”แƒ‘แƒ. แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ™แƒ•แƒšแƒแƒ• แƒฉแƒแƒ แƒ—แƒ”แƒ— แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒžแƒแƒœแƒ”แƒšแƒ˜แƒ“แƒแƒœ. - แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก Linux-แƒก, macOS-แƒกแƒ แƒ“แƒ Windows-แƒก `x64` / `arm64` แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ–แƒ”. - แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜ Quick Tunnel-แƒ”แƒ‘แƒ˜ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก HTTP/2 แƒขแƒ แƒแƒœแƒกแƒžแƒแƒ แƒขแƒก, แƒ แƒแƒ—แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒฃแƒš แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒฃแƒš แƒ’แƒแƒ แƒ”แƒ›แƒแƒ”แƒ‘แƒจแƒ˜ แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒ˜แƒฅแƒœแƒ”แƒก แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ›แƒแƒฃแƒ แƒ˜แƒแƒœแƒ˜ QUIC UDP แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜. แƒ—แƒฃ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ แƒแƒœแƒกแƒžแƒแƒ แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒกแƒฃแƒ แƒ—, แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— `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`. #### แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฎแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ `next` แƒแƒ แƒฎแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• `release/v*` แƒ‘แƒ แƒ”แƒœแƒฉแƒจแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ˜ push-แƒ˜แƒกแƒแƒก แƒ“แƒ แƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช AMD64-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ˜แƒกแƒ” ARM64-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒซแƒ•แƒ”แƒšแƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ‘แƒ แƒ”แƒœแƒฉแƒ”แƒ‘แƒ˜ แƒ›แƒแƒก แƒ•แƒ”แƒ  แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒก. แƒแƒ แƒฎแƒ˜ แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒฉแƒแƒ›แƒแƒกแƒแƒขแƒ•แƒ˜แƒ แƒ— image-แƒก แƒ˜แƒ› แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒฅแƒขแƒ˜แƒฃแƒ  release แƒ‘แƒ แƒ”แƒœแƒฉแƒจแƒ˜ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ“แƒ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ tag-แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ›แƒ“แƒ”. ```bash docker pull diegosouzapw/omniroute:next docker pull diegosouzapw/omniroute:next-web ``` Docker Compose-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ“แƒแƒแƒฌแƒ”แƒ แƒ”แƒ— แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ image-แƒ˜แƒก tag, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒ“แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜: ```yaml services: omniroute: image: diegosouzapw/omniroute:next ``` ```bash docker compose pull docker compose up -d ``` #### แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ แƒ“แƒ แƒฌแƒ˜แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ” แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ `next` แƒแƒ แƒ˜แƒก แƒชแƒ•แƒแƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ แƒ˜ แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฎแƒ˜. แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒแƒก แƒแƒฅแƒขแƒ˜แƒฃแƒ  release แƒ‘แƒ แƒ”แƒœแƒฉแƒจแƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ push-แƒ˜แƒกแƒแƒก แƒ“แƒ **แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“**. แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ build-แƒ˜แƒก แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ“แƒแƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ— image-แƒ˜แƒก digest: ```bash docker pull diegosouzapw/omniroute:next docker image inspect diegosouzapw/omniroute:next --format '{{index .RepoDigests 0}}' ``` แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ›แƒ“แƒ” แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— OmniRoute-แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ volume-แƒ˜แƒก แƒแƒœ bind-mounted แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ˜แƒก แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜. แƒฌแƒ˜แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒ–แƒ” แƒ“แƒแƒกแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒแƒฆแƒแƒ“แƒ’แƒ˜แƒœแƒ”แƒ— แƒแƒ“แƒ แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒœ digest แƒ“แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜: ```bash docker pull diegosouzapw/omniroute: docker compose up -d ``` release แƒ‘แƒ แƒ”แƒœแƒฉแƒ˜แƒก build แƒ•แƒ”แƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก `latest`-แƒก; แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒกแƒ”แƒ›แƒแƒœแƒขแƒ˜แƒ™แƒฃแƒ  แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ. `next` image-แƒ”แƒ‘แƒ–แƒ” แƒ™แƒ•แƒšแƒแƒ• แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก release image-แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒ“แƒ CRITICAL แƒ“แƒแƒœแƒ˜แƒก แƒ›แƒแƒฌแƒงแƒ•แƒšแƒแƒ“แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ‘แƒšแƒแƒ™แƒแƒ•แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. **`latest` แƒแƒ  แƒ˜แƒซแƒšแƒ”แƒ•แƒ git-แƒจแƒ˜ แƒแƒฅแƒขแƒฃแƒแƒšแƒฃแƒ แƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒแƒก.** `main`-แƒจแƒ˜ แƒแƒœ แƒแƒฅแƒขแƒ˜แƒฃแƒ  `release/v*` แƒ‘แƒ แƒ”แƒœแƒฉแƒจแƒ˜ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜ **แƒแƒ ** แƒ›แƒแƒฎแƒ•แƒ“แƒ”แƒ‘แƒ `:latest`-แƒจแƒ˜, แƒกแƒแƒœแƒแƒ› แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ แƒ˜ SemVer image แƒแƒ  แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒ˜แƒก job แƒแƒ  แƒ’แƒแƒœแƒแƒแƒฎแƒšแƒ”แƒ‘แƒก `:latest`-แƒก (แƒ˜แƒ’แƒ˜แƒ•แƒ” digest-แƒ˜แƒ—, แƒ แƒแƒช แƒแƒ› SemVer-แƒก แƒแƒฅแƒ•แƒก). แƒ—แƒฃ `latest` แƒ’แƒแƒงแƒ˜แƒœแƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒก, แƒฎแƒแƒšแƒ GitHub-แƒ–แƒ” แƒจแƒ”แƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒฃแƒ™แƒ•แƒ” แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒ, release แƒ‘แƒ แƒ”แƒœแƒฉแƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— `:next` แƒแƒœ แƒ“แƒแƒ”แƒšแƒแƒ“แƒ”แƒ— SemVer tag-แƒก. | แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ›แƒ˜แƒ–แƒแƒœแƒ˜ | แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— | | -------------------------------------------------------------------------------------- | ----------------------------------------- | | GitOps / แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ’แƒแƒ“แƒแƒฎแƒ แƒ แƒ“แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ | แƒ“แƒแƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ— `:X.Y.Z` (แƒแƒœ image-แƒ˜แƒก digest) | | แƒ›แƒ˜แƒฐแƒงแƒ•แƒ”แƒ— แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒš แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒ•แƒ”แƒ แƒกแƒ˜แƒ”แƒ‘แƒก แƒ“แƒ แƒ“แƒแƒ”แƒ—แƒแƒœแƒฎแƒ›แƒแƒ— แƒงแƒแƒ•แƒ”แƒš release-แƒ–แƒ” แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก | `:latest` | | แƒ’แƒแƒ›แƒแƒฃแƒจแƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜ `release/v*` commit-แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ | `:next` (แƒแƒ แƒ แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒกแƒ—แƒ•แƒ˜แƒก) | | `main`-แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ | `:main` (แƒแƒ แƒ แƒกแƒแƒฌแƒแƒ แƒ›แƒแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒกแƒ—แƒ•แƒ˜แƒก) | ## Dashboard-แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ Docker-แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ image-แƒ˜แƒก container แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  แƒ—แƒแƒ•แƒก แƒ•แƒ”แƒ  แƒฉแƒแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช OmniRoute แƒแƒฆแƒ›แƒแƒแƒฉแƒ”แƒœแƒก, แƒ แƒแƒ› container-แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก (`.git` checkout-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ“แƒ แƒแƒ แƒ npm-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ), แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ Dashboard-แƒ˜แƒก แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒแƒœแƒ”แƒ แƒ˜ npm/git-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก host-แƒ–แƒ” แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก แƒ“แƒ แƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒก: ```bash docker compose pull omniroute && docker compose up -d --force-recreate omniroute ``` แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒแƒ˜แƒฆแƒ”แƒ‘แƒ `AUTO_UPDATE_SERVICE`-แƒ“แƒแƒœ (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜แƒ `omniroute`, แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ `docker-compose.selfhost.yml`-แƒจแƒ˜). `pull` แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒชแƒฃแƒ แƒแƒ• tag-แƒก (`latest`, `next`) แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒก; แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ `:X.Y.Z` tag-แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒฏแƒ”แƒ  tag แƒจแƒ”แƒชแƒ•แƒแƒšแƒ”แƒ—. ### แƒ”แƒ แƒ—แƒ˜ แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ host-แƒ˜แƒก trigger แƒคแƒแƒ˜แƒšแƒ˜แƒ— แƒ˜แƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› **Update Now**-แƒ› แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ’แƒแƒแƒ’แƒ แƒซแƒ”แƒšแƒแƒก `/var/run/docker.sock`-แƒ˜แƒก mount-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” (แƒ แƒแƒช container-แƒก host-แƒ–แƒ” root แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก โ€” แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— แƒ–แƒ”แƒ›แƒแƒ— `cli` แƒžแƒ แƒแƒคแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ), OmniRoute-แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ–แƒ” แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— `DOCKER_UPDATE_TRIGGER_FILE` แƒ“แƒ host-แƒ–แƒ” แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ“แƒแƒ›แƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒ‘แƒ”แƒšแƒ˜: ```yaml services: omniroute: environment: DOCKER_UPDATE_TRIGGER_FILE: /app/data/update/docker-update.request volumes: - ./data:/app/data ``` แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ˜ `DATA_DIR`-แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก (แƒคแƒแƒ แƒ“แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ— แƒ’แƒแƒœแƒ˜แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ); แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒกแƒฎแƒ•แƒ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ แƒฃแƒแƒ แƒงแƒแƒคแƒ˜แƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ **Update Now** แƒแƒ› แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒฌแƒ”แƒ แƒก `{ "requestedAt": "...", "targetVersion": "X.Y.Z" }`-แƒก, แƒžแƒแƒกแƒฃแƒฎแƒแƒ‘แƒก `202`-แƒ˜แƒ—, แƒฎแƒแƒšแƒ Dashboard แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก `/api/system/version`-แƒก, แƒกแƒแƒœแƒแƒ› แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ แƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ“แƒ”แƒ‘แƒ, แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ’แƒ•แƒ”แƒ แƒ“แƒก แƒ—แƒแƒ•แƒ˜แƒ“แƒแƒœ แƒฉแƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒก. แƒแƒ› แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ OmniRoute แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒฃแƒจแƒ•แƒ”แƒ‘แƒก shell-แƒ˜แƒก แƒแƒœ Docker-แƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ loopback/LAN แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ. bind-mounted แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ host-แƒก แƒ“แƒแƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒขแƒแƒ‘แƒ˜แƒšแƒฃแƒ  แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒก แƒแƒซแƒšแƒ”แƒ•แƒก. `systemd`-แƒ˜แƒก แƒ”แƒ แƒ—แƒ”แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ (`/srv/omniroute` แƒจแƒ”แƒชแƒ•แƒแƒšแƒ”แƒ— แƒ˜แƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ˜แƒ—, แƒกแƒแƒ“แƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ compose แƒคแƒแƒ˜แƒšแƒ˜ แƒ“แƒ `data/` แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก): ```ini # /etc/systemd/system/omniroute-update.path [Unit] Description=OmniRoute-แƒ˜แƒก Dashboard-แƒ˜แƒ“แƒแƒœ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒ˜แƒขแƒแƒ แƒ˜แƒœแƒ’แƒ˜ [Path] PathExists=/srv/omniroute/data/update/docker-update.request [Install] WantedBy=multi-user.target ``` ```ini # /etc/systemd/system/omniroute-update.service [Unit] Description=OmniRoute-แƒ˜แƒก container-แƒ˜แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ“แƒ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ [Service] Type=oneshot WorkingDirectory=/srv/omniroute ExecStartPre=/usr/bin/rm -f /srv/omniroute/data/update/docker-update.request ExecStart=/bin/sh -c 'docker compose pull omniroute || (sleep 15 && docker compose pull omniroute)' ExecStart=/usr/bin/docker compose up -d --force-recreate omniroute ``` ```bash sudo systemctl daemon-reload sudo systemctl enable --now omniroute-update.path ``` แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒ›แƒ“แƒ” แƒจแƒšแƒ˜แƒก, แƒ แƒแƒ—แƒ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒชแƒ˜แƒ™แƒšแƒฃแƒ แƒแƒ“ แƒแƒ  แƒ’แƒแƒ›แƒ”แƒแƒ แƒ“แƒ”แƒก. `DOCKER_UPDATE_TRIGGER_FILE`-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” Dashboard แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒก แƒฎแƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก. ## แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒ: แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ SQLite แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— replica-แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ›แƒฎแƒแƒ แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ Docker / Kubernetes OmniRoute แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก **แƒ”แƒ แƒ— Node แƒžแƒ แƒแƒชแƒ”แƒกแƒก + แƒ”แƒ แƒ— SQLite writer-แƒก**. แƒแƒ› แƒขแƒแƒžแƒแƒšแƒแƒ’แƒ˜แƒแƒ–แƒ” แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒ **แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก**. | แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ | แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ | | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | แƒ”แƒ แƒ—แƒ˜ writer | **แƒแƒ ** แƒ’แƒแƒฃแƒจแƒ•แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” replica แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ˜แƒ›แƒแƒ•แƒ” SQLite แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ”แƒก DB-แƒก แƒ“แƒแƒแƒ–แƒ˜แƒแƒœแƒ”แƒ‘แƒก. | | แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ / แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ / HEALTHCHECK-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ | แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒคแƒ˜ SSE แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก, Dashboard-แƒ˜แƒก แƒกแƒ”แƒกแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก **แƒกแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ**. แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒฌแƒงแƒ“แƒ”แƒ‘แƒ. แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ endpoint-แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒก แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒจแƒ˜ แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ reverse-proxy-แƒกแƒ’แƒแƒœ แƒ˜แƒฆแƒ”แƒ‘แƒก **`502 Bad Gateway: Unknown error`**-แƒก แƒ“แƒ แƒแƒ แƒ OmniRoute-แƒ˜แƒก JSON-แƒก โ€” แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒก provider-แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒแƒ แƒ—แƒแƒแƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ•แƒ”แƒ  แƒ’แƒแƒœแƒแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ”แƒœ (#11015). | | `/healthz`-แƒ˜แƒก แƒ˜แƒ’แƒ˜แƒ•แƒ” event loop | แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒšแƒ›แƒ catalog-แƒ›แƒ แƒแƒœ compression tick-แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ probe-แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒแƒงแƒแƒ•แƒœแƒแƒก; แƒ›แƒแƒ™แƒšแƒ” timeout แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ **แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—** replica-แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒก. | **Probe-แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒขแƒ แƒ˜แƒชแƒ** (แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— [Kubernetes-แƒ˜แƒก probe-แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜](../ops/MONITORING_GUIDE.md#kubernetes-probe-recommendations)): | Probe | แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” | แƒแƒ  แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— | | -------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------- | | Liveness | TCP `PORT`-แƒ–แƒ” (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ `20128`), แƒแƒœ แƒ แƒ‘แƒ˜แƒšแƒ˜ HTTP `/healthz` | `/api/monitoring/health` | | Readiness | HTTP `GET /healthz` | แƒ›แƒแƒ™แƒšแƒ” timeout-แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒš event loop-แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒฃแƒšแƒแƒ“ แƒ›แƒ˜แƒ˜แƒฉแƒœแƒ”แƒ•แƒก | | แƒฆแƒ แƒ›แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ / แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | `/api/monitoring/health` | แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ kubelet liveness | **แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜:** แƒงแƒ•แƒ”แƒšแƒ แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒแƒก แƒ›แƒแƒ”แƒšแƒแƒ“แƒ”แƒ—. แƒ—แƒฃ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ—, แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒก แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒจแƒ”แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ—; แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• SQLite-แƒ–แƒ” rolling update แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก. Compose-แƒ˜แƒก `restart: unless-stopped` แƒ“แƒ Docker-แƒ˜แƒก `HEALTHCHECK` แƒแƒกแƒ”แƒ•แƒ” แƒฉแƒแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒก แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒก, แƒ แƒแƒ“แƒ”แƒกแƒแƒช container Unhealthy แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒ โ€” แƒ–แƒ”แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ”แƒแƒšแƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ. Kubernetes-แƒ˜แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ **แƒ”แƒ แƒ—แƒ˜ replica-แƒกแƒ—แƒ•แƒ˜แƒก** (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`-แƒ˜แƒก แƒ“แƒแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒ kube-แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒแƒซแƒšแƒ”แƒ•แƒก, SIGTERM-แƒ›แƒ“แƒ” Service-แƒ˜แƒก endpoint-แƒ”แƒ‘แƒ˜ แƒแƒ›แƒแƒ˜แƒฆแƒแƒก, แƒ แƒแƒ—แƒ **แƒแƒฎแƒแƒšแƒ˜** แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜ แƒ›แƒแƒ›แƒแƒ™แƒ•แƒ“แƒแƒ• แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒแƒฆแƒแƒ  แƒ›แƒแƒฎแƒ•แƒ“แƒ”แƒก. แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” `/v1/responses` SSE แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก `SHUTDOWN_TIMEOUT_MS`-แƒ˜แƒ— แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ 30 แƒฌแƒ›) แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ heavyweight admission lease-แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— (#11015). แƒแƒฎแƒแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ›แƒแƒ˜แƒœแƒช แƒแƒฆแƒฌแƒ”แƒ•แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒแƒ›แƒ“แƒ”, แƒ˜แƒฆแƒ”แƒ‘แƒก `503` + `Retry-After: 5` แƒžแƒแƒกแƒฃแƒฎแƒก. Recreate-แƒ˜แƒก แƒ“แƒ แƒแƒก, แƒกแƒแƒœแƒแƒ› แƒจแƒ”แƒ›แƒชแƒ•แƒšแƒ”แƒšแƒ˜ Ready แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ, endpoint-แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฅแƒแƒœแƒ˜แƒ— แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒฃแƒšแƒ˜ แƒจแƒฃแƒแƒšแƒ”แƒ“แƒ˜ แƒกแƒ แƒฃแƒš แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒแƒ“ แƒ แƒฉแƒ”แƒ‘แƒ โ€” แƒ”แƒก SQLite-แƒ˜แƒก แƒขแƒแƒžแƒแƒšแƒแƒ’แƒ˜แƒ˜แƒก แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒแƒ แƒ“แƒ แƒแƒ แƒ probe-แƒ˜แƒก แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ. แƒ’แƒแƒ แƒ” Postgres / multi-writer HA **แƒแƒ  แƒแƒ แƒ˜แƒก** แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ’แƒ–แƒ. แƒ—แƒฃ HA แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—, แƒ“แƒแƒขแƒแƒ•แƒ”แƒ— แƒ”แƒ แƒ—แƒ˜ แƒ แƒ”แƒžแƒšแƒ˜แƒ™แƒ แƒแƒœ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— แƒขแƒแƒžแƒแƒšแƒแƒ’แƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒ แƒแƒ”แƒฅแƒขแƒ›แƒ แƒชแƒแƒšแƒ™แƒ” แƒ’แƒแƒ›แƒแƒกแƒชแƒแƒ“แƒ แƒ“แƒ แƒ“แƒแƒแƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒ แƒ. Postgres/MySQL-แƒ–แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”แƒแƒ‘แƒก [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075)-แƒจแƒ˜. แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒ›แƒ“แƒ” **แƒ“แƒ˜แƒ“แƒ˜** `/v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒขแƒแƒ แƒฃแƒœแƒแƒ แƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ–แƒ แƒ“แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ“แƒ”แƒ แƒ—แƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ’แƒ–แƒแƒ N แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ (แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒ”แƒฅแƒชแƒ˜แƒ) แƒ“แƒ แƒแƒ แƒ `replicas > 1` แƒ”แƒ แƒ— volume-แƒ–แƒ”. ## แƒฐแƒแƒ แƒ˜แƒ–แƒแƒœแƒขแƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ แƒ”แƒ‘แƒ: N แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ”แƒ แƒ—แƒ˜ Node แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒแƒ แƒ˜แƒก **แƒ”แƒ แƒ—แƒ˜ V8 heap**. แƒแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒคแƒแƒ แƒฃแƒšแƒ˜ ~3โ€ฏMiB / ~750k-แƒขแƒแƒ™แƒ”แƒœแƒ˜แƒแƒœแƒ˜ coding-agent-แƒ˜แƒก `POST /v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ (RTK + Caveman) แƒแƒ› heap-แƒก ~12โ€ฏGi-แƒ–แƒ” แƒแƒ•แƒแƒ แƒ˜แƒฃแƒšแƒแƒ“ แƒฌแƒงแƒ•แƒ”แƒขแƒก (`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`) **แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ** แƒแƒ แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ `POST /v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ— แƒ›แƒแƒฅแƒ›แƒ”แƒ“ แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒคแƒ˜ แƒ‘แƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒฃแƒฏแƒ”แƒขแƒจแƒ˜ (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES` / #10110) แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜แƒก แƒแƒ“แƒ’แƒ˜แƒšแƒ˜. `OMNIROUTE_CHAT_LARGE_BODY_BYTES`-แƒ˜แƒก แƒขแƒแƒšแƒ˜ แƒแƒœ แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒ˜แƒ“แƒ˜ body-แƒ”แƒ‘แƒ˜ (แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ 256โ€ฏKiB) แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒซแƒ˜แƒ›แƒ” แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒก แƒšแƒ˜แƒ–แƒ˜แƒœแƒ’แƒก, แƒ แƒแƒกแƒแƒช แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒฃแƒšแƒแƒ“ แƒ›แƒซแƒ˜แƒ›แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜, แƒ“แƒ แƒ˜แƒ›แƒแƒ•แƒ” [#10437](https://github.com/diegosouzapw/OmniRoute/pull/10437) `tryAcquireHealthyHeadroom` แƒ’แƒแƒ›แƒแƒœแƒแƒ™แƒšแƒ˜แƒกแƒก (`OMNIROUTE_CHAT_ADMISSION_HEALTHY_HEADROOM`). แƒแƒ—แƒ”แƒฃแƒšแƒแƒ‘แƒ˜แƒ— แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ SSE แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜ (แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒก แƒฎแƒจแƒ˜แƒ แƒแƒ“ 40โ€“50 แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—) **แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒฃแƒฏแƒ”แƒขแƒ˜แƒก** แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜แƒ โ€” แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ— heap-แƒ˜แƒก + แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜/แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒกแƒšแƒแƒขแƒ”แƒ‘แƒ˜แƒก + `OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES`-แƒ˜แƒก แƒ–แƒแƒ›แƒ”แƒ‘แƒ˜ โ€” แƒ“แƒ แƒแƒ แƒ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒจแƒ˜ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ™แƒแƒชแƒ แƒ˜ โ€žแƒ›แƒแƒฅแƒก. 2โ€œ แƒšแƒ˜แƒ›แƒ˜แƒขแƒ˜. แƒ–แƒ”แƒฌแƒแƒšแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ›แƒงแƒแƒคแƒ˜ heap แƒ™แƒ•แƒšแƒแƒ• แƒฃแƒแƒ แƒงแƒแƒคแƒก แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒแƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒแƒ“แƒ˜ `503` แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒ—, แƒ แƒแƒ—แƒ #7849 แƒแƒ  แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ“แƒ”แƒก. **แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” heap-แƒ˜แƒก** (แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ V8 old-space-แƒ”แƒ‘แƒ˜แƒก) แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“ **แƒ“แƒฆแƒ”แƒกแƒ•แƒ”**: | แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ— | แƒแƒ  แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ— | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— **N แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜/pod**, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ **แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜** `DATA_DIR`-แƒ˜แƒ— / volume-แƒ˜แƒ— | แƒแƒ  แƒ“แƒแƒแƒงแƒ”แƒœแƒแƒ— `replicas > 1` แƒ”แƒ แƒ—แƒ˜ SQLite แƒคแƒแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | | แƒ›แƒซแƒ˜แƒ›แƒ” แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒคแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒฏแƒแƒœแƒกแƒแƒฆแƒ˜ แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ˜แƒก แƒ–แƒแƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ— heap-แƒ˜แƒก / แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒคแƒ˜ แƒ‘แƒแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒฃแƒฏแƒ”แƒขแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—; 1โ€“2 แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒกแƒ”แƒ แƒ•แƒแƒขแƒ˜แƒฃแƒšแƒ˜ #7849 แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ“แƒ แƒแƒ แƒ แƒžแƒ แƒแƒ“แƒฃแƒฅแƒขแƒ˜แƒก แƒ›แƒ™แƒแƒชแƒ แƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒฃแƒ›แƒ˜ | แƒแƒ  แƒ›แƒ˜แƒกแƒชแƒ”แƒ— แƒ”แƒ แƒ— แƒžแƒ แƒแƒชแƒ”แƒกแƒก 8ร— RAM แƒ“แƒ แƒจแƒ”แƒฃแƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒšแƒ˜แƒ›แƒ˜แƒขแƒ˜ | | แƒกแƒฃแƒ แƒ•แƒ˜แƒšแƒ˜แƒกแƒแƒ›แƒ”แƒ‘แƒ : `QUOTA_STORE_DRIVER=redis` + `QUOTA_STORE_REDIS_URL` **แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒ•แƒแƒขแƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก** | แƒแƒ  แƒ›แƒ˜แƒ˜แƒฉแƒœแƒ˜แƒแƒ— Redis แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒš SQLite-แƒแƒ“ โ€” แƒ˜แƒก แƒแƒกแƒ”แƒ—แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก | | แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ— แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ˜แƒก แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒแƒจแƒ˜ (แƒแƒœ แƒจแƒ”แƒ”แƒ’แƒฃแƒ”แƒ— แƒ“แƒแƒงแƒแƒคแƒ˜แƒš แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒžแƒแƒœแƒ”แƒšแƒ”แƒ‘แƒก) | แƒแƒ  แƒ›แƒแƒ”แƒšแƒแƒ“แƒ”แƒ— แƒ”แƒ แƒ— แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒžแƒแƒœแƒ”แƒšแƒก / แƒ”แƒ แƒ— แƒ–แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒก แƒงแƒ•แƒ”แƒšแƒ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก | | แƒฌแƒ˜แƒœ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒ”แƒ— แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ‘แƒแƒšแƒแƒœแƒกแƒ”แƒ‘แƒ”แƒšแƒ˜; API แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒแƒœ แƒกแƒ”แƒกแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— sticky แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ | แƒแƒ  แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒแƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ›แƒแƒ›แƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒšแƒ–แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ–แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ middleware | แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒ: แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒกแƒขแƒแƒœแƒชแƒ˜แƒ˜แƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒ˜ แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒ˜ `/v1/responses` แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ **แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒฃแƒฏแƒ”แƒขแƒ˜แƒก** แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜แƒ (heap + แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒงแƒแƒคแƒ˜ แƒ‘แƒแƒ˜แƒขแƒ”แƒ‘แƒ˜ / #10110). N แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒšแƒ˜ `DATA_DIR` แƒ›แƒแƒ˜แƒœแƒช แƒแƒ›แƒ แƒแƒ•แƒšแƒ”แƒ‘แƒก heap-แƒ”แƒ‘แƒก: แƒฐแƒแƒกแƒขแƒ˜แƒก RAM แƒฃแƒœแƒ“แƒ แƒคแƒแƒ แƒแƒ•แƒ“แƒ”แƒก `N ร— cgroup`-แƒก แƒ“แƒ แƒแƒ แƒ โ€žแƒ”แƒ แƒ— 16โ€ฏGi pod-แƒก N=8-แƒ˜แƒ—โ€œ. แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— `replicas > 1` แƒ”แƒ แƒ—แƒ˜ SQLite แƒคแƒแƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. 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: ``` แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒกแƒ˜แƒ›แƒญแƒ˜แƒ“แƒ แƒแƒ•แƒ” (แƒ™แƒแƒ›แƒžแƒ แƒ”แƒกแƒ˜แƒ˜แƒก HTTP isolate-แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ— แƒ’แƒแƒขแƒแƒœแƒ) แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ [#11023](https://github.com/diegosouzapw/OmniRoute/issues/11023)-แƒจแƒ˜. แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒš แƒ›แƒ“แƒ’แƒ แƒแƒ“ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒ แƒ—แƒ˜ แƒšแƒแƒ’แƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ™แƒšแƒแƒกแƒขแƒ”แƒ แƒ˜ แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ [#8075](https://github.com/diegosouzapw/OmniRoute/issues/8075)-แƒจแƒ˜. ## Gemini-แƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒแƒœแƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ˜ Docker-แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— Google AI Studio / Gemini API-แƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒแƒก HTTP 400, FAILED_PRECONDITION แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ— `User location is not supported for the API use.` แƒฐแƒแƒกแƒขแƒ–แƒ” แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒแƒ  แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒ’แƒแƒ›แƒแƒ•แƒแƒš แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก. DNS-แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ, IPv4/IPv6 แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜, VPN-แƒ˜แƒก แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒฅแƒกแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒแƒ“แƒ”แƒก. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— [Google-แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ แƒ”แƒ’แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜](https://ai.google.dev/gemini-api/docs/available-regions), แƒแƒกแƒ”แƒ•แƒ” แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜; แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒ  แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ› API แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜แƒ. ### แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒ”แƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒš แƒžแƒ แƒแƒฅแƒกแƒ˜แƒก แƒ“แƒแƒ–แƒแƒ แƒแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ Gemini แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— OmniRoute-แƒ˜แƒก [แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒ™แƒฃแƒ—แƒ•แƒœแƒ˜แƒšแƒ˜ แƒžแƒ แƒแƒฅแƒกแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ](../ops/PROXY_GUIDE.md#4-level-proxy-system), แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒ— แƒ’แƒแƒ˜แƒ›แƒ”แƒแƒ แƒ”แƒ— **Test Connection** แƒ“แƒ แƒ›แƒชแƒ˜แƒ แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ. แƒแƒ›แƒ’แƒ•แƒแƒ แƒแƒ“, แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ› แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒ— แƒจแƒ”แƒ›แƒแƒ˜แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒ. แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒžแƒ แƒแƒฅแƒกแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ›แƒแƒก แƒ˜แƒ แƒฉแƒ”แƒ•แƒก. แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒแƒ  แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒ–แƒ”แƒ“แƒ แƒ“แƒแƒœแƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ แƒ”แƒ’แƒ˜แƒแƒœแƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒแƒœแƒขแƒ˜แƒแƒก. ### แƒจแƒ”แƒแƒ“แƒแƒ แƒ”แƒ— แƒฐแƒแƒกแƒขแƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒฃแƒ แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜, แƒ›แƒแƒ“แƒ”แƒšแƒ˜ แƒ“แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒ˜ แƒ“แƒแƒขแƒแƒ•แƒ”แƒ—; แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒแƒจแƒ˜ แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒฉแƒแƒกแƒ•แƒแƒ— แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒžแƒ แƒแƒฅแƒกแƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ”แƒ‘แƒ˜ แƒแƒœ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ—, แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒ›แƒ”แƒš แƒแƒฏแƒแƒฎแƒ”แƒ‘แƒก แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— OS-แƒ˜แƒก แƒ แƒ”แƒ–แƒแƒšแƒ•แƒ”แƒ แƒ˜, แƒฐแƒแƒกแƒขแƒ–แƒ” แƒ“แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒ”แƒ แƒ—แƒ˜ แƒ“แƒ แƒ˜แƒ›แƒแƒ•แƒ” แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—: ```bash node -e 'require("node:dns").lookup("generativelanguage.googleapis.com", {all: true}, (error, addresses) => { if (error) { console.error(error.code); process.exitCode = 1; return; } console.log(addresses.map(({family}) => family)); })' docker compose exec omniroute node -e 'require("node:dns").lookup("generativelanguage.googleapis.com", {all: true}, (error, addresses) => { if (error) { console.error(error.code); process.exitCode = 1; return; } console.log(addresses.map(({family}) => family)); })' ``` `omniroute` แƒฉแƒแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ— แƒ˜แƒ› แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, `omniroute-web`). แƒ”แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒแƒฏแƒแƒฎแƒ”แƒ‘แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒขแƒแƒœแƒก. แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ `6` แƒ›แƒฎแƒแƒšแƒแƒ“ IPv6 DNS แƒจแƒ”แƒ“แƒ”แƒ’แƒ–แƒ” แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก: แƒ˜แƒก **แƒแƒ ** แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ“แƒ”แƒ’แƒ˜ IPv6 แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒแƒœ API-แƒ–แƒ” แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก. แƒ˜แƒฅ, แƒกแƒแƒ“แƒแƒช `curl` แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒแƒ แƒ˜แƒ•แƒ” แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒแƒ“แƒแƒ แƒ”แƒ— `curl -4 -I https://generativelanguage.googleapis.com` แƒ“แƒ `curl -6 -I https://generativelanguage.googleapis.com`. HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜ แƒแƒ› แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก, แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ˜แƒก แƒแƒ แƒแƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒงแƒแƒก; Gemini-แƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒแƒ‘แƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒšแƒ˜ แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก. ### แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ“แƒแƒœแƒ˜แƒก แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ: แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒ˜ IPv6 แƒ“แƒ แƒ แƒ”แƒ–แƒแƒšแƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ [#12762](https://github.com/diegosouzapw/OmniRoute/issues/12762)-แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ›แƒ แƒ—แƒแƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒฌแƒ•แƒ“แƒแƒ›แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก IPv6-แƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒ—แƒ แƒ“แƒ glibc-แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒฌแƒ”แƒกแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒ— แƒแƒฆแƒแƒ“แƒ’แƒ˜แƒœแƒ. แƒ”แƒก แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ—, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒ’แƒแƒ แƒ”แƒ›แƒแƒ–แƒ” แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ. แƒ แƒ”แƒ–แƒแƒšแƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒ›แƒ“แƒ” แƒ“แƒแƒ แƒฌแƒ›แƒฃแƒœแƒ“แƒ˜แƒ—, แƒ แƒแƒ› แƒฐแƒแƒกแƒขแƒ˜แƒก IPv6, แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜/แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ“แƒ แƒคแƒแƒ˜แƒ”แƒ แƒ•แƒแƒšแƒ˜แƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ แƒ—แƒฃแƒšแƒแƒ“ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. แƒ›แƒฎแƒแƒšแƒแƒ“ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ ULA แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒกแƒแƒฏแƒแƒ แƒ IPv6 แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒแƒ  แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก. Compose-แƒ˜แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• แƒฅแƒกแƒ”แƒšแƒ—แƒแƒœ แƒฃแƒ™แƒ•แƒ” แƒ›แƒ˜แƒ”แƒ แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒก แƒคแƒ แƒแƒ’แƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒ› แƒฅแƒกแƒ”แƒšแƒจแƒ˜ IPv6-แƒก แƒฉแƒแƒ แƒ—แƒแƒ•แƒก; แƒจแƒ”แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜, แƒžแƒแƒ แƒขแƒ”แƒ‘แƒ˜, แƒขแƒแƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ: ```yaml networks: default: enable_ipv6: true ``` แƒกแƒแƒฎแƒ”แƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, IPv6 แƒฉแƒแƒ แƒ—แƒ”แƒ— แƒ˜แƒ› แƒฅแƒกแƒ”แƒšแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒฃแƒ”แƒ แƒ—แƒ“แƒ”แƒ‘แƒ. Docker-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ ULA แƒฅแƒ•แƒ”แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ; แƒชแƒฎแƒแƒ“แƒแƒ“ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜, แƒกแƒฎแƒ•แƒ แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒ—แƒแƒœ แƒแƒ แƒแƒ’แƒแƒ“แƒแƒ›แƒคแƒแƒ แƒแƒ•แƒ˜ แƒฅแƒ•แƒ”แƒฅแƒกแƒ”แƒšแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ—, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒฅแƒกแƒ”แƒšแƒ˜ แƒแƒ›แƒแƒก แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก. แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— [Docker-แƒ˜แƒก IPv6 แƒฅแƒกแƒ”แƒšแƒ˜](https://docs.docker.com/engine/daemon/ipv6/) แƒ“แƒ [Compose-แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜](https://docs.docker.com/reference/compose-file/networks/#enable_ipv6). **glibc-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒš แƒ˜แƒ›แƒ˜แƒฏแƒจแƒ˜** `/etc/gai.conf`-แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ. แƒ แƒ”แƒžแƒแƒ–แƒ˜แƒขแƒแƒ แƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” Dockerfile Debian-แƒก แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก; musl-แƒ–แƒ” แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒ›แƒ˜แƒฏแƒ”แƒ‘แƒ˜ แƒแƒ› แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒก แƒแƒ  แƒ˜แƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒก. แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ ULA-แƒ˜แƒก แƒญแƒ“แƒ”แƒก `label fc00::/7 6`-แƒ“แƒแƒœ `label fc00::/7 1`-แƒ–แƒ” แƒชแƒ•แƒšแƒ˜แƒก. แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ— แƒ˜แƒ›แƒ˜แƒฏแƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒžแƒแƒšแƒ˜แƒขแƒ˜แƒ™แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒกแƒฎแƒ•แƒ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜: `label` แƒแƒœ `precedence` แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• แƒชแƒฎแƒ แƒ˜แƒšแƒก แƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฎแƒแƒšแƒแƒ“ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒš แƒฎแƒแƒ–แƒก แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก, แƒแƒ แƒแƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ. [glibc-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒแƒ แƒ˜](https://github.com/bminor/glibc/blob/master/posix/gai.conf) แƒแƒ› แƒกแƒ”แƒ›แƒแƒœแƒขแƒ˜แƒ™แƒแƒก แƒแƒฆแƒฌแƒ”แƒ แƒก. แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ `/etc/gai.conf`-แƒ–แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒจแƒ˜ bind-mount-แƒ˜แƒ— แƒ›แƒ˜แƒแƒ›แƒแƒ’แƒ แƒ”แƒ— แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ—. แƒ”แƒก แƒ˜แƒ› แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒจแƒ˜ **แƒ›แƒ—แƒ”แƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก** แƒชแƒ•แƒšแƒ˜แƒก OS-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒแƒก. แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒแƒก IPv6-แƒ˜แƒก แƒแƒ แƒฉแƒ”แƒ•แƒแƒก แƒแƒ  แƒแƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒก: Node-แƒ˜แƒก DNS-แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒแƒกแƒ แƒ“แƒ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒก แƒจแƒ”แƒ แƒฉแƒ”แƒ•แƒแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“, `--dns-result-order=ipv4first` แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒแƒก IPv4-แƒก แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒก แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ IPv4-แƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒ˜แƒฎแƒ˜แƒšแƒ”แƒ— [Node-แƒ˜แƒก DNS-แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ](https://nodejs.org/api/dns.html#dnssetdefaultresultorderorder). แƒฐแƒแƒกแƒขแƒ˜แƒก แƒ“แƒแƒœแƒ˜แƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ— Gemini แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒฎแƒ•แƒ แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ”แƒ‘แƒ˜. แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒฌแƒแƒจแƒแƒšแƒ”แƒ— แƒ›แƒแƒ แƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜ `gai.conf`-แƒ˜แƒก mount, แƒแƒฆแƒแƒ“แƒ’แƒ˜แƒœแƒ”แƒ— แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒฌแƒ˜แƒœแƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒ“แƒ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒจแƒ˜ แƒ“แƒแƒ–แƒแƒ แƒแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜/แƒฅแƒกแƒ”แƒšแƒ˜ แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒ”แƒœแƒ˜แƒ—. แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ› แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒกแƒ–แƒ” แƒ›แƒ˜แƒ”แƒ แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฎแƒ•แƒ แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒจแƒ”แƒแƒคแƒ”แƒ แƒฎแƒแƒก; แƒแƒ  แƒฌแƒแƒจแƒแƒšแƒแƒ— แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒขแƒแƒ›แƒ˜. ## แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒจแƒ”แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒ‘แƒ˜ - **SQLite WAL แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜:** `docker stop`-แƒก แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ”แƒชแƒ”แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ OmniRoute-แƒ›แƒ แƒฃแƒแƒฎแƒšแƒ”แƒกแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜ แƒ™แƒ•แƒšแƒแƒ• `storage.sqlite`-แƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก. แƒ—แƒแƒœแƒ“แƒแƒ แƒ—แƒฃแƒš Compose แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ’แƒแƒฉแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒ”แƒฆแƒแƒ•แƒแƒ—แƒ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒแƒ“ แƒฃแƒ™แƒ•แƒ” แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ 40 แƒฌแƒแƒ›แƒ˜. แƒ—แƒฃ image-แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒฃแƒจแƒ•แƒ”แƒ‘แƒ—, แƒจแƒ”แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ— `--stop-timeout 40`. - **`DISABLE_SQLITE_AUTO_BACKUP`:** แƒ“แƒแƒแƒงแƒ”แƒœแƒ”แƒ— `true`, แƒ—แƒฃ แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜/แƒฉแƒแƒฌแƒ”แƒ แƒแƒ›แƒ“แƒ” แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ’แƒแƒ แƒ”แƒ“แƒแƒœ แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ. แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒ•แƒšแƒแƒ• แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜, แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก snapshot-แƒ˜ แƒ“แƒ แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒ˜แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒแƒ›แƒชแƒแƒ•แƒ˜ แƒ›แƒ”แƒฅแƒแƒœแƒ˜แƒ–แƒ›แƒ˜. - **แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ:** แƒ™แƒแƒœแƒขแƒ”แƒ˜แƒœแƒ”แƒ แƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก, แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ“แƒแƒแƒ›แƒแƒฃแƒœแƒขแƒ”แƒ— volume แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” `/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`-แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒ˜ แƒชแƒœแƒแƒ‘แƒแƒ แƒ˜