أوامر 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)، وتطبيقاتك المخصصة. الأوامر دي بتدير التطبيقات المتسطبة على الـ bench.
# تنزيل تطبيق من 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.
مش عايز تحفظ أوامر ولا تدير سيرفرات؟ خد ERPNext مدار بضغطة — جرب مجانا.
ابدأ مجاناأوامر التحديث والبناء
# تحديث كامل: سحب الكود + تشغيل الترحيلات + إعادة بناء الأصول
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 [email protected] \
--first-name Ahmed \
--last-name Hassan
# تعطيل مستخدم (بيمنع الدخول، ما بيحذفش البيانات)
bench --site mycompany.com disable-user [email protected]
# تمكين مستخدم
bench --site mycompany.com enable-user [email protected]
بطاقة المرجع السريع (اطبعها وعلقها)
الـ ١٠ أوامر اللي هتستخدمها فعلا كل أسبوع:
# 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
سيب تعليقك