دليل النشر

استضافة ERPNext على VPS: دليل شامل

انشر على VPS Cloud ←

دليل عملي

استضافة ERPNext على VPS: دليل شامل

الاستضافة الذاتية9 دقائق للقراءةعدد الخطوات: 7

ERPNext نظام ERP مفتوح المصدر متكامل: محاسبة ومبيعات ومشتريات ومخزون وتصنيع وموارد بشرية في تطبيق واحد. باستضافته ذاتيًا على VPS الخاص بك، تحصل على نظام إدارة متكامل دون رسوم شهرية لكل مستخدم، ودون أن تغادر بياناتك المالية بنيتك التحتية. يتناول هذا الدليل النشر خطوة بخطوة باستخدام stack الرسمية Frappe Docker، والإعداد بعد التثبيت، والمراقبة، واستكشاف الأخطاء الشائعة، ومقارنة مع Odoo Community للاختيار بين الأداتين.

المحتويات· لماذا تستضيف ERPNext ذاتيًا على VPS1/10
  1. 01لماذا تستضيف ERPNext ذاتيًا على VPS
  2. 02الفوائد الملموسة لـ ERPNext مُستضاف ذاتيًا
  3. 03الوحدات الرئيسية في ERPNext
  4. 04المتطلبات العتادية والبرمجية
  5. 05انشر ERPNext مع Frappe Docker وHTTPS
  6. 06بعد التثبيت: الشركة والسنة المالية والمستخدمون
  7. 07المراقبة والصيانة
  8. 08استكشاف الأخطاء: المشكلات الشائعة
  9. 09ERPNext مقابل Odoo Community: متى تختار أيًّا منهما
  10. 10الوثائق الرسمية

لماذا تستضيف ERPNext ذاتيًا على VPS

يجمع نظام ERP أكثر بيانات الشركة حساسية: القيود المحاسبية، والهوامش، وبطاقات العملاء والموردين، والرواتب. غالبًا ما تُفوتِر عروض SaaS لكل مستخدم شهريًا، وهو ما يصبح مكلفًا مع نمو الفرق. على VPS مخصّص، تدفع ثمن الخادم مرة واحدة، وتضيف من المستخدمين ما تحتاج، وتبقى قاعدة البيانات تحت سيطرتك مع نسخ احتياطي وفق قواعدك الخاصة.

يقوم ERPNext على Frappe، وهو إطار عمل Python/JavaScript يجعل الكود المصدري قابلًا للقراءة والتوسعة. تمنحك الاستضافة الذاتية التحكم في جدول التحديثات واختيار التطبيقات المكملة (HRMS، e-Commerce، Education، Healthcare) وإمكانية كتابة وحداتك الخاصة دون الاعتماد على مورّد.

الفوائد الملموسة لـ ERPNext مُستضاف ذاتيًا

  • دون أي تكلفة لكل مستخدم: أضف فرقك دون زيادة الفاتورة.
  • سيادة على البيانات المحاسبية وبيانات الموارد البشرية، التي تبقى على خادمك.
  • جميع الوحدات متاحة (محاسبة، مخزون، CRM، تصنيع، رواتب) دون مستوى مدفوع.
  • تخصيص حر عبر إطار عمل Frappe والتطبيقات التكميلية.
  • نسخ احتياطي واحتفاظ مُداران، ملائمان لالتزاماتك القانونية.
  • قابلية التوسّع: ارفع RAM/vCPU مع نمو حجم المعاملات.

الوحدات الرئيسية في ERPNext

يغطي ERPNext الدورة التشغيلية الكاملة للمؤسسة. المحاسبة: دليل حسابات متعدد العملات، دفتر الأستاذ العام، التقارير النظامية (الميزانية، حساب النتائج)، إدارة ضريبة القيمة المضافة والتسوية البنكية. المبيعات والمشتريات: عروض الأسعار والطلبات والتسليمات والفواتير وإشعارات الدائن مع مسارات الموافقة. إدارة المخزون: مستودعات متعددة، دُفعات وأرقام تسلسلية، جرد دوري، تقييم FIFO أو متوسط متحرك. CRM: العملاء المحتملون والفرص والحملات وخط أنابيب المبيعات مع لوحة نشاط. التصنيع: قوائم المواد (BOM)، أوامر العمل، تتبع محطات العمل والهالك. الموارد البشرية: ملفات الموظفين، الإجازات، الحضور، كشوف الرواتب قابلة التهيئة حسب البلد وتقييم الأداء.

