ITSkillsCenter
تطوير الويب

نشر Meilisearch على Hetzner مع Coolify: الدليل الكامل 2026

3 دقائق للقراءة

📍 المقالة الرئيسية للمجموعة: Meilisearch 2026: الدليل الكامل.

خمس عشرة دقيقة للانتقال من VPS فارغ إلى Meilisearch إنتاج يمكن الوصول إليه عبر HTTPS، جاهز لفهرسة كتالوجك. هذا الدرس يفصل الإجراء الدقيق على Hetzner CX22 (4,51 يورو/شهر) عبر Coolify v4، PaaS مفتوح المصدر الذي يحول الاستضافة الذاتية إلى ضغطة فأر. الطريقة موثقة على تثبيتات في داكار والدار البيضاء ولاغوس وتونس.

المتطلبات

قبل البدء، تأكد من توفر VPS Hetzner CX22 أو OVH VPS-1 تحت Ubuntu 22.04 LTS أو Debian 12. يجب أن يكون Coolify v4 مثبتاً مسبقاً (راجع دليل Coolify إذا لم يكن كذلك). ستحتاج إلى اسم نطاق مع سجل DNS A يشير إلى الـ VPS (مثلاً search.votre-entreprise.com). المستوى المتوقع: متوسط. الوقت المقدر: 15 إلى 25 دقيقة.

الخطوة 1 — إنشاء DNS والانتشار

في لوحة تحكم DNS الخاصة بك (Cloudflare، OVH، Gandi، Namecheap)، أنشئ سجل A يشير من search.votre-entreprise.com إلى عنوان IP الخاص بـ VPS. ضع TTL على 300 ثانية لتسهيل أي تعديلات لاحقة. تحقق من الانتشار باستخدام الأمر التالي:

dig +short search.votre-entreprise.com

إذا كان Cloudflare في الواجهة، عطل الـ proxy (السحابة البرتقالية → رمادية) أثناء إصدار شهادة Let’s Encrypt. يمكنك إعادة تفعيلها بعد إصدار الشهادة بنجاح.

الخطوة 2 — إطلاق خدمة Meilisearch في Coolify

في واجهة Coolify الإدارية، اذهب إلى Resources+ NewService. ابحث عن «Meilisearch» في الكتالوج. القالب الرسمي الذي تصونه فريق Coolify ينشر آخر إصدار مستقر (v1.10 وقت الكتابة) مع volume دائم مُكوَّن مسبقاً. أعطِ اسماً للخدمة: meilisearch-prod. اختر الخادم المستهدف (Hetzner CX22 الخاص بك) والمشروع (أنشئ «Production» إذا لم يكن موجوداً). انقر Continue.

الخطوة 3 — تكوين متغيرات البيئة

على شاشة التكوين، حدد متغيرات البيئة الأساسية للأمان والأداء. يجب توليد MEILI_MASTER_KEY بقوة عشوائية كافية لأنها تتحكم في كل شيء على المثيل. اكتبها فوراً في خزانة Vaultwarden (مجموعة «Infrastructure»). دونها، تفقد التحكم الإداري في المثيل بأكمله.

MEILI_ENV=production
MEILI_MASTER_KEY=قم-بتوليد-32-حرفاً-عشوائياً-على-الأقل
MEILI_DB_PATH=/data/data.ms
MEILI_DUMP_DIR=/data/dumps
MEILI_HTTP_PAYLOAD_SIZE_LIMIT=100MB
MEILI_LOG_LEVEL=INFO
MEILI_NO_ANALYTICS=true

لتوليد المفتاح، استخدم الأمر التالي على أي خادم Linux:

openssl rand -base64 48 | tr -d '/+=' | head -c 32

الخطوة 4 — النطاق و HTTPS

في تبويب Domains، أدخل https://search.votre-entreprise.com. Coolify يكوِّن reverse proxy الداخلي (Traefik 2.10) لإدارة شهادة Let’s Encrypt تلقائياً. فعِّل Force HTTPS لإعادة توجيه HTTP → HTTPS. المنفذ الداخلي هو 7700 افتراضياً، يقوم Coolify بتعيينه تلقائياً إلى 443 العام. لا حاجة لأي تكوين شبكة إضافي.

الخطوة 5 — النشر والتحقق

انقر Deploy. السجلات في الوقت الفعلي تظهر: pulling getmeili/meilisearch:v1.10، creating volume، requesting Let’s Encrypt certificate، service healthy. احسب 60 ثانية للنشر الأول. اختبار التشغيل:

curl https://search.votre-entreprise.com/health
# يعيد: {"status":"available"}

مع master key الخاص بك:

curl -H "Authorization: Bearer VOTRE_MASTER_KEY" \
  https://search.votre-entreprise.com/version
# يعيد: {"pkgVersion":"1.10.0",...}

الخطوة 6 — إنشاء API key للقراءة فقط

master key يجب ألا يُستخدم أبداً في الواجهة الأمامية. أنشئ API key عاماً بنطاق search فقط. الاستجابة تحتوي على "key": "..." — هذا المفتاح هو الذي تضعه في كود Next.js أو Astro أو Vue الخاص بك. لا يستطيع سوى البحث للقراءة، أبداً تعديل الفهارس.

curl -X POST 'https://search.votre-entreprise.com/keys' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "description": "Frontend search-only key",
    "actions": ["search"],
    "indexes": ["*"],
    "expiresAt": null,
    "name": "frontend-public"
  }'

الخطوة 7 — أول فهرس وأول وثيقة

الآن وقد أصبح Meilisearch فاعلاً ومؤمَّناً، لنُنشئ أول فهرس ونقوم بإدخال بعض الوثائق التجريبية المتعلقة بسوق إفريقي. سنستخدم منتجات صناعة تقليدية ملونة كبيانات اختبار:

curl -X POST 'https://search.votre-entreprise.com/indexes' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '{ "uid": "products", "primaryKey": "id" }'

curl -X POST 'https://search.votre-entreprise.com/indexes/products/documents' \
  -H 'Authorization: Bearer VOTRE_MASTER_KEY' \
  -H 'Content-Type: application/json' \
  --data '[
    {"id":1,"title":"Pagne wax indigo Faso","price":12500,"category":"tissus"},
    {"id":2,"title":"Bazin riche Mali","price":18000,"category":"tissus"},
    {"id":3,"title":"Sac en cuir Touareg","price":35000,"category":"maroquinerie"}
  ]'

curl 'https://search.votre-entreprise.com/indexes/products/search' \
  -H 'Authorization: Bearer VOTRE_API_KEY_SEARCH' \
  -H 'Content-Type: application/json' \
  --data '{ "q": "pagne" }'

الاستجابة تعيد الوثيقة 1 مع نقاط الصلة الخاصة بها. إذا كتبت «pagn» أو «pagnee»، يعيد Meilisearch الوثيقة 1 أيضاً بفضل التسامح الأصلي مع الأخطاء الإملائية. هذا السلوك يحدث دون أي تكوين إضافي.

الخطوة 8 — تكوين النسخ الاحتياطية

Cron يومي على VPS لإنشاء dump وإرساله إلى MinIO/B2. هذا الإجراء يحفظ كامل بيانات الفهارس بشكل قابل للاستعادة. اختبر الاستعادة شهرياً للتأكد من سلامة الإجراء.

0 3 * * * curl -X POST -H 'Authorization: Bearer MASTER_KEY' \
  https://search.votre-entreprise.com/dumps && \
  rclone copy /var/lib/coolify/services/meilisearch-prod/data/dumps \
    b2-vaultwarden:meilisearch-backups/$(date +\%F)/

الأخطاء الشائعة

الخطأ السبب الحل
401 Unauthorized في كل مكان رأس Authorization مشكَّل بشكل سيئ تحقق من Bearer + المفتاح بدون مسافات طفيلية
413 Payload Too Large وثيقة > 100 ميغابايت زيادة MEILI_HTTP_PAYLOAD_SIZE_LIMIT
Volume غير دائم volume Coolify معين بشكل سيئ تحقق في Storages أن /data معين
زمن استجابة > 200 مللي ثانية RAM مشبعة الانتقال إلى CCX13 (8 جيجابايت)
Master key مرئي في GitHub دفع دون .env متجاهل إلغاء المفتاح، توليد جديد، دفع .gitignore
CORS يحظر الواجهة الأمامية ترويسة Access-Control-Allow-Origin مفقودة تكوين Caddy/Traefik لإضافة CORS مناسبة

التكيف مع السياق المغاربي وغرب إفريقيا

ثلاث تعديلات للشركات الإفريقية. زمن الاستجابة المقبول: ping 95 ميلي ثانية من Hetzner Falkenstein من داكار عبر كابل ACE جيد للبحث في التجارة الإلكترونية؛ للـ autocomplete على كل حرف، يتجنب الـ debounce على الواجهة الأمامية بـ 300 ميلي ثانية التشبع. الدفع لـ Hetzner: بطاقة Visa صادرة من CBAO أو BICIS أو Société Générale CI تعمل مباشرة. بطاقة Wave Business الافتراضية أيضاً. التخزين: 25 جيجابايت SSD مشمولة في CX22 تستوعب على نطاق واسع 5 ملايين وثيقة نموذجية (كتالوج المنتجات، المقالات).

دروس الإخوة في المجموعة

الأسئلة المتكررة

Coolify أو docker-compose مباشرة؟ Coolify لـ 95% من الحالات (إدارة مركزية، HTTPS تلقائي، إعادة تشغيل، مراقبة). docker-compose مباشرة إذا كنت تفضل التحكم اليدوي وعندك أقل من 3 خدمات.

ما الحجم لـ 1 مليون وثيقة؟ Hetzner CCX13 (15 يورو/شهر، 8 جيجابايت RAM) يستوعب 1 إلى 2 مليون وثيقة بشكل مريح مع عمليات بحث < 50 ميلي ثانية.

كيفية المراقبة المستمرة للصحة؟ Uptime Kuma على نقطة النهاية /health كل 60 ثانية، تنبيه Telegram أو Discord إذا كانت الاستجابة مختلفة عن {"status":"available"}.

Master key مخترق — ماذا أفعل؟ أعد توليد MEILI_MASTER_KEY في Coolify، أعد النشر (يتم إبطال جميع الجلسات)، أعد إنشاء API keys المشتقة، حدّث الأسرار في الواجهة الأمامية.

للاستزادة

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité