السلسلة: هذا الدرس جزء من سلسلة React 19 وNext.js 15. اقرأ المقال الرئيسي.
تطبيق Next.js 15 منتهٍ ليس له فائدة كبيرة طالما يدور على localhost:3000. النشر هو الخطوة التي تحوّل الكود إلى خدمة قابلة للاستعمال. خياران مهيمنان: Vercel (منشئ الـ framework) بمنصة مُدارة، وCoolify v4 مفتوح المصدر للاستضافة الذاتية بتجربة قريبة من PaaS على أي VPS.
المتطلبات
- تطبيق Next.js 15 شغّال محلياً
- مستودع Git بعيد (GitHub/GitLab/Bitbucket)
- Vercel: حساب على vercel.com (مجاناً)
- Coolify: VPS Ubuntu 24.04 LTS بـ 2 vCPU و4 جيغا RAM (Hetzner CX22 من 4.49 يورو/شهر)
- 60 د لـ Vercel، 90 د لـ Coolify
المسار A — Vercel
الخطوة 1 — ربط المستودع
على vercel.com، انقر Add New ← Project، اسمح بالوصول إلى حساب GitHub، اختر المستودع. Vercel يكتشف آلياً أنه Next.js ويملأ مسبقاً أوامر build (next build) ومجلد الإخراج (.next).
# مثال .env إنتاج
DATABASE_URL=postgres://user:pass@db.exemple.com/prod
AUTH_SECRET=K7HnY3pQ...
AUTH_GITHUB_ID=abc123
AUTH_GITHUB_SECRET=def456
NEXT_PUBLIC_API_URL=https://api.exemple.com
انقر Deploy. Vercel يستنسخ المستودع، يثبّت التبعيات، يطلق next build، وينشر على شبكة Edge العالمية. أول build يستغرق 2-5 دقائق. النتيجة URL في https://votre-projet.vercel.app.
الخطوة 2 — نطاق مخصّص وHTTPS
في Project ← Settings ← Domains، أضف النطاق المرغوب (مثلاً boutique.exemple.com). Vercel يعرض سجلات DNS للضبط لدى المسجِّل. بعد انتشار DNS، شهادة Let’s Encrypt تُولَّد تلقائياً.
الخطوة 3 — Preview deployments عبر PR
الراحة الكبرى لـ Vercel. كل push على فرع يُطلق نشراً منفصلاً بـ URL فريد. بوت Vercel يعلّق آلياً على الـ PR بالرابط. لقاعدة مختلفة على previews، أنشئ نسخة من قاعدة الإنتاج (أو استخدم Neon مع branches آلية) واضبط DATABASE_URL فقط لبيئة Preview.
الخطوة 4 — السجلات والرصد والحدود
تبويب Logs يعرض آنياً الطلبات وحالاتها ومدتها وأخطاءها. Analytics يعطي Core Web Vitals الفعلية. تكاملات Sentry، Logtail، Datadog بنقرة.
الخطة Hobby (مجانية) تغطي مشروعاً شخصياً: 100 GB عرض نطاق، 1 مليون استدعاء Server Functions و4 ساعات CPU شهرياً. خطة Pro بـ 20 USD/مستخدم/شهر. مهم: Hobby لا تسمح باستعمال تجاري.
المسار B — Coolify على VPS
الخطوة 5 — تثبيت Coolify v4 على Ubuntu 24.04
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash
السكربت ينزّل صورة Docker، يضبط proxy Traefik (الذي يدير HTTPS تلقائياً)، ويطلق واجهة الإدارة على المنفذ 8000. التثبيت يأخذ 5-10 دقائق.
زر http://IP_DU_VPS:8000 وأكمل wizard التهيئة. هذا أيضاً وقت إضافة نطاق لـ Coolify ذاته (مثلاً coolify.exemple.com) بـ CNAME.
الخطوة 6 — ربط المستودع والنشر
في Coolify، انقر + New ← Public Repository أو GitHub App. Coolify يكتشف آلياً buildpack Nixpacks لـ Next.js. في Build Pack، Nixpacks مختار افتراضياً. أكّد إصدار Node (20 LTS) وأمر start (pnpm start). أضف متغيّرات البيئة في Environment Variables.
انقر Deploy. Coolify يستنسخ، يطلق build في container، ثم ينشر النتيجة خلف Traefik. أول build: 3-6 دقائق.
الخطوة 7 — نطاق وHTTPS تحت Coolify
في Domains، أضف boutique.exemple.com. Coolify يضبط آلياً Traefik لتوجيه هذا النطاق إلى container التطبيق، ويطلب شهادة Let’s Encrypt. بعد تأشير DNS، الشهادة تُسلَّم في أقل من دقيقة.
الخطوة 8 — مقارنة عملية
| المعيار | Vercel | Coolify |
|---|---|---|
| وقت الإطلاق الأولي | 5 دقائق | 60 دقيقة |
| تكلفة شهرية hobby | 0 يورو | ~4.49 يورو (Hetzner CX22) |
| تكلفة شهرية pro بـ 100k زيارة | 20 USD + تجاوزات | ~4.49 إلى 20 يورو |
| Preview عبر PR | أصلي، مُحسَّن | متاح لكن للضبط |
| ISR | أصلي على edge CDN | يشتغل لكن بلا CDN edge عالمي |
| Edge Functions | نعم، 30+ منطقة | لا، منطقة واحدة |
| سجلات ورصد | مشمول، تكاملات بنقرة | سجلات container، تكاملات للضبط |
| Vendor lock-in | متوسط | لا شيء |
| الهدف المثالي | أحمال متفاوتة، فرق تقدّر الوقت | أحمال ثابتة، تحكم كامل، GDPR محلي |
نهج عملي: ابدأ على Vercel للسرعة، قِس التكاليف بعد 3 أشهر، انتقل إلى Coolify إن صارت الفاتورة ثقيلة. الهجرة عكسية بسيطة أيضاً — نفس كود Next.js.
الخطوة 9 — اختيار استضافة قاعدة البيانات
Neon: Postgres serverless مع توسع آلي، branches معزولة للـ previews، خطة مجانية (0.5 GB). تكامل أصلي مع Vercel.
Supabase: Postgres + auth + storage + realtime في خدمة واحدة. خطة مجانية كريمة (500 MB DB).
Railway: Postgres بنقرة بجانب التطبيق. تسعير بالاستهلاك، 5-20 USD/شهر.
Postgres مستضاف ذاتياً على نفس VPS Coolify: الأقل تكلفة. Coolify ينشر container Postgres ببضع نقرات مع نسخ آلي نحو S3. لمشروع < 100 مستخدم نشط، يكفي ويكلّف 0 يورو.
الخطوة 10 — التحقق النهائي والإشارات للرصد
# تحقق من رؤوس HTTP في الإنتاج
curl -I https://boutique.exemple.com
# اختبر الأداء بـ Lighthouse CLI
npx lighthouse https://boutique.exemple.com --output=html --output-path=./lh.html
# حمّل صفحة محمية بـ cookie جلسة
curl -H "Cookie: session=..." https://boutique.exemple.com/compte
راقب خاصة: TTFB يجب أن يبقى تحت 500 مللي ثانية، LCP تحت 2.5 ث، ونسبة cache hit (مرئية في سجلات Vercel أو عبر رؤوس x-vercel-cache).
أخطاء شائعة
| الخطأ | السبب | الحل |
|---|---|---|
| Build يمرّ محلياً لكن يفشل على Vercel | متغيّر بيئة مفقود وقت build | تحقّق أن كل المتغيّرات معرَّفة لـ Production/Preview |
| HTTPS لا يُولَّد على Coolify | DNS لم ينتشر أو Traefik يفشل في التحقق | انتظر الانتشار؛ تحقّق المنفذان 80 و443 مفتوحان في جدار VPS |
| Server Action تنهار في prod وتشتغل في dev | متغيّر env محلي غائب في prod | تحقّق من قائمة كل process.env.X |
| التطبيق يستهلك كل CPU VPS Coolify | لا حدّ موارد على container | اضبط Resource limits في Coolify (1 CPU، 512 MB) |
| تكلفة Vercel تنفجر بلا تغيير ظاهر | bot أو crawler يضرب route ديناميكي بلا cache | فعّل WAF Vercel، خزّن routes ثقيلة، احجب User-Agents مزعجة |
| Preview Vercel يتصل خطأ بقاعدة الإنتاج | DATABASE_URL مشتركة |
عرّف DATABASE_URL مختلفة لـ Preview تشير إلى نسخة |
الخطوة 11 — النسخ الاحتياطي والتعافي
على Vercel، التطبيق stateless — لا شيء للنسخ الاحتياطي جانب الكود (Git المصدر). العمل على القاعدة فقط: اضبط snapshots آلية لدى المزوّد (Neon، Supabase، Railway). اختبر استعادة قبل الإنتاج الجدّي.
على Coolify، شيئان للنسخ: القاعدة وإعداد Coolify. للقاعدة، Coolify يقدّم backup أصلي نحو S3 (أو endpoint متوافق كـ Backblaze B2، Wasabi). لـ Coolify، صدّر الإعداد عبر Settings ← Backup Configuration.
الخطوة 12 — متى نتوسّع وكيف
ثلاث إشارات: TTFB في الإنتاج يتجاوز ثانية بانتظام على الطلبات الديناميكية؛ CPU VPS أو فاتورة Vercel تتجاوز السقف المقبول؛ زوار دوليون يشكون البطء.
على Vercel، التوسع شفّاف: ادفع أكثر. على Coolify، الانتقال إلى VPS أعلى (CX32، CX42 Hetzner) يأخذ 5 دقائق ويكلّف الضعف. للقاعدة، انتقل إلى مُدارة (Neon، Supabase) عند الحجم — Postgres مستضاف ذاتياً على 2 vCPU يحدّ نحو 200 طلب/ثانية.