تُفعَّل كل وحدة من مكتب ERPNext؛ تثبّت ما تحتاجه فحسب، وتُعرَّف صلاحيات الوصول بالأدوار على مستوى المستند.

المتطلبات العتادية والبرمجية

ERPNext أكثر تطلّبًا من المتوسط. احسب على الأقل 2 vCPU و4 GB من الذاكرة RAM للاستخدام الاختباري، و4 vCPU / 8 GB من الذاكرة RAM للإنتاج مع عدة مستخدمين متزامنين. خصّص 20 GB من القرص لقاعدة بيانات MariaDB وRedis والملفات المرفوعة.

أما على الجانب البرمجي: Docker وDocker Compose v2 (>= 2.20)، واسم نطاق (مثل erp.myapp.com) يشير إلى عنوان IP الخاص بـ VPS، والمنفذ 443 مفتوح للداخل. يستخدم ERPNext MariaDB 10.6+ كقاعدة بيانات رئيسية وRedis للتخزين المؤقت وعمّال الوقت الفعلي — كلاهما مدرج في stack frappe_docker؛ لا تحتاج إلى تثبيتهما بشكل منفصل.

انشر ERPNext مع Frappe Docker وHTTPS

  1. تحضير VPS وDocker

    عبر SSH، حدّث النظام (apt update && apt upgrade -y) وثبّت Docker عبر curl -fsSL https://get.docker.com | sh. أضف مستخدمك إلى مجموعة docker: usermod -aG docker $USER. تحقّق من docker compose version (v2 مطلوب).

  2. الحصول على frappe_docker

    استنسخ المستودع الرسمي واختر الفرع المقابل للإصدار المستهدف:

    git clone https://github.com/frappe/frappe_docker
    cd frappe_docker

    يحتوي مجلد overrides/ على compose partials لـ Caddy (HTTPS تلقائي) وTraefik وتطبيق HRMS — اجمعها وفق احتياجاتك.

  3. إعداد البيئة

    انسخ example.env إلى .env واضبط المتغيرات الأساسية:

    cp example.env .env

    في .env، حدّد FRAPPE_SITE_NAME_HEADER وDB_PASSWORD وREDIS_CACHE، وإن كنت تستخدم override Caddy — LETSENCRYPT_EMAIL والنطاق في Caddyfile. لا تنشر أبدًا بكلمات المرور الافتراضية.

  4. تشغيل الحزمة

    ابدأ جميع الخدمات:

    docker compose --project-name erpnext \
      -f compose.yaml \
      -f overrides/compose.mariadb.yaml \
      -f overrides/compose.redis.yaml \
      -f overrides/compose.https.yaml \
      up -d

    ثم أنشئ موقع ERPNext وثبّت التطبيق:

    docker compose exec backend bench new-site erp.myapp.com \
      --mariadb-root-password <rootpwd> \
      --admin-password <adminpwd>
    docker compose exec backend bench --site erp.myapp.com install-app erpnext
    docker compose exec backend bench --site erp.myapp.com migrate

    تابع السجلات للتأكد من سلامة جميع الخدمات (db، redis، workers، scheduler): docker compose logs -f.

  5. إعداد الوكيل العكسي

    إن لم تكن تستخدم override Caddy المدرج، ضع Nginx أمام ERPNext. مثال مبسّط:

    server {
      listen 443 ssl;
      server_name erp.myapp.com;
      ssl_certificate     /etc/letsencrypt/live/erp.myapp.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/erp.myapp.com/privkey.pem;
      location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; }
    }

    مع Caddy، يكفي Caddyfile بسيط: erp.myapp.com { reverse_proxy backend:8000 } — تُحصل شهادة Let's Encrypt وتُجدَّد تلقائيًا.

  6. التأمين والنسخ الاحتياطي

    قيّد المنافذ الداخلية (MariaDB 3306، Redis 6379) على loopback أو شبكة Docker الداخلية. جدوِل نسخًا احتياطية منتظمة بـ bench backup وخزّنها خارج VPS:

    docker compose exec backend bench --site erp.myapp.com backup --with-files

    توجد ملفات النسخ الاحتياطي في sites/erp.myapp.com/private/backups/ داخل volume الـ sites — انسخها إلى تخزين كائنات خارجي (S3، Garage) للتعافي من الكوارث.

  7. أول تسجيل دخول

    افتح عنوان تطبيقك وسجّل الدخول باسم المستخدم Administrator وكلمة المرور المحددة عند bench new-site. احتسب بضع دقائق بعد التثبيت قبل أن يستجيب العنوان — فعمليات الترحيل الأولية تعمل في الخلفية. ثم ينتقل ERPNext إلى معالج الإعداد: اللغة والمنطقة الزمنية والعملة والسنة المالية والشركة.

