# تقرير البنية التحتية لنظام سيرو (Siro) - النشر في سوريا **التاريخ:** 16 يونيو 2026 **المشروع:** Siro - تطبيق نقل الركاب **الموقع:** سوريا --- ## 📊 ملخص الخدمات المطلوبة | الخدمة | الدور | بروتوكول | بوابات | |--------|-------|-----------|--------| | **Load Balancer** | توزيع الأحمال على API | HTTP/HTTPS | 80, 443 | | **API Server x2** | المعالجة الرئيسية | HTTP/HTTPS | 8080 (داخلي) | | **MySQL Server** | قاعدة البيانات الرئيسية | MySQL | 3306 (داخلي) | | **Redis Server** | كاش + مواقع السائقين | Redis | 6379 (داخلي) | | **Driver Socket** | WebSocket للسائقين | WS/WSS + HTTP | 2020, 2021 | | **Passenger Socket** | WebSocket للركاب | WS/WSS + HTTP | 3030, 3031 | | **Wallet Server** | نظام المحفظة والمدفوعات | HTTP/HTTPS | 8081 (داخلي) | | **OSRM Server (1-2)** | محرك التوجيه والخرائط | HTTP | 5000 (داخلي) | | **Map SaaS** | خدمات الخرائط المخصصة | HTTP/HTTPS | 8082 | --- ## 🖥️ 1. Load Balancer (موازن الأحمال) **الجهاز/السيرفر: جهاز واحد - عقدة أمامية** | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 2 Core (Xeon / AMD EPYC) | لا يحتاج طاقة معالجة، فقط توجيه الطلبات | | **الرام** | 4 GB | HAProxy/Nginx يستهلك القليل | | **التخزين** | 50 GB SSD | نظام تشغيل + سجلات | | **الشبكة** | 1 Gbps | استيعاب حجم الطلبات | | **نظام التشغيل** | Ubuntu 22.04 LTS أو Rocky Linux 9 | | **البرامج المطلوبة:** - Nginx ( reverse proxy + SSL termination + load balancing upstream للـ API servers ) - HAProxy (اختياري للـ TCP load balancing للسوكتات) - Keepalived (لـ High Availability إذا أردت أكثر من موازن) - Certbot / Let's Encrypt (لشهادات SSL) **نظام التوزيع المقترح:** ``` Nginx upstream → API Server 1 (weight=5) + API Server 2 (weight=5) └── Round Robin أو Least Connections ``` --- ## 🖥️ 2. API Backend Server (سيرفر الباك إند الرئيسي) **العدد: 2 سيرفرات خلف الـ Load Balancer** | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 8 Core (Xeon / AMD EPYC) | PHP-FPM يحتاج عدة عمال لكل نواة؛ 8cores = 16-24 worker | | **الرام** | 16 GB | PHP worker ~50MB/worker + نظام + كاش | | **التخزين** | 100 GB NVMe SSD | كود المصدر + صور السائقين + سجلات | | **الشبكة** | 1 Gbps | اتصال مع الـ DB والخدمات الأخرى | | **نظام التشغيل** | Ubuntu 22.04 LTS | | **البرامج المطلوبة:** - PHP 8.2/8.3 (مع extensions: pdo_mysql, redis, openssl, mbstring, gd) - PHP-FPM (مع pm.max_children = 40-50 لكل سيرفر) - Nginx للمحتوى الثابت - Supervisor (لإدارة العمليات) **توجيه الطلبات من كل سيرفر:** - `api-syria.siromove.com/siro_v3` → Main API - `ride-syria.siromove.com/siro` → Ride API - `location-syria.siromove.com/siro/ride/location` → Location API - كل هذه على نفس السيرفر، نفس قاعدة البيانات الرئيسية **PHP-FPM Configuration:** ```ini pm = dynamic pm.max_children = 50 pm.start_servers = 8 pm.min_spare_servers = 4 pm.max_spare_servers = 12 pm.max_requests = 1000 ``` --- ## 🗄️ 3. MySQL Database Server (سيرفر قاعدة البيانات الرئيسية) **العدد: 1 + 1 Replica (اختياري للنسخ الاحتياطي)** | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 16 Core (Xeon / AMD EPYC) | MySQL يتوسع أفقياً مع عدد النوى | | **الرام** | 64 GB | InnoDB Buffer Pool يحتاج ذاكرة كبيرة للأداء | | **التخزين** | 1 TB NVMe SSD | 3 قواعد بيانات (intaleqDB1, ridesDB, locationDB) ~ 100-300 GB + سجلات | | **الشبكة** | 10 Gbps | عمليات كتابة/قراءة مكثفة من سيرفرين API + سوكتات | | **نظام التشغيل** | Ubuntu 22.04 LTS | | **ضبط MySQL المقترح:** ```ini innodb_buffer_pool_size = 40G # 60-70% من الرام innodb_log_file_size = 2G innodb_flush_log_at_trx_commit = 2 # أداء أفضل للتحديثات innodb_flush_method = O_DIRECT max_connections = 300 # 150 لكل API server + 50 للسوكتات tmp_table_size = 256M max_heap_table_size = 256M query_cache_type = 0 # OFF (MySQL 8.0 ألغاه) ``` **الجداول الحساسة للأداء:** - `car_locations` - يستخدم SPATIAL indexes + GEOMETRY - تأكد من `SRID=4326` - `car_tracks` - 2.5M+ سجل - يحتاج أرشفة دورية أو partitioning - `ride` + `waitingRides` - استعلامات متكررة مع SPATIAL - `palces11` - FULLTEXT search **ملاحظة: قاعدة بيانات الخرائط والتتبع (locationDB) هي الأكبر من حيث حجم الكتابة، يمكن وضعها على NVMe منفصل.** --- ## ⚡ 4. Redis Server (سيرفر الكاش والمواقع اللحظية) **العدد: 1 (أو 1 + 1 Sentinel للتبديل التلقائي)** | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 8 Core | Redis single-threaded للعمليات الأساسية لكن له عمليات خلفية | | **الرام** | 32 GB | بيانات GEO (مواقع السائقين) + كاش الجلسات + rate limiting | | **التخزين** | 100 GB NVMe | RDB/AOF persistence | | **الشبكة** | 10 Gbps | زمن استجابة منخفض جداً مطلوب | | **نظام التشغيل** | Ubuntu 22.04 LTS | | **ملاحظات هامة:** - يجب أن يكون Redis على نفس الشبكة الداخلية (Latency < 1ms) - الـ Socket servers (driver + passenger) يعتمدان على Redis بشكل كبير (GEOADD/GEORADIUS كل 500ms) - حجم الذاكرة المطلوب يعتمد على عدد السائقين النشطين: كل موقع سائق ~ 200 bytes → 1M سجل = 200MB فقط - لكن الكاش الإضافي (driver:profile:*، الجلسات) يحتاج مساحة إضافية **نظام الكاش:** ``` driver_socket → Redis GEO (GEOADD) passenger_socket → Redis GEORADIUS API servers → Redis GET/SET (profile cache) Rate Limiting → Redis INCR + EXPIRE Session Store → Redis SETEX ``` --- ## 🔌 5. WebSocket Servers (سيرفرات السوكت) ### 5.1 Driver Socket Server | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 8 Core | Workerman PHP event loop مع 500ms batch | | **الرام** | 16 GB | كل اتصال WebSocket يستهلك ذاكرة + buffer | | **التخزين** | 50 GB SSD | سجلات فقط | | **الشبكة** | 1 Gbps | | **البوابات:** `2020` (WebSocket للسائقين)، `2021` (Internal HTTP بين السوكتات) ### 5.2 Passenger Socket Server | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 4-8 Core | أقل تحميلاً من driver socket | | **الرام** | 8 GB | | | **التخزين** | 50 GB SSD | | | **الشبكة** | 1 Gbps | | **البوابات:** `3030` (WebSocket للركاب)، `3031` (Internal HTTP) **ملاحظة:** يمكن دمج السوكتين في سيرفر واحد (Driver + Passenger على نفس الجهاز) لتوفير التكاليف إذا كان عدد المستخدمين متوسطاً. أما إذا توقعتم نمواً كبيراً، فالأفضل فصلهما. **نظام التشغيل للسوكتات:** يفضل Ubuntu 22.04 LTS ويحتاج PHP-CLI وليس PHP-FPM --- ## 💳 6. Wallet / Payment Server (سيرفر المحفظة والمدفوعات) | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 4 Core | طلبات أقل تواتراً لكنها حسّاسة | | **الرام** | 8 GB | | | **التخزين** | 50 GB SSD | كود + سجلات | | **الشبكة** | 1 Gbps | | **ملاحظات:** - يمكن فصله كخدمة مستقلة أو وضعه على أحد API servers - يحتاج اتصال مع بوابات الدفع (PayMob، MTN، Syriatel Cash) - **هام:** يحتاج HTTPS إلزامي (ضروري لأمان المدفوعات) - إذا كانت المدفوعات محليّة في سوريا فقط، قد تحتاج بوابات دفع سورية (MTN Cash, Syriatel Cash) --- ## 🗺️ 7. OSRM Routing Server (محرك التوجيه) **العدد: 1-2 سيرفر (حسب عدد المسارات المطلوبة)** | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 16 Core | OSRM routing requests تستهلك CPU عالٍ | | **الرام** | 32 GB | OSRM يحمل خريطة كاملة في الذاكرة | | **التخزين** | 200 GB NVMe | بيانات OSM لسوريا + ملفات OSRM processed | | **الشبكة** | 1 Gbps | | **حجم OSM لسوريا:** - ملف الخريطة (syria-latest.osm.pbf) ~ 100-200 MB - بعد معالجة OSRM (contracted graph) ~ 500 MB - 1 GB - الذاكرة المطلوبة للتشغيل ~ 8-16 GB للخريطة نفسها **يمكنك تشغيله على Docker:** ```bash docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/syria-latest.osm.pbf docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-contract /data/syria-latest.osrm docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/syria-latest.osrm ``` --- ## 🗺️ 8. Map SaaS Server (سيرفر الخرائط المخصص) | المواصفة | المطلوب | السبب | |----------|---------|-------| | **المعالج** | 4-8 Core | | | **الرام** | 16 GB | للـ tile caching والـ geocoding | | **التخزين** | 200 GB SSD | Tile cache + بيانات جغرافية | | **الشبكة** | 1 Gbps | | هذا السيرفر يقوم بـ: - Reverse Geocoding (تحويل إحداثيات إلى عنوان) - Place Search (البحث عن الأماكن) - Route calculation (قد يمرر طلبات إلى OSRM) - يمكن استخدام Nominatim + PostgreSQL/PostGIS للتجيكودينغ --- ## 🌐 9. الشبكة (Network Topology) ### 9.1 الشبكة الداخلية (Internal Network) **مفضّلة**: شبكة داخلية خاصة (VLAN / Private Subnet) ``` ┌─────────────┐ │ Internet │ └──────┬──────┘ │ ┌──────┴──────┐ │ Firewall │ │ (iptables/ │ │ nftables) │ └──────┬──────┘ │ ┌──────┴──────┐ │Load Balancer │ │(Nginx/HAProxy)│ │ Public IP │ └──────┬──────┘ │ ┌────────────────┼────────────────┐ │ │ │ ┌──────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐ │ API SRV 1 │ │ API SRV 2 │ │ Socket SV │ │ 10.0.1.10 │ │ 10.0.1.11 │ │10.0.1.20-21 │ └──────┬──────┘ └─────┬──────┘ └──────┬──────┘ │ │ │ └────────────────┼────────────────┘ │ ┌────────────────┼────────────────┐ │ │ │ ┌──────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐ │ MySQL DB │ │ Redis │ │ OSRM │ │ 10.0.1.30 │ │ 10.0.1.31 │ │ 10.0.1.40 │ └─────────────┘ └────────────┘ └────────────┘ ┌─────────────┐ ┌────────────┐ │ Wallet SV │ │ Map SaaS │ │ 10.0.1.50 │ │ 10.0.1.60 │ └─────────────┘ └────────────┘ ``` **نطاق الشبكة الداخلية:** `10.0.1.0/24` (أي نطاق خاص) ### 9.2 الشبكة الخارجية - السيرفرات التي تحتاج IP عام: **Load Balancer فقط** - Socket Servers: يمكن تشغيل WebSocket على نفس Load Balancer (رفع بروتوكول WS إلى WSS) - OSRM و Map SaaS: داخليان فقط (API servers تتصل بهم داخلياً) - قاعدة البيانات: **ليست عامة أبداً** - فقط وصلات داخلية ### 9.3 الإجراءات الأمنية - **Firewall**: فتح المنافذ التالية فقط من الخارج: - 80 (HTTP → redirect to 443) - 443 (HTTPS) - 2020 (WebSocket driver - اختياري إذا прямо WS) - 3030 (WebSocket passenger - اختياري) - 22 (SSH - فقط من IPs محددة) - **Fail2ban**: على Load Balancer لحماية SSH و API - **UFW/iptables**: على كل سيرفر لحجب المنافذ غير المستخدمة - **VPN**: للوصول إلى الإدارة (Tailscale أو WireGuard) - **SSL/TLS**: جميع الاتصالات الخارجية مشفرة ### 9.4 هل شبكة داخلية أم خارجية؟ | الخدمة | المفضل | |--------|--------| | API ↔ Database | **داخلي** (VLAN 10.0.1.x) | | API ↔ Redis | **داخلي** | | Socket ↔ Database | **داخلي** | | API ↔ Wallet | **داخلي** (أو خارجي إذا wallet على سيرفر مختلف كلياً) | | API ↔ OSRM | **داخلي** | | API ↔ Map SaaS | **داخلي** | | Internet ↔ Load Balancer | **خارجي** | | Driver App ↔ Socket | **خارجي** (لكن عبر Load Balancer أيضاً) | --- ## 📍 10. اعتبارات خاصة لسوريا ### 10.1 استضافة السيرفرات **الخيارات الموصى بها (بالترتيب):** 1. **مراكز البيانات السورية:** - **شركة الاتصالات السورية (STE)** - خدمات hosting واستضافة - **Ayaa Cloud** - مزود خدمات سحابية سوري - **SNS (Syrian Network Systems)** - colocation واستضافة 2. **السيرفرات في دول مجاورة (للأداء):** - **لبنان** (IDM، Ogero) - أقرب وأقل زمن استجابة (< 30ms) - **الأردن** - خيار ممتاز (زمن استجابة ~ 30-50ms) - **تركيا** - أقرب لشمال سوريا - **الإمارات / السعودية** - استقرار أكبر لكن زمن استجابة أعلى (~ 80-100ms) 3. **سيرفرات عالمية:** - **Hetzner (ألمانيا/فنلندا)** - أفضل قيمة مقابل سعر (~ 150-200ms latency) - **OVH (فرنسا)** - جيد - **DigitalOcean / Linode** - للاستضافة السحابية ### 10.2 مشاكل الإنترنت في سوريا | المشكلة | الحل | |---------|------| | **انقطاع الكهرباء** | UPS لكل سيرفر + مولد كهربائي للمركز | | **ضعف سرعة الإنترنت** | استخدام Content Delivery (CDN) للملفات الثابتة | | **الحجب (بعض الخدمات)** | استخدام VPN أو proxy للاتصال بخدمات خارجية (PayMob، Firebase) إذا لزم الأمر | | **تكاليف النطاق العالي** | ضغط البيانات (gzip) + تحجيم الصور + lazy loading | | **تذبذب الاتصال (Packet Loss)** | TCP tuning, BBR congestion control على السيرفرات | ### 10.3 سرعة الإنترنت في سوريا | الخدمة | السرعة المتوقعة | ملاحظة | |--------|-----------------|--------| | ADSL | 4-16 Mbps | الأكثر انتشاراً | | Fiber (FTTH) | 20-100 Mbps | متوفرة في المدن الكبرى | | 4G/LTE | 10-50 Mbps | جيد للمستخدمين النهائيين | | Business Line | 50-200 Mbps | المطلوب للسيرفرات | **لتطبيق مثالي في سوريا:** - حجم API response يجب أن يكون < 50 KB - حجم الصور مضغوط (WebP) - استخدام Lazy loading للخرائط - تفعيل HTTP/2 على الـ Load Balancer ### 10.4 استهلاك النطاق الترددي المقدر | الخدمة | الاستهلاك التقريبي (شهرياً) | |--------|---------------------------| | API Requests (REST) | 200-500 GB | | WebSocket Data | 500 GB - 2 TB | | Map Tiles & Routing | 200-500 GB | | Uploads (صور، وثائق) | 100-200 GB | | **المجموع التقريبي** | **1-3 TB شهرياً** | --- ## 📐 11. الترتيب المقترح للتنفيذ ``` المرحلة 1: البنية الأساسية ├── تجهيز Load Balancer (Nginx + SSL) ├── تجهيز MySQL Server (تركيب + ضبط + تحميل البيانات) └── تجهيز Redis Server المرحلة 2: السيرفرات الأساسية ├── تجهيز API Server 1 (PHP + Nginx + FPM) ├── تجهيز API Server 2 (clone من 1) └── ربط API Servers مع Load Balancer المرحلة 3: السيرفرات المساعدة ├── تجهيز Socket Server (Driver Socket + Passenger Socket) ├── تجهيز Wallet Server └── ربط الكل مع قاعدة البيانات و Redis المرحلة 4: الخرائط ├── تجهيز OSRM Server (تحميل OSM سوريا + معالجة) ├── تجهيز Map SaaS Server └── اختبار التوجيه والتجيكودينغ المرحلة 5: الاختبار والإطلاق ├── اختبار تحميل (Load Testing) - استخدام K6 أو Locust ├── اختبار WebSocket مع 1000+ مستخدم وهمي ├── مراقبة (Prometheus + Grafana) └── الإطلاق التدريجي ``` --- ## 💰 12. التكلفة التقديرية الشهرية (للسيرفرات) | السيرفر | المواصفات | التكلفة التقريبية (شهرياً) | |---------|-----------|--------------------------| | Load Balancer | 2 Core, 4GB | $20 - $40 | | API Server x2 | 8 Core, 16GB (لكل) | $100 - $200 (لكل) | | MySQL Server | 16 Core, 64GB, 1TB NVMe | $300 - $600 | | Redis Server | 8 Core, 32GB | $100 - $200 | | Socket Server(s) | 8 Core, 16GB | $80 - $150 | | Wallet Server | 4 Core, 8GB | $40 - $80 | | OSRM Server | 16 Core, 32GB | $200 - $400 | | Map SaaS | 4 Core, 16GB | $60 - $120 | | **المجموع التقريبي** | | **$900 - $1,890 شهرياً** | **ملاحظة:** الأسعار تقديرية وقد تختلف حسب المزود. السيرفرات داخل سوريا قد تكون أرخص ولكن بجودة شبكة أقل. --- ## ✅ 13. الخلاصة والتوصيات 1. **أفضل نموذج لنشر سيرفرات سوريا هو:** - استضافة السيرفرات في **مركز بيانات سوري** أو **لبناني/أردني** - استخدام **شبكة داخلية (VLAN)** لكل الاتصالات بين السيرفرات - وضع **Load Balancer** واحد أمام API Servers (2) - قاعدة البيانات الرئيسية + Redis على نفس الشبكة الداخلية مع اتصال 10 Gbps 2. **توزيع الأدوار:** - API Servers: 8 Cores + 16 GB RAM ✅ (كافٍ) - Database: 16 Cores + 64 GB RAM ✅ (ضروري) - Redis: 8 Cores + 32 GB RAM ✅ (ضروري للأداء اللحظي) - Socket: 8 Cores + 16 GB RAM ✅ (كحد أدنى) 3. **توفير التكاليف:** - يمكن دمج Socket Servers في جهاز واحد (Driver + Passenger) لتوفير سيرفر - يمكن دمج Wallet مع أحد API Servers - يمكن استخدام OSRM Server واحد لسوريا (الخريطة صغيرة نسبياً) 4. **أولوية الأداء في سوريا:** - **Redis** هو أهم عنصر لأداء التطبيق (مواقع السائقين + كاش) - **MySQL Buffer Pool** يحدد سرعة الاستعلامات - **الـ Load Balancer** يوزع الضغط عن API servers 5. **الأمان:** - API Servers → قاعدة البيانات عبر مستخدم MySQL مخصص بصلاحيات محدودة - Redis محمي بكلمة مرور (requirepass + rename-command FLUSHALL) - جميع المفاتيح السرية في `.env` مع صلاحيات 600 - JWT + HMAC للمدفوعات ---