أوامر Bench في ERPNext: كل أمر موضّح من مهندس DevOps
Bench هو أداة سطر الأوامر التي تتحكم في كل شيء في تثبيت ERPNext. فكر فيه مثل git — تماماً كما أن git يحتوي على commit وpush وpull وmerge، فإن bench يحتوي على update وmigrate وrestore وdeploy. على عكس التوثيق الذي يسرد الأوامر فحسب، هذا الدليل يشرح ما الذي يفعله كل أمر فعلاً، متى تستخدمه، وما الذي يمكن أن يسوء — حتى تفهم الأداة بدلاً من مجرد نسخ أوامر لا تفهمها.
قبل أي شيء: كيف يعمل Bench (اقرأ هذا مرة واحدة)
Bench أداة Python. عندما تشغّل 'bench update'، هذا ليس سحراً — يشغّل git pull في كل مجلد تطبيق، يتحقق إذا تغيرت متطلبات Python، يشغّل سكربتات ترحيل قاعدة البيانات، ويعيد بناء أصول JavaScript. فهم هذا يعني أنه عندما يفشل شيء، تعرف أي خطوة فشلت ولماذا. كل أوامر bench يجب تشغيلها من داخل مجلد frappe-bench (~/frappe-bench) كمستخدم frappe. إذا شغّلتها كـ root أو من المجلد الخاطئ، ستفشل أو تسبب مشاكل صلاحيات.
# دائماً ابدأ هنا قبل تشغيل أوامر bench
cd ~/frappe-bench
# تحقق أنك في المكان الصحيح
pwd
# يجب أن يخرج: /home/frappe/frappe-bench
# تحقق أنك مستخدم frappe
whoami
# يجب أن يخرج: frappe
أوامر إدارة المواقع
'الموقع' في ERPNext هو قاعدة بيانات وإعداد معزولان — شركة واحدة. هذه الأوامر تدير دورة حياة المواقع.
# إنشاء موقع جديد
# ما الذي يفعله: ينشئ قاعدة بيانات MariaDB جديدة، يشغّل كل الترحيلات، ينشئ مستخدم أدمين
# متى تستخدمه: عند إعداد شركة/مستأجر جديد على نفس السيرفر
bench new-site mycompany.com \
--mariadb-root-password DB_ROOT_PASS \
--admin-password ADMIN_PASS \
--no-mariadb-socket
# سرد كل المواقع على هذا bench
bench --site all list-apps
# تعيين موقع افتراضي (يوفر كتابة --site في كل أمر)
bench use mycompany.com
# تمكين وضع الصيانة (يحجب وصول المستخدمين)
# متى تستخدمه: قبل التحديثات أو الترحيلات لمنع تغيير البيانات
bench --site mycompany.com set-maintenance-mode on
bench --site mycompany.com set-maintenance-mode off
# مسح البيانات المخزنة مؤقتاً
# متى تستخدمه: بعد تغييرات الإعداد غير المنعكسة، أو بعد التحديثات
bench --site mycompany.com clear-cache
bench --site mycompany.com clear-website-cache
# خطر: حذف موقع نهائياً (لا استرداد ممكن)
# ما الذي يفعله: يحذف قاعدة البيانات بالكامل ويزيل كل الملفات
bench drop-site mycompany.com --root-password DB_ROOT_PASS
bench drop-site يحذف قاعدة البيانات بالكامل. لا يوجد سلة مهملات. لا تراجع. إذا شغّلت هذا بدون نسخة احتياطية، بياناتك ستختفي للأبد. دائماً خذ نسخة احتياطية وتحقق منها قبل تشغيل drop-site.
أوامر إدارة التطبيقات
ERPNext مبني من 'تطبيقات' — Frappe (إطار العمل)، ERPNext (التطبيق الرئيسي)، HRMS (وحدة HR)، وأي تطبيقات مخصصة. هذه الأوامر تدير التطبيقات المثبتة.
# تنزيل تطبيق من GitHub على هذا bench
# ما الذي يفعله: git clone للمستودع في apps/
bench get-app erpnext --branch version-15
bench get-app hrms --branch version-15
# تنزيل تطبيق مخصص من مستودع خاص
bench get-app https://github.com/yourcompany/custom-app.git
# تثبيت تطبيق على موقع محدد (يضيف جداوله لقاعدة البيانات)
# ما الذي يفعله: يشغّل كل سكربتات الترحيل لذلك التطبيق على ذلك الموقع
bench --site mycompany.com install-app erpnext
bench --site mycompany.com install-app hrms
# سرد كل التطبيقات المثبتة على موقع
bench --site mycompany.com list-apps
# إلغاء تثبيت تطبيق من موقع (يحذف بياناته — لا رجعة)
bench --site mycompany.com uninstall-app hrms --yes
# إزالة تطبيق من bench بالكامل (يزيل مجلد الكود)
bench remove-app hrms
get-app ينزّل الكود للسيرفر. install-app يفعّله لموقع محدد (ينشئ جداول قاعدة البيانات). uninstall-app يعطّله من موقع (يحذف بياناته من ذلك الموقع). remove-app يزيل الكود بالكامل من السيرفر. يمكنك أن يكون التطبيق منزّلاً (get-app منتهٍ) لكن غير مثبت على أي موقع.
أوامر النسخ الاحتياطي والاستعادة — أهم الأوامر التي ستستخدمها
هذه أهم الأوامر. إذا احتجت يوماً لاستعادة البيانات، هذه ما ستستخدمه. تدرّب على عملية الاستعادة قبل أن تحتاجها في حالة طوارئ.
# نسخة احتياطية كاملة (قاعدة البيانات + كل الملفات المرفوعة)
# ما الذي يفعله: mysqldump لقاعدة البيانات + tar لمجلد الملفات
# ملفات النسخ مخزنة في: sites/mycompany.com/private/backups/
bench --site mycompany.com backup --with-files
# نسخة احتياطية لقاعدة البيانات فقط (أسرع، بدون مرفقات الملفات)
bench --site mycompany.com backup
# سرد النسخ الاحتياطية الموجودة
ls -lh sites/mycompany.com/private/backups/
# استعادة من نسخة احتياطية
# ما الذي يفعله: يسقط ويعيد إنشاء قاعدة البيانات، ثم يستورد النسخة
bench --site mycompany.com restore \
sites/mycompany.com/private/backups/20260405_020000-mycompany_com-database.sql.gz
# استعادة مع الملفات
bench --site mycompany.com restore \
sites/mycompany.com/private/backups/20260405_020000-mycompany_com-database.sql.gz \
--with-private-files \
sites/mycompany.com/private/backups/20260405_020000-mycompany_com-private-files.tar.gz \
--with-public-files \
sites/mycompany.com/private/backups/20260405_020000-mycompany_com-public-files.tar.gz
كمستخدم frappe، أضف هذا لـ crontab (crontab -e): 30 2 * * * cd /home/frappe/frappe-bench && bench --site mycompany.com backup --with-files >> /home/frappe/backup.log 2>&1
أوامر قاعدة البيانات والترحيل
# تشغيل ترحيلات قاعدة البيانات المعلقة
# ما الذي يفعله: يطبق أي ملفات patch جديدة لم تُشغَّل بعد
# متى تستخدمه: بعد التحديثات، بعد تثبيت تطبيقات جديدة
bench --site mycompany.com migrate
# فتح وحدة تحكم MariaDB للـ SQL المباشر
bench --site mycompany.com mariadb
# فتح وحدة تحكم Python مع سياق Frappe
# ما الذي يفعله: Python REPL مع frappe.db وfrappe.get_doc وما إلى ذلك
bench --site mycompany.com console
# التحقق من الموقع بحثاً عن أخطاء وتناقضات
bench --site mycompany.com doctor
# إعادة بناء فهرس البحث
# متى تستخدمه: بعد ترحيل البيانات أو عندما تكون نتائج البحث ناقصة
bench --site mycompany.com rebuild-global-search
عند تشغيل 'bench mariadb'، تحصل على وصول SQL مباشر. أمر UPDATE أو DELETE خاطئ يتجاوز كل تحققات ERPNext ويمكنه إتلاف بيانات محاسبتك بشكل دائم. دائماً اختبر SQL على نسخة من قاعدة البيانات، أبداً مباشرة على الإنتاج. دائماً ابدأ بـ SELECT قبل UPDATE أو DELETE.
أوامر التحديث والبناء
# تحديث كامل: سحب الكود + تشغيل الترحيلات + إعادة بناء الأصول
bench update
# سحب الكود فقط (بدون ترحيل، بدون إعادة بناء الأصول)
bench update --pull
# تطبيق الترحيلات فقط (بدون سحب كود)
bench update --patch
# إعادة بناء أصول JavaScript/CSS
bench build
# بناء للإنتاج (مصغّر، أبطأ في البناء لكن أسرع في التقديم)
bench build --production
# تحويل كل التطبيقات لفرع مختلف
bench switch-to-branch version-15 frappe erpnext hrms
# التحقق من الإصدارات الحالية لكل التطبيقات المثبتة
bench version
أوامر الإنتاج وإدارة الخدمات
# إعداد الإنتاج الأولي (شغّل كـ root/sudo بعد التثبيت)
# ما الذي يفعله: ينشئ إعداد Supervisor وNginx ويضبط خدمات systemd
sudo bench setup production frappe
# إعادة توليد إعداد Nginx (شغّل كـ root بعد إضافة مواقع جديدة)
sudo bench setup nginx
sudo nginx -t # اختبر الإعداد قبل إعادة التحميل
sudo systemctl reload nginx
# إعادة توليد إعداد Supervisor
sudo bench setup supervisor
sudo supervisorctl reload
# إعادة تشغيل كل خدمات bench
bench restart
# بديل: إعادة التشغيل عبر Supervisor مباشرة (كـ root)
sudo supervisorctl restart all
sudo supervisorctl status
# إيقاف/بدء خدمات فردية
sudo supervisorctl stop frappe-schedule:frappe-schedule
sudo supervisorctl start frappe-schedule:frappe-schedule
أوامر إدارة المستخدمين
# إعادة ضبط كلمة مرور المسؤول
# متى تستخدمه: عندما تكون مقفلاً خارج النظام
bench --site mycompany.com set-admin-password كلمة_المرور_الجديدة
# إضافة مستخدم System Manager جديد من سطر الأوامر
bench --site mycompany.com add-system-manager user@company.com \
--first-name Ahmed \
--last-name Hassan
# تعطيل مستخدم (يمنع الدخول، لا يحذف البيانات)
bench --site mycompany.com disable-user user@company.com
# تمكين مستخدم
bench --site mycompany.com enable-user user@company.com
بطاقة المرجع السريع (اطبع هذه)
الـ 10 أوامر التي ستستخدمها فعلاً كل أسبوع:
# 1. خذ نسخة احتياطية
bench --site mycompany.com backup --with-files
# 2. طبّق التحديثات (التحديثات الصغيرة)
bench update --pull
# 3. أعد تشغيل كل الخدمات بعد التحديث
bench restart
# 4. تحقق أن كل شيء يعمل
bench --site mycompany.com doctor
# 5. امسح الكاش عندما شيء لا ينعكس
bench --site mycompany.com clear-cache
# 6. أعد ضبط كلمة مرور الأدمين
bench --site mycompany.com set-admin-password كلمة_جديدة
# 7. فعّل وضع الصيانة للتحديثات
bench --site mycompany.com set-maintenance-mode on
# 8. تحقق من حالة الخدمات
sudo supervisorctl status
# 9. تحقق من الإصدار الحالي
bench version
# 10. راقب الأخطاء في الوقت الفعلي
tail -f ~/frappe-bench/logs/frappe.log
التعليقات
تريد تشغيل ERPNext بدون فتح terminal أبداً؟ انشر على مانجلي كلاود — كل شيء يُدار من لوحة ويب.
اترك تعليقاً