بعد التثبيت: الشركة والسنة المالية والمستخدمون

بمجرد تسجيل الدخول كـ Administrator، انتقل إلى الإعدادات ← إعدادات النظام لتأكيد المنطقة الزمنية وتنسيق التاريخ، ثم إلى المحاسبة ← دليل الحسابات لتكييف الهيكل مع المعايير المحلية (يوفر ERPNext دلائل حسابات لنحو مئة دولة).

أنشئ شركتك في المحاسبة ← الشركة: أدخل العملة الأساسية والرقم الضريبي وسنة البدء المالية. يُنشئ ERPNext تلقائيًا حسابات الإقفال وقيود الرصيد الافتتاحي.

للمستخدمين، انتقل إلى الإعدادات ← المستخدمون والصلاحيات ← المستخدم: عيّن الأدوار المهنية (Accounts Manager، Stock User، HR Manager…) بدلًا من الصلاحيات مستندًا بمستند. الأدوار قابلة للتجميع: يمكن للمستخدم أن يكون في آنٍ واحد Sales User وPurchase User دون صلاحيات إدارة.

المراقبة والصيانة

يوفر ERPNext عدة نقاط دخول للإشراف على نسخة الإنتاج.

bench doctor هو أمر التشخيص المدمج: يتحقق من حالة عمّال Celery والمجدوِل واتصال Redis. شغّله من الحاوية:

docker compose exec backend bench doctor

يظهر العامل المفقود أو الطابور المعلّق فورًا.

سجلات التطبيق — سجلات ERPNext في sites/<site>/logs/ داخل volume الـ sites:
- web.log: أخطاء HTTP وآثار Python من backend Gunicorn;
- worker.error.log: استثناءات عمّال Celery (المهام المجدوَلة، إرسال البريد);
- scheduler.log: دورات المجدوِل.

النسخ الاحتياطي التلقائي — أنشئ مهمة cron على المضيف لتشغيل bench backup يوميًا ونسخ الأرشيفات إلى تخزين بعيد:

0 3 * * * docker compose -p erpnext exec -T backend \
  bench --site erp.myapp.com backup --with-files \
  && rclone copy /path/to/backups remote:erpnext-backups

التحديثات — قبل أي ترقية إلى إصدار رئيسي، قم بنسخة احتياطية كاملة، واقرأ ملاحظات الإصدار، واختبر على نسخة، ثم: bench update --reset داخل الحاوية. تُطبَّق ترحيلات المخطط تلقائيًا، لكن بعض الإصدارات الرئيسية لـ ERPNext تستلزم الترقية إلى أعلى إصدار ثانوي أولًا (مثلًا v14 → v14.x latest قبل الانتقال إلى v15).

استكشاف الأخطاء: المشكلات الشائعة

تعطّل العامل: RedisBroadcastError أو ConnectionRefusedError نحو Redis
خطأ في worker.error.log: redis.exceptions.ConnectionRefusedError: [Errno 111] Connection refused. السبب: توقّف حاوية Redis أو أعادت التشغيل بعد نفاد الذاكرة. تحقّق: docker compose ps redis — إن كانت Exited، أعد تشغيلها بـ docker compose up -d redis ثم أعد تشغيل العمّال. إن تكرر التعطّل، زِد RAM الـ VPS أو قلّل عدد العمّال في common_site_config.json.

