8.3 KiB
🚀 Dealix — Deploy نهائي خطوة بخطوة
وقت التنفيذ المتوقع: 12 دقيقة بالضبط المطلوب منك: لابتوب + جوال + حساب Railway + حساب Moyasar النتيجة: Backend شغّال + يستقبل مدفوعات حقيقية
⏱️ الجدول الزمني
| الخطوة | المدة | الحالة |
|---|---|---|
| A. Railway Start Command | 1 دقيقة | ⬜ |
| B. Railway Env Vars | 3 دقائق | ⬜ |
| C. انتظار Deploy | 2 دقيقة | ⬜ |
| D. Smoke Test | 1 دقيقة | ⬜ |
| E. Moyasar Webhook | 3 دقائق | ⬜ |
| F. اختبار 1 ريال | 2 دقيقة | ⬜ |
| الإجمالي | 12 دقيقة |
🅰️ الخطوة A — Railway Start Command
A.1 افتح المشروع
- روح على: https://railway.com/project/54bb60b4-d059-4dd1-af57-bc44c702b9f0
- لو طلب تسجيل دخول — سجّل بحسابك
A.2 اختر الخدمة
- في الصفحة الرئيسية للمشروع، اضغط على البطاقة اللي مكتوب عليها
dealix - تفتح لك صفحة تفاصيل الخدمة
A.3 افتح Settings
- في الشريط العلوي للخدمة، اضغط Settings (آخر تاب)
- انزل لقسم Deploy
A.4 عدّل Start Command
- ابحث عن حقل Custom Start Command
- احذف أي محتوى موجود فيه
- اكتب بدلاً:
/app/start.sh - اضغط خارج الحقل — يحفظ تلقائياً
- أو بدل الكتابة: اترك الحقل فاضي تماماً — هذا أفضل (يستخدم الـ Dockerfile CMD الافتراضي)
✅ علامة النجاح
- يظهر toast أخضر:
Service updated - أو الحقل يحفظ بدون خطأ
🅱️ الخطوة B — Env Vars Raw Editor
B.1 افتح Variables
- في نفس الخدمة
dealix، اضغط تاب Variables - في أعلى يمين الصفحة، اضغط زر Raw Editor (أو ⚙️ → Raw Editor)
B.2 الصق المتغيرات
- امسح كل المحتوى الحالي
- افتح ملف
dealix_railway_vars.txtمن workspace بتاعك (الموجود من الجلسة السابقة) - انسخ محتواه بالكامل والصق في Raw Editor
⚠️ تذكير أمان
الملف يحتوي مفاتيحك الحية: APP_SECRET_KEY, DATABASE_URL, MOYASAR_SECRET_KEY, POSTHOG_PROJECT_KEY. لا تشاركه مع أحد.
B.3 حفظ
- اضغط Update Variables (زر أزرق أسفل النافذة)
- Railway يبدأ redeploy تلقائياً
✅ علامة النجاح
- تشوف رسالة
Variables updated - بعد ثواني: Deploy جديد يبدأ في تاب Deployments
🅾️ الخطوة C — انتظر Deploy Active
C.1 راقب Deployment
- اضغط تاب Deployments
- أعلى القائمة → الـ deployment الجديد حالته
BuildingثمDeploying - انتظر 60–120 ثانية
✅ علامة النجاح
- Status يصير Active (أخضر)
- يظهر رابط الخدمة (
https://dealix-xxxx.up.railway.app) — انسخه
❌ علامة الفشل
- Status:
CrashedأوFailed - افتح Logs → شوف السطر الأحمر
- أشهر الأخطاء:
port binding→ تأكد من Step ADATABASE_URL→ تحقق من Step Bemail-validator→ هذا مُصلح بالفعل في PR #68، لا يظهر إلا لو repo قديم
🔵 الخطوة D — Smoke Test
D.1 جهّز المسار
- افتح Terminal
cdإلى workspace تبعك (حيثdealix_smoke_test.sh)- عدّل الـ URL داخل السكريبت ليطابق رابط Railway الجديد
D.2 شغّل
bash dealix_smoke_test.sh
✅ النتيجة المتوقعة
[1/5] /health ............. 200 OK ✅
[2/5] /pricing/plans ...... 200 OK ✅
[3/5] /api/v1/sectors ..... 200 OK ✅
[4/5] /docs ............... 200 OK ✅
[5/5] CORS preflight ...... 200 OK ✅
🎉 Backend جاهز للإنتاج
🟣 الخطوة E — Moyasar Webhook
E.1 افتح Moyasar Dashboard
- روح على: https://dashboard.moyasar.com
- سجّل دخول
E.2 افتح Webhooks
- من الشريط الجانبي → Settings ثم Webhooks
- أو رابط مباشر: https://dashboard.moyasar.com/settings/webhooks
E.3 أضف Webhook
- اضغط + Add Webhook (يمين أعلى)
- املأ النموذج:
| الحقل | القيمة |
|---|---|
| URL | https://<railway-url>/api/v1/webhooks/moyasar |
| Events | ✅ payment_paid ✅ payment_failed ✅ payment_refunded |
| Secret | (انسخ من ملف dealix_railway_vars.txt قيمة MOYASAR_WEBHOOK_SECRET) |
| Active | ✅ (مُفعّل) |
- اضغط Save
⚠️ تذكير مهم
- استبدل
<railway-url>بالرابط الحقيقي من خطوة C - Secret نفسه المستخدم في Railway وإلا webhook ما يشتغل
E.4 Test Ping
- بعد الحفظ، اضغط على Webhook اللي أنشأته
- اضغط Send Test Event
- يجب أن يرجع 200 OK خلال ثواني
✅ علامة النجاح
- Event status:
Delivered - إذا
Failed: افتح Railway Logs → ابحث عنmoyasar webhook→ شوف الخطأ
🟢 الخطوة F — اختبار 1 ريال حقيقي
هذا يختبر end-to-end: Checkout → Moyasar → Webhook → DB
F.1 جهّز بطاقة اختبار
Moyasar يوفر بطاقات test:
| النتيجة | الرقم | CVV | تاريخ |
|---|---|---|---|
| نجاح | 4111 1111 1111 1111 |
123 |
12/30 |
| فشل | 4000 0000 0000 0002 |
123 |
12/30 |
F.2 شغّل test script
bash dealix_1_riyal_test.sh
(موجود في workspace، جاهز للتنفيذ)
الخطوات داخل السكريبت
- ينشئ invoice في
/api/v1/checkoutبمبلغ 1 ريال - يطبع رابط الدفع
- تفتح الرابط في المتصفح → تدفع ببطاقة التست
- السكريبت ينتظر webhook ثم يتحقق من DB
✅ علامة النجاح النهائية
- الدفع يظهر في Moyasar Dashboard
- السطر في DB:
payment.status = "paid" - السكريبت يطبع:
🎉 أول دفعة ناجحة
🎯 بعد ما تنتهي
المتحقق الآن:
- ✅ Backend منشور على Railway
- ✅ Moyasar يرسل webhooks بنجاح
- ✅ دورة دفع كاملة end-to-end تعمل
- ✅ النظام جاهز لاستقبال فلوس حقيقية من عملاء حقيقيين
الخطوة التالية الوحيدة: ابدأ outreach من dealix_leads_20_real.md
🚨 حل المشاكل الشائعة
المشكلة: 502 Bad Gateway بعد Deploy
السبب: Railway ما عرف الـ PORT
الحل: في Settings → Deploy → تأكد إن Start Command إما فاضي أو /app/start.sh. لا تضع python -m uvicorn مباشرة.
المشكلة: Webhook يرجع 401 Unauthorized
السبب: Secret في Moyasar مختلف عن Railway
الحل: قارن MOYASAR_WEBHOOK_SECRET في Railway Variables مع Secret في Moyasar Webhook → يجب أن يتطابقان حرفياً.
المشكلة: database connection failed
السبب: Railway Postgres addon غير مفعّل أو DATABASE_URL تغيّر
الحل: في Railway → أضف PostgreSQL service → انسخ ${{Postgres.DATABASE_URL}} في Variables.
المشكلة: Smoke test يرجع 404 على كل endpoint
السبب: الخدمة غير publicly accessible الحل: في Settings → Networking → فعّل Public Networking (Generate Domain).
📞 إذا حصلت مشكلة
أرسل لي:
- Screenshot من Railway Deployments → Logs (آخر 50 سطر)
- Screenshot من Moyasar Dashboard → Webhooks (آخر event)
- الرسالة الخطأ بالضبط
أقدر أحلّها خلال دقائق بدل ما تقضي ساعات.
آخر نصيحة: لا توقف في الـ deploy. لو حصلت مشكلة لأكثر من 30 دقيقة — انتقل مباشرة لـ outreach في نفس الوقت. بناء الـ pipeline الصباحي أهم من إصلاح bug صباحي.