Skip to content

Latest commit

 

History

History
433 lines (322 loc) · 22 KB

VM_DEPLOYMENT_GUIDE.md

File metadata and controls

433 lines (322 loc) · 22 KB

OmniRoute — Deployment Guide on VM with Cloudflare (Azərbaycan dili)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 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 · 🇵🇭 phi · 🇵🇱 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


🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 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 · 🇵🇭 phi · 🇵🇱 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

Cloudflare vasitəsilə idarə olunan domenlə OmniRoute-u VM-də (VPS) quraşdırmaq və konfiqurasiya etmək üçün tam təlimat.


İlkin tələblər

Element Minimum Tövsiyə olunan
CPU 1 vCPU 2 vCPU
RAM 1 GB 2 GB
Disk 10 GB SSD 25 GB SSD
ƏS Ubuntu 22.04 LTS Ubuntu 24.04 LTS
Domen Cloudflare-də qeydiyyatdan keçirilmiş —
Docker Docker Engine 24+ Docker 27+

Sınaqdan keçirilmiş provayderlər: Akamai (Linode), DigitalOcean, Vultr, Hetzner, AWS Lightsail.


1. VM-i konfiqurasiya edin

1.1 İnstanı yaradın

Üstünlük verdiyiniz VPS provayderində:

  • Ubuntu 24.04 LTS seçin
  • Minimum planı seçin (1 vCPU / 1 GB RAM)
  • Güclü root parolu təyin edin və ya SSH açarını konfiqurasiya edin
  • İctimai IP ünvanını qeyd edin (məsələn, 203.0.113.10)

1.2 SSH vasitəsilə qoşulun

ssh root@203.0.113.10

1.3 Sistemi yeniləyin

apt update && apt upgrade -y

1.4 Docker-i quraşdırın

# Asılılıqları quraşdırın
apt install -y ca-certificates curl gnupg

# Rəsmi Docker repozitoriyasını əlavə edin
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-i quraşdırın

apt install -y nginx

1.6 Təhlükəsizlik divarını (UFW) konfiqurasiya edin

ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp    # SSH
ufw allow 80/tcp    # HTTP (yönləndirmə)
ufw allow 443/tcp   # HTTPS
ufw enable

Məsləhət: Maksimum təhlükəsizlik üçün 80 və 443 portlarına girişi yalnız Cloudflare IP-ləri ilə məhdudlaşdırın. Qabaqcıl təhlükəsizlik bölməsinə baxın.


2. OmniRoute-u quraşdırın

2.1 Konfiqurasiya qovluğunu yaradın

mkdir -p /opt/omniroute

2.2 Mühit dəyişənləri faylını yaradın

cat > /opt/omniroute/.env << 'EOF'
# === Təhlükəsizlik ===
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  # İstehsal mühitində TƏLƏB OLUNUR: Codex Responses WS körpüsü tərəfindən istifadə olunur

# === Tətbiq ===
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-lər (öz domeninizlə dəyişdirin) ===
# Planlaşdırılmış tapşırıqlar / özünə sorğular üçün daxili serverdən-serverə əsas URL.
BASE_URL=http://127.0.0.1:20128
# OAuth geri çağırışları, idarəetmə paneli keçidləri və yaradılan ictimai URL-lər üçün istifadə olunan brauzer yönümlü URL.
NEXT_PUBLIC_BASE_URL=https://llms.seudominio.com
# Yaradılan ictimai resurs URL-ləri üçün istəyə bağlı açıq mənşə ünvanı əvəzetməsi.
# OMNIROUTE_PUBLIC_BASE_URL=https://llms.seudominio.com

# === Bulud sinxronizasiyası (istəyə bağlı) ===
# CLOUD_URL=https://cloud.omniroute.online
# NEXT_PUBLIC_CLOUD_URL=https://cloud.omniroute.online
EOF

⚠️ VACİB: Unikal məxfi açarlar yaradın! Hər açar üçün openssl rand -hex 32 istifadə edin.

2.3 Konteyneri başladın

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 İşlədiyini yoxlayın

docker ps | grep omniroute
docker logs omniroute --tail 20

Bu mesajlar göstərilməlidir: [DB] SQLite database ready və listening on port 20128.


3. nginx-i konfiqurasiya edin (Əks proksi)

3.1 SSL sertifikatı yaradın (Cloudflare Origin)

