التكوين
يمكن لمواقع Frappe مشاركة نفس خادم التطبيق، حيث يكون كل موقع خلف حلول وقواعد بيانات وتكوينات ومواقع مختلفة، بدقة متفاوتة عبر تكوين الموقع (Site Config) في Bench.
يخزن تكوين الموقع جميع المعلومات المتعلقة بالموقع، من تفاصيل قاعدة بيانات الموقع إلى النطاقات المخصصة التي تشير إليه. من خلال تكوين الموقع، يمكننا تعريف أزواج المفتاح والقيمة التي قد تغير سلوك Frappe وتطبيقات Frappe الخاصة بك.
تكوين الموقع
يخزن site_config.json التكوين العام لموقع معين وهو موجود في دليل الموقع. يتم إنشاء الملف وملؤه تلقائيًا بواسطة Frappe. نظرًا لأن هذا يعتمد على Frappe، فقد تتغير الإعدادات أو السلوكيات الافتراضية أيضًا اعتمادًا على أي تحديثات.
{
"db_name": "frappe_database_name",
"db_password": "frappe_database_password",
"admin_password": "admin_password"
}
ملاحظة: يُعتبر هذا الملف أنه يحتوي على معلومات مهمة تتعلق بحالة الموقع ويمكن أن يسبب مشاكل في حالة فقدان ملفات التكوين أو تلفها. يتم عمل نسخة احتياطية منه بشكل دوري مع نسخ قاعدة البيانات الاحتياطية في الإعدادات العادية.
التكوين المشترك للموقع
يخزن common_site_config.json التكوين المشترك بواسطة الـ Bench الخاص بك. الإجراءات التي يتم تنفيذها على مستوى Bench ترتبط عمومًا بهذا التكوين. قد تُستخدم مفاتيح التكوين المحددة لتغيير سلوك عمليات مستوى Bench أو تؤثر على جميع المواقع على الـ Bench الخاص بك، مع الأخذ في الاعتبار أولية قيمة التكوين.
يتم إنشاء وإدارة هذا الملف تلقائيًا بواسطة واجهة سطر أوامر Bench (Bench CLI). قد تؤثر التغييرات في هذا الملف على تغيير سلوك إعدادات Frappe الخاصة بك اعتمادًا على إعدادات النظام وإصدار Bench CLI.
{
"background_workers": 1,
"developer_mode": true,
"dns_multitenant": true,
"file_watcher_port": 6789,
"frappe_user": "frappe",
"gunicorn_workers": 2,
"maintenance_mode": 0,
"pause_scheduler": 0,
"redis_cache": "redis://localhost:13000",
"redis_cache_sentinel_enabled": 1,
"redis_cache_sentinels": [
"redis-cache-sentinel-1:26379",
"redis-cache-sentinel-2:26379"
],
"redis_cache_sentinel_password": "sentinelpassword",
"redis_cache_master_service": "mymaster",
"redis_cache_master_password": "masterpassword",
"redis_queue": "redis://localhost:11000",
"redis_queue_sentinel_enabled": 1,
"redis_queue_sentinels": [
"redis-queue-sentinel-1:26379",
"redis-queue-sentinel-2:26379"
],
"redis_queue_sentinel_password": "sentinelpassword",
"redis_queue_master_service": "mymaster",
"redis_queue_master_password": "masterpassword",
"redis_socketio": "redis://localhost:12000",
"scheduler_tick_interval": 120,
"serve_default_site": true,
"socketio_port": 9000,
"webserver_port": 8000,
"root_password": "MARIADB_PASSWORD",
"live_reload": true
}
إعدادات اختيارية للـ Bench:
| المفتاح | الوصف |
|---|---|
| workers | يسمح بإنشاء عمال مخصصين. المعامل background_workers اختياري، إذا لم يتم تعيينه، سيتم استخدام background_workers العام. مثال: "workers": { "custom_worker1": { "timeout": 5000, "background_workers": 4 } }. أعد توليد التكوين وأعد تشغيل العمليات لتفعيل التغيير. |
| rediscachesentinel_enabled | إذا تم تعيينه إلى 1، يتصل بـ Redis Sentinel في إعداد الإنتاج. |
| rediscachesentinels | مصفوفة من خوادم الـ Sentinel (المضيف/العنوان IP والمنافذ). |
| rediscachesentinel_password | كلمة المرور للاتصال بـ Sentinels. |
| rediscachemaster_service | خدمة Master للاتصال بها. |
| rediscachemaster_password | كلمة مرور خادم Redis الرئيسي (Master). |
| redisqueuesentinel_enabled | إذا تم تعيينه إلى 1، يتصل بـ Redis Sentinel في إعداد الإنتاج. |
| redisqueuesentinels | مصفوفة من خوادم الـ Sentinel (المضيف/العنوان IP والمنافذ). |
| redisqueuesentinel_password | كلمة المرور للاتصال بـ Sentinels. |
| redisqueuemaster_service | خدمة Master للاتصال بها. |
| redisqueuemaster_password | كلمة مرور خادم Redis الرئيسي (Master). |
بالإضافة إلى ذلك، يمكنك تعيين أي مفاتيح ترغب في أن تكون متاحة لجميع المواقع.
أولية قيمة التكوين
ستكون القيمة لمفتاح معين تم تعيينه في site_config.json لها أولوية (precedence) على القيمة المعرفة في common_site_config.json. هذا يعني أنه قد يتم استخدام أزواج المفتاح والقيمة المحددة في التكوين المشترك كخيار احتياطي في بعض الحالات.
تخيل أنك تريد تمكين مسجل Frappe (Frappe Web Logger) على جميع المواقع على الـ Bench الخاص بك، باستثناء موقع واحد worker.frappe.xyz لأن لنفترض أنه موقع عالي النشاط ولا تحتاج إلى أن تغمرك الكثير من المعلومات في وقت واحد. يمكنك تعيين enable_frappe_logger كـ true في common_site_config.json وتعيينه على false في site_config.json الخاص بـ worker.frappe.xyz.
$ bench config set-common-config -c enable_frappe_logger true
$ bench --site worker.frappe.xyz set-config enable_frappe_logger false
وبالمثل، من الممكن أن يدعم خادم تطبيق واحد عددًا من المواقع، لكل منها موفر أو موقع مختلف لقاعدة البيانات. إذا اخترت نقل جميع المواقع على الـ Bench الخاص بك إلى خادم قاعدة بيانات آخر، فقد يكون التبديل بسيطًا مثل تحديث القيم في common_site_config.json الخاص بـ Bench.
مفاتيح التكوين القياسية
هذه بعض المفاتيح القياسية التي يستخدمها إطار عمل Frappe وBench.
الإعدادات الإلزامية
يتم تعيين هذه المفاتيح في site_config.json ويتم إنشاؤها تلقائيًا ما لم يتم توفير القيم أثناء إنشاء الموقع.
| المفتاح | الوصف |
|---|---|
| db_type | نوع قاعدة البيانات. تشمل الخيارات "mariadb" و "postgres". |
| db_name | اسم قاعدة البيانات (يُستخدم أيضًا كاسم مستخدم قاعدة البيانات الافتراضي). |
| db_password | كلمة مرور قاعدة البيانات. |
إعدادات اختيارية
| المفتاح | الوصف |
|---|---|
| admin_password | كلمة المرور الافتراضية لمستخدم "Administrator" القياسي. سيتم استخدامها ككلمة مرور لمستخدم Administrator لجميع المواقع الجديدة. |
| allow_tests | يسمح تعيين هذا بإجراء الاختبارات على هذا الموقع. |
| allow_cors | يمكّن طلبات HTTP عبر المواقع. يمكن تعيينه إلى:
|
| allowed_referrers | النطاقات المذكورة هنا سيُسمح لها بتجاوز CSRF إذا كانت هي المرجع (referer) أو الأصل (origin) لطلب. |
| backupencryptionkey | المفتاح المستخدم لتشفير/فك تشفير النسخ الاحتياطية. |
| dataimportbatch_size | حجم الدفعة لاستيراد البيانات. |
| db_user | بدءًا من الإصدار v16، حدد اسم مستخدم منفصل لقاعدة البيانات. |
| denymultiplelogins | يمنع المستخدمين من امتلاك أكثر من جلسة نشطة واحدة. |
| denymultiplesessions | رفض الجلسات المتعددة. |
| developer_mode | إذا تم تعيين وضع المطور، يتم تحديث تغييرات نوع المستند تلقائيًا في الملفات. |
| disable_async | يعطل عميل socket.io؛ يتوقف العميل عن استطلاع خادم socket.io. |
| disableerrorsnapshot | تعطيل لقطة الخطأ (Error Snapshot). |
| disableglobalsearch | تعطيل البحث العام (Global Search). |
| disable_scheduler | تعطيل المجدول (Scheduler). |
| disablesessioncache | تعطيل ذاكرة التخزين المؤقت للجلسة (Session Cache). |
| disablewebsitecache | تعطيل ذاكرة التخزين المؤقت للموقع (Website Cache). |
| encryption_key | المفتاح المستخدم لتشفير كلمات المرور. يتم إنشاء هذه كلمة المرور تلقائيًا على موقع جديد. عند استعادة الموقع، يجب أيضًا استعادة هذا المفتاح لتتمكن من استخدام كلمات المرور الحالية. |
| enablefrappelogger | إذا تم تعيينه، يسجل معلومات أساسية من الطلبات ويحفظها تحت ./sites/{site}/logs/frappe.web.log. |
| errorreportemail | تعيين بريد الإبلاغ عن الأخطاء (Error Report Email) الافتراضي. |
| ignore_csrf | تجاهل CSRF. |
| install_apps | ذكر قائمة التطبيقات المراد تثبيتها عند استعادة الموقع، إعادة التثبيت وعند الإنشاءات الجديدة. |
| host_name | اسم المضيف (host name) مطلوب للوظائف في الخلفية والطباعة لتحديد عنوان URL للموقع بشكل صحيح. يجب أن تتضمن القيمة البروتوكول والمنفذ (إذا لم يكن افتراضيًا)، بدون شرطة مائلة في النهاية. على سبيل المثال: "https://erp.example.org:2424" |
| http_port | تغيير منفذ HTTP لإعداد Frappe الخاص بك. |
| keepbackupsfor_hours | يُستخدم في frappe.utils.new_backup ليمر عبر frappe.utils.delete_temp_backups. يحتفظ بملفات النسخ الاحتياطية اعتمادًا على عمرها بالساعات. |
| local_infile | تعيين العلم للسماح بالبيانات من الملف المحلي (local infile) لاتصالات MySQL. |
| logging | استخدام frappe.debug_log عبر frappe.log لتمكين مستويات تسجيل مختلفة. في المستوى 2، يظهر الاستعلامات والنتائج التي تم تشغيلها في كل إجراء. |
| maintenance_mode | تمكين وضع الصيانة (Maintenance Mode). |
| maxfilesize | الحد الأقصى لحجم الملف المسموح به لرفع الملفات. الافتراضي هو 10 ميجابايت. |
| maxreportsper_user | الحد الأقصى لعدد تقارير البريد الإلكتروني التلقائي (Auto Email Reports) التي يمكن إنشاؤها بواسطة مستخدم، الافتراضي هو 3. |
| monitor | إذا تم تعيينه، يسجل جميع الطلبات ويحفظ تحت ./logs/monitor.json.log. تحقق من المراقبة (monitoring) تحت وثائق التصحيح. |
| mute_emails | يوقف إرسال البريد الإلكتروني إذا كان true. |
| pause_scheduler | إيقاف المجدول (Scheduler) مؤقتًا. |
| rate_limit | تحديد حدود المعدل (Rate Limits) باستخدام frappe.rate_limiter. تحقق من مرجع المستند: تحديد المعدل (rate limiting). |
| robots_txt | المسار إلى ملف robots.txt ليتم تقديمه عند الذهاب إلى frappe-site.com/robots.txt. |
| root_login | اسم مستخدم جذر قاعدة البيانات (Database root username). |
| root_password | كلمة مرور جذر قاعدة البيانات (Database root password). |
| serverscriptenabled | تمكين/تعطيل البرنامج النصي للخادم (Server Script). |
| skipsetupwizard | تخطي معالج الإعداد (Setup Wizard). |
| socketio_port | تحديد منفذ Socket.IO. |
| webserver_port | يُستخدم عمومًا كخيار احتياطي لمفتاح التكوين http_port. |
| appincludejs | حقن سكريبت JavaScript عن طريق عنوان URL في /app. يجب أن تكون قائمة بعناوين URL المطلقة. |
| appincludecss | حقن ورقة أنماط CSS عن طريق عنوان URL في /app. يجب أن تكون قائمة بعناوين URL المطلقة. |
| disabletransactionlog | تعطيل إنشاء سجل المعاملات (Transaction Log) لفواتير المبيعات وإدخالات الدفع (ميزة إقليمية في ERPNext). |
إعدادات مضيف قاعدة البيانات البعيدة
للاتصال بخادم قاعدة بيانات بعيد باستخدام SSL، يجب أولاً تكوين مضيف قاعدة البيانات لقبول اتصالات SSL. يتوفر مثال لكيفية القيام بذلك في هذا البرنامج التعليمي بواسطة Digital Ocean. بعد القيام بالتكوين، قم بتعيين الخيارات الثلاثة التالية. يجب تعيين جميع الخيارات لمحاولة Frappe الاتصال باستخدام SSL.
| المفتاح | الوصف |
|---|---|
| db_host | مضيف قاعدة البيانات إذا لم يكن localhost. |
| db_port | تحديد المنفذ لقاعدة البيانات الخاصة بك. |
| dbsslca | المسار الكامل لملف ca.pem المستخدم للاتصال بمضيف قاعدة بيانات باستخدام ssl. مثال على القيمة هو "/etc/mysql/ssl/ca.pem". |
| dbsslcert | المسار الكامل لملف cert.pem المستخدم للاتصال بمضيف قاعدة بيانات باستخدام SSL. مثال على القيمة هو "/etc/mysql/ssl/client-cert.pem". |
| dbsslkey | المسار الكامل لملف key.pem المستخدم للاتصال بمضيف قاعدة بيانات باستخدام SSL. مثال على القيمة هو "/etc/mysql/ssl/client-key.pem". |
| rds_db | منح امتيازات معينة بدلاً من جميعها، أثناء إعداد قاعدة بيانات الموقع. يُستخدم في db_manager.py. |
إعدادات مضيف قاعدة البيانات للقراءة فقط المتماثل
يتوفر دليل لإعداد عمليات القراءة من خادم MariaDB ثانوي في إعداد متماثل (replica) في أدلة المستخدم.
| المفتاح | الوصف |
|---|---|
| readfromreplica | لتمكين/تعطيل القراءة من النسخة المتماثلة (replica). القيم المقبولة هي 1/0 أو true/false. |
| differentcredentialsfor_replica | إذا كانت بيانات اعتماد قاعدة البيانات مختلفة على النسخة المتماثلة، فاضبط على 1 وإلا 0. |
| replica_host | عنوان IP للنسخة المتماثلة (Replica). |
| replicadbname | اسم قاعدة بيانات النسخة المتماثلة (Replica DB name). |
| replicadbpassword | كلمة مرور قاعدة بيانات النسخة المتماثلة (Replica DB password). |
إعدادات البريد الإلكتروني الصادر الافتراضية
بعض التكوينات المتاحة منخفضة المستوى لوحدة البريد الإلكتروني في Frappe.
| المفتاح | الوصف |
|---|---|
| autoemailid | إذا تم تعيينه، سيكون هذا هو البريد الإلكتروني الافتراضي للرسائل الصادرة. |
| mail_login | يُستخدم كتفضيل ثاني و "notifications@example.com" يُستخدم كخيار احتياطي. |
| alwaysuseaccountemailidassender | استخدام معرف بريد الحساب كمرسل (Sender). |
| alwaysuseaccountnameassendername | استخدام اسم الحساب كاسم المرسل (Sender Name). |
| emailsendername | اسم مرسل البريد الإلكتروني (Email Sender Name). |
| mail_server | اسم مضيف خادم SMTP. |
| mail_port | منفذ STMP. |
| mail_login | معرف تسجيل الدخول لخادم SMTP. |
| mail_password | كلمة المرور لخادم SMTP. |
| pop_timeout | مهلة POP. |
| use_ssl | الاتصال عبر SSL. |
| use_tls | الاتصال عبر TLS. |
تكوين Bench
يتم استخدام هذه التكوينات بواسطة واجهة سطر أوامر Bench CLI ويمكن تعيينها بشكل مختلف لكل Bench على نظامك من خلال التكوين المشترك للموقع.
| المفتاح | الوصف |
|---|---|
| restartsupervisoron_update | إعادة تشغيل supervisord عند تحديث Bench. |
| restartsystemdon_update | إعادة تشغيل systemd عند تحديث Bench. |
| release_bench | إذا تم تعيينه، سيتم التعامل مع الـ Bench الحالي كأداة بحتة لإجراء عمليات الإصدار (releases). |
| background_workers | عدد العمال المخصصين للتعامل مع الوظائف في الخلفية. |
| dns_multitenant | إذا تم تعيينه، يقوم بتشغيل DNS متعدد الإيجارات (multitenancy) للـ Bench. يُستخدم أثناء إنشاءات تكوين NGINX. |
| filewatcherport | رقم المنفذ لمراقب الملفات (File Watcher). |
| frappe_user | المستخدم الذي تم إنشاء الـ Bench الحالي تحته. |
| gunicorn_workers | عدد عمال Gunicorn. الحد الأدنى للقيمة الافتراضية هو 2. |
| gunicornmaxrequests | عدد الطلبات بعدها سيتم إعادة تشغيل عمال Gunicorn. القيمة الافتراضية هي 5000. |
| maintenance_mode | إذا تم تعيينه، يأخذ المواقع إلى وضع عدم الاتصال (offline) ويوقف جميع العمليات في الخلفية والوظائف المجدولة. يُستخدم أثناء هجرات الموقع وعمليات تحديث Bench. |
| pause_scheduler | إذا تم تعيينه، يوقف المجدول (Scheduler) مؤقتًا للمواقع المحددة. |
| redis_cache | رقم المنفذ لعملية redis cache المحددة في Procfile الخاص بالـ Bench. |
| redis_queue | رقم المنفذ لعملية redis queue المحددة في Procfile الخاص بالـ Bench. |
| redis_socketio | رقم المنفذ لعملية redis Socket.IO المحددة في Procfile الخاص بالـ Bench. |
| schedulertickinterval | يعمل مجدول الوظائف (Job Scheduler) في حلقة (loop) تقوم بإدراج جميع الوظائف المجدولة المعلقة التنفيذ مرة واحدة كل scheduler_tick_interval ثانية. هذا يجعل من الممكن تعيين الحد الأدنى للتردد لجدولة الوظائف. الافتراضي هو 60. |
| socketio_port | رقم المنفذ لعملية Socket.IO المحددة في Procfile الخاص بالـ Bench. |
| webserver_port | رقم المنفذ لخادم الويب Frappe. |
| live_reload | إعادة تحميل Desk تلقائيًا عند إعادة بناء الأصول. |
التكاملات
قد تتطلب بعض التكاملات من طرف ثالث تكوينات منخفضة المستوى قد ترغب في تعريفها لجميع المواقع على الـ Bench الخاص بك، إذا كنت موفر خدمة. يتيح لك Frappe تعريف إعدادات التكوين هذه لتكاملاتك عبر تكوين الموقع.
Sandbox
| المفتاح | الوصف |
|---|---|
| sandboxapikey | مفتاح Sandbox API. |
| sandboxapisecret | سر Sandbox API. |
| sandboxapipassword | كلمة مرور Sandbox API. |
| sandboxapiusername | اسم مستخدم Sandbox API. |
| sandboxpublishablekey | مفتاح Sandbox قابل للنشر (Publishable Key). |
| sandbox_signature | توقيع Sandbox. |
DropBox
| المفتاح | الوصف |
|---|---|
| dropboxaccesskey | مفتاح الوصول إلى Dropbox. |
| dropboxbrokersite | موقع وسيط Dropbox. |
| dropboxsecretkey | المفتاح السري لـ Dropbox. |
PayPal
| المفتاح | الوصف |
|---|---|
| paypal_username | اسم مستخدم PayPal. |
| paypal_password | كلمة مرور PayPal. |
| paypal_signature | توقيع PayPal. |
أخرى
| المفتاح | الوصف |
|---|---|
| googleanalyticsid | معرف Google Analytics. |
| convertedrupeeto_paisa | روبية محولة إلى بايسة لإعدادات RazorPay. |
التمديد الخارجي للتكوين
في بعض الأحيان، قد لا يرغب الأشخاص في وجود قيم للتكوينات مثل كلمة مرور قاعدة البيانات مشفرة مباشرةً في JSON لتكوين الموقع. في هذه الحالة، بعد إعداد الموقع بشكل طبيعي، يمكنك تثبيت تطبيق مخصص يُسمح له بتمديد تكوين الموقع عن طريق إرجاع قاموس (dict) لأي قيم ترغب في إلحاقها/تجاوزها. يمكن للتطبيق جلب هذه القيم كما هو مرغوب، ولكن يُفضل شيء ذو زمن انتقال منخفض جدًا لأنه سيتعين تشغيله لكل طلب إلى الموقع.
يمكن تكوينه على النحو التالي (يجب القيام به بعد الإعداد الأولي للموقع + تثبيت التطبيق):
{
"extra_config": "vault.vault.conf_hook"
}
أو إذا كان لديك عدة تكوينات:
{
"extra_config": ["vault.vault.conf_hook1", "vault.vault.conf_hook2"]
}
مثال على الطريقة في تطبيق مخصص سيكون:
def conf_hook() -> dict:
password = get_password()
return {"db_password": password}
التجاوز من البيئة
يمكن تجاوز قيم تكوين معينة عبر متغيرات البيئة.
الأولوية هي: البيئة -> تكوين الموقع -> القيمة الافتراضية (إذا كان لدى Frappe واحد مُكون).
| التكوين | متغير البيئة |
|---|---|
| redis_queue | FRAPPE_REDIS_QUEUE |
| redis_cache | FRAPPE_REDIS_CACHE |
| db_type | FRAPPE_DB_TYPE |
| db_socket | FRAPPE_DB_SOCKET |
| db_host | FRAPPE_DB_HOST |
| db_port | FRAPPE_DB_PORT |
| db_user | FRAPPE_DB_USER |
| db_name | FRAPPE_DB_NAME |
| db_password | FRAPPE_DB_PASSWORD |