دليل النشر

انشر تطبيقاتك باستخدام Kamal على خادم VPS

انشر على VPS Cloud →

النشر8 دقيقة قراءة

انشر تطبيقاتك باستخدام Kamal على خادم VPS

Kamal (المعروف سابقًا باسم MRSK)، من منظومة Rails/37signals، ينشر التطبيقات المحوّلة إلى حاويات على خادم VPS واحد أو عدة خوادم من جهازك المحلي، دون منسّق ثقيل. يجمع بناء Docker، والدفع إلى سجل (registry)، والنشر بلا توقف، ووكيلًا عكسيًا بشهادة SSL تلقائية في أمر واحد: `kamal deploy`.

لماذا تنشر باستخدام Kamal على خادم VPS بدلًا من Kubernetes؟

Kubernetes مفرط الحجم لغالبية التطبيقات المستضافة على خادم VPS واحد أو عنقود صغير. يستهدف Kamal هذا الميدان بالضبط: فهو يأخذ ملف Dockerfile الخاص بك، ويبني الصورة، ويرسلها إلى خوادمك عبر SSH، ويبدّل حركة المرور دون انقطاع بفضل وكيله المدمج (kamal-proxy). تتّسع كامل التهيئة في ملف config/deploy.yml مُدار بالإصدارات مع شفرتك: لا مستوى تحكم (control plane) لصيانته، ولا YAML لا نهائي. تحتفظ ببساطة خادم VPS مع سير عمل نشر احترافي.

ما يقدّمه لك Kamal

  • عمليات نشر بلا توقف (zero-downtime) عبر فحوصات السلامة والتبديل التدريجي لحركة المرور
  • بناء صورة Docker ودفعها، ثم النشر على الخوادم، في أمر واحد
  • شهادات SSL تلقائية من Let's Encrypt يديرها kamal-proxy، دون تهيئة يدوية
  • تراجع فوري (rollback) إلى النسخة السابقة بـ kamal rollback
  • إدارة مركزية ومشفَّرة للأسرار ومتغيرات البيئة
  • نشر متعدد الخوادم (web، وjobs، وملحقات مثل Postgres أو Redis) من ملف واحد

المتطلبات

من ناحية خادم VPS، لا يتطلب Kamal سوى وصول SSH بالمفتاح وDocker (الذي يمكنه حتى تثبيته عبر kamal setup عند أول نشر). خادم VPS بمعالجَي vCPU و2 إلى 4 غيغابايت من RAM يناسب تطبيق ويب قياسيًا مع قاعدة بياناته. من ناحية الجهاز المحلي، ثبّت Kamal (حزمة gem الخاصة بـ Ruby أو صورة Docker)، وجهّز سجل حاويات (Docker Hub، أو GitHub Container Registry، أو سجلًا خاصًا) بالإضافة إلى نطاق يشير إلى خادم VPS.

انشر تطبيقًا باستخدام Kamal

01

هيّئ التهيئة الأولية

في مشروعك، نفّذ kamal init. يولّد هذا config/deploy.yml و.kamal/secrets. أدخِل اسم الخدمة، والصورة (votreuser/monapp)، وقائمة الخوادم (servers.web) مع عنوان IP الخاص بخادم VPS والسجل المستخدم.

02

حدّد الأسرار والمتغيرات

ضع القيم الحساسة في .kamal/secrets (لا تُودَع أبدًا في المستودع): KAMAL_REGISTRY_PASSWORD أو RAILS_MASTER_KEY أو مفاتيح تطبيقك. أشِر إليها في deploy.yml تحت env.secret. أما المتغيرات غير الحساسة فتوضع تحت env.clear.

03

فعّل الوكيل وSSL

في قسم proxy من deploy.yml، حدّد host الخاص بك (app.yourdomain.com) وفعّل ssl: true. سيحصل kamal-proxy تلقائيًا على شهادة Let's Encrypt وينهي TLS أمام حاويتك. تأكد من أن DNS يشير بالفعل إلى خادم VPS قبل النشر.

04

هيّئ الخادم

نفّذ kamal setup. يتصل Kamal عبر SSH، ويثبّت Docker عند الحاجة، ويسجّل الدخول إلى السجل، ويبدأ kamal-proxy ثم ينشر النسخة الأولى. هذه هي خطوة الإقلاع الوحيدة: ستكون عمليات النشر اللاحقة أسرع.

05

انشر وتحقق

عند كل تحديث، نفّذ kamal deploy. يبني Kamal الصورة، ويدفعها، ويبدأ الحاويات الجديدة، وينتظر نجاح فحوصات السلامة، ثم يبدّل حركة المرور ويوقف القديمة. اطّلع على الحالة بـ kamal app logs -f وkamal app details.

06

أدِر الملحقات (قاعدة بيانات، ذاكرة مؤقتة)

أعلن Postgres أو Redis تحت مفتاح accessories في deploy.yml، مع صورتها ومنفذها وأحجامها. kamal accessory boot db يبدأ الخدمة. بهذا تحتفظ بالمكدّس بأكمله موصوفًا في ملف واحد مُدار بالإصدارات.

إذا أدخل نشرٌ ما تراجعًا في الأداء، فلا تلمس الشفرة: نفّذ kamal rollback [VERSION] للعودة فورًا إلى الصورة السابقة، التي ما زالت موجودة على خادم VPS. فكّر أيضًا في استخدام kamal app exec لتشغيل مهام عابرة (عمليات ترحيل، أو وحدة تحكم) مباشرةً في الحاوية العاملة، دون فتح جلسة SSH يدوية.

قُد عمليات نشر Kamal الخاصة بك على خادم VPS Cloud من ServOrbit

هيّئ خادم VPS Cloud مع قالب النشر ووصول SSH بالمفتاح: يثبّت Kamal عليه Docker وينشر تطبيقك بلا توقف منذ الأمر الأول.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو راسل فريقنا — الدعم بـ العربية والفرنسية والإنجليزية.