Food delivery driver module + masked calls + TURN
This commit is contained in:
@@ -113,6 +113,22 @@ WALLET_SECRET_KEY_PATH=/keys/.secret_key_pay
|
||||
ENCRYPTION_KEY_PATH=/keys/.enckey
|
||||
PAYMENT_INTERNAL_KEY_PATH=/keys/.internal_socket_key
|
||||
|
||||
# --- 6.b خادم TURN (مكالمات الصوت: الرحلات + توصيل الطعام) ---
|
||||
# TURN_HOST يجب أن يكون اسم نطاق أو IP عاماً يصل إليه التطبيق مباشرة.
|
||||
# TURN_EXTERNAL_IP هو IP الخادم العام كما يراه العالم (coturn يُعلنه في ICE).
|
||||
# السرّ يُقرأ من /keys/turn_secret أولاً؛ وقيمة .env احتياط للتطوير فقط.
|
||||
# توليده: openssl rand -hex 32 > docker/keys/turn_secret
|
||||
TURN_HOST=turn.siromove.com
|
||||
TURN_EXTERNAL_IP=
|
||||
TURN_REALM=siromove.com
|
||||
TURN_PORT=3478
|
||||
# لا تجعلها true إلا بعد تركيب شهادة TLS فعلياً على coturn (انظر turnserver.conf)
|
||||
TURN_TLS_ENABLED=false
|
||||
TURN_TLS_PORT=5349
|
||||
TURN_SECRET_PATH=/keys/turn_secret
|
||||
TURN_STATIC_AUTH_SECRET=
|
||||
TURN_CREDENTIAL_TTL=43200
|
||||
|
||||
# --- 7. Third-Party APIs ---
|
||||
GEMINI_API_KEY=AIzaSyDHp0yXCGWqnd4ynlCCWzDz9Un1EJOKeW8
|
||||
SMS_API_ENDPOINT=https://sms.kazumi.me/api/sms/send-sms
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
# ============================================================
|
||||
# turnserver.conf — خادم TURN (coturn) لمكالمات سيرو الصوتية
|
||||
# ------------------------------------------------------------
|
||||
# لماذا TURN أصلاً: STUN وحده يكفي فقط حين يستطيع الطرفان رؤية بعضهما
|
||||
# مباشرة. سائق وزبون كلاهما على بيانات الجوال يقعان غالباً خلف CGNAT
|
||||
# (Symmetric NAT)، فتفشل المسارات المباشرة وتبقى المكالمة صامتة رغم
|
||||
# نجاح الإشارات. TURN يمرّر الصوت عبر الخادم كملاذ أخير.
|
||||
#
|
||||
# المصادقة: use-auth-secret (بيانات مؤقتة عبر HMAC) — لا كلمات مرور
|
||||
# ثابتة في التطبيق. المفتاح السرّي يُمرَّر من docker-compose، ونفسه
|
||||
# يستعمله backend/ride/call/turn_credentials.php لتوليد البيانات.
|
||||
# ============================================================
|
||||
|
||||
listening-port=3478
|
||||
|
||||
# TLS (turns:) معطّل افتراضياً عمداً: بلا شهادة صالحة يرفض coturn تشغيل
|
||||
# مستمع TLS ويكتفي بتسجيل خطأ، فيصير عنوان turns: في قائمة ICE مساراً
|
||||
# ميتاً يُبطئ التفاوض بلا فائدة. لتفعيله: ضع شهادة النطاق وامنح الحاوية
|
||||
# قراءتها، ثم أزل التعليق عن الأسطر الثلاثة، واضبط TURN_TLS_ENABLED=true
|
||||
# في .env كي يُعلنه الباك إند للتطبيق.
|
||||
# tls-listening-port=5349
|
||||
# cert=/keys/turn/fullchain.pem
|
||||
# pkey=/keys/turn/privkey.pem
|
||||
|
||||
fingerprint
|
||||
use-auth-secret
|
||||
# static-auth-secret و realm و external-ip تُمرَّر كوسائط من docker-compose
|
||||
# (من .env) حتى لا يُخزَّن السر داخل ملف متعقَّب في Git.
|
||||
|
||||
# نطاق منافذ التمرير — كل مكالمة تحجز منفذاً أو اثنين.
|
||||
# يجب فتح هذا النطاق UDP على جدار الحماية وإلا فشل التمرير بصمت.
|
||||
min-port=49160
|
||||
max-port=49300
|
||||
|
||||
# ── تقييد الوجهات ──────────────────────────────────────────
|
||||
# بلا هذا يصير TURN بوابة تصل للشبكة الداخلية: أي مستخدم يملك بيانات
|
||||
# اعتماد صالحة يطلب من الخادم فتح مسار إلى 127.0.0.1 أو 172.x فيصل
|
||||
# إلى mysql/redis/الحاويات. نمنع كل النطاقات الخاصة صراحةً.
|
||||
no-multicast-peers
|
||||
denied-peer-ip=0.0.0.0-0.255.255.255
|
||||
denied-peer-ip=10.0.0.0-10.255.255.255
|
||||
denied-peer-ip=127.0.0.0-127.255.255.255
|
||||
denied-peer-ip=169.254.0.0-169.254.255.255
|
||||
denied-peer-ip=172.16.0.0-172.31.255.255
|
||||
denied-peer-ip=192.168.0.0-192.168.255.255
|
||||
denied-peer-ip=100.64.0.0-100.127.255.255
|
||||
denied-peer-ip=::1
|
||||
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
||||
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff
|
||||
|
||||
# ── حدود الاستهلاك ─────────────────────────────────────────
|
||||
# TURN يمرّر كل بايت من الصوت، فبلا سقف تصير الفاتورة والنطاق مفتوحين.
|
||||
# مكالمة صوتية Opus ≈ 40 kbps لكل اتجاه — 500 kbps سقف سخيّ جداً للصوت
|
||||
# ويقطع أي محاولة لاستعمال الخادم كبروكسي فيديو أو تنزيل.
|
||||
user-quota=12
|
||||
total-quota=1200
|
||||
max-bps=64000
|
||||
bps-capacity=0
|
||||
|
||||
# ── تشغيل ──────────────────────────────────────────────────
|
||||
no-cli
|
||||
stale-nonce=600
|
||||
# لا نُسجّل كل تخصيص مسار (يمتلئ القرص) — الأخطاء فقط
|
||||
simple-log
|
||||
@@ -230,6 +230,23 @@ services:
|
||||
mem_limit: 512m
|
||||
restart: unless-stopped
|
||||
|
||||
# خادم TURN لمكالمات الصوت (رحلات + توصيل الطعام).
|
||||
# network_mode: host إجباري هنا لا تفضيلاً: coturn يضع عنوان الخادم داخل
|
||||
# حمولة ICE، ولو مرّ عبر جسر دوكر لأعلن عنواناً داخلياً (172.x) فيفشل
|
||||
# التمرير. ومع host يسري جدار الحماية عادةً بدل أن يلتفّ عليه docker-proxy.
|
||||
coturn:
|
||||
image: coturn/coturn:4.6-alpine
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./coturn/turnserver.conf:/etc/coturn/turnserver.conf:ro
|
||||
command: >
|
||||
-c /etc/coturn/turnserver.conf
|
||||
--realm=${TURN_REALM:-siromove.com}
|
||||
--static-auth-secret=${TURN_STATIC_AUTH_SECRET:?TURN_STATIC_AUTH_SECRET is required}
|
||||
--external-ip=${TURN_EXTERNAL_IP:?TURN_EXTERNAL_IP is required}
|
||||
mem_limit: 256m
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
mysql-data:
|
||||
redis-data:
|
||||
|
||||
Reference in New Issue
Block a user