# OmniRoute — Deployment Guide on VM with Cloudflare (Română) 🌐 **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) · 🇮🇱 [he](../../../he/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) · 🇷🇺 [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) · 🇮🇱 [he](../../../he/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) · 🇷🇺 [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) Ghid complet pentru instalarea și configurarea OmniRoute pe o mașină virtuală (VPS), cu domeniul gestionat prin Cloudflare. --- ## Cerințe preliminare | Element | Minim | Recomandat | | ----------- | ------------------------- | ---------------- | | **CPU** | 1 vCPU | 2 vCPU | | **RAM** | 1 GB | 2 GB | | **Disc** | 10 GB SSD | 25 GB SSD | | **SO** | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS | | **Domeniu** | Înregistrat pe Cloudflare | — | | **Docker** | Docker Engine 24+ | Docker 27+ | **Furnizori testați**: Akamai (Linode), DigitalOcean, Vultr, Hetzner, AWS Lightsail. --- ## 1. Configurați mașina virtuală ### 1.1 Creați instanța La furnizorul VPS preferat: - Alegeți Ubuntu 24.04 LTS - Selectați planul minim (1 vCPU / 1 GB RAM) - Setați o parolă puternică pentru root sau configurați o cheie SSH - Notați **adresa IP publică** (de exemplu, `203.0.113.10`) ### 1.2 Conectați-vă prin SSH ```bash ssh root@203.0.113.10 ``` ### 1.3 Actualizați sistemul ```bash apt update && apt upgrade -y ``` ### 1.4 Instalați Docker ```bash # Instalați dependențele apt install -y ca-certificates curl gnupg # Adăugați depozitul oficial 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 Instalați nginx ```bash apt install -y nginx ``` ### 1.6 Configurați firewallul (UFW) ```bash ufw default deny incoming ufw default allow outgoing ufw allow 22/tcp # SSH ufw allow 80/tcp # HTTP (redirecționare) ufw allow 443/tcp # HTTPS ufw enable ``` > **Sfat**: Pentru securitate maximă, restricționați porturile 80 și 443 numai la adresele IP Cloudflare. Consultați secțiunea [Securitate avansată](#advanced-security). --- ## 2. Instalați OmniRoute ### 2.1 Creați directorul de configurare ```bash mkdir -p /opt/omniroute ``` ### 2.2 Creați fișierul cu variabile de mediu ```bash cat > /opt/omniroute/.env << 'EOF' # === Securitate === 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 # OBLIGATORIU în producție: utilizat de puntea WS Codex Responses # === Aplicație === 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-uri (înlocuiți cu domeniul dvs.) === # URL de bază intern, de la server la server, pentru sarcini programate / solicitări către propriul server. BASE_URL=http://127.0.0.1:20128 # URL destinat browserului, utilizat pentru callback-uri OAuth, linkuri către panoul de control și URL-uri publice generate. NEXT_PUBLIC_BASE_URL=https://llms.seudominio.com # Suprascriere explicită opțională a originii publice pentru URL-urile generate ale resurselor publice. # OMNIROUTE_PUBLIC_BASE_URL=https://llms.seudominio.com # === Sincronizare în cloud (opțional) === # CLOUD_URL=https://cloud.omniroute.online # NEXT_PUBLIC_CLOUD_URL=https://cloud.omniroute.online EOF ``` > ⚠️ **IMPORTANT**: Generați chei secrete unice! Utilizați `openssl rand -hex 32` pentru fiecare cheie. ### 2.3 Porniți containerul ```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 Verificați dacă rulează ```bash docker ps | grep omniroute docker logs omniroute --tail 20 ``` Ar trebui să afișeze: `[DB] SQLite database ready` și `listening on port 20128`. --- ## 3. Configurarea nginx (proxy invers) ### 3.1 Generarea certificatului SSL (Cloudflare Origin) În panoul de control Cloudflare: 1. Accesați **SSL/TLS → Origin Server** 2. Faceți clic pe **Create Certificate** 3. Păstrați valorile implicite (15 ani, \*.yourdomain.com) 4. Copiați **Origin Certificate** și **Private Key** ```bash mkdir -p /etc/nginx/ssl # Lipiți certificatul nano /etc/nginx/ssl/origin.crt # Lipiți cheia privată nano /etc/nginx/ssl/origin.key chmod 600 /etc/nginx/ssl/origin.key ``` ### 3.2 Configurarea Nginx ```bash cat > /etc/nginx/sites-available/omniroute << 'NGINX' # Server implicit — blochează accesul direct prin 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; # Înlocuiți cu domeniul dvs. 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; # Suport WebSocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # SSE (evenimente trimise de server) — transmiterea în flux a răspunsurilor AI proxy_buffering off; proxy_cache off; proxy_read_timeout 600s; proxy_send_timeout 600s; } } # Redirecționare HTTP → HTTPS server { listen 80; listen [::]:80; server_name llms.yourdomain.com; return 301 https://$server_name$request_uri; } NGINX ``` Mențineți timpii de expirare ai fluxului proxy-ului invers aliniați cu variabilele de mediu pentru timpii de expirare OmniRoute. Dacă măriți `FETCH_TIMEOUT_MS` / `STREAM_IDLE_TIMEOUT_MS`, măriți `proxy_read_timeout` / `proxy_send_timeout` peste același prag. OmniRoute utilizează `NEXT_PUBLIC_BASE_URL` drept origine canonică accesibilă browserului pentru callback-urile OAuth și linkurile publice generate. Operațiunile de scriere autentificate din panoul de control utilizează cereri cu aceeași origine și protecție CSRF asociată sesiunii, astfel încât nu necesită un URL de bază public static. Anteturile `X-Forwarded-*` de mai sus sunt în continuare metadate de rutare utile, dar nu înlocuiesc setarea URL-ului public explicit atunci când OAuth sau linkurile generate pentru browser necesită unul. Activați `OMNIROUTE_TRUST_PROXY` numai dacă OmniRoute nu poate fi accesat direct de clienți și proxy-ul dvs. elimină/reconstruiește anteturile de redirecționare primite. ### 3.3 Activarea și testarea ```bash # Eliminați configurația implicită rm -f /etc/nginx/sites-enabled/default # Activați OmniRoute ln -sf /etc/nginx/sites-available/omniroute /etc/nginx/sites-enabled/omniroute # Testați și reîncărcați nginx -t && systemctl reload nginx ``` --- ## 4. Configurarea DNS Cloudflare ### 4.1 Adăugarea înregistrării DNS În panoul de control Cloudflare → DNS: | Tip | Nume | Conținut | Proxy | | --- | ------ | ------------------------- | ------------- | | A | `llms` | `203.0.113.10` (IP-ul VM) | ✅ Prin proxy | ### 4.2 Configurarea SSL În **SSL/TLS → Overview**: - Mod: **Full (Strict)** În **SSL/TLS → Edge Certificates**: - Utilizează întotdeauna HTTPS: ✅ Activat - Versiunea TLS minimă: TLS 1.2 - Rescrieri HTTPS automate: ✅ Activate ### 4.3 Testare ```bash curl -sI https://llms.seudominio.com/health # Ar trebui să returneze HTTP/2 200 ``` --- ## 5. Operare și mentenanță ### Actualizarea la o versiune nouă ```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 ``` ### Vizualizarea jurnalelor ```bash docker logs -f omniroute # Flux în timp real docker logs omniroute --tail 50 # Ultimele 50 de linii ``` ### Copie de siguranță manuală a bazei de date ```bash # Copiați datele din volum pe gazdă docker cp omniroute:/app/data ./backup-$(date +%F) # Sau comprimați întregul volum docker run --rm -v omniroute-data:/data -v $(pwd):/backup \ alpine tar czf /backup/omniroute-data-$(date +%F).tar.gz /data ``` ### Restaurarea dintr-o copie de siguranță ```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. Securitate avansată ### Restricționarea nginx la IP-urile Cloudflare ```bash cat > /etc/nginx/cloudflare-ips.conf << 'CF' # Intervalele IPv4 Cloudflare — actualizați-le periodic # 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 ``` Adăugați următoarea linie în `nginx.conf`, în interiorul blocului `http {}`: ```nginx include /etc/nginx/cloudflare-ips.conf; ``` ### Instalarea fail2ban ```bash apt install -y fail2ban systemctl enable fail2ban systemctl start fail2ban # Verificați starea fail2ban-client status sshd ``` ### Blocarea accesului direct la portul Docker ```bash # Împiedicați accesul extern direct la portul 20128 iptables -I DOCKER-USER -p tcp --dport 20128 -j DROP iptables -I DOCKER-USER -i lo -p tcp --dport 20128 -j ACCEPT # Salvați permanent regulile apt install -y iptables-persistent netfilter-persistent save ``` --- ## 7. Implementarea în Cloudflare Workers (opțional) Pentru acces la distanță prin Cloudflare Workers (fără a expune direct VM-ul): ```bash # În depozitul local cd omnirouteCloud npm install npx wrangler login npx wrangler deploy ``` Consultați și [TUNNELS_GUIDE.md](./TUNNELS_GUIDE.md) pentru ghidul pas cu pas privind Cloudflare Tunnel din depozit. Workerul independent `omnirouteCloud/` se află într-un depozit însoțitor separat. --- ## Rezumatul porturilor | Port | Serviciu | Acces | | ----- | ----------- | --------------------------- | | 22 | SSH | Public (cu fail2ban) | | 80 | nginx HTTP | Redirecționare → HTTPS | | 443 | nginx HTTPS | Prin Cloudflare Proxy | | 20128 | OmniRoute | Doar localhost (prin nginx) | ## Optimizare pentru memorie redusă / VPS mic Pentru implementări pe instanțe VPS mici (1 GB RAM sau mai puțin): - **Dezactivați serviciile din fundal** — setați `OMNIROUTE_DISABLE_BACKGROUND_SERVICES=1` pentru a omite planificatorul, serverul MCP și sarcinile periodice de mentenanță. Consultați `docs/reference/ENVIRONMENT.md`. - **Utilizați modul WAL al SQLite** — este activat implicit și reduce consumul maxim de memorie în timpul citirilor simultane. - **Limitați memoria heap V8** — setați `OMNIROUTE_MEMORY_MB` (de exemplu, `512`), astfel încât mediul de execuție să nu calibreze o limită mai mare decât cea a mașinii virtuale. Consultați `docs/reference/ENVIRONMENT.md`. - **Admiterea operațiunilor cu consum ridicat de resurse se scalează automat în funcție de limita heap-ului** -- odată ce `OMNIROUTE_MEMORY_MB` este setată mai sus, bugetul de octeți pentru ingestie (`OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES`) este derivat din aceeași limită, astfel încât o mașină virtuală cu memorie limitată primește deja un buget mai mic pentru cereri simultane, fără configurări suplimentare; cererile excedentare primesc un răspuns `503` reîncercabil, cu `Retry-After`, în loc să concureze pentru memorie. Setați limita tradițională `OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT` pentru numărul de cereri numai dacă aveți nevoie de o limită strictă suplimentară. - **Evitați `next build` pe VPS** — efectuați compilarea local și implementați rezultatul autonom (`.next/standalone/`). - **Monitorizați cu `top` / `free -m`** — OmniRoute utilizează de obicei 200-400 MB RSS în repaus pe o mașină virtuală cu 1 GB de memorie.