ترحيل المخطط متوقف: frappe.exceptions.SchemaChangedError
خطأ أثناء bench migrate: SchemaChangedError: <DocType> has been manually modified. السبب: عُدِّل عمود يدويًا في قاعدة البيانات، ويرفض ERPNext الكتابة فوقه. العلاج: bench --site erp.myapp.com migrate --skip-failing، ثم افحص DocType المعني في الواجهة وأعد تشغيل migrate بدون الراية.

انتهاء مهلة bench: Traceback ... requests.exceptions.ReadTimeout
خطأ أثناء عملية طويلة (استيراد CSV ضخم، إعادة حساب المخزون): ReadTimeout: HTTPConnectionPool. زِد مهلة Gunicorn في common_site_config.json: "gunicorn_workers": 2, "web_timeout": 120. أعد تشغيل خدمة الويب: docker compose restart backend.

رفض اتصال MariaDB: OperationalError: (2003, "Can't connect to MySQL server on 'db'")
خطأ عند bench new-site أو عند بدء تشغيل العمّال. السبب المعتاد: حاوية MariaDB ليست جاهزة بعد أو فشل فحص الحالة. تحقّق: docker compose logs db | tail -20. إن أظهرت MariaDB [ERROR] InnoDB: Page 0 log sequence number، ملفات قاعدة البيانات تالفة — استعِد من آخر نسخة احتياطية. إن كان مجرد تأخير في الإقلاع، انتظر 30 ثانية وأعد الأمر.

موقع فارغ بعد bench migrate: TemplateNotFound
يعرض ERPNext صفحة بيضاء أو خطأ Jinja بعد التحديث. السبب: لم تُعاد بناء الأصول الثابتة. شغّل: docker compose exec backend bench --site erp.myapp.com clear-cache && bench build --app erpnext. قد يكفي إعادة تشغيل حاوية frontend (إن كانت منفصلة).

ERPNext مقابل Odoo Community: متى تختار أيًّا منهما

مرّر الجدول أفقيًا

المعيارERPNextOdoo Community
الرخصةGPL v3 — الكود والوحدات مجانيةLGPL v3 (core) — وحدات Enterprise ملكية
الوحدات المدرجةمحاسبة، مخزون، CRM، تصنيع، موارد بشرية — جميعها مجانيةنواة وظيفية؛ الوحدات المتقدمة محجوزة لـ Odoo Enterprise المدفوع
اللغة / الstackPython + Frappe، JS عادي من جانب العميلPython + OWL (إطار JS داخلي)
الواجهةمكتب تطبيقات، نماذج قابلة للتهيئة بلا كودعرض kanban/قائمة، studio low-code (Enterprise)
تعقيد التثبيتstack Docker رسمية موثقة توثيقًا جيدًاDocker متاح، لكن بتجربة مجتمعية أقل
المجتمعنشط على GitHub ومنتدى Frappe؛ قوي في الهند وأفريقياواسع جدًا؛ شبكة شركاء كثيفة في أوروبا
مثالي لـالشركات الباحثة عن ERP مجاني كامل، التصنيع، متعدد العملاتالشركات الراغبة في CRM متقدم أو تجارة إلكترونية Odoo بلا تطوير مخصص

يتطوّر ERPNext عبر إصدارات كبرى مع ترحيلات للمخطط: قبل كل تحديث، خذ نسخة bench backup كاملة واختبر ترقية الإصدار على نسخة قبل تطبيقه في الإنتاج. يجب أن تتبع الترحيلات بين الإصدارات الكبرى المسار الرسمي (مثلًا v14 → v15 دون تخطي إصدار).

الوثائق الرسمية

للإعدادات المتقدمة والخيارات الخاصة بالأداة، راجع الوثائق الرسمية لـ ERPNext ومستودع frappe_docker. يغطّي هذا الدليل النشر على VPS؛ وتبقى وثائق الناشر المرجع للإعدادات الدقيقة والتحديثات الكبرى وحالات الاستخدام الخاصة.

انشر نسختك على VPS Cloud من ServOrbit

يتيح لك VPS Cloud من ServOrbit مع Docker مُعَدّ مسبقًا وموارد قابلة للتوسّع تثبيت هذه الأداة دون احتكاك، وتعديل RAM وvCPU مع نمو الاستخدام.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة