Files
tripz-llc/docs/11-devops-cicd.md
HamzaandClaude Opus 4.8 95fea546f5 first commit: منصة Tripz — خطط كاملة + سكافولد باك إند NestJS/Docker
- 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>
2026-07-16 15:22:06 +03:00

58 lines
3.0 KiB
Markdown

# 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](10-roadmap.md) · التالي: [12-landing-gtm](12-landing-gtm.md)