1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
22 KiB
OmniRoute — Deployment Guide on VM with Cloudflare (Filipino)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
🌐 Mga Wika: 🇺🇸 English | 🇪🇹 አማርኛ | 🇸🇦 العربية | 🇦🇿 Azərbaycan dili | 🇧🇬 Български | 🇧🇩 বাংলা | 🇨🇿 Čeština | 🇩🇰 Dansk | 🇩🇪 Deutsch | 🇬🇷 Ελληνικά | 🇪🇸 Español | 🇪🇪 Eesti | 🇮🇷 فارسی | 🇫🇮 Suomi | 🇫🇷 Français | 🇮🇪 Gaeilge | 🇮🇳 ગુજરાતી | 🇳🇬 Hausa | 🇮🇱 עברית | 🇮🇳 हिन्दी | 🇭🇷 Hrvatski | 🇭🇺 Magyar | 🇦🇲 Հայերեն | 🇮🇩 Bahasa Indonesia | 🇳🇬 Igbo | 🇮🇹 Italiano | 🇯🇵 日本語 | 🇬🇪 ქართული | 🇰🇭 ខ្មែរ | 🇮🇳 ಕನ್ನಡ | 🇰🇷 한국어 | 🇱🇹 Lietuvių | 🇱🇻 Latviešu | 🇮🇳 മലയാളം | 🇮🇳 मराठी | 🇲🇾 Bahasa Melayu | 🇲🇹 Malti | 🇲🇲 မြန်မာ | 🇳🇵 नेपाली | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇮🇳 ଓଡ଼ିଆ | 🇮🇳 ਪੰਜਾਬੀ | 🇵🇭 Filipino | 🇵🇱 Polski | 🇵🇹 Português (Portugal) | 🇧🇷 Português (Brasil) | 🇷🇴 Română | 🇷🇺 Русский | 🇱🇰 සිංහල | 🇸🇰 Slovenčina | 🇸🇮 Slovenščina | 🇷🇸 Српски | 🇸🇪 Svenska | 🇰🇪 Kiswahili | 🇮🇳 தமிழ் | 🇮🇳 తెలుగు | 🇹🇭 ไทย | 🇹🇷 Türkçe | 🇺🇦 Українська | 🇵🇰 اردو | 🇺🇿 Oʻzbekcha | 🇻🇳 Tiếng Việt | 🇳🇬 Yorùbá | 🇨🇳 中文 (简体) | 🇹🇼 中文 (繁體)
Kumpletong gabay sa pag-install at pag-configure ng OmniRoute sa isang VM (VPS) na may domain na pinamamahalaan sa pamamagitan ng Cloudflare.
Mga Kinakailangan
| Item | Minimum | Inirerekomenda |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB |
| Disk | 10 GB SSD | 25 GB SSD |
| OS | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
| Domain | Nakarehistro sa Cloudflare | — |
| Docker | Docker Engine 24+ | Docker 27+ |
Mga nasubukang provider: Akamai (Linode), DigitalOcean, Vultr, Hetzner, AWS Lightsail.
1. I-configure ang VM
1.1 Gumawa ng instance
Sa napili mong VPS provider:
- Piliin ang Ubuntu 24.04 LTS
- Piliin ang minimum na plan (1 vCPU / 1 GB RAM)
- Magtakda ng matibay na root password o mag-configure ng SSH key
- Itala ang pampublikong IP (hal.,
203.0.113.10)
1.2 Kumonekta sa pamamagitan ng SSH
ssh root@203.0.113.10
1.3 I-update ang system
apt update && apt upgrade -y
1.4 I-install ang Docker
# I-install ang mga dependency
apt install -y ca-certificates curl gnupg
# Idagdag ang opisyal na Docker repository
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $ (. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
1.5 I-install ang nginx
apt install -y nginx
1.6 I-configure ang Firewall (UFW)
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP (pag-redirect)
ufw allow 443/tcp # HTTPS
ufw enable
Tip
: Para sa pinakamataas na seguridad, limitahan ang mga port 80 at 443 sa mga Cloudflare IP lamang. Tingnan ang seksyong Advanced na Seguridad.
2. I-install ang OmniRoute
2.1 Gumawa ng directory ng configuration
mkdir -p /opt/omniroute
2.2 Gumawa ng file ng mga environment variable
cat > /opt/omniroute/.env << 'EOF'
# === Seguridad ===
JWT_SECRET=CHANGE-TO-A-UNIQUE-64-CHAR-SECRET-KEY
INITIAL_PASSWORD=YourSecurePassword123!
API_KEY_SECRET=REPLACE-WITH-ANOTHER-SECRET-KEY
STORAGE_ENCRYPTION_KEY=REPLACE-WITH-THIRD-SECRET-KEY
STORAGE_ENCRYPTION_KEY_VERSION=v1
MACHINE_ID_SALT=CHANGE-TO-A-UNIQUE-SALT
OMNIROUTE_WS_BRIDGE_SECRET=REPLACE-WITH-WS-BRIDGE-SECRET # KINAKAILANGAN sa production: ginagamit ng Codex Responses WS bridge
# === App ===
PORT=20128
NODE_ENV=production
HOSTNAME=0.0.0.0
DATA_DIR=/app/data
APP_LOG_TO_FILE=true
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=false
# === Mga URL (palitan ayon sa iyong domain) ===
# Panloob na base URL para sa komunikasyon ng mga server para sa mga nakaiskedyul na job / self-fetch.
BASE_URL=http://127.0.0.1:20128
# URL na nakikita ng browser at ginagamit para sa mga OAuth callback, dashboard link, at mga nabuong pampublikong URL.
NEXT_PUBLIC_BASE_URL=https://llms.seudominio.com
# Opsyonal na tahasang pag-override ng pampublikong origin para sa mga nabuong URL ng pampublikong asset.
# OMNIROUTE_PUBLIC_BASE_URL=https://llms.seudominio.com
# === Cloud Sync (opsyonal) ===
# CLOUD_URL=https://cloud.omniroute.online
# NEXT_PUBLIC_CLOUD_URL=https://cloud.omniroute.online
EOF
⚠️ MAHALAGA: Bumuo ng mga natatanging secret key! Gamitin ang
openssl rand -hex 32para sa bawat key.
2.3 Simulan ang container
docker pull diegosouzapw/omniroute:latest
docker run -d \
--name omniroute \
--restart unless-stopped \
--env-file /opt/omniroute/.env \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
2.4 Tiyaking tumatakbo ito
docker ps | grep omniroute
docker logs omniroute --tail 20
Dapat nitong ipakita ang: [DB] SQLite database ready at listening on port 20128.
3. I-configure ang nginx (Reverse Proxy)
3.1 Bumuo ng SSL certificate (Cloudflare Origin)
Sa dashboard ng Cloudflare:
- Pumunta sa SSL/TLS → Origin Server
- I-click ang Create Certificate
- Panatilihin ang mga default (15 taon, *.yourdomain.com)
- Kopyahin ang Origin Certificate at ang Private Key
mkdir -p /etc/nginx/ssl
# I-paste ang certificate
nano /etc/nginx/ssl/origin.crt
# I-paste ang private key
nano /etc/nginx/ssl/origin.key
chmod 600 /etc/nginx/ssl/origin.key
3.2 Configuration ng Nginx
cat > /etc/nginx/sites-available/omniroute << 'NGINX'
# Default na server — hinaharangan ang direktang pag-access gamit ang IP
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/nginx/ssl/origin.crt;
ssl_certificate_key /etc/nginx/ssl/origin.key;
server_name _;
return 444;
}
# OmniRoute — HTTPS
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name llms.yourdomain.com; # Palitan ng iyong domain
ssl_certificate /etc/nginx/ssl/origin.crt;
ssl_certificate_key /etc/nginx/ssl/origin.key;
ssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:20128;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Suporta sa WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# SSE (Server-Sent Events) — pag-stream ng mga tugon ng AI
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
}
}
# Pag-redirect ng HTTP → HTTPS
server {
listen 80;
listen [::]:80;
server_name llms.yourdomain.com;
return 301 https://$server_name$request_uri;
}
NGINX
Panatilihing nakaayon ang mga timeout ng reverse-proxy stream sa iyong mga timeout env var ng OmniRoute. Kung tataasan mo ang
FETCH_TIMEOUT_MS / STREAM_IDLE_TIMEOUT_MS, taasan ang proxy_read_timeout / proxy_send_timeout
nang higit sa parehong threshold.
Ginagamit ng OmniRoute ang NEXT_PUBLIC_BASE_URL bilang canonical na origin na nakikita ng browser para sa mga OAuth
callback at mga nabuong pampublikong link. Gumagamit ang mga authenticated na pagsusulat sa dashboard ng mga same-origin na request
kasama ang session-bound na proteksyon laban sa CSRF, kaya hindi nangangailangan ang mga ito ng static na pampublikong base URL. Ang
mga X-Forwarded-* header sa itaas ay kapaki-pakinabang pa ring routing metadata, ngunit hindi pamalit ang mga ito
sa pagtatakda ng tahasang pampublikong URL kapag kailangan ito para sa OAuth o sa mga nabuong browser link. I-enable lamang ang
OMNIROUTE_TRUST_PROXY kung hindi direktang maaabot ng mga client ang OmniRoute at inaalis/muling binubuo ng iyong proxy
ang mga papasok na forwarded header.
3.3 I-enable at Subukan
# Alisin ang default na configuration
rm -f /etc/nginx/sites-enabled/default
# I-enable ang OmniRoute
ln -sf /etc/nginx/sites-available/omniroute /etc/nginx/sites-enabled/omniroute
# Subukan at i-reload
nginx -t && systemctl reload nginx
4. I-configure ang Cloudflare DNS
4.1 Magdagdag ng DNS record
Sa Cloudflare dashboard → DNS:
| Uri | Pangalan | Nilalaman | Proxy |
|---|---|---|---|
| A | llms |
203.0.113.10 (VM IP) |
✅ Proxied |
4.2 I-configure ang SSL
Sa ilalim ng SSL/TLS → Overview:
- Mode: Full (Strict)
Sa ilalim ng SSL/TLS → Edge Certificates:
- Always Use HTTPS: ✅ Naka-on
- Minimum TLS Version: TLS 1.2
- Automatic HTTPS Rewrites: ✅ Naka-on
4.3 Pagsubok
curl -sI https://llms.seudominio.com/health
# Dapat magbalik ng HTTP/2 200
5. Operasyon at Pagpapanatili
Mag-upgrade sa bagong bersyon
docker pull diegosouzapw/omniroute:latest
docker stop omniroute && docker rm omniroute
docker run -d --name omniroute --restart unless-stopped \
--env-file /opt/omniroute/.env \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
Tingnan ang mga log
docker logs -f omniroute # Real-time na stream
docker logs omniroute --tail 50 # Huling 50 linya
Manu-manong pag-backup ng database
# Kopyahin ang data mula sa volume papunta sa host
docker cp omniroute:/app/data ./backup-$(date +%F)
# O i-compress ang buong volume
docker run --rm -v omniroute-data:/data -v $(pwd):/backup \
alpine tar czf /backup/omniroute-data-$(date +%F).tar.gz /data
I-restore mula sa backup
docker stop omniroute
docker run --rm -v omniroute-data:/data -v $(pwd):/backup \
alpine sh -c "rm -rf /data/* && tar xzf /backup/omniroute-data-YYYY-MM-DD.tar.gz -C /"
docker start omniroute
6. Advanced na Seguridad
Limitahan ang nginx sa mga IP ng Cloudflare
cat > /etc/nginx/cloudflare-ips.conf << 'CF'
# Mga saklaw ng Cloudflare IPv4 — pana-panahong i-update
# https://www.cloudflare.com/ips-v4/
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;
CF
Idagdag ang sumusunod sa nginx.conf sa loob ng http {} block:
include /etc/nginx/cloudflare-ips.conf;
I-install ang fail2ban
apt install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban
# Suriin ang status
fail2ban-client status sshd
I-block ang direktang pag-access sa Docker port
# Pigilan ang direktang external na pag-access sa port 20128
iptables -I DOCKER-USER -p tcp --dport 20128 -j DROP
iptables -I DOCKER-USER -i lo -p tcp --dport 20128 -j ACCEPT
# Panatilihin ang mga patakaran
apt install -y iptables-persistent
netfilter-persistent save
7. Mag-deploy sa Cloudflare Workers (Opsyonal)
Para sa remote na pag-access sa pamamagitan ng Cloudflare Workers (nang hindi direktang inilalantad ang VM):
# Sa lokal na repository
cd omnirouteCloud
npm install
npx wrangler login
npx wrangler deploy
Tingnan din ang TUNNELS_GUIDE.md para sa gabay sa Cloudflare Tunnel na nasa repository. Ang standalone na omnirouteCloud/ worker ay nasa hiwalay na companion repo.
Buod ng mga Port
| Port | Serbisyo | Access |
|---|---|---|
| 22 | SSH | Pampubliko (may fail2ban) |
| 80 | nginx HTTP | Pag-redirect → HTTPS |
| 443 | nginx HTTPS | Sa pamamagitan ng Cloudflare Proxy |
| 20128 | OmniRoute | Localhost lamang (sa pamamagitan ng nginx) |
Pag-optimize para sa Mababang Memory / Maliit na VPS
Para sa mga deployment sa maliliit na VPS instance (1 GB RAM o mas mababa):
- I-disable ang mga serbisyo sa background — itakda ang
OMNIROUTE_DISABLE_BACKGROUND_SERVICES=1upang laktawan ang scheduler, MCP server, at mga pana-panahong gawain sa maintenance. Tingnan angdocs/reference/ENVIRONMENT.md. - Gamitin ang SQLite WAL mode — naka-enable bilang default at binabawasan ang pinakamataas na paggamit ng memory habang may sabay-sabay na pagbasa.
- Limitahan ang V8 heap — itakda ang
OMNIROUTE_MEMORY_MB(hal.512) upang hindi mag-calibrate ang runtime ng ceiling na mas malaki kaysa sa VM. Tingnan angdocs/reference/ENVIRONMENT.md. - Awtomatikong nag-a-adjust ang pagtanggap ng mabibigat na request ayon sa heap cap -- kapag naitakda na ang
OMNIROUTE_MEMORY_MBsa itaas, awtomatikong ibinabatay ang ingest byte budget (OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES) sa parehong ceiling, kaya nakakakuha na ang isang VM na may limitadong memory ng mas maliit na budget para sa magkakasabay na request nang walang karagdagang pag-tune; ang mga sobrang request ay makakatanggap ng503na maaaring subukang muli, kasama angRetry-After, sa halip na makipag-agawan sa memory. Itakda lamang ang legacy na request-count cap naOMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHTkung kailangan mo ng mahigpit na ceiling bukod pa rito. - Iwasang patakbuhin ang
next buildsa VPS — mag-build nang lokal at i-deploy ang standalone output (.next/standalone/). - Subaybayan gamit ang
top/free -m— karaniwang gumagamit ang OmniRoute ng 200-400 MB RSS habang idle sa isang 1 GB VM.