الرجوع إلى قائمة المقالات

Cloud-Init في بروكسموكس: سلّم سيرفراً جاهزاً بلا فتح كونسول

شرح Cloud-Init في Proxmox: تسليم آلي لسيرفرات الزبائن | مرام هوست - Cloud-Init في بروكسموكس: سلّم سيرفراً جاهزاً بلا فتح كونسول

الاستنساخ أعطاك جهازاً في ثانيتين. لكنه جهاز بلا مستخدم يخصّ الزبون، وبلا عنوان، وبلا كلمة مرور. وإن كنت تفتح كونسولاً بعد كل استنساخ لتضبط هذه الثلاثة، فأنت لم تؤتمت شيئاً — نقلت العمل اليدوي من مكان إلى آخر.

Cloud-Init هو ما يكمل الطريق: تصف ما تريده بأمر واحد، ويتولّى الجهاز تنفيذه على نفسه في أول إقلاع.

كل رقم في هذه السلسلة مقيس لا مقدَّر. نفّذنا كل أمر على سيرفر Proxmox VE 9.2 حقيقي بمعالج EPYC وتخزين LVM-thin على NVMe، وأخذنا الأزمنة من مخرجات time نفسها. وقد استبدلنا العناوين العامة الحقيقية بعناوين التوثيق المخصّصة لهذا الغرض (RFC 5737) حفاظاً على أمان السيرفر.

كيف يعمل؟

بروكسموكس يولّد قرصاً صغيراً افتراضياً فيه إعداداتك، ويربطه بالجهاز. وعند أول إقلاع يقرأ cloud-init داخل النظام ذلك القرص وينفّذ ما فيه: ينشئ المستخدم، ويضبط العنوان، ويضع المفاتيح، ويوسّع القرص. ثم يسجّل أنه انتهى فلا يعيدها.

الأمر الكامل

مخرجات تُظهر ضبط cloud-init على جهاز مستنسخ ثم تشغيله والدخول إليه بالمستخدم المحدَّد
أمر واحد سلّم سيرفراً بمستخدم وعنوان وكلمة مرور — والدخول الفعلي يثبت ذلك
qm set 8801 \
    --ciuser maram \
    --cipassword 'كلمة-مرور-قوية' \
    --ipconfig0 ip=10.10.10.71/24,gw=10.10.10.1 \
    --nameserver 1.1.1.1 \
    --searchdomain lab.local \
    --sshkeys ~/.ssh/authorized_keys \
    --ciupgrade 0

qm start 8801

وبعد نحو نصف دقيقة يكون الجهاز يستجيب، ويستطيع الزبون الدخول إليه بالبيانات التي أرسلتها له.

ما يفعله كل خيار

الخيارما يفعلهملاحظة
--ciuserينشئ المستخدم ويعطيه sudoلا تستعمل root
--cipasswordكلمة مرورهتُخزَّن مُعمّاة في إعداد الجهاز
--sshkeysمفاتيح الدخولالأفضل — وتُغني عن كلمة المرور
--ipconfig0عنوان الواجهة الأولى وبوّابتهاأو ip=dhcp
--nameserverخادم الأسماءبلا ضبطه قد يرث إعداد القالب
--ciupgradeتحديث الحزم عند أول إقلاع0 أسرع في التسليم · 1 أأمن
--cicustomملف إعداد كامل تكتبه بنفسكللحالات المتقدّمة

تحقّق أنه اشتغل فعلاً

qm guest exec 8801 -- /bin/bash -c 'hostname; id maram; ip -4 -br a; cloud-init status'

الجواب الذي تريده هو status: done. وإن رأيت error فالسجلّ هنا:

cat /var/log/cloud-init-output.log

نقطة تربك كثيرين: القالب يجب أن يكون نظيفاً

cloud-init يعمل مرّة واحدة ثم يضع علامة «انتهيت». فإن حوّلت جهازاً إلى قالب بعد أن أقلع مرّة، ستحمل كل النسخ تلك العلامة ولن يعمل فيها شيء — وستبدو المشكلة كأن الأمر لم يُنفَّذ أصلاً. العلاج قبل qm template:

cloud-init clean --logs
truncate -s 0 /etc/machine-id

تخصيص أعمق بـ cicustom

الخيارات الجاهزة تغطّي أغلب الحالات. وحين تحتاج أكثر — تثبيت حزم، أو كتابة ملفات، أو تشغيل أوامر — اكتب ملفاً:

# /var/lib/vz/snippets/web.yaml
#cloud-config
package_update: true
packages:
  - nginx
  - fail2ban
write_files:
  - path: /etc/motd
    content: |
      هذا السيرفر مُدار من مرام هوست
runcmd:
  - systemctl enable --now nginx fail2ban
  - ufw allow 80,443/tcp
qm set 8801 --cicustom "user=local:snippets/web.yaml"

وبهذا تسلّم للزبون سيرفر ويب جاهزاً يعمل — لا نظاماً فارغاً عليه أن يبنيه بنفسه.

مجلّد snippets يحتاج تفعيلاً على التخزين: من Datacenter ← Storage أضف Snippets إلى محتويات التخزين، وإلّا فلن يقبل الأمر المسار.

التوسيع التلقائي للقرص

حين تبيع باقة بقرص أكبر من القالب:

qm resize 8801 scsi0 +40G

وcloud-init يوسّع القسم ونظام الملفات تلقائياً عند الإقلاع. إن لم يفعل، فذلك لأن growpart غير مثبَّت في القالب — أضفه هناك، لا في كل نسخة.

الربط بنظام الطلبات

هنا يصبح كل ما سبق منتجاً لا إجراءً. أنظمة الفوترة تستدعي واجهة بروكسموكس البرمجية بالتسلسل نفسه:

POST /nodes/{node}/qemu/{template}/clone   →  استنساخ
PUT  /nodes/{node}/qemu/{vmid}/config      →  ciuser · cipassword · ipconfig0
POST /nodes/{node}/qemu/{vmid}/status/start →  تشغيل

ثلاثة نداءات، والنتيجة أن الزبون يدفع ويستلم بيانات سيرفره في دقيقتين بلا تدخّل منك. وهذا هو الفرق بين «أبيع سيرفرات» و«أشغّل مزوّد استضافة».

أخطاء شائعة وحلولها

العَرَضالسببالحل
التغييرات لا تُطبَّقالقالب لم يُنظَّف قبل التحويلcloud-init clean --logs ثم أعد البناء
عدّلت الإعداد ولم يتغيّر شيءالقرص القديم ما زال مربوطاًأعد التشغيل كاملاً — لا reboot من الداخل
لا يوجد قرص cloud-initلم يُضَف إلى الجهازqm set --ide2 <storage>:cloudinit
الجهاز بلا عنوانipconfig0 ناقص أو الجسر خاطئراجع qm config
القرص كبر ونظام الملفات لاgrowpart غير مثبَّتثبّته في القالب
كلمة المرور لا تعمل‏SSH يمنع الدخول بكلمة مروراستعمل المفاتيح — أو عدّل الإعداد في القالب
‏cicustom يرفض المسارSnippets غير مفعَّلة على التخزينفعّلها من إعدادات التخزين

أسئلة شائعة

هل يعمل cloud-init مع ويندوز؟

جزئياً وبأدوات مختلفة (Cloudbase-Init). الطريق المعتاد في ويندوز هو sysprep مع ملف إجابات.

أين تُخزَّن كلمة المرور؟

مُعمّاة داخل إعداد الجهاز في /etc/pve/qemu-server/. وهي متاحة لمن يملك root على السيرفر — أي أنها ليست سرّاً أمامك، وهذا سبب إضافي لتفضيل المفاتيح.

هل أستطيع تغيير العنوان بعد التسليم؟

نعم: عدّل ipconfig0 ثم أعد تشغيل الجهاز كاملاً — والجهاز سيأخذ العنوان الجديد.

ولماذا لا يعمل cloud-init مرّة ثانية؟

لأنه مصمَّم كذلك: هو للتهيئة الأولى لا للإدارة المستمرّة. ما بعد التسليم مكانه أدوات الإدارة أو سكربتاتك.

ما أفضل ممارسة لتسليم الزبون؟

مفتاح SSH إن كان الزبون تقنياً، وكلمة مرور قوية مؤقّتة مع إلزامه بتغييرها إن لم يكن. ولا ترسل كلمة المرور في نفس الرسالة التي فيها عنوان السيرفر.

الخطوة التالية

التسليم صار آلياً. بقي أن تستطيع أنت أن تجرّب أي شيء على هذه الأجهزة بلا خوف: في الجزء الرابع نكسر خدمة قصداً ونعيدها كما كانت في 49 ثانية.

هذه المقالة من سلسلة «بروكسموكس كمصنع سيرفرات» — من سيرفر واحد إلى تسليم آليّ لأجهزة زبائنك: ١. الشبكة والجسور والـVLAN · ٢. القوالب · ٣. Cloud-Init · ٤. اللقطات والاستنساخ · ٥. النسخ الاحتياطي واختبار الاسترجاع

Powered by WHMCompleteSolution