Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

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

تغطي هذه الصفحة المشكلات الشائعة وحلولها عند تشغيل OpenPR.

اتصال قاعدة البيانات

فشل API في البدء بـ "connection refused"

يبدأ خادم API قبل أن يكون PostgreSQL جاهزاً.

الحل: يتضمن ملف Docker Compose فحوصات صحة وdepends_on مع condition: service_healthy. إذا استمرت المشكلة، زِد start_period لـ PostgreSQL:

yaml
postgres:
  healthcheck:
    start_period: 30s  # Increase from default 10s

"role openpr does not exist"

لم يُنشأ مستخدم PostgreSQL.

الحل: تحقق من ضبط POSTGRES_USER وPOSTGRES_PASSWORD في بيئة Docker Compose. إذا كنت تشغل PostgreSQL يدوياً:

bash
createuser -U postgres openpr
createdb -U postgres -O openpr openpr

لم تُطبَّق الترحيلات

تعمل الترحيلات تلقائياً فقط عند أول تشغيل لحاوية PostgreSQL (عبر docker-entrypoint-initdb.d).

الحل: إذا كانت قاعدة البيانات موجودة بالفعل، طبِّق الترحيلات يدوياً:

bash
docker exec -it openpr-postgres psql -U openpr -d openpr
# Then run each migration SQL file in order

أو أعِد إنشاء المجلد:

bash
docker-compose down -v
docker-compose up -d

فقدان البيانات

docker-compose down -v يحذف مجلد قاعدة البيانات. احتفظ بنسخة احتياطية من بياناتك أولاً.

المصادقة

"رمز غير صالح" بعد إعادة تشغيل الخادم

رموز JWT مُوقَّعة بـ JWT_SECRET. إذا تغيرت هذه القيمة بين إعادات التشغيل، تصبح جميع الرموز الموجودة غير صالحة.

الحل: اضبط JWT_SECRET ثابتاً في .env:

bash
JWT_SECRET=your-fixed-random-secret-here

أول مستخدم ليس مسؤولاً

دور المسؤول يُكلَّف لأول مستخدم يسجل. إذا رأيت role: "user" بدلاً من role: "admin"، سُجِّل حساب آخر أولاً.

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

bash
docker exec -it openpr-postgres psql -U openpr -d openpr \
  -c "UPDATE users SET role = 'admin' WHERE email = '[email protected]';"

Docker / Podman

فشل بناء Podman بخطأ DNS

الشبكة الافتراضية لـ Podman لا تملك وصولاً إلى DNS أثناء البناء.

الحل: استخدم دائماً --network=host عند بناء الصور مع Podman:

bash
sudo podman build --network=host --build-arg APP_BIN=api -f Dockerfile.prebuilt -t openpr_api .

الواجهة الأمامية تُظهر "502 Bad Gateway"

حاوية Nginx لا تستطيع الوصول إلى خادم API.

الحل: تحقق من أن:

  1. حاوية API تعمل: docker-compose ps
  2. فحص صحة API يجتاز: docker exec openpr-api curl -f http://localhost:8080/health
  3. كلا الحاويتين على نفس الشبكة: docker network inspect openpr_openpr-network

تعارضات المنافذ

خدمة أخرى تستخدم نفس المنفذ.

الحل: غيِّر تعيين المنفذ الخارجي في docker-compose.yml:

yaml
api:
  ports:
    - "8082:8080"  # Changed from 8081

خادم MCP

"tools/list تُعيد فارغاً"

خادم MCP لا يستطيع الاتصال بـ API.

الحل: تحقق من متغيرات البيئة:

bash
docker exec openpr-mcp-server env | grep OPENPR

تحقق من أن:

  • OPENPR_API_URL يشير إلى نقطة نهاية API الصحيحة
  • OPENPR_BOT_TOKEN رمز بوت صالح (يبدأ بـ opr_)
  • OPENPR_WORKSPACE_ID UUID مساحة عمل صالح

نقل stdio لا يعمل

يحتاج ثنائي MCP إلى إعداده كأمر في عميل الذكاء الاصطناعي.

الحل: تأكد من صحة مسار الثنائي وضبط متغيرات البيئة:

json
{
  "mcpServers": {
    "openpr": {
      "command": "/absolute/path/to/mcp-server",
      "args": ["--transport", "stdio"],
      "env": {
        "OPENPR_API_URL": "http://localhost:3000",
        "OPENPR_BOT_TOKEN": "opr_...",
        "OPENPR_WORKSPACE_ID": "..."
      }
    }
  }
}

انقطاع اتصال SSE

قد تُغلق خوادم الوكيل اتصالات SSE بمهل قصيرة.

الحل: إذا كنت تستخدم وكيلاً عكسياً، زِد المهلة لنقطة نهاية SSE:

# Caddy
reverse_proxy /sse localhost:8090 {
    flush_interval -1
}

الواجهة الأمامية

صفحة فارغة بعد النشر

قد يستخدم بناء الواجهة الأمامية رابط API الخاطئ.

الحل: اضبط VITE_API_URL قبل البناء:

bash
VITE_API_URL=https://your-domain.example.com/api npm run build

تسجيل الدخول يعمل لكن الصفحات فارغة

طلبات API تفشل بصمت. تحقق من وحدة تحكم المتصفح (F12) لأخطاء 401 أو CORS.

الحل: تأكد من إمكانية وصول API من المتصفح وإعداد CORS. يجب أن توجِّه الواجهة الأمامية طلبات API عبر Nginx.

الأداء

عمليات بحث بطيئة

يمكن أن يكون البحث النصي الكامل لـ PostgreSQL بطيئاً على مجموعات البيانات الكبيرة دون فهارس مناسبة.

الحل: تأكد من وجود فهارس FTS (تُنشأ بالترحيلات):

sql
-- Check for existing indexes
SELECT indexname FROM pg_indexes WHERE tablename = 'work_items';

استهلاك ذاكرة عالٍ

يعالج خادم API رفع الملفات في الذاكرة.

الحل: حدِّد أحجام الرفع وراقب دليل uploads/. فكِّر في إعداد تنظيف دوري للرفع القديم.

الحصول على المساعدة

إذا لم تُغطَّ مشكلتك هنا:

  1. تحقق من مشكلات GitHub للمشكلات المعروفة.
  2. راجع سجلات API وخادم MCP لرسائل الخطأ.
  3. افتح مشكلة جديدة مع سجلات الخطأ وتفاصيل البيئة وخطوات إعادة الإنتاج.

Released under the Apache-2.0 License.