# OmniRoute — Deployment Guide on VM with Cloudflare (עברית) 🌐 **Languages:** 🇺🇸 [English](../../../../ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇹 [am](../../../am/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇦🇿 [az](../../../az/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇩🇰 [da](../../../da/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇩🇪 [de](../../../de/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇬🇷 [el](../../../el/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇸 [es](../../../es/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇪 [et](../../../et/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇩 [id](../../../id/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇹 [it](../../../it/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇭 [km](../../../km/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇲 [my](../../../my/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇴 [no](../../../no/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [or](../../../or/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇰 [si](../../../si/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [te](../../../te/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇭 [th](../../../th/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/VM_DEPLOYMENT_GUIDE.md) --- 🌐 **Languages:** 🇺🇸 [English](../../../../ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇹 [am](../../../am/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇦🇿 [az](../../../az/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇩🇰 [da](../../../da/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇩🇪 [de](../../../de/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇬🇷 [el](../../../el/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇸 [es](../../../es/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇪🇪 [et](../../../et/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇩 [id](../../../id/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇹 [it](../../../it/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇭 [km](../../../km/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇲🇲 [my](../../../my/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇴 [no](../../../no/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [or](../../../or/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇱🇰 [si](../../../si/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇸🇪 [sv](../../../sv/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇮🇳 [te](../../../te/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇭 [th](../../../th/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/ops/VM_DEPLOYMENT_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/ops/VM_DEPLOYMENT_GUIDE.md) מדריך מלא להתקנה ולהגדרה של OmniRoute במכונה וירטואלית (VPS), עם דומיין המנוהל באמצעות Cloudflare. --- ## דרישות מוקדמות | פריט | מינימום | מומלץ | | --------------- | ----------------- | ---------------- | | **מעבד** | 1 vCPU | 2 vCPU | | **זיכרון RAM** | 1 GB | 2 GB | | **דיסק** | 10 GB SSD | 25 GB SSD | | **מערכת הפעלה** | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS | | **דומיין** | רשום ב-Cloudflare | — | | **Docker** | Docker Engine 24+ | Docker 27+ | **ספקים שנבדקו**: Akamai (Linode), DigitalOcean, Vultr, Hetzner, AWS Lightsail. --- ## 1. הגדרת המכונה הווירטואלית ### 1.1 יצירת המופע אצל ספק ה-VPS המועדף עליכם: - בחרו ב-Ubuntu 24.04 LTS - בחרו בתוכנית המינימלית (1 vCPU / 1 GB RAM) - הגדירו סיסמת root חזקה או הגדירו מפתח SSH - רשמו את **כתובת ה-IP הציבורית** (לדוגמה, `203.0.113.10`) ### 1.2 התחברות באמצעות SSH ```bash ssh root@203.0.113.10 ``` ### 1.3 עדכון המערכת ```bash apt update && apt upgrade -y ``` ### 1.4 התקנת Docker ```bash # התקנת תלויות apt install -y ca-certificates curl gnupg # הוספת המאגר הרשמי של Docker 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 התקנת nginx ```bash apt install -y nginx ``` ### 1.6 הגדרת חומת האש (UFW) ```bash ufw default deny incoming ufw default allow outgoing ufw allow 22/tcp # SSH ufw allow 80/tcp # HTTP (הפניה מחדש) ufw allow 443/tcp # HTTPS ufw enable ``` > **טיפ**: לאבטחה מרבית, הגבילו את הגישה ליציאות 80 ו-443 לכתובות ה-IP של Cloudflare בלבד. עיינו בסעיף [אבטחה מתקדמת](#advanced-security). --- ## 2. התקנת OmniRoute ### 2.1 יצירת ספריית התצורה ```bash mkdir -p /opt/omniroute ``` ### 2.2 יצירת קובץ משתני הסביבה ```bash cat > /opt/omniroute/.env << 'EOF' # === אבטחה === 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 # נדרש בסביבת ייצור: משמש את Codex Responses WS bridge # === יישום === 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 # === כתובות URL (שנו לדומיין שלכם) === # כתובת URL פנימית בסיסית לתקשורת בין שרתים עבור משימות מתוזמנות / בקשות עצמיות. BASE_URL=http://127.0.0.1:20128 # כתובת URL הפונה לדפדפן ומשמשת לקריאות חוזרות של OAuth, לקישורי לוח הבקרה ולכתובות URL ציבוריות שנוצרו. NEXT_PUBLIC_BASE_URL=https://llms.seudominio.com # דריסה מפורשת ואופציונלית של המקור הציבורי עבור כתובות URL ציבוריות שנוצרו לנכסים. # OMNIROUTE_PUBLIC_BASE_URL=https://llms.seudominio.com # === סנכרון ענן (אופציונלי) === # CLOUD_URL=https://cloud.omniroute.online # NEXT_PUBLIC_CLOUD_URL=https://cloud.omniroute.online EOF ``` > ⚠️ **חשוב**: צרו מפתחות סודיים ייחודיים! השתמשו ב-`openssl rand -hex 32` עבור כל מפתח. ### 2.3 הפעלת הקונטיינר ```bash 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 אימות שהקונטיינר פועל ```bash docker ps | grep omniroute docker logs omniroute --tail 20 ``` אמור להופיע: `[DB] SQLite database ready` וגם `listening on port 20128`. --- ## 3. הגדרת nginx (פרוקסי הפוך) ### 3.1 יצירת אישור SSL ‏(Cloudflare Origin) בלוח הבקרה של Cloudflare: 1. עברו אל **SSL/TLS → Origin Server** 2. לחצו על **Create Certificate** 3. השאירו את ברירות המחדל (15 שנים, \*.yourdomain.com) 4. העתיקו את **Origin Certificate** ואת **Private Key** ```bash mkdir -p /etc/nginx/ssl # הדביקו את האישור nano /etc/nginx/ssl/origin.crt # הדביקו את המפתח הפרטי nano /etc/nginx/ssl/origin.key chmod 600 /etc/nginx/ssl/origin.key ``` ### 3.2 הגדרת Nginx ```bash cat > /etc/nginx/sites-available/omniroute << 'NGINX' # שרת ברירת המחדל — חוסם גישה ישירה באמצעות כתובת 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; # שנו לדומיין שלכם 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; # תמיכה ב-WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # SSE (אירועים הנשלחים מהשרת) — הזרמת תגובות בינה מלאכותית proxy_buffering off; proxy_cache off; proxy_read_timeout 600s; proxy_send_timeout 600s; } } # הפניית HTTP אל HTTPS server { listen 80; listen [::]:80; server_name llms.yourdomain.com; return 301 https://$server_name$request_uri; } NGINX ``` שמרו על התאמה בין זמני הקצוב של זרם הפרוקסי ההפוך לבין משתני הסביבה של זמני הקצוב ב-OmniRoute. אם תגדילו את `FETCH_TIMEOUT_MS` / `STREAM_IDLE_TIMEOUT_MS`, הגדילו את `proxy_read_timeout` / `proxy_send_timeout` אל מעבר לאותו סף. OmniRoute משתמש ב-`NEXT_PUBLIC_BASE_URL` כמקור הקנוני הפונה לדפדפן עבור קריאות חוזרות של OAuth וקישורים ציבוריים שנוצרו. פעולות כתיבה מאומתות בלוח הבקרה משתמשות בבקשות מאותו מקור ובנוסף בהגנת CSRF הקשורה להפעלה, ולכן הן אינן דורשות כתובת URL ציבורית סטטית כבסיס. כותרות `X-Forwarded-*` שלעיל עדיין שימושיות כמטא-נתוני ניתוב, אך הן אינן תחליף להגדרת כתובת ה-URL הציבורית במפורש כאשר OAuth או קישורי דפדפן שנוצרו זקוקים לה. הפעילו את `OMNIROUTE_TRUST_PROXY` רק אם OmniRoute אינו נגיש ישירות ללקוחות והפרוקסי שלכם מסיר/בונה מחדש כותרות העברה נכנסות. ### 3.3 הפעלה ובדיקה ```bash # הסרת הגדרת ברירת המחדל rm -f /etc/nginx/sites-enabled/default # הפעלת OmniRoute ln -sf /etc/nginx/sites-available/omniroute /etc/nginx/sites-enabled/omniroute # בדיקה וטעינה מחדש nginx -t && systemctl reload nginx ``` --- ## 4. הגדרת DNS ב-Cloudflare ### 4.1 הוספת רשומת DNS בלוח הבקרה של Cloudflare ← DNS: | סוג | שם | תוכן | Proxy | | --- | ------ | ----------------------------------- | -------- | | A | `llms` | `203.0.113.10` (כתובת ה-IP של ה-VM) | ✅ מופעל | ### 4.2 הגדרת SSL תחת **SSL/TLS ← Overview**: - מצב: **Full (Strict)** תחת **SSL/TLS ← Edge Certificates**: - שימוש תמידי ב-HTTPS: ✅ מופעל - גרסת TLS מינימלית: TLS 1.2 - שכתובים אוטומטיים ל-HTTPS: ✅ מופעל ### 4.3 בדיקה ```bash curl -sI https://llms.seudominio.com/health # אמור להחזיר HTTP/2 200 ``` --- ## 5. תפעול ותחזוקה ### שדרוג לגרסה חדשה ```bash 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 ``` ### הצגת יומנים ```bash docker logs -f omniroute # זרם בזמן אמת docker logs omniroute --tail 50 # 50 השורות האחרונות ``` ### גיבוי ידני של מסד הנתונים ```bash # העתקת הנתונים מאמצעי האחסון למארח docker cp omniroute:/app/data ./backup-$(date +%F) # לחלופין, דחיסת אמצעי האחסון כולו docker run --rm -v omniroute-data:/data -v $(pwd):/backup \ alpine tar czf /backup/omniroute-data-$(date +%F).tar.gz /data ``` ### שחזור מגיבוי ```bash 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. אבטחה מתקדמת ### הגבלת nginx לכתובות IP של Cloudflare ```bash cat > /etc/nginx/cloudflare-ips.conf << 'CF' # טווחי IPv4 של Cloudflare — יש לעדכן מעת לעת # 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 ``` הוסיפו את השורה הבאה לקובץ `nginx.conf` בתוך הבלוק `http {}`: ```nginx include /etc/nginx/cloudflare-ips.conf; ``` ### התקנת fail2ban ```bash apt install -y fail2ban systemctl enable fail2ban systemctl start fail2ban # בדיקת המצב fail2ban-client status sshd ``` ### חסימת גישה ישירה ליציאת Docker ```bash # מניעת גישה חיצונית ישירה ליציאה 20128 iptables -I DOCKER-USER -p tcp --dport 20128 -j DROP iptables -I DOCKER-USER -i lo -p tcp --dport 20128 -j ACCEPT # שמירת הכללים באופן קבוע apt install -y iptables-persistent netfilter-persistent save ``` --- ## 7. פריסה ב-Cloudflare Workers (אופציונלי) לגישה מרוחקת דרך Cloudflare Workers (ללא חשיפה ישירה של ה-VM): ```bash # במאגר המקומי cd omnirouteCloud npm install npx wrangler login npx wrangler deploy ``` עיינו גם ב-[TUNNELS_GUIDE.md](./TUNNELS_GUIDE.md) לקבלת מדריך Cloudflare Tunnel הכלול במאגר. ה-Worker העצמאי שב-`omnirouteCloud/` נמצא במאגר נלווה נפרד. --- ## סיכום פורטים | פורט | שירות | גישה | | ----- | ----------- | -------------------------- | | 22 | SSH | ציבורית (עם fail2ban) | | 80 | nginx HTTP | הפניה מחדש → HTTPS | | 443 | nginx HTTPS | דרך Cloudflare Proxy | | 20128 | OmniRoute | localhost בלבד (דרך nginx) | ## מיטוב לזיכרון מועט / VPS קטן עבור פריסות במופעי VPS קטנים (1 GB RAM או פחות): - **השביתו שירותי רקע** — הגדירו `OMNIROUTE_DISABLE_BACKGROUND_SERVICES=1` כדי לדלג על המתזמן, שרת MCP ומשימות תחזוקה תקופתיות. ראו `docs/reference/ENVIRONMENT.md`. - **השתמשו במצב WAL של SQLite** — מופעל כברירת מחדל ומפחית את שיא צריכת הזיכרון במהלך קריאות מקביליות. - **הגבילו את ערימת V8** — הגדירו את `OMNIROUTE_MEMORY_MB` (למשל `512`) כדי שסביבת הריצה לא תכייל תקרה הגדולה מזו של המכונה הווירטואלית. ראו `docs/reference/ENVIRONMENT.md`. - **בקרת הקבלה לבקשות כבדות מתרחבת אוטומטית בהתאם למגבלת הערימה** -- לאחר הגדרת `OMNIROUTE_MEMORY_MB` לעיל, תקציב הבתים לקליטה (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES`) נגזר מאותה תקרה, כך שמכונה וירטואלית בעלת מגבלת זיכרון מקבלת מראש תקציב קטן יותר לבקשות מקביליות ללא כוונון נוסף; בקשות עודפות מקבלות תגובת `503` הניתנת לניסיון חוזר, עם `Retry-After`, במקום להתחרות על הזיכרון. הגדירו את מגבלת מספר הבקשות הוותיקה `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` רק אם נדרשת תקרה קשיחה נוספת. - **הימנעו מהרצת `next build` ב-VPS** — בצעו את הבנייה מקומית ופרסו את הפלט העצמאי (`.next/standalone/`). - **נטרו באמצעות `top` / `free -m`** — OmniRoute משתמש בדרך כלל ב-200-400 MB של RSS במצב סרק במכונה וירטואלית עם 1 GB.