التثبيت
يتم توفير 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 هناك:
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. تثبيت الملف التنفيذي
sudo install -m 0755 condensa-server /usr/local/bin/condensa-server
sudo mkdir -p /var/lib/condensa/staging /var/log/condensa /etc/condensa2. إنشاء مفتاح التشفير
تخزن بيانات اعتماد المزود (كلمات مرور vCenter، رموز الواجهة البرمجية API) مشفرة بتشفير AES-256-GCM. يتم إنشاء المفتاح مرة واحدة وتحتفظ به — تسريب قاعدة البيانات لا يؤدي إلى تسريب بيانات اعتماد البنية التحتية.
condensa-server -generate-keyتحتاج أيضاً إلى سر توقيع JWT لرموز المصادقة. يرفض الخادم البدء بدونه (لا توجد إعدادات افتراضية غير آمنة)، وتغييره لاحقاً يؤدي إلى إبطال الجلسات الحالية:
openssl rand -base64 48احفظ كلاهما في /etc/condensa/condensa.env:
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:
[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.targetsudo 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.
الترقية
استبدل الملف التنفيذي وأعد تشغيل الخدمة — يتم تشغيل ترقيات قاعدة البيانات تلقائياً عند بدء التشغيل:
sudo install -m 0755 condensa-server /usr/local/bin/condensa-server
sudo systemctl restart condensa