المشكلة: لماذا APIs البحث التجارية ليست الحل
هل تبني عميل ذكاء اصطناعي يحتاج للبحث على الويب؟ خياراتك: ادفع $5 لكل ألف استعلام لـGoogle، أو اصطدم بحدود معدل Bing API، أو استخدم API غير الرسمي لـDuckDuckGo الذي ينكسر دون إشعار. لا شيء من هذا يمنحك التحكم الكامل، وجميعها ترسل استعلاماتك — واستعلامات مستخدميك — لخوادم طرف ثالث.
لفرق التطوير في المغرب ومنطقة الشرق الأوسط وشمال أفريقيا، هناك إضافة: الحجب الإقليمي، والرقابة، وكون نتائج المحركات الأمريكية غالبًا غير ذات صلة بالبحث المحلي. محرك البحث الشامل المستضاف ذاتيًا يتجاوز كل هذا.
ما يوفره SearXNG خارج الصندوق
- 280+ محرك في آنٍ واحد — Google وBing وDuckDuckGo وBrave وWikipedia وReddit وGitHub وarXiv وYouTube وTwitter/X وغيرها المئات.
- لا تتبع — لا ملفات ارتباط، لا تنميط للمستخدم، لا سجل بحث محفوظ. خصوصية معمارية: المحرك يُرسِل الاستعلامات للمحركات الأصلية، لا أنت.
- JSON API — أضف
?format=jsonلأي استعلام واحصل على نتائج قابلة للقراءة آليًا. مدعوم أصلًا في Open WebUI وn8n وFlowise وLangChain وCrewAI. - تخزين مؤقت Redis — ذاكرة مشتركة للنتائج تقلل الحِمل؛ الحد من المعدل يمنع الإساءة على المثيلات العامة.
- AGPL-3.0 — 33 ألف نجمة+ على GitHub، إصدارات متجددة، صورة Docker تُحدَّث أسبوعيًا.
المعمارية: حاويتان، أقل من 512 MB ذاكرة
يعمل SearXNG كحاويتَي Docker: محرك Python نفسه (أقل من 256 MB ذاكرة) ومثيل Redis (~30 MB) للتخزين المؤقت والحد من المعدل. لا قاعدة بيانات، لا حالة دائمة خارج ذاكرة Redis المؤقتة. مع 1 GB من الذاكرة، يترك SearXNG مساحة وفيرة لـNginx ونظام التشغيل — VPS بـ 2 GB مريح للفرق مع مستخدمين متزامنين أو حركة كثيفة من عملاء الذكاء الاصطناعي.
استضافة SearXNG ذاتيًا على VPS: خطوة بخطوة
اطلب VPS
اختر VPS ServOrbit Cloud بذاكرة لا تقل عن 1 GB (Ubuntu 22.04). يتولى المُجهِّز تثبيت Docker وDocker Compose تلقائيًا.
أنشئ ملف docker-compose.yml
أنشئ مجلد
/opt/searxngوضع فيه ملفdocker-compose.ymlكما يلي:services: redis: image: redis:7-alpine restart: unless-stopped command: redis-server --save "" --appendonly no volumes: - redis-data:/data searxng: image: searxng/searxng:latest restart: unless-stopped ports: - "127.0.0.1:8080:8080" volumes: - ./settings:/etc/searxng:rw environment: - SEARXNG_BASE_URL=https://search.yourdomain.com/ - SEARXNG_SECRET_KEY=CHANGE_THIS_32_CHAR_SECRET_MIN depends_on: - redis volumes: redis-data:أنشئ مفتاحًا سريًا بأمر
openssl rand -hex 32واستبدلCHANGE_THIS_32_CHAR_SECRET_MIN.اضبط settings.yml
أنشئ مجلد
./settingsواستخرج ملف الإعداد الافتراضي:mkdir -p /opt/searxng/settings docker run --rm searxng/searxng:latest cat /etc/searxng/settings.yml \ > /opt/searxng/settings/settings.ymlافتح
settings.ymlوعدّل المفاتيح الأساسية:search: formats: - html - json server: limiter: true redis: url: redis://redis:6379/0اضبط Nginx كـ Reverse Proxy مع TLS
ثبّت Nginx وCertbot، ثم أنشئ
/etc/nginx/sites-available/searxngبكتلتَي server: الأولى تعيد توجيه HTTP إلى HTTPS، والثانية تستمع على المنفذ 443 مع شهادة Let's Encrypt وتوجّه الطلبات إلىhttp://127.0.0.1:8080مع تعيين ترويساتHostوX-Real-IPوX-Forwarded-ForوX-Forwarded-Proto.فعّل الموقع واحصل على الشهادة:
certbot --nginx -d search.yourdomain.com.شغّل الحاويات
من
/opt/searxngنفّذdocker compose up -d. تحقق من أن كلا الحاويتين في حالةUpبالأمرdocker compose ps.فعّل JSON API واختبرها
تأكد من وجود
jsonفي قائمةformatsفيsettings.yml. اختبر من الخادم:curl -s 'https://search.yourdomain.com/search?q=SearXNG&format=json' \ | jq '.results[0] | {title, url, content}'إذا ظهر خطأ 403، تحقق من
formatsوأعد تشغيل الحاوية.فعّل محدّد المعدل لمكافحة البوتات
محدّد المعدل المدمج (مبني على Redis) يحجب العملاء كثيري الطلبات. فعّله عبر
limiter: trueفيsettings.yml. لتعزيز الحماية على مستوى Nginx، أضف:limit_req_zone $binary_remote_addr zone=searxng:10m rate=10r/m;وهذا يقيّد كل IP بـ 10 طلبات في الدقيقة.
اربط Open WebUI أو n8n
في Open WebUI: الإعدادات ← البحث على الويب ← المزوّد: SearXNG ← العنوان:
https://search.yourdomain.com. وفي n8n: عقدة HTTP Request ← طلب GET مع المعاملq. تحصل وكلاؤك الذكية عندئذ على بحث ويب خاص ومحدّث وبلا ترشيح.
الإعداد المتقدم لـ SearXNG
يوفّر ملف settings.yml خيارات تُحوّل SearXNG إلى أداة مُصمَّمة لاحتياجاتك.
تفعيل أو تعطيل المحركات: تحت مفتاح engines: يحمل كل محرك حقل disabled: true لإيقافه. عطّل المحركات البطيئة أو المحجوبة إقليميًا.
تنسيق الاستجابة JSON لعملاء الذكاء الاصطناعي: تحتوي النتائج على results[].title وresults[].url وresults[].content وresults[].engine. مرّر &categories=general,news للتصفية حسب الفئة، أو &language=ar لاستهداف العربية.
SafeSearch: يقبل مفتاح safe_search القيم 0 (معطّل) أو 1 (متوسط) أو 2 (صارم).
اللغات والمناطق: أضف &language=ar-MA للحصول على نتائج بالعربية المغربية.
استخدام SearXNG مصدراً للبحث في وكلاء الذكاء الاصطناعي
نقطة النهاية /search?q=...&format=json هي المدخل الشامل لجميع أطر عمل الوكلاء الذكية.
n8n: أنشئ عقدة *HTTP Request* بطريقة GET، العنوان https://search.yourdomain.com/search، مع المعاملات q وformat=json. يمكن لعقدة Code التالية استخراج $json.results.slice(0,5).map(r => r.url + ' — ' + r.content) لتغذية نموذجك اللغوي.
LangChain (Python): تتضمن حزمة مجتمع LangChain أداة SearxSearchWrapper:
from langchain_community.utilities import SearxSearchWrapper
search = SearxSearchWrapper(
searx_host="https://search.yourdomain.com",
k=5
)
results = search.results("أخبار الذكاء الاصطناعي", num_results=5)Open WebUI: بعد ضبط العنوان في الإعدادات، يمكن لكل محادثة تفعيل البحث على الويب بنقرة واحدة. Open WebUI يستعلم SearXNG ويحقن المقتطفات في سياق النموذج تلقائيًا.
تأمين مثيلك وتحسين أدائه
مثيل SearXNG المفتوح على الإنترنت يجذب الزواحف والمُخترقين سريعًا. إليك الروافع الأربعة للتفعيل.
محدّد معدل Redis: مع limiter: true في settings.yml، يحصي Redis الطلبات بحسب عنوان IP على نافذة زمنية منزلقة.
مصادقة HTTP Basic: للمثيلات المخصصة لفريقك أو وكلائك الذكية، أضف في كتلة location / في Nginx:
auth_basic "SearXNG خاص";
auth_basic_user_file /etc/nginx/.htpasswd;أنشئ الملف بأمر htpasswd -c /etc/nginx/.htpasswd user. تُمرَّر بيانات الاعتماد في العنوان: https://user:[email protected]/search?....
ذاكرة Redis المؤقتة وTTL: Redis مُعدّ بلا استمرارية (--save "") لتجنب التراكم على القرص. لضبط TTL، عدّل مفتاح cache: في settings.yml.
تدوير User-Agent: يُدوّر SearXNG User-Agents تلقائيًا لتجنب الحجب من المحركات الأصلية.
SearXNG مقابل البدائل: أي محرك بحث مستضاف ذاتيًا تختار؟
مرّر الجدول أفقيًا
| المعيار | SearXNG | Searx (الأصلي) | Whoogle | Brave Search API |
|---|---|---|---|---|
| المصادر المُجمَّعة | 280+ محرك | 100+ محرك | Google فقط | Brave فقط |
| JSON API أصلي | نعم (`?format=json`) | نعم | لا | نعم (مفتاح مطلوب) |
| الحد الأدنى من RAM | ~300 MB (مع Redis) | ~200 MB | ~128 MB | صفر (SaaS) |
| صيانة فعّالة | نعم (2026) | متروك (مؤرشف) | نعم (2026) | نعم (SaaS) |
| تكلفة لكل استعلام | صفر | صفر | صفر | $3 / 1,000 استعلام |
قيّد الوصول على المثيلات العامة
إذا كان مثيل SearXNG متاحًا للعموم، أضف HTTP Basic Auth في Nginx أو اضبط limiter: true في settings.yml (Redis مطلوب للحد من المعدل). لاستخدام API فقط، يمكن تعطيل واجهة HTML كليًا.
استكشاف الأخطاء: 4 أخطاء شائعة
1. 429 Too Many Requests — حجب من محرك أصلي: اكتشف Google أو Bing حجمًا غير اعتيادي وحجب مؤقتًا عنوان IP خادمك الافتراضي. الإصلاح الفوري: عطّل المحرك المعني في settings.yml وانتظر 2-6 ساعات.
2. Error: Connection refused to Redis (127.0.0.1:6379): حاوية SearXNG تحاول الوصول لـRedis عبر 127.0.0.1 بدلاً من اسم الخدمة redis. الإصلاح: تأكد أن settings.yml يحتوي url: redis://redis:6379/0.
3. 403 Forbidden على /search?format=json: JSON API معطّل. الإصلاح: تحقق من وجود json في قائمة formats وأعد تشغيل الحاوية.
4. مثيل بطيء (أكثر من 5 ثوانٍ للاستعلام): محركات كثيرة مُفعَّلة في آنٍ أو محركات محجوبة إقليميًا تصل للمهلة. التشخيص: راجع السجلات بأمر docker compose logs searxng | grep timeout. الإصلاح: قلّص المحركات النشطة إلى 5-8 المحركات الأكثر صلة باستخدامك.
SearXNG كعمود فقري للبحث في مجموعة الذكاء الاصطناعي
أصبح SearXNG الواجهة الخلفية الفعلية للبحث في مجموعات الذكاء الاصطناعي المستضافة ذاتيًا في 2026. Open WebUI وn8n وFlowise وLangChain وCrewAI ومعظم أطر عمل تنسيق LLM تدعم SearXNG أصلًا. النمط دائمًا واحد: يقرر LLM أنه يحتاج معلومات حالية، يستدعي نقطة نهاية SearXNG باستعلام، يحصل على مصفوفة JSON من النتائج، ويستخدمها لتأريض استجابته.
هذا يُزيل ثلاث نقاط ألم في نشر واحد: لا فوترة لكل استعلام، لا تسرب بيانات لـGoogle أو Bing، ولا مفاجآت حدود المعدل الساعة 2 صباحًا عندما يشغّل عميلك دفعة بحث.