تطوير الويب

نشر Next.js 15 على Vercel أو Coolify: درس خطوة بخطوة

2 min de lecture

السلسلة: هذا الدرس جزء من سلسلة 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 طلب/ثانية.

مقالات ذات صلة

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité