دليل عملي

استضافة Invoice Ninja على خادم VPS

النشر10 دقائق للقراءةعدد الخطوات: 8

يفرض موردو الفوترة السحابية رسومًا لكل مستخدم أو لكل حجم معاملات.

المحتويات· لماذا تستضيف نظام الفوترة بنفسك1/9
  1. 01لماذا تستضيف نظام الفوترة بنفسك
  2. 02ما تحصل عليه مع Invoice Ninja 5.13.45
  3. 03المتطلبات الدنيا لـ Invoice Ninja 5.13.45
  4. 04نشر Invoice Ninja على VPS
  5. 05ربط بوابات الدفع
  6. 06Invoice Ninja ذاتي الاستضافة مقابل خطة SaaS
  7. 07النسخ الاحتياطي وتحديث Invoice Ninja
  8. 08استكشاف الأخطاء الشائعة وإصلاحها
  9. 09Invoice Ninja ذاتي الاستضافة: ما ينبغي تذكره

لماذا تستضيف نظام الفوترة بنفسك

يفرض موردو الفوترة السحابية رسومًا لكل مستخدم أو لكل حجم معاملات. تبدأ ‎FreshBooks‎ من ‎19 $‎ شهريًا لمستخدم واحد، وتتراوح أسعار ‎QuickBooks Online‎ بين ‎35 $‎ و‎90 $‎ شهريًا حسب الخطة. مع نمو فريقك أو ارتفاع عدد عملائك، يرتفع الفاتور السحابي خطيًا دون عائد مقابل. على خادم ‎VPS‎ بسعر ‎99 درهم/شهر‎، يعمل ‎Invoice Ninja‎ بدون حدود للمستخدمين أو العملاء، ويبقى التكلفة ثابتة بغض النظر عن النمو. تبقى بيانات الفوترة في بنيتك التحتية الخاصة، خاضعة لسياسة الاحتفاظ التي تحددها، دون المرور عبر خوادم طرف ثالث. أكثر من ‎100,000‎ شركة حول العالم اختارت النشر الذاتي لـ‎Invoice Ninja‎.

ما تحصل عليه مع Invoice Ninja 5.13.45

  • عروض الأسعار والفواتير المتكررة وإشعارات الائتمان وأوامر الشراء في واجهة موحدة
  • بوابات دفع مدمجة: ‎Stripe‎ و‎PayPal‎ و‎SEPA‎ و‎Mollie‎ و‎GoCardless‎ وأكثر من عشرين أخرى
  • بوابة عملاء ذاتية الاستضافة مع عرض الفواتير ودفعها عبر الإنترنت
  • تتبع الوقت القابل للفوترة حسب المشروع والمهمة، مع إمكانية ربطه بسطور الفاتورة
  • ‎API REST‎ كاملة و‎webhooks‎ للربط مع نظام ‎ERP‎ أو ‎CRM‎ أو خط أنابيب المحاسبة
  • ‎مصادقة OIDC‎ عامة أضيفت في الإصدار ‎5.13.43‎ (18 سبتمبر 2026) لـ‎SSO‎ المؤسسي
  • دعم عملات متعددة ولغات متعددة مع توليد ‎PDF‎ محلي على جانب الخادم
  • وحدة ‎white-label‎ اختيارية بـ‎30 $‎ سنويًا لإزالة عبارة «‎Created with Invoice Ninja‎»

المتطلبات الدنيا لـ Invoice Ninja 5.13.45

الإصدار ‎5.13.45‎ الصادر في ‎9 أكتوبر 2026‎ يتطلب بيئة دنيا محددة. خصص ما لا يقل عن ‎2 GB‎ من الذاكرة العشوائية للمجموعة الكاملة: يستهلك حاوية ‎PHP-FPM‎ الخاصة بـ‎Invoice Ninja‎ ما بين ‎300‎ و‎500 MB‎ تحت الحمل، ويأخذ ‎MySQL 8.4 LTS‎ ما بين ‎400‎ و‎700 MB‎ حسب حجم ‎buffer pool‎، ويبقى ‎Redis 7.4‎ خفيفًا بـ‎30–50 MB‎ في وضع الخمول. يوفر خادم ‎VPS‎ بـ‎2 vCPU‎ و‎4 GB‎ من الذاكرة هامشًا مريحًا لتوليد ‎PDF‎ متوازٍ. خصص ‎10 GB‎ على الأقل لوحدات تخزين ‎Docker‎. ‎MySQL 8.4 LTS‎ موصى به حتى ‎2032‎؛ تجنب ‎MariaDB‎ بسبب تعارضات معروفة مع ترحيلات ‎Invoice Ninja v5‎. مطلوب ‎Docker Engine 24+‎ و‎Docker Compose v2.x‎.

نشر Invoice Ninja على VPS

  1. تجهيز دليل العمل

    اتصل بخادمك عبر ‎SSH‎ وأنشئ دليلًا مخصصًا: ‎mkdir -p /opt/invoiceninja/{data,logs,public} && cd /opt/invoiceninja‎. سيحتوي هذا الدليل على ملف ‎Compose‎ وملف البيئة ووحدات التخزين الدائمة. تحقق من تثبيت ‎Docker‎ و‎Docker Compose v2‎: يجب أن يُرجع ‎docker compose version‎ إصدارًا من فئة ‎2.x‎.

  2. إنشاء ملف docker-compose.yml

    أنشئ ‎/opt/invoiceninja/docker-compose.yml‎ بالخدمات التالية. تستخدم خدمة ‎db‎ صورة ‎mysql:8.4‎ مع وحدة تخزين مسماة ‎db_data‎. تستخدم خدمة ‎redis‎ الصورة ‎redis:7.4-alpine‎. تستخدم خدمة ‎app‎ الصورة ‎invoiceninja/invoiceninja:5.13.45‎ وتعتمد على ‎db‎ و‎redis‎؛ شغّل ‎./data:/var/www/app/storage‎ و‎./public:/var/www/app/public‎. اكشف المنفذ ‎9000‎ داخليًا فقط — سيتولى ‎nginx‎ الواجهة العامة.

  3. ضبط متغيرات البيئة

    أنشئ ‎/opt/invoiceninja/.env‎ (لا تُدرجه في نظام التحكم بالإصدارات أبدًا). المتغيرات الأساسية: ‎APP_ENV=production‎، ‎APP_DEBUG=false‎، ‎APP_URL=https://votre-domaine.com‎، ‎DB_HOST=db‎، ‎DB_DATABASE=invoiceninja‎، ‎DB_USERNAME=ninja‎، ‎DB_PASSWORD=<كلمة_مرور_قوية>‎، ‎MYSQL_ROOT_PASSWORD=<root_pwd>‎، ‎REDIS_HOST=redis‎، ‎QUEUE_CONNECTION=redis‎، ‎MAIL_MAILER=smtp‎، ‎MAIL_FROM_ADDRESS=noreply@نطاقك.com‎. استخدم كلمات مرور من ‎32‎ حرفًا عشوائيًا على الأقل.

  4. توليد مفتاح التطبيق APP_KEY

    قبل بدء التشغيل الأول، ولّد مفتاح تشفير ‎Laravel‎. شغّل أولًا حاويات الاعتمادية: ‎docker compose up -d db redis‎. انتظر ‎20‎ ثانية لإتمام ‎MySQL‎ تهيئة قاعدة البيانات، ثم شغّل التطبيق: ‎docker compose up -d app‎. ولّد المفتاح: ‎docker compose exec app php artisan key:generate‎. انسخ القيمة المُرجعة (بتنسيق ‎base64:…‎) وضعها في ‎.env‎ تحت المتغير ‎APP_KEY‎. أعد تشغيل الحاوية: ‎docker compose restart app‎.

  5. ضبط nginx كوكيل عكسي

    أنشئ ‎/etc/nginx/sites-available/invoiceninja.conf‎. يستمع الكتلة ‎server‎ على المنفذ ‎443‎ مع شهادة ‎Let's Encrypt‎. تشير توجيهة ‎root‎ إلى ‎/opt/invoiceninja/public‎. تستخدم ‎location /‎ التوجيهة ‎try_files $uri $uri/ /index.php?$query_string‎. يمرر الكتلة ‎location ~ \.php$‎ الطلبات إلى ‎fastcgi_pass 127.0.0.1:9000‎. أضف ‎client_max_body_size 100M‎. فعّل الإعداد: ‎ln -s /etc/nginx/sites-available/invoiceninja.conf /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx‎.

  6. تشغيل الترحيلات وأول تسجيل دخول

    بعد ضبط ‎nginx‎، شغّل ترحيلات قاعدة البيانات: ‎docker compose exec app php artisan migrate --force‎. تستغرق العملية ‎30‎ إلى ‎60‎ ثانية. افتح بعدها ‎https://votre-domaine.com‎ في المتصفح: يطلب منك معالج الإعداد إنشاء حساب المسؤول وإدخال معلومات شركتك.

  7. تفعيل قائمة انتظار المهام غير المتزامنة

    يعتمد ‎Invoice Ninja‎ على عمال ‎Laravel‎ لإرسال البريد الإلكتروني وتوليد ‎PDF‎ في الخلفية. أضف في ملف ‎Compose‎ خدمة ‎worker‎ تستخدم الصورة ذاتها ‎invoiceninja/invoiceninja:5.13.45‎ وتُشغّل الأمر ‎php artisan queue:work --sleep=3 --tries=3‎. بدون عامل نشط، تُوضع فواتير البريد الإلكتروني في قائمة الانتظار لكنها لا تُرسل أبدًا.

  8. ضبط بوابات الدفع

    في لوحة الإدارة (الإعدادات > بوابات الدفع)، فعّل ‎Stripe‎ بلصق مفاتيحك العامة والسرية من لوحة ‎Stripe‎. بالنسبة لـ‎PayPal‎، استخدم بيانات اعتماد ‎OAuth‎ من تطبيق ‎PayPal REST‎. بالنسبة لـ‎SEPA‎ عبر ‎GoCardless‎، أدخل ‎access token‎ بيئة الاختبار ‎Sandbox‎ ثم انتقل إلى بيئة الإنتاج بعد الاختبار.

للحصول على شهادة ‎TLS‎ من ‎Let's Encrypt‎ باستخدام ‎Certbot‎، ثبّت حزمة ‎python3-certbot-nginx‎ ونفّذ ‎certbot --nginx -d votre-domaine.com‎. يعدّل ‎Certbot‎ تلقائيًا إعداد ‎nginx‎ لإعادة توجيه ‎HTTP‎ إلى ‎HTTPS‎ ويجدد الشهادة كل ‎60‎ يومًا عبر مؤقت ‎systemd‎. تأكد من أن المنفذ ‎80‎ مفتوح في جدار الحماية قبل تشغيل ‎Certbot‎: ‎ufw allow 80/tcp‎.

ربط بوابات الدفع

يدعم ‎Invoice Ninja 5.13.45‎ أكثر من ‎25‎ بوابة دفع نصيًا. ‎Stripe‎ هي الأكثر شمولًا: تتعامل مع المدفوعات بالبطاقة، والخصم المباشر ‎SEPA‎، وتحويلات ‎ACH‎، ومنذ الإصدار ‎5.13.43‎، ‎Stripe PromptPay‎ لأسواق جنوب شرق آسيا. يتكامل ‎PayPal‎ عبر ‎REST API‎. بالنسبة للخصم المباشر ‎SEPA‎ في أوروبا، ‎GoCardless‎ هو المسار الموصى به: يوقّع التفويض العميل إلكترونيًا عبر بوابة ‎Invoice Ninja‎. ‎Mollie‎ بديل شامل مفضل للشركات الأوروبية.

Invoice Ninja ذاتي الاستضافة مقابل خطة SaaS

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

استضافة Invoice Ninja بنفسك على VPSSaaS Invoice Ninja مُدار
التكلفة الشهرية‏99 درهم/شهر‏ (VPS ثابت)مجاني حتى 20 عميلًا، ثم 11-16 $/شهر
حد العملاءغير محدود20 عميلًا في الخطة المجانية
التحكم في البياناتالبيانات في بنيتك التحتيةالبيانات لدى Invoice Ninja Inc.
التحديثات‏يدوية (أمر docker pull)تلقائية
White-label‏30 $/سنة (اختياري)مضمّن في الخطط المدفوعة
صيانة الخادمعلى عاتقكيديرها المورد

النسخ الاحتياطي وتحديث Invoice Ninja

يجب أن تغطي استراتيجية النسخ الاحتياطي عنصرين منفصلين: قاعدة بيانات ‎MySQL‎ ووحدة تخزين الملفات. لقاعدة البيانات، جدوِل تفريغًا يوميًا باستخدام ‎docker compose exec db mysqldump -u ninja -p invoiceninja | gzip > /backups/invoiceninja-$(date +%Y%m%d).sql.gz‎ عبر ‎cron‎ أو مؤقت ‎systemd‎. احتفظ بما لا يقل عن ‎30‎ يومًا متجددًا واختبر الاستعادة ربع سنويًا.

للتحديث إلى إصدار مستقبلي، حدّث وسم الصورة في ملف ‎Compose‎، اسحب الصورة الجديدة بـ‎docker compose pull app‎، ثم نفّذ ‎docker compose up -d app worker‎ يليه ‎docker compose exec app php artisan migrate --force‎. راجع سجل التغييرات على ‎GitHub‎ قبل أي تحديث رئيسي.

استكشاف الأخطاء الشائعة وإصلاحها

أربع مشكلات تظهر كثيرًا عند النشر الأولي.

خطأ ‎SQLSTATE[HY000] [2002] Connection refused‎: لم تكن ‎MySQL‎ جاهزة عندما حاول حاوية ‎app‎ الاتصال بها. أضف توجيهة ‎healthcheck‎ إلى خدمة ‎db‎ وشرط ‎service_healthy‎ في ‎depends_on‎.

لا تُرسل الرسائل الإلكترونية: تحقق من أن خدمة ‎worker‎ تعمل بـ‎docker compose ps worker‎. إذا كانت الحالة ‎Exited‎، افحص السجلات: ‎docker compose logs worker‎.

صفحة بيضاء أو خطأ 500 بعد الترحيل: دليل ‎storage/‎ لديه صلاحيات خاطئة. نفّذ ‎docker compose exec app chown -R www-data:www-data /var/www/app/storage && docker compose exec app php artisan config:clear && docker compose exec app php artisan cache:clear‎.

توليد PDF ينتج ملفات فارغة: تحقق من تعريف المتغير ‎PDF_GENERATOR‎ (قيم ممكنة: ‎snappy‎، ‎browsershot‎، ‎phantom‎) ووجود الثنائي المقابل في الصورة.

Invoice Ninja ذاتي الاستضافة: ما ينبغي تذكره

‎Invoice Ninja 5.13.45‎، المنشور في ‎9 أكتوبر 2026‎، حل فوترة ناضج يُصان بنشاط. تُجيز ‎Elastic License 2.0‎ الاستضافة الذاتية لأي استخدام داخلي دون قيود: لا تدفع شيئًا طالما لا تعيد بيع الوصول كخدمة. مجموعة ‎Docker‎ (الصورة الرسمية + ‎MySQL 8.4 LTS‎ + ‎Redis 7.4‎) قابلة للنشر في أقل من ساعة على أي خادم ‎VPS‎ بـ‎2 GB‎ من الذاكرة. وحدة ‎white-label‎ اختيارية بـ‎30 $‎ سنويًا. إذا تجاوز عدد عملائك ‎20‎ أو كانت بيانات الفوترة يجب أن تبقى في بنيتك التحتية لأسباب قانونية أو امتثالية، فإن النشر الذاتي مبرر اقتصاديًا وتقنيًا. فريقنا متاح على ‎[email protected]‎ لمساعدتك في تحديد حجم خادم ‎VPS‎ المناسب وضبط النسخ الاحتياطية.

انشر بنيتك التحتية اليوم

VPS Cloud. بيئات مُهيّأة مسبقًا متاحة.

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

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

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