نشر تطبيق Next.js باستخدام Coolify v4: دليل شامل للاستضافة الذاتية

مقدمة
Vercel و Netlify و Railway — هذه المنصات السحابية تُبسّط عملية النشر، لكن بأي ثمن؟ فواتير غير متوقعة، وارتباط بمزوّد واحد (vendor lock-in)، واعتماد كامل على خدمات طرف ثالث. في 2026، يتجه المزيد من المطورين نحو الاستضافة الذاتية للحفاظ على السيطرة الكاملة على بنيتهم التحتية.
Coolify v4 هو منصة نشر مفتوحة المصدر (PaaS) تُثبّتها على خادمك الخاص. تقدم نفس ميزات Vercel — النشر التلقائي من Git، وشهادات SSL، وبيئات المعاينة — لكن على بنيتك التحتية، بدون رسوم لكل مشروع.
في هذا الدليل، ستتعلم كيفية:
- تثبيت وإعداد Coolify v4 على خادم VPS
- نشر تطبيق Next.js باستخدام Docker
- إعداد النشر التلقائي عبر GitHub/GitLab
- تهيئة شهادات SSL مع Let's Encrypt
- إعداد المراقبة والتنبيهات
- إدارة بيئات متعددة (staging/production)
المتطلبات الأساسية
قبل البدء، تأكد من توفر:
- خادم VPS بذاكرة عشوائية لا تقل عن 2 جيجابايت و2 أنوية معالج (DigitalOcean، Hetzner، OVH، إلخ)
- Ubuntu 22.04 أو 24.04 مُثبّت على الخادم
- اسم نطاق يشير إلى خادمك
- تطبيق Next.js جاهز للنشر
- معرفة أساسية بـ Docker وسطر أوامر Linux
- حساب GitHub أو GitLab يحتوي على الكود المصدري
ما ستبنيه
في نهاية هذا الدليل، سيكون لديك بنية نشر كاملة:
- خادم Coolify يدير تطبيقاتك
- تطبيق Next.js في بيئة الإنتاج مع SSL
- خط أنابيب CI/CD تلقائي يعمل مع كل push
- نظام مراقبة مع تنبيهات
- بيئات معاينة لكل pull request
الخطوة 1: تجهيز الخادم
1.1 الاتصال بالخادم
اتصل بخادمك عبر SSH:
ssh root@your-server-ip1.2 تحديث النظام
apt update && apt upgrade -y1.3 إعداد جدار الحماية
يحتاج Coolify إلى فتح منافذ معينة. قم بإعداد UFW:
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw allow 8000/tcp # Coolify UI
ufw allow 6001/tcp # Coolify Websocket
ufw allow 6002/tcp # Coolify API
ufw enable1.4 إعداد DNS
قبل تثبيت Coolify، وجّه نطاقك إلى الخادم. أنشئ سجلات DNS التالية:
| النوع | الاسم | القيمة |
|---|---|---|
| A | coolify.yourdomain.com | SERVER_IP |
| A | *.yourdomain.com | SERVER_IP |
سجل wildcard (*) يسمح لـ Coolify بإنشاء نطاقات فرعية تلقائياً لكل تطبيق.
الخطوة 2: تثبيت Coolify v4
2.1 تشغيل سكربت التثبيت
يوفر Coolify سكربت تثبيت تلقائي:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bashيقوم هذا السكربت بتثبيت تلقائي لـ:
- Docker و Docker Compose
- Coolify وجميع متطلباته
- Traefik كـ reverse proxy
- قاعدة بيانات PostgreSQL لـ Coolify
يستغرق التثبيت عادةً من 2 إلى 5 دقائق.
2.2 الوصول إلى الواجهة
بعد اكتمال التثبيت، افتح المتصفح وانتقل إلى:
http://your-server-ip:8000
ستظهر شاشة إنشاء حساب المسؤول الأول.
2.3 إنشاء حساب المسؤول
املأ النموذج بـ:
- البريد الإلكتروني: عنوان بريدك الإلكتروني
- كلمة المرور: كلمة مرور قوية (12 حرفاً كحد أدنى)
سيقوم Coolify بتوجيهك إلى لوحة التحكم الرئيسية.
2.4 تهيئة نطاق Coolify
اذهب إلى Settings وقم بتهيئة:
Instance FQDN: https://coolify.yourdomain.com
هذا يتيح لك الوصول إلى Coolify عبر نطاقك بدلاً من عنوان IP مع المنفذ 8000.
الخطوة 3: تجهيز تطبيق Next.js
3.1 هيكل المشروع
إليك الهيكل الأساسي لمشروع Next.js جاهز لـ Coolify:
my-nextjs-app/
├── src/
│ └── app/
│ ├── layout.tsx
│ └── page.tsx
├── public/
├── next.config.js
├── package.json
├── Dockerfile
└── .dockerignore
3.2 إنشاء ملف Dockerfile
أنشئ ملف Dockerfile في جذر مشروعك:
FROM node:20-alpine AS base
# تثبيت التبعيات عند الحاجة فقط
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --only=production
# مرحلة البناء
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_ENV=production
RUN npm run build
# مرحلة التشغيل
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
CMD ["node", "server.js"]3.3 تهيئة Next.js لوضع Standalone
عدّل ملف next.config.js لتفعيل وضع standalone:
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
}
module.exports = nextConfigوضع standalone ينتج بناءً محسّناً يتضمن فقط الملفات الضرورية، مما يقلل حجم صورة Docker بشكل كبير.
3.4 إنشاء ملف .dockerignore
node_modules
.next
.git
.gitignore
README.md
.env*.local
3.5 الاختبار محلياً
تحقق من أن صورة Docker تعمل:
docker build -t my-nextjs-app .
docker run -p 3000:3000 my-nextjs-appافتح http://localhost:3000 للتحقق من أن كل شيء يعمل.
الخطوة 4: ربط مستودع Git
4.1 إضافة مصدر Git
في Coolify، اذهب إلى Sources ثم انقر على Add:
لـ GitHub:
- اختر GitHub App
- انقر على Register a GitHub App
- أعطِ التطبيق اسماً (مثل:
coolify-my-server) - سيوجهك Coolify إلى GitHub لتفويض التطبيق
- اختر المستودعات التي سيصل إليها Coolify
لـ GitLab:
- اختر GitLab
- أدخل رابط مثيل GitLab الخاص بك
- أنشئ رمز وصول (access token) بصلاحيات
apiوread_repository - الصق الرمز في Coolify
4.2 التحقق من الاتصال
بعد الإعداد، يجب أن تظهر مستودعاتك عند إنشاء مشروع جديد.
الخطوة 5: نشر التطبيق
5.1 إنشاء مشروع
في Coolify:
- انقر على Projects في الشريط الجانبي
- انقر على Add
- سمِّ مشروعك (مثل:
my-website) - اختر بيئة Production
5.2 إضافة مورد
- في مشروعك، انقر على New Resource
- اختر Public Repository أو Private Repository (GitHub/GitLab)
- اختر مستودعك
- اختر الفرع (
mainأوmaster)
5.3 تهيئة النشر
يكتشف Coolify نوع المشروع تلقائياً. لـ Next.js مع Docker:
Build Pack: Dockerfile
إعداد الشبكة:
Exposed Port: 3000
Domain: https://myapp.yourdomain.com5.4 متغيرات البيئة
أضف متغيرات البيئة في تبويب Environment Variables:
DATABASE_URL=postgresql://user:password@db:5432/mydb
NEXT_PUBLIC_API_URL=https://api.yourdomain.com
SECRET_KEY=your-secret-key
يقوم Coolify بتشفير المتغيرات الحساسة تلقائياً. يمكنك أيضاً تعيين بعض المتغيرات كـ Build time only أو Preview only.
5.5 بدء النشر
انقر على Deploy. سيقوم Coolify بـ:
- استنساخ مستودعك
- بناء صورة Docker
- تشغيل الحاوية
- إعداد Traefik كـ reverse proxy
- إنشاء شهادة SSL عبر Let's Encrypt
تابع التقدم في السجلات المباشرة.
الخطوة 6: إعداد SSL التلقائي
6.1 شهادات Let's Encrypt
يدير Coolify شهادات SSL تلقائياً عبر Let's Encrypt. تأكد من أن:
- نطاقك يشير بشكل صحيح إلى الخادم
- المنفذ 80 مفتوح (مطلوب لتحدي HTTP-01)
- FQDN مُعدّ بشكل صحيح في إعدادات التطبيق
6.2 التحقق من الشهادة
بعد النشر، قم بزيارة موقعك عبر HTTPS:
https://myapp.yourdomain.com
يجب أن يظهر القفل في شريط العنوان. تتجدد الشهادة تلقائياً قبل انتهاء صلاحيتها.
6.3 فرض HTTPS
في إعدادات التطبيق، فعّل Force HTTPS لإعادة توجيه كل حركة HTTP إلى HTTPS تلقائياً.
الخطوة 7: النشر التلقائي (CI/CD)
7.1 Webhooks تلقائية
إذا ربطت Coolify عبر GitHub App، فإن الـ webhooks تُعدّ تلقائياً. كل push على الفرع المُعدّ يُطلق نشراً جديداً.
7.2 إعداد الفروع
يمكنك تهيئة سلوكيات مختلفة لكل فرع:
main → Production (myapp.yourdomain.com)
develop → Staging (staging.myapp.yourdomain.com)
7.3 نشر المعاينة (Preview Deployments)
يدعم Coolify نشر المعاينة لطلبات السحب:
- في إعدادات التطبيق، فعّل Preview Deployments
- كل PR يحصل على نطاق فرعي فريد:
pr-42.myapp.yourdomain.com - تُحذف المعاينة تلقائياً عند إغلاق الـ PR
هذا يتيح لفريقك اختبار كل تغيير قبل الدمج.
7.4 استراتيجية التراجع
في حال حدوث مشكلة، يحتفظ Coolify بالإصدارات السابقة. للتراجع:
- اذهب إلى تبويب Deployments
- ابحث عن النشر السابق الذي كان يعمل
- انقر على Redeploy
الخطوة 8: إضافة قاعدة بيانات
8.1 إنشاء قاعدة بيانات PostgreSQL
يمكن لـ Coolify إدارة قواعد بياناتك بنقرة واحدة:
- في مشروعك، انقر على New Resource
- اختر Database
- اختر PostgreSQL
- قم بالتهيئة:
Version: 16
Database Name: myapp_db
Username: myapp_user
Password: (يُولّد تلقائياً)
Public Port: (معطّل افتراضياً - مُوصى به)- انقر على Start
8.2 ربط التطبيق بقاعدة البيانات
ينشئ Coolify شبكة Docker داخلية. استخدم اسم الحاوية كمضيف:
DATABASE_URL=postgresql://myapp_user:password@pg-container-name:5432/myapp_db
أضف هذا المتغير في Environment Variables لتطبيق Next.js.
8.3 النسخ الاحتياطي التلقائي
قم بإعداد النسخ الاحتياطي في تبويب Backups لقاعدة بياناتك:
- التكرار: يومياً (مُوصى به)
- الاحتفاظ: 7 أيام كحد أدنى
- الوجهة: S3، محلي، أو خادم بعيد
# يمكن لـ Coolify أيضاً إرسال النسخ الاحتياطية إلى S3
# قم بالإعداد في Settings > S3 Storageالخطوة 9: المراقبة والتنبيهات
9.1 المقاييس المدمجة
يعرض Coolify المقاييس الأساسية مباشرة في لوحة التحكم:
- المعالج: نسبة الاستخدام
- الذاكرة: المستخدمة / الإجمالية
- الشبكة: حركة المرور الواردة / الصادرة
- القرص: المساحة المستخدمة
9.2 فحوصات الصحة (Health Checks)
قم بإعداد فحص صحة لتطبيقك:
Health Check Path: /api/health
Health Check Interval: 30 (ثانية)
Health Check Timeout: 5 (ثوانٍ)
Health Check Retries: 3أنشئ نقطة النهاية المقابلة في تطبيق Next.js:
// app/api/health/route.ts
import { NextResponse } from 'next/server'
export async function GET() {
try {
// التحقق من اتصال قاعدة البيانات
// await db.query('SELECT 1')
return NextResponse.json({
status: 'healthy',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
})
} catch (error) {
return NextResponse.json(
{ status: 'unhealthy', error: 'Database connection failed' },
{ status: 503 }
)
}
}9.3 الإشعارات
قم بإعداد التنبيهات في Settings > Notifications:
- البريد الإلكتروني: تنبيهات عبر البريد (يتطلب SMTP)
- Discord: webhook إلى قناة Discord
- Telegram: إشعارات عبر بوت Telegram
- Slack: تكامل مع Slack
مثال على إعداد Telegram:
- أنشئ بوتاً عبر @BotFather على Telegram
- احصل على رمز البوت (token)
- احصل على chat ID الخاص بك
- أضف هذه المعلومات في Coolify
ستتلقى إشعارات عند:
- نجاح أو فشل النشر
- فشل فحوصات الصحة
- اقتراب انتهاء شهادات SSL
- ارتفاع استخدام الموارد
الخطوة 10: تحسينات متقدمة
10.1 كاش Docker متعدد المراحل
حسّن عمليات البناء من خلال استغلال كاش Docker. يحتفظ Coolify بطبقات Docker بين عمليات البناء، مما يُسرّع عمليات النشر اللاحقة.
نصيحة: ضع التعليمات التي نادراً ما تتغير (مثل npm ci) قبل تلك التي تتغير كثيراً (مثل COPY . .) في ملف Dockerfile.
10.2 الموارد والحدود
قم بإعداد حدود الموارد لكل حاوية:
CPU Limit: 2 (أنوية)
Memory Limit: 1024 (ميجابايت)
Memory Reservation: 512 (ميجابايت)هذا يمنع حاوية معطلة من استهلاك جميع موارد الخادم.
10.3 التوسع الأفقي
للتطبيقات التي تحتاج سعة أكبر، يدعم Coolify:
نسخ متعددة:
Number of replicas: 3يوزّع Traefik حركة المرور تلقائياً بين النسخ (موازنة الحمل).
خوادم بعيدة:
- اذهب إلى Servers وأضف خادماً جديداً
- يتصل Coolify عبر SSH
- يمكنك نشر التطبيقات عبر خوادم متعددة
10.4 استمرارية البيانات
للملفات المرفوعة أو البيانات المستمرة، قم بإعداد مجلدات Docker:
Source: /data/uploads
Destination: /app/public/uploadsهذه البيانات تبقى بعد إعادة النشر.
الخطوة 11: الأمان
11.1 الوصول عبر مفتاح SSH
عطّل المصادقة بكلمة المرور عبر SSH:
# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yessystemctl restart sshd11.2 التحديثات التلقائية
قم بإعداد التحديثات الأمنية التلقائية:
apt install unattended-upgrades -y
dpkg-reconfigure -plow unattended-upgrades11.3 تحديث Coolify
يتم تحديث Coolify من الواجهة:
- اذهب إلى Settings
- تحقق من الإصدار الحالي
- انقر على Update إذا كان هناك إصدار جديد متاح
يمكنك أيضاً تفعيل التحديثات التلقائية لـ Coolify.
11.4 Fail2ban
احمِ خادمك من هجمات القوة الغاشمة:
apt install fail2ban -y
systemctl enable fail2ban
systemctl start fail2banاستكشاف الأخطاء وإصلاحها
فشل النشر أثناء البناء
المشكلة: خطأ "Out of memory" أثناء npm run build
الحل: زِد الذاكرة المتاحة أو أضف swap:
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstabالموقع يعرض خطأ 502
الأسباب المحتملة:
- لم تنتهِ الحاوية من التشغيل بعد — انتظر بضع ثوانٍ
- المنفذ المُعدّ في Coolify لا يتطابق مع المنفذ المكشوف من التطبيق
- التطبيق تعطّل — تحقق من السجلات في Coolify
لا تُنشأ شهادة SSL
تحقق من:
- أن DNS يشير بشكل صحيح إلى الخادم (
dig myapp.yourdomain.com) - أن المنفذ 80 مفتوح
- عدم وجود تقييد معدل من Let's Encrypt (5 شهادات لكل نطاق أسبوعياً)
متغيرات البيئة غير متاحة
- متغيرات
NEXT_PUBLIC_*يجب أن تكون متاحة في وقت البناء - عيّنها كـ Build Variable في Coolify
- أعد النشر بعد إضافة متغيرات جديدة
مقارنة Coolify بالبدائل
| الميزة | Coolify | Vercel | Netlify | Railway |
|---|---|---|---|---|
| التكلفة | مجاني (استضافة ذاتية) | من 20$/شهر | من 19$/شهر | حسب الاستخدام |
| مفتوح المصدر | نعم | لا | لا | لا |
| SSL تلقائي | نعم | نعم | نعم | نعم |
| نشر المعاينة | نعم | نعم | نعم | نعم |
| قواعد البيانات | نعم (مدمج) | لا | لا | نعم |
| تحكم كامل | نعم | لا | لا | لا |
| Vendor lock-in | لا يوجد | عالٍ | عالٍ | متوسط |
الخطوات التالية
الآن بعد أن أصبحت بنيتك التحتية جاهزة، إليك بعض التحسينات الممكنة:
- إضافة CDN: قم بإعداد Cloudflare أمام خادمك للتخزين المؤقت والحماية من DDoS
- مركزة السجلات: ادمج حزمة تسجيل مثل Grafana + Loki
- أتمتة النسخ الاحتياطي: قم بإعداد نسخ احتياطي S3 مع الاحتفاظ والتشفير
- خوادم متعددة: أضف خوادم في مناطق مختلفة للتكرار
- مراقبة متقدمة: انشر Uptime Kuma عبر Coolify لمراقبة خدماتك
الخلاصة
أصبح لديك الآن منصة نشر كاملة، مستضافة ذاتياً ومجانية. يقدم Coolify v4 تجربة مماثلة لـ Vercel أو Netlify، لكن مع تحكم كامل في بياناتك وبنيتك التحتية.
المزايا الرئيسية لهذا النهج:
- تكلفة قابلة للتنبؤ: خادم VPS بسعر ثابت بدلاً من فواتير متغيرة
- سيادة البيانات: بياناتك تبقى على خادمك
- المرونة: انشر أي نوع من التطبيقات (ليس فقط الأطر المدعومة)
- لا vendor lock-in: انتقل إلى خادم آخر متى شئت
الاستضافة الذاتية تتطلب مزيداً من المسؤولية في الصيانة والأمان، لكن أدوات مثل Coolify تقلل هذا العبء بشكل كبير. للفرق والمشاريع التي تقدّر الاستقلالية والتحكم، إنها بديل قوي للمنصات السحابية المغلقة.
ناقش مشروعك معنا
نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.
دعنا نجد أفضل الحلول لاحتياجاتك.
مقالات ذات صلة

نشر تطبيق Next.js باستخدام Docker و CI/CD في بيئة الإنتاج
تعلم كيف تُحاوِل تطبيق Next.js باستخدام Docker، وتُعدّ خط أنابيب CI/CD مع GitHub Actions، وتنشر تلقائياً في بيئة الإنتاج على خادم VPS. دليل شامل من التطوير إلى النشر الآلي.

Docker Compose للمطورين: Next.js مع PostgreSQL و Redis
تعلم كيفية تغليف تطبيق Next.js كامل مع PostgreSQL و Redis باستخدام Docker Compose. يغطي هذا الدليل العملي تنسيق الخدمات المتعددة وسير عمل التطوير وإعادة التحميل الفوري وفحوصات الصحة والإعدادات الجاهزة للإنتاج.

بناء واجهات REST API جاهزة للإنتاج باستخدام FastAPI و PostgreSQL و Docker
تعلّم كيف تبني وتختبر وتنشر واجهة REST API احترافية باستخدام إطار FastAPI في بايثون مع PostgreSQL و SQLAlchemy و Alembic و Docker Compose — من الصفر حتى النشر.