- docs/00-15: دراسة، بنية، محرك تعرفة، تسعير، نموذج استئجار، تكاملات، بيانات، realtime، خطة، devops، لاندنج، مخاطر، اصطلاحات سيرفر، تدفق نشر - backend/: NestJS 11 على Docker (health + tenants + عزل tenant_id + بادئة tripz_ + Redis DB 3) - apps/rider, apps/driver, dashboards/admin-web, dashboards/superadmin-web (هياكل) - sync-to-server.sh + .gitignore Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
11 — النشر والأتمتة (DevOps / CI-CD)
القاعدة الحاكمة: مستأجر جديد = ملف إعداد + أصول + أمر CI واحد. إن احتاج نشر مستأجر أكثر من يوم عمل، النموذج لا يتوسع.
البيئات
| البيئة | الغرض | القاعدة |
|---|---|---|
local |
تطوير | Docker Compose |
staging |
اختبار قبل النشر | مشترك |
production-shared |
باقات انطلاقة/علامة/أسطول+ | نشرة مشتركة |
production-sovereign-{tenant} |
باقة سيادة | نسخة معزولة داخل الدولة |
الباك إند
- Docker لكل خدمة + docker-compose (Postgres/PostGIS، Redis، Martin، API، worker).
- الهجرات تُشغَّل آلياً في خط النشر (لا
synchronize). - الأسرار من متغيرات بيئة / Vault — لا في الكود.
- وضع السيادة: نفس صور Docker،
.envمختلف، تُنشر على خوادم المستأجر أو سحابة داخل الدولة.
الموبايل — flavors + fastlane
mobile/
├── flavors/<tenant>/
│ ├── config.json # ألوان، اسم، bundle id، مفاتيح
│ ├── assets/ # أيقونة، سبلاش، لوجو
│ └── store/ # لقطات، وصف المتجر (تمايز ضد بند آبل 4.3)
├── fastlane/
│ ├── Fastfile # lanes: build_flavor, deploy_ios, deploy_android
│ └── Appfile
- أمر واحد:
fastlane deploy tenant:<slug>يبني الراكب والسائق وينشرهما. - ما يتغير بالبناء فقط في الـ flavor؛ الباقي ديناميكي من
GET /tenant/config. - درء رفض آبل 4.3: كل نكهة بأصول ومحتوى متجر مميّز؛ خيار «التطبيق الجامع» للباقة المجانية.
خط CI (GitHub Actions أو ما يعادله)
on PR:
- lint + typecheck (backend + flutter analyze)
- unit tests (jest + bloc_test)
- اختبار عزل المستأجر (A لا يرى بيانات B)
- build نكهة تجريبية (تحقق أن flavors يعمل)
on main:
- migrations → staging → smoke tests
- build جميع النكهات النشطة
on tag:
- نشر production (shared) + fastlane للنكهات
المراقبة
- تسجيل مركزي (structured logs) مع
tenant_idوtrip_idفي كل سطر. - صفحة حالة (status page) لكل مستأجر — جزء من عرض الدعم/SLA.
- تنبيهات على: فشل الإسناد، تأخر الـ socket، طوابير BullMQ المتضخمة.
قواعد الإصدار
- تحديث كل النكهات عند إصدار فلاتر → مؤتمت عبر fastlane (لا يدوي).
- إصدار الباك إند semver؛ الهجرات متوافقة رجعياً حين أمكن (نشر بلا توقف).
← السابق: 10-roadmap · التالي: 12-landing-gtm