feat: استيراد كود سيرو إلى تريبز (سيرو @ecfe7568) — بلا تعديل
قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9909d9b4c1
commit
4d8414c96b
@@ -0,0 +1,68 @@
|
||||
# نقطة واحدة لكل الخدمات الطلبية — التطبيق يغيّر الدومين فقط:
|
||||
# /backend/... → الباك إند الرئيسي (نفس شكل مسارات jordan-siro)
|
||||
# /v2/main/... → خادم المدفوعات
|
||||
# السوكيتات تُنشر مباشرة من حاوياتها (2020 / 3030) — لا تمر من هنا.
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
root /var/www;
|
||||
index index.php index.html;
|
||||
client_max_body_size 25m;
|
||||
|
||||
# كان access_log off من اختبار ضغط قديم ونُسي مُطفأً، فصار تشخيص أي عطل
|
||||
# مستحيلاً: البحث في سجلّ الوصول يرجع صفراً دائماً فيبدو أن التطبيق لا
|
||||
# يستدعي المسار أصلاً، والحقيقة أن السجلّ فارغ لا الطلبات. أعِده مطفأً
|
||||
# مؤقتاً وقت اختبارات الضغط فقط، ولا تتركه هكذا.
|
||||
access_log /dev/stdout;
|
||||
error_log /dev/stderr warn;
|
||||
|
||||
location ~ \.php$ {
|
||||
try_files $uri =404;
|
||||
include fastcgi_params;
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_read_timeout 60s;
|
||||
fastcgi_buffers 16 16k;
|
||||
fastcgi_buffer_size 32k;
|
||||
}
|
||||
|
||||
# حالة حوض fpm — من داخل شبكة الحاويات أو من السيرفر نفسه فقط
|
||||
location = /fpm-status {
|
||||
allow 172.16.0.0/12;
|
||||
allow 127.0.0.1;
|
||||
deny all;
|
||||
include fastcgi_params;
|
||||
fastcgi_pass php:9000;
|
||||
fastcgi_param SCRIPT_NAME /status;
|
||||
fastcgi_param SCRIPT_FILENAME /status;
|
||||
}
|
||||
|
||||
location /dashboard/siro-admin {
|
||||
alias /var/www/dashboard/siro-admin;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /dashboard/siro-admin/index.html;
|
||||
}
|
||||
|
||||
location /dashboard/admin {
|
||||
alias /var/www/dashboard/siro-admin;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /dashboard/admin/index.html;
|
||||
}
|
||||
|
||||
location /dashboard/siro-service {
|
||||
alias /var/www/dashboard/siro-service;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /dashboard/siro-service/index.html;
|
||||
}
|
||||
|
||||
location /dashboard/service {
|
||||
alias /var/www/dashboard/siro-service;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /dashboard/service/index.html;
|
||||
}
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
# ══════════════════════════════════════════════════════════════════
|
||||
# إنهاء TLS أمام سوكيتات Workerman
|
||||
# ══════════════════════════════════════════════════════════════════
|
||||
# يُنسَخ على **المضيف** لا داخل الحاويات:
|
||||
# /etc/nginx/sites-enabled/siro-sockets-tls.conf
|
||||
#
|
||||
# المشكلة التي يحلّها: حاويتا السوكيت تفتحان المنفذين نصاً صريحاً
|
||||
# (new SocketIO(2020) و new SocketIO(3030) بلا سياق SSL)، بينما
|
||||
# التطبيقان يطلبان https://jordan-siro.intaleqapp.com:2020 و :3030.
|
||||
# مصافحة TLS ضد منفذ لا يتكلم TLS تتجمّد حتى المهلة، فيظهر في اللوج:
|
||||
# Socket Connect Error: timeout
|
||||
#
|
||||
# الحل: الحاويتان تُنشران على 127.0.0.1 فقط (12020 / 13030 — انظر
|
||||
# docker-compose.yml)، و nginx هنا يستمع على 2020 / 3030 بشهادة الدومين
|
||||
# ويمرّر إليهما مع ترقية WebSocket. النتيجة: روابط التطبيقين تبقى كما هي
|
||||
# بلا أي بناء جديد، والـ JWT في الـ query string يبقى داخل نفق TLS.
|
||||
# ══════════════════════════════════════════════════════════════════
|
||||
|
||||
# ملاحظة: لا نضع http2 إطلاقاً هنا. أولاً لأن ترقية WebSocket تعتمد على
|
||||
# ترويسة Upgrade في HTTP/1.1 ولا معنى لها في HTTP/2، وثانياً لأن http2 on;
|
||||
# لم يُضَف إلا في nginx 1.25.1 وnginx المضيف أقدم فيرفضه بـ:
|
||||
# nginx: [emerg] unknown directive "http2"
|
||||
# اسم مميّز يتفادى التضارب مع أي map باسم $connection_upgrade قد يكون
|
||||
# CloudPanel معرِّفه أصلاً في سياق http.
|
||||
map $http_upgrade $siro_connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# ── سوكيت السائقين — GPS ─────────────────────────────────────────
|
||||
server {
|
||||
listen 2020 ssl;
|
||||
listen [::]:2020 ssl;
|
||||
|
||||
server_name jordan-siro.intaleqapp.com;
|
||||
|
||||
# عدّل المسارين إن كانت شهادتك في مكان آخر — تحقّق بالأمر:
|
||||
# grep -rh ssl_certificate /etc/nginx/sites-enabled/ | sort -u
|
||||
ssl_certificate /etc/nginx/ssl-certificates/jordan-siro.intaleqapp.com.crt;
|
||||
ssl_certificate_key /etc/nginx/ssl-certificates/jordan-siro.intaleqapp.com.key;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_session_cache shared:SiroSock:10m;
|
||||
ssl_session_timeout 1d;
|
||||
|
||||
# لا سجلّ وصول: نبضات GPS تصل كل ثوانٍ وتُغرق القرص
|
||||
access_log off;
|
||||
error_log /var/log/nginx/siro-socket-driver-error.log warn;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:12020;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $siro_connection_upgrade;
|
||||
|
||||
proxy_set_header 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;
|
||||
|
||||
# اتصال السائق يعيش ساعات وهو أونلاين — بلا هذه المهل يقطعه nginx
|
||||
# كل 60 ثانية فتدخل الحاوية في حلقة إعادة اتصال دائمة.
|
||||
proxy_connect_timeout 10s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_read_timeout 3600s;
|
||||
|
||||
# التخزين المؤقّت يُعطّل الدفع الفوري في WebSocket
|
||||
proxy_buffering off;
|
||||
}
|
||||
}
|
||||
|
||||
# ── سوكيت الركاب — حالة الرحلة وموقع السائق ──────────────────────
|
||||
server {
|
||||
listen 3030 ssl;
|
||||
listen [::]:3030 ssl;
|
||||
|
||||
server_name jordan-siro.intaleqapp.com;
|
||||
|
||||
ssl_certificate /etc/nginx/ssl-certificates/jordan-siro.intaleqapp.com.crt;
|
||||
ssl_certificate_key /etc/nginx/ssl-certificates/jordan-siro.intaleqapp.com.key;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_session_cache shared:SiroSock:10m;
|
||||
ssl_session_timeout 1d;
|
||||
|
||||
access_log off;
|
||||
error_log /var/log/nginx/siro-socket-passenger-error.log warn;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:13030;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $siro_connection_upgrade;
|
||||
|
||||
proxy_set_header 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;
|
||||
|
||||
proxy_connect_timeout 10s;
|
||||
proxy_send_timeout 3600s;
|
||||
proxy_read_timeout 3600s;
|
||||
|
||||
proxy_buffering off;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user