أتمتة تهيئة السيرفرات عند التشغيل الأول باستخدام Cloud-Init


أتمتة تهيئة السيرفرات عند التشغيل الأول باستخدام Cloud-Init

يا هلا بالمهندسين! اليوم بنتكلم عن Cloud-Init، الأداة السحرية اللي بتخلي تهيئة سيرفراتك عند التشغيل الأول أسهل من شرب الموية. انسى الدخول اليدوي وتكرار نفس الخطوات. Cloud-Init بيسوي كل شي عنك.

إيش هو Cloud-Init؟

باختصار، Cloud-Init هو برنامج مفتوح المصدر موجود في معظم صور أنظمة التشغيل (OS images) حقت الكلاود (مثل AWS, Azure, GCP, OpenStack). وظيفته يقرا بيانات تهيئة خاصة (user-data) عند أول تشغيل للسيرفر وينفذها.

كيف يشتغل؟

لما تشغل سيرفر جديد، الـ Hypervisor أو الكلاود بروفايدر بيمرر ملف user-data لـ Cloud-Init. هذا الملف غالبًا يكون بصيغة YAML أو Bash Script. Cloud-Init بيحلله وينفذ الأوامر اللي فيه.

ملاحظة: Cloud-Init يشتغل مرة وحدة بس عند التشغيل الأول. لو غيرت الـ user-data وحاولت تشغل السيرفر مرة ثانية بنفس الطريقة، ما راح يتنفذ إلا إذا عدلت إعداداته أو حذفت ملفات الـ cache حقته يدويًا (وهذا ما هو السيناريو الطبيعي).

استخداماته الشائعة

إيش ممكن تسوي بـ Cloud-Init؟

  • تغيير اسم المضيف (hostname) باستخدام hostname.
  • إنشاء مستخدمين جدد وتعيين صلاحياتهم.
  • إضافة مفاتيح SSH عامة للمستخدمين.
  • تثبيت حزم برمجية (packages) مثل ويب سيرفر أو قاعدة بيانات.
  • تشغيل سكريبتات Bash أو Python لتنفيذ مهام معقدة باستخدام runcmd.
  • إعداد الشبكة (network configuration).
  • تكوين أقراص التخزين (disk formatting and mounting).

User-Data Syntax (YAML)

أكثر طريقة شائعة لكتابة الـ user-data هي بصيغة YAML. تبدأ دايما بـ #cloud-config عشان Cloud-Init يعرف إنه ملف تهيئة.

#cloud-config
hostname: my-awesome-server
users:
  - name: adminuser
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...your-public-key...
packages:
  - nginx
  - git
runcmd:
  - systemctl enable nginx
  - systemctl start nginx
  - echo "Hello from Cloud-Init!" > /var/www/html/index.html

تذكر دائمًا التباعد (indentation) في YAML مهم جدًا!

مثال 1: إعداد أساسي (Hostname, User, SSH Key)

خلنا نسوي مثال بسيط يغير اسم السيرفر، ينشئ مستخدم جديد بصلاحيات سودو، ويضيف مفتاح SSH حقه.

#cloud-config
hostname: webserver-01
users:
  - name: deployer
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCEXAMPLEKEYFORDEPLOYER

بعد تشغيل السيرفر بهذا الـ user-data، بتقدر تسجل دخول بـ ssh deployer@your-server-ip.

مثال 2: تثبيت حزم وتشغيل سكريبتات

الآن مثال أكثر تقدمًا: تثبيت Nginx وتشغيل سكريبت بسيط.

#cloud-config
packages:
  - nginx
runcmd:
  - apt update -y  # For Debian/Ubuntu
  - apt install -y nginx # Redundant if specified in packages, but demonstrates execution
  - systemctl enable nginx
  - systemctl start nginx
  - echo "<h1>Welcome to my Cloud-Init Webserver!</h1>" | sudo tee /var/www/html/index.html
  - curl -s https://example.com/my_setup_script.sh | bash

قسم runcmd ينفذ الأوامر بترتيبها. تقدر تستخدمه لتشغيل أي سكريبت Bash أو Python.

كيف تختبر وتطبق؟

الكلاود بروفايدر بيوفر لك خانة أو ملف ترفع فيه الـ user-data هذا عند إطلاق السيرفر. للاختبار المحلي أو تصحيح الأخطاء، تقدر تشغل sudo cloud-init status --wait أو sudo cloud-init analyze أو تشوف اللوق في /var/log/cloud-init.log. لو حبيت تجرب على جهازك المحلي (VMware, VirtualBox)، تقدر تمرر ملف user-data يدويًا.

الخلاصة

Cloud-Init يختصر عليك وقت وجهد كبير في تهيئة السيرفرات. بيخلي عمليات النشر أسرع وأكثر اتساقًا. استخدمه، وبترتاح كثير!