Files
tripz-llc/backend/.env.example
T
Hamza-AyedandClaude Opus 4.8 d2a34f753c feat: TLS — إغلاق المنافذ المكشوفة + الثقة بالبروكسي + دليل الإصدار
النطاق: tripz-api.intaleqapp.com (قرار المالك) — مملوك وجاهز، ومحايد عن
اسم العلامة الذي لم يُحسم فلا يحتاج تغييراً لاحقاً.

ثغرتان كانتا ستُبطلان TLS من أصله:
- API كان منشوراً على 0.0.0.0:4010 → صار 127.0.0.1. بلا هذا يبقى
  http://IP:4010 مفتوحاً فيتجاوز TLS كلياً وتصير الشهادة زينة
- **Postgres كان مكشوفاً على 0.0.0.0:55432** — القاعدة على الإنترنت مباشرة
  → صار 127.0.0.1. المنفذ غير القياسي إخفاء لا أمان. الوصول من الماك عبر
  نفق SSH (docs/20 §4)

trust proxy = 1: خلف Nginx كان req.ip يصير 127.0.0.1 للجميع فيمتلئ سجل
التدقيق المالي (I7) بعنوان البروكسي بدل السائق — أثرٌ بلا قيمة عند النزاع.
قفزة واحدة فقط: الثقة المفتوحة تسمح للعميل بتزوير X-Forwarded-For.

docs/20: DNS → موقع reverse proxy → شهادة → **إعداد ترقية WebSocket**
(بدونه يسقط التتبّع الحيّ) + مهلة 3600s للنبضات طويلة العمر + فحص تحقّق
أهمّه أن http://IP:4010 يجب أن **يفشل**.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:36:14 +03:00

63 lines
2.2 KiB
Bash

# ==== Tripz backend env (شغّل: cp .env.example .env) ====
# ملاحظة: السيرفر مشترك — كل شيء معزول ببادئة tripz و Redis DB غير الافتراضي (راجع docs/14)
NODE_ENV=development
API_PORT=4010 # يُنشر على 127.0.0.1 فقط — Nginx (CloudPanel) ينهي الـTLS. راجع docs/20
DB_EXPOSE_PORT=55432 # 127.0.0.1 فقط. للوصول من الماك: نفق SSH (docs/20 §4)
# ---- PostgreSQL (قاعدة مستقلة + بادئة جداول) ----
DB_HOST=postgres
DB_PORT=5432
DB_NAME=tripz
DB_USER=tripz
DB_PASSWORD=change_me_strong
DB_TABLE_PREFIX=tripz_
DB_SYNC=false # لا synchronize في الإنتاج — هجرات فقط
# ---- Redis (DB رقم 3 غير الافتراضي 0 + بادئة مفاتيح) ----
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=3
REDIS_KEY_PREFIX=tripz:
# ---- BullMQ ----
QUEUE_PREFIX=tripz_
# ---- Auth ----
JWT_SECRET=change_me_jwt_secret
# ---- تشفير الحقول الحساسة at-rest (AES-256-GCM) ----
# 32 بايت بصيغة hex (64 محرف). ولّده: openssl rand -hex 32
# إلزامي للإنتاج — بدونه يُستخدم مفتاح تطوير غير آمن
ENCRYPTION_KEY=
JWT_EXPIRES=15m
JWT_REFRESH_EXPIRES=30d
# ---- Maps (انطلق / map-saas) ----
MAPS_TILES_URL=http://martin:3000
MAPS_PROVIDER=antlaq
MAPS_BASE_URL=https://map-saas.intaleqapp.com
# مفاتيح انطلق لكل دولة (ضع القيم الحقيقية في .env على السيرفر — لا تُرفع لـ git)
MAPS_API_KEY_JO=
MAPS_API_KEY_SY=
MAPS_PLACES_API_KEY=
# ---- OTP via Nabeh (WhatsApp) ----
# اتركه dev لتفعيل الرمز الثابت 1234 بلا إرسال؛ اجعله false للإرسال الحقيقي عبر Nabeh
OTP_DEV_MODE=true
NABEH_BASE_URL=https://nabeh.intaleqapp.com
NABEH_EMAIL=
NABEH_PASSWORD=
NABEH_OTP_TYPE=text
# ---- FCM push (اتركه فارغاً لتعطيل الإرسال) ----
FCM_SERVER_KEY=
FCM_ENDPOINT=https://fcm.googleapis.com/fcm/send
# ---- Gemini (رؤية: قراءة وثائق + مطابقة وجه) ----
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# ---- سرّ المنصة (لتعيين أول أدمن) — ولّده: openssl rand -hex 24 ----
PLATFORM_SECRET=