لماذا تستضيف Meilisearch ذاتيًا على خادم VPS
يقدّم Meilisearch تجربة بحث "أثناء الكتابة" (search-as-you-type) تُضاهي الحلول التجارية، لكن برخصة مفتوحة المصدر وبإعداد بسيط للغاية: لا ضبط غامض للمحلّلات، وإعدادات افتراضية مناسبة، وواجهة API واضحة. واستضافته ذاتيًا على خادم VPS تعفيك من الفوترة لكل مستند ولكل عملية بحث في الخدمات المُدارة من نوع Algolia، مع الاحتفاظ بفهارسك وبيانات منتجاتك على بنيتك التحتية الخاصة. وهو خيار مجدٍ اقتصاديًا بشكل خاص لموقع تجارة إلكترونية أو مدوّنة أو توثيق: إذ يخدم خادم VPS متواضع واحد مئات الآلاف من عمليات البحث يوميًا بزمن استجابة منخفض جدًا. أنت تتحكم في مفاتيح API والخصائص القابلة للترشيح ومدى الصلة، ويمكنك إعادة الفهرسة كما تشاء دون قيود الحصص.
الفوائد الملموسة للاستضافة الذاتية لـ Meilisearch
- بحث فوري في أقل من 50 ميلي ثانية مع التسامح مع الأخطاء المطبعية المفعّل افتراضيًا.
- إعداد بسيط للغاية: إعدادات صلة منطقية منذ البداية، وجاهزية للاستخدام في دقائق معدودة.
- ترشيح وأوجه (facets) وترتيب وتظليل (highlighting) مدمجة لبناء واجهة بحث متكاملة.
- مكتوب بلغة Rust: بصمة ذاكرة معقولة وإنتاجية عالية حتى على خادم VPS صغير.
- واجهة API بسيطة مع حِزم SDK لمعظم اللغات وتكاملات جاهزة للواجهة الأمامية.
- لا تكلفة لكل مستند مُفهرَس ولا لكل استعلام، على عكس محركات البحث المُدارة.
المتطلبات المادية والبرمجية
Meilisearch مقتصد لكنه يُحمّل جزءًا من فهارسه في الذاكرة ليبقى سريعًا. لفهرس يضم بضع عشرات الآلاف من المستندات، يكفي 1 إلى 2 غيغابايت من ذاكرة RAM؛ ولمئات الآلاف من المستندات ذات الخصائص القابلة للترشيح الكثيرة، استهدف من 2 إلى 4 غيغابايت. ومرحلة الفهرسة هي الأكثر استهلاكًا لذاكرة RAM والمعالج، لذا اترك هامشًا لعمليات إعادة الفهرسة. ويكفي معالج افتراضي واحد إلى اثنين (vCPU)، ويغطي 20 إلى 40 غيغابايت من قرص SSD الفهرس ولقطاته. ستحتاج إلى Docker، وإلى نطاق إن كنت ستعرض واجهة API للعموم، وإلى MEILI_MASTER_KEY لا محالة: فبدونه، في وضع الإنتاج، ترفض النسخة الإقلاع لحمايتك من وصول مفتوح.
انشر Meilisearch خطوة بخطوة
تجهيز خادم VPS وDocker
ثبّت Docker واضبط جدار الحماية لفتح المنفذين 80 و443 فقط. أنشئ سجل DNS من نوع A للنطاق recherche.mydomain.com يشير إلى عنوان IP الخاص بالخادم.
تشغيل Meilisearch في وضع الإنتاج
استخدم صورة getmeili/meilisearch. عرّف MEILI_ENV=production وMEILI_MASTER_KEY بمفتاح قوي (openssl rand -base64 32). اربط وحدة تخزين على /meili_data للحفاظ على الفهارس: volumes: - ./meili_data:/meili_data.
إدارة مفاتيح API
انطلاقًا من المفتاح الرئيسي، أنشئ مفاتيح محدودة النطاق: مفتاح بحث (search) يُعرض في الواجهة الأمامية، ومفتاح إدارة (admin) في جهة الخادم للفهرسة. لا تعرض المفتاح الرئيسي أبدًا في المتصفح.
ضبط الوكيل العكسي وTLS
ضع Caddy أمام المنفذ 7700: recherche.mydomain.com { reverse_proxy localhost:7700 }. يحصل Caddy على شهادة Let's Encrypt تلقائيًا ويشفّر كل حركة البحث.
فهرسة بياناتك وضبط الصلة
ادفع مستنداتك عبر واجهة API أو حزمة SDK، ثم عرّف searchableAttributes وfilterableAttributes وsortableAttributes وكذلك rankingRules المناسبة لحالتك (تجارة إلكترونية، توثيق، مدوّنة).
تفعيل اللقطات والنسخ الاحتياطي
اضبط اللقطات (snapshots) أو التفريغات (dumps) المنتظمة لـ Meilisearch وانسخها إلى تخزين بعيد. وعند وقوع عطل، يتيح التفريغ إعادة بناء النسخة بفهارسها وإعداداتها.
اقصر قائمة filterableAttributes على الحد الأدنى الضروري: فكل خاصية قابلة للترشيح تزيد من حجم الفهرس ومن زمن الفهرسة. ولواجهة بحث سريعة الاستجابة، اربط الواجهة الأمامية مباشرة بـ Meilisearch بمفتاح "search" محدود النطاق (مقصور على فهارس معيّنة) بدلًا من تمرير كل استعلام عبر خادمك الخلفي، ما يلغي رحلة ذهاب وإياب ويقلّل زمن الاستجابة المُدرَك. وأثناء إعادة فهرسة ضخمة، راقب المهمة عبر واجهة /tasks بدلًا من التوقف انتظارًا.