Cloudflare idarəetmə panelində:

  1. SSL/TLS → Origin Server bölməsinə keçin
  2. Create Certificate düyməsinə klikləyin
  3. Standart parametrləri saxlayın (15 il, *.yourdomain.com)
  4. Origin Certificate və Private Key məzmunlarını kopyalayın
mkdir -p /etc/nginx/ssl

# Sertifikatı yapışdırın
nano /etc/nginx/ssl/origin.crt

# Məxfi açarı yapışdırın
nano /etc/nginx/ssl/origin.key

chmod 600 /etc/nginx/ssl/origin.key

3.2 Nginx konfiqurasiyası

cat > /etc/nginx/sites-available/omniroute << 'NGINX'
# Standart server — IP vasitəsilə birbaşa girişi bloklayır
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;  # Öz domeninizlə əvəz edin

    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 dəstəyi
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # SSE (Server-Sent Events) — süni intellekt cavablarının axınla ötürülməsi
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

# HTTP → HTTPS yönləndirməsi
server {
    listen 80;
    listen [::]:80;
    server_name llms.yourdomain.com;
    return 301 https://$server_name$request_uri;
}
NGINX

Əks proksinin axın taymautlarını OmniRoute taymaut mühit dəyişənləri ilə uyğunlaşdırın. Əgər FETCH_TIMEOUT_MS / STREAM_IDLE_TIMEOUT_MS dəyərlərini artırırsınızsa, proxy_read_timeout / proxy_send_timeout dəyərlərini də eyni həddən yuxarı artırın.

OmniRoute OAuth geri çağırışları və yaradılan ictimai keçidlər üçün brauzerin istifadə etdiyi kanonik mənbə kimi NEXT_PUBLIC_BASE_URL dəyişənindən istifadə edir. Autentifikasiya edilmiş idarəetmə panelindəki yazma əməliyyatları eyni mənbəli sorğulardan və sessiyaya bağlı CSRF qorumasından istifadə edir, buna görə də onlar statik ictimai əsas URL tələb etmir. Yuxarıdakı X-Forwarded-* başlıqları marşrutlaşdırma metadatası kimi yenə də faydalıdır, lakin OAuth və ya yaradılan brauzer keçidləri üçün açıq şəkildə ictimai URL təyin edilməsini əvəz etmir. OMNIROUTE_TRUST_PROXY parametrini yalnız OmniRoute müştərilər tərəfindən birbaşa əlçatan olmadıqda və proksiniz daxil olan yönləndirmə başlıqlarını silib yenidən qurduqda aktivləşdirin.

3.3 Aktivləşdirin və sınaqdan keçirin

# Standart konfiqurasiyanı silin
rm -f /etc/nginx/sites-enabled/default

# OmniRoute-u aktivləşdirin
ln -sf /etc/nginx/sites-available/omniroute /etc/nginx/sites-enabled/omniroute

# Sınaqdan keçirin və yenidən yükləyin
nginx -t && systemctl reload nginx

4. Cloudflare DNS-i konfiqurasiya edin

4.1 DNS qeydi əlavə edin

Cloudflare idarəetmə panelində → DNS:

Növ Ad Məzmun Proksi
A llms 203.0.113.10 (VM IP ünvanı) ✅ Proksidən keçirilir

4.2 SSL-i konfiqurasiya edin

SSL/TLS → Overview bölməsində:

  • Rejim: Full (Strict)

SSL/TLS → Edge Certificates bölməsində:

  • Həmişə HTTPS istifadə et: ✅ Aktiv
  • Minimum TLS versiyası: TLS 1.2
  • Avtomatik HTTPS yenidən yazmaları: ✅ Aktiv

4.3 Sınaq

curl -sI https://llms.seudominio.com/health
# HTTP/2 200 qaytarmalıdır

5. İstismar və texniki xidmət

Yeni versiyaya təkmilləşdirin

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

Jurnallara baxın

docker logs -f omniroute          # Real vaxt axını
docker logs omniroute --tail 50   # Son 50 sətir

Verilənlər bazasının əl ilə ehtiyat nüsxəsini yaradın

# Verilənləri həcmdən hosta köçürün
docker cp omniroute:/app/data ./backup-$(date +%F)

