Skip to content

التثبيت

يتم توفير Condensa كـ ملف تنفيذي مدمج مفرد: واجهة المستخدم عبر الويب مدمجة، وقاعدة البيانات هي SQLite، وتتم التهيئة من خلال متغيرات البيئة. نظام Kubernetes ليس مطلباً — بل يتم استخدامه فقط عندما يكون هدف الترحيل هو Awanio CEP.

المتطلبات

  • خادم Linux x86_64 (يمكن استخدام جهاز افتراضي)
  • وصول عبر الشبكة من خادم Condensa إلى:
    • VMware vCenter/ESXi (المنفذ 443)
    • هدف الترحيل — واجهة برمجية لـ Awanio Cockpit أو Vapor (انظر Integration)
  • مساحة قرص للمراحل الانتقالية (تستخدم فقط للنسخ الاحتياطي المرحلي وتحميلات OVA/VHD): قم بضبط حجم دليل المراحل الانتقالية ليستوعب أكبر قرص تخطط لترحيله

اعتماديات مسار البيانات

ينقل Condensa بيانات الأقراص عبر أحد مسارين، ولكل منهما متطلب خاص به. يتم اختيار المحرك تلقائياً لكل عملية ترحيل، لذا من المفيد معرفة أي مسار ستستخدمه بيئتك قبل بدء عملية نقل كبيرة.

مسار البياناتتدفق البياناتالترحيل الساخن (Warm)المتطلب
VDDK المباشر (المفضّل)ESXi ← الخادم الهدفمدعومعلى خادم Vapor الهدف: nbdkit مع إضافة VDDK، ومكتبة VDDK من VMware، بالإضافة إلى qemu-nbd و nbdfuse
المرحلي (Staged) (احتياطي، لأهداف Cockpit فقط)ESXi ← Condensa ← الهدفغير مدعومعلى خادم Condensa: qemu-img (الحزمة qemu-utils)

على الخادم الهدف (Vapor): VDDK

بدونه يتعذّر الترحيل الساخن، وتعود كل عمليات الترحيل إلى المسار المرحلي. قم بتثبيته من واجهة Vapor (System ← Third-party libraries) أو عبر دور Ansible، ثم تأكد من أن الشارة تعرض installed. يوضّح سجل الترحيل المحرك الذي تم اختياره:

Target host supports VDDK; using direct VDDK pull

أما إذا ظهرت الرسالة Target host has no VDDK (nbdkit not found) فهذا يعني أن المسار المرحلي هو المستخدم.

على خادم Condensa: qemu-img

يقوم المسار المرحلي بتحويل كل قرص مُصدَّر إلى صيغة qcow2 داخل Condensa نفسه، لذلك يجب توفّر qemu-img هناك:

bash
sudo apt-get install -y qemu-utils     # Debian/Ubuntu
sudo dnf install -y qemu-img           # RHEL/Rocky

يرفض Condensa بدء ترحيل مرحلي بدونه بدلاً من الفشل في منتصف عملية التصدير. أما الجهاز الافتراضي (appliance) فيأتي به مثبتاً مسبقاً.

فضّل VDDK على الخادم الهدف

ينسخ المسار المرحلي كل بايت مرتين (المصدر ← Condensa ← الهدف) ويحتاج مساحة مرحلية بحجم أكبر قرص. تثبيت VDDK على الهدف يلغي هاتين التكلفتين ويتيح الترحيل الساخن — ويستحق القيام به قبل ترحيل أي أحمال كبيرة.

إمكانية الوصول للمسار المرحلي

عند استخدام المسار المرحلي، يقوم الهدف بتنزيل القرص المُجهَّز من Condensa عبر CONDENSA_PUBLIC_URL. يجب أن يكون هذا العنوان قابلاً للوصول من الخادم الهدف، لا من متصفحك فقط: أي عنوان على شبكة خاصة أو خلف NAT لا يستطيع الهدف توجيه الطلبات إليه سيفشل عند خطوة التنزيل.

1. تثبيت الملف التنفيذي

bash
sudo install -m 0755 condensa-server /usr/local/bin/condensa-server
sudo mkdir -p /var/lib/condensa/staging /var/log/condensa /etc/condensa

2. إنشاء مفتاح التشفير

تخزن بيانات اعتماد المزود (كلمات مرور vCenter، رموز الواجهة البرمجية API) مشفرة بتشفير AES-256-GCM. يتم إنشاء المفتاح مرة واحدة وتحتفظ به — تسريب قاعدة البيانات لا يؤدي إلى تسريب بيانات اعتماد البنية التحتية.