# Və ya bütün həcmi sıxışdırın
docker run --rm -v omniroute-data:/data -v $(pwd):/backup \
  alpine tar czf /backup/omniroute-data-$(date +%F).tar.gz /data

Ehtiyat nüsxəsindən bərpa edin

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. Qabaqcıl təhlükəsizlik

nginx-i Cloudflare IP-ləri ilə məhdudlaşdırın

cat > /etc/nginx/cloudflare-ips.conf << 'CF'
# Cloudflare IPv4 diapazonları — mütəmadi olaraq yeniləyin
# 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

Aşağıdakı sətri nginx.conf faylındakı http {} blokuna əlavə edin:

include /etc/nginx/cloudflare-ips.conf;

fail2ban quraşdırın

apt install -y fail2ban
systemctl enable fail2ban
systemctl start fail2ban

# Vəziyyəti yoxlayın
fail2ban-client status sshd

Docker portuna birbaşa girişi bloklayın

# 20128 portuna xaricdən birbaşa girişin qarşısını alın
iptables -I DOCKER-USER -p tcp --dport 20128 -j DROP
iptables -I DOCKER-USER -i lo -p tcp --dport 20128 -j ACCEPT

# Qaydaları qalıcı edin
apt install -y iptables-persistent
netfilter-persistent save

7. Cloudflare Workers-a yerləşdirin (İstəyə bağlı)

VM-i birbaşa açıq etmədən Cloudflare Workers vasitəsilə uzaqdan giriş üçün:

# Lokal repozitoriyada
cd omnirouteCloud
npm install
npx wrangler login
npx wrangler deploy

Repozitoriya daxilindəki Cloudflare Tunnel üzrə addım-addım təlimat üçün həmçinin TUNNELS_GUIDE.md sənədinə baxın. Müstəqil omnirouteCloud/ worker-i ayrıca köməkçi repozitoriyada yerləşir.


Portların xülasəsi

Port Xidmət Giriş
22 SSH İctimai (fail2ban ilə)
80 nginx HTTP Yönləndirmə → HTTPS
443 nginx HTTPS Cloudflare Proxy vasitəsilə
20128 OmniRoute Yalnız localhost (nginx vasitəsilə)

Az yaddaşlı / Kiçik VPS üçün optimallaşdırma

Kiçik VPS instanslarında (1 GB RAM və ya daha az) yerləşdirmələr üçün:

  • Fon xidmətlərini deaktiv edin — planlaşdırıcını, MCP serverini və dövri texniki xidmət tapşırıqlarını ötürmək üçün OMNIROUTE_DISABLE_BACKGROUND_SERVICES=1 təyin edin. docs/reference/ENVIRONMENT.md sənədinə baxın.
  • SQLite WAL rejimindən istifadə edin — standart olaraq aktivdir və paralel oxumalar zamanı pik yaddaş istifadəsini azaldır.
  • V8 heap ölçüsünü məhdudlaşdırın — icra mühitinin VM-dən böyük limit kalibrləməməsi üçün OMNIROUTE_MEMORY_MB parametrini (məsələn, 512) təyin edin. docs/reference/ENVIRONMENT.md sənədinə baxın.
  • Ağır sorğuların qəbulu heap limitinə uyğun avtomatik miqyaslanır -- yuxarıda OMNIROUTE_MEMORY_MB təyin edildikdən sonra daxiletmə bayt büdcəsi (OMNIROUTE_CHAT_MAX_INFLIGHT_BYTES) eyni limit əsasında avtomatik hesablanır. Beləliklə, yaddaşı məhdud VM əlavə tənzimləmə olmadan paralel sorğular üçün daha kiçik büdcə əldə edir; artıq sorğular isə yaddaş uğrunda rəqabət aparmaq əvəzinə Retry-After ilə birlikdə təkrar cəhd edilə bilən 503 cavabı alır. Yalnız bunun üzərinə sərt limit qoymaq lazımdırsa, köhnə OMNIROUTE_CHAT_MAX_HEAVY_IN_FLIGHT sorğu sayı limitini təyin edin.
  • VPS-də next build işlətməyin — qurmanı lokal olaraq yaradın və müstəqil çıxışı (.next/standalone/) yerləşdirin.
  • top / free -m ilə monitorinq aparın — OmniRoute adətən 1 GB-lıq VM-də boşdayanma zamanı 200-400 MB RSS istifadə edir.