bash
condensa-server -generate-key

تحتاج أيضاً إلى سر توقيع JWT لرموز المصادقة. يرفض الخادم البدء بدونه (لا توجد إعدادات افتراضية غير آمنة)، وتغييره لاحقاً يؤدي إلى إبطال الجلسات الحالية:

bash
openssl rand -base64 48

احفظ كلاهما في /etc/condensa/condensa.env:

bash
sudo tee /etc/condensa/condensa.env <<'EOF'
CONDENSA_ENCRYPTION_KEY=<generated-encryption-key>
JWT_SECRET=<generated-jwt-secret>
EOF
sudo chmod 600 /etc/condensa/condensa.env

الحفاظ على أمان المفتاح

فقدان CONDENSA_ENCRYPTION_KEY يعني ضرورة إعادة إدخال جميع بيانات اعتماد المزودين. قم بإعداد نسخة احتياطية للملف إلى جانب أسرارك الأخرى.

3. إنشاء وحدة systemd

/etc/systemd/system/condensa.service:

ini
[Unit]
Description=Condensa VM migration server
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/condensa-server
Environment=PORT=8080
Environment=DB_PATH=/var/lib/condensa/condensa.db
Environment=CONDENSA_UPLOAD_DIR=/var/lib/condensa/staging
Environment=CONDENSA_LOG_FILE=/var/log/condensa/condensa.log
Environment=CONDENSA_PUBLIC_URL=http://condensa.example.com:8080
# condensa.env holds CONDENSA_ENCRYPTION_KEY and JWT_SECRET (chmod 600)
EnvironmentFile=/etc/condensa/condensa.env
Restart=on-failure

[Install]
WantedBy=multi-user.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now condensa

متغيرات البيئة

المتغيرمطلوبالغرض
CONDENSA_ENCRYPTION_KEYنعممفتاح AES-256 لبيانات اعتماد المزود أثناء السكون (-generate-key)
JWT_SECRETنعممفتاح التوقيع لرموز المصادقة (≥32 بايت، مثل openssl rand -base64 48)؛ يرفض الخادم البدء بدونه
PORTلا (الافتراضي 8080)منفذ الاستماع HTTP
DB_PATHلامسار ملف قاعدة بيانات SQLite
CONDENSA_PUBLIC_URLللنقل المرحلي / OVAعنوان URL الذي تستخدمه الأهداف للوصول إلى نقطة نهاية تدفق الأقراص في Condensa
CONDENSA_UPLOAD_DIRللنقل المرحلي / OVAدليل التخزين المرحلي — اضبط حجمه لأكبر قرص مرحلي
CONDENSA_LOG_FILEموصى بهيُمكّن صفحة السجلات (Logs) في واجهة المستخدم
CONDENSA_ADMIN_USERNAME / CONDENSA_ADMIN_PASSWORDلاتهيئة المسؤول الأول بشكل غير تفاعلي (للأتمتة)

4. التشغيل الأول

افتح http://<server>:8080. في قاعدة البيانات الجديدة، يعرض Condensa معالج الإعداد (setup wizard) الذي ينشئ حساب المسؤول الأول ويسجل دخولك. بالنسبة للنشر المؤتمت عبر النصوص البرمجية، اضبط CONDENSA_ADMIN_USERNAME و CONDENSA_ADMIN_PASSWORD بدلاً من ذلك — سيتم إنشاء المسؤول عند بدء التشغيل.

بعد الإعداد:

  • أنشئ حسابات إضافية تحت Users (خاص بالمسؤولين فقط). دور member هو دور مشغل: يمكنه عرض المزودين وإنشاء عمليات الترحيل وبدئها وإلغائها، بينما تظل إدارة المزودين والحذف وإدارة المستخدمين وسجل التدقيق مقتصرة على المسؤولين فقط.
  • يتم تسجيل كل إجراء متعلق بالأمان (تسجيلات الدخول والإخفاقات، تغييرات المستخدمين والمزودين، ودورة حياة الترحيل) في علامة تبويب Audit Log.

5. ربط المزودين

تابع مع Integration لتسجيل مصدر VMware وهدف Awanio Cockpit أو Vapor.

الترقية

استبدل الملف التنفيذي وأعد تشغيل الخدمة — يتم تشغيل ترقيات قاعدة البيانات تلقائياً عند بدء التشغيل:

bash
sudo install -m 0755 condensa-server /usr/local/bin/condensa-server
sudo systemctl restart condensa