[{"data":1,"prerenderedAt":135},["ShallowReactive",2],{"seo-verification":3,"blog-استضافة-elasticsearch-على-خادم-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"id":7,"slug":8,"slugs":9,"title":12,"excerpt":13,"readTime":14,"views":15,"isPinned":16,"publishedAt":17,"category":18,"categories":24,"featuredImage":26,"bgImage":27,"posterImage":28,"relatedSolution":26,"intro":29,"sections":30,"ctaTitle":84,"ctaBody":85,"ctaButton":86,"ctaUrl":87,"relatedPosts":88},69,"استضافة-elasticsearch-على-خادم-vps",{"fr":10,"en":11,"ar":8},"heberger-elasticsearch-vps","hosting-elasticsearch-on-a-vps","استضافة Elasticsearch على VPS: الأمان واستكشاف الأخطاء","ثبّت وأمّن Elasticsearch على خادم VPS: متطلبات JVM بالأرقام، نشر Docker، xpack.security، UFW، و5 أخطاء شائعة يجب تفاديها.",10,0,false,"2026-04-12T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},6,"قواعد البيانات","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[25],{"id":19,"name":20,"slug":21,"color":22,"icon":23},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-elasticsearch-vps-poster.svg","يبقى Elasticsearch المرجعَ في البحث المتقدّم بالنص الكامل والتجميعات المتداخلة ومركزة السجلات على نطاق واسع. تفرض حلول Elasticsearch السحابي المُدار رسومًا على الحجم المُفهرَس وعلى حركة البيانات الصادرة؛ وعلى خادم VPS مُحجَّم بشكل مناسب، أنت من يتحكّم في الإصدار والإضافات والتكلفة. يشرح هذا الدليل النشر خطوة بخطوة عبر Docker، وإعدادات الأمان xpack، وتصلّب الشبكة، وأكثر خمس أعطال شيوعًا عند التشغيل الأول.",[31,35,46,49,71,74,78,81],{"type":32,"title":33,"body":34},"h2","لماذا تختار Elasticsearch السحابي على خادم VPS خاص بك","يتألق Elasticsearch حيث لا يعود البحث البسيط كافيًا: تسجيل BM25 قابل للضبط، والمرادفات، والمحلّلات اللغوية المخصّصة (الفرنسية والعربية ICU)، والاستعلامات الجغرافية، وحزمة ELK الكاملة لمركزة سجلات تطبيقاتك. تصبح عروض Elastic Cloud وOpenSearch Service باهظة بسرعة بمجرد أن يتجاوز الحجم المُفهرَس بضعة غيغابايتات، مع إضافة رسوم البيانات الصادرة. وعلى خادم VPS الخاص بك، أنت من يقرّر الإصدار المُنشَر والإضافات المُفعَّلة ومدة الاحتفاظ بالبيانات وسياسة اللقطات. وهو أيضًا السبيل الوحيد للاحتفاظ بالبيانات الحساسة — سجلات التطبيقات وفهارس العملاء — داخل بنيتك التحتية الخاصة، دون أي تبعية لطرف سحابي خارجي.",{"type":36,"title":37,"items":38},"ul","ما الذي تكسبه باستضافة Elasticsearch ذاتيًا",[39,40,41,42,43,44,45],"بحث متقدّم بالنص الكامل: تسجيل BM25 والمرادفات ومحلّلات لغوية مخصّصة (الفرنسية والعربية ICU)","تجميعات وأوجه (facets) معقّدة للتجارة الإلكترونية أو ذكاء الأعمال أو مركزة السجلات","حزمة ELK كاملة (Logstash وBeats وKibana) دون رسوم برمجيات إضافية","تحكّم كامل في الإصدار والإضافات وسياسات دورة حياة الفهارس (ILM)","لا فوترة لكل حجم مُفهرَس ولا رسوم للبيانات الصادرة عبر الشبكة","لقطات (snapshots) إلى تخزينك الكائني الخاص للتعافي من الكوارث بشكل مُتحكَّم فيه","البيانات الحساسة محفوظة داخل بنيتك التحتية الخاصة، تحت اختصاصك القضائي وحدك",{"type":32,"title":47,"body":48},"المتطلبات بالأرقام قبل تشغيل أول حاوية","**الحدّ الأدنى من ذاكرة RAM: 4 غيغابايت** لبيئة اختبار، **8 غيغابايت (2-4 vCPU)** لاستخدام إنتاجي خفيف، **16 غيغابايت** بمجرد إضافة Kibana أو فهرسة عدة ملايين من المستندات. المعامل الرئيسي هو كومة JVM: اضبط `-Xms` و`-Xmx` على **50% من ذاكرة RAM المتاحة، دون تجاوز 32 غيغابايت** (فوق ذلك، تنتقل JVM إلى وضع ضغط المؤشرات الأقل كفاءة). على خادم VPS بذاكرة 8 غيغابايت، استخدم `-Xms4g -Xmx4g`. على مستوى الشبكة، يستخدم Elasticsearch منفذين: **9200** (HTTP، واجهة API REST) و**9300** (النقل بين العقد). **لا تعرض** المنفذ 9200 مباشرةً على الواجهة العامة — فهذا المصدر الأول للاختراق على الأنظمة غير المؤمَّنة. أما على مستوى التخزين، فـ**SSD NVMe موصى به**: يُجري Elasticsearch عمليات قراءة عشوائية كثيرة على شرائح Lucene؛ ويتشبّع القرص المغناطيسي أو SSD منخفض الجودة بسرعة على الفهارس الكبيرة. خطّط أيضًا لتثبيت Docker وDocker Compose، ونطاق فرعي `es.yourdomain.com` يشير إلى الخادم.",{"type":50,"title":51,"steps":52},"steps","النشر خطوة بخطوة",[53,56,59,62,65,68],{"title":54,"body":55},"تجهيز نواة Linux","قبل تشغيل الحاوية، طبّق ضبطَين إلزاميَّين على مستوى النظام. أولًا، ارفع حدّ مناطق الذاكرة المُعيَّنة: `sysctl -w vm.max_map_count=262144`. ثبّت هذا الإعداد بإضافة `vm.max_map_count=262144` إلى `\u002Fetc\u002Fsysctl.conf` — بدونه، يرفض Elasticsearch الإقلاع برسالة خطأ `max virtual memory areas vm.max_map_count [65530] is too low`. ثم عطّل التبديل (swap) على الخادم (`swapoff -a` وعلّق السطر المتعلق بـ swap في `\u002Fetc\u002Ffstab`)، أو اضبط `bootstrap.memory_lock=true` في `elasticsearch.yml` لمنع JVM من الترحيل إلى القرص، مما قد يُدمّر الأداء.",{"title":57,"body":58},"كتابة ملف docker-compose.yml","أنشئ دليل عمل، ثم ملف `docker-compose.yml` يحتوي على خدمة Elasticsearch: الصورة `docker.elastic.co\u002Felasticsearch\u002Felasticsearch:8.13.4`، ومتغير البيئة `ES_JAVA_OPTS=-Xms4g -Xmx4g` (اضبطه بحسب الخادم)، وحجم تخزين مُسمَّى مثبَّت على `\u002Fusr\u002Fshare\u002Felasticsearch\u002Fdata`، والمنفذ **9200 مربوط بـ `127.0.0.1` فقط** (`127.0.0.1:9200:9200`). أضف أيضًا `discovery.type=single-node` لنشر أحادي العقدة. لا تنشر `0.0.0.0:9200:9200` في الإنتاج أبدًا.",{"title":60,"body":61},"تفعيل xpack.security وتشغيل الخدمة","في `elasticsearch.yml`، أضف `xpack.security.enabled: true` و`xpack.security.http.ssl.enabled: true`. منذ الإصدار 8.x، يكون الأمان مُفعَّلًا افتراضيًا، لكن تحقّق من أن ملف الإعداد لا يُعطّله صراحةً. شغّل المجموعة: `docker compose up -d`. عند التشغيل الأول، انتظر من 2 إلى 3 دقائق — تهيئة فهارس النظام (`.security-*` و`.kibana_*`) تستغرق وقتًا. راجع السجلات: `docker compose logs -f elasticsearch`.",{"title":63,"body":64},"إنشاء المستخدمين واسترجاع كلمة مرور elastic","بعد تشغيل الحاوية، أعد تعيين كلمة مرور المستخدم المتميّز `elastic`: `docker exec -it elasticsearch bin\u002Felasticsearch-reset-password -u elastic`. احتفظ بهذه الكلمة في مدير أسرار. ثم أنشئ مستخدم النظام `kibana_system` إن أضفت Kibana: `docker exec -it elasticsearch bin\u002Felasticsearch-users useradd kibana_system -r kibana_system`. يجب ألّا يُستخدم هذا الحساب في استعلامات التطبيقات — أنشئ مستخدمين مخصّصين لكل تطبيق مع أدوار بالحدّ الأدنى اللازم.",{"title":66,"body":67},"التحقّق من المجموعة باستخدام curl","اختبر الاتصال من الخادم (وليس من الخارج): `curl -u elastic:\u003Cكلمة_المرور> https:\u002F\u002Flocalhost:9200 --cacert \u002Fusr\u002Fshare\u002Felasticsearch\u002Fconfig\u002Fcerts\u002Fhttp_ca.crt`. استجابة JSON تحتوي على `cluster_name` و`status: green` أو `yellow` تؤكّد أن المجموعة تعمل. الحالة `yellow` على مجموعة أحادية العقدة طبيعية: لا يمكن تخصيص نسخ الشظايا (shard replicas) دون عقدة ثانية.",{"title":69,"body":70},"الكشف عبر وكيل عكسي HTTPS مع Nginx","ثبّت Nginx على الخادم وعيّن مضيفًا افتراضيًا لـ `es.yourdomain.com`. يُعيد الوكيل العكسي توجيه الطلبات إلى `https:\u002F\u002F127.0.0.1:9200` ويُقدّم شهادة Let's Encrypt للعميل. أضف مصادقة أساسية Nginx كطبقة حماية إضافية إن كانت واجهة API يجب الوصول إليها من الخارج. أعِد توجيه المسارات الضرورية لتطبيقك فقط — تجنّب كشف `\u002F_cat\u002F*` أو `\u002F_cluster\u002F*` للعموم.",{"type":32,"title":72,"body":73},"أمان xpack: TLS والأدوار وعزل الشبكة","يغطّي أمان xpack في Elasticsearch ثلاث طبقات. **TLS بين العقد** (`xpack.security.transport.ssl.enabled: true`) يشفّر حركة البيانات بين العقد على المنفذ 9300 — ضروري حالما تنضمّ عقدة ثانية إلى المجموعة. **TLS على HTTP** (`xpack.security.http.ssl.enabled: true`) يشفّر المنفذ 9200؛ بدونه تنتقل كلمات المرور بنصّ واضح حتى على شبكة خاصة. **التحكّم في الأدوار**: يوفّر Elasticsearch أدوارًا مُحدَّدة مسبقًا (`read` و`write` و`monitor` و`kibana_system` و`logstash_writer`). خصّص الدور الأدنى المطلوب لكل تطبيق: لا يحتاج تطبيق يقرأ فهرسًا واحدًا إلى دور `superuser`. تجنّب استخدام حساب `elastic` في الإنتاج — خصّصه للإدارة الأولية فقط. نقطة أخيرة: معامل `network.host` في `elasticsearch.yml`. قيمته الافتراضية هي `_local_` (loopback فقط). الانتقال إلى `0.0.0.0` للاستماع على كل الواجهات دون تهيئة أمان xpack يُعرّض مجموعتك للإنترنت بأسره.",{"type":75,"title":76,"body":77},"tip","تصليب الوصول إلى الشبكة باستخدام UFW","بعد التحقّق من أن Elasticsearch يستمع على `127.0.0.1` فقط، أغلق جدار الحماية: `ufw deny 9200\u002Ftcp` و`ufw deny 9300\u002Ftcp`. يجب أن يكون الوكيل العكسي Nginx (المنفذ 443) هو الوحيد المتاح. إن تواصلت عدة عقد مع بعضها، اسمح صراحةً لعناوين IP العقد على المنفذ 9300 (`ufw allow from \u003CIP_العقدة_2> to any port 9300`)، وأغلق كل ما عدا ذلك. يمنحك الأمر `ufw status` بعد الضبط صورة دقيقة عمّا هو مفتوح.",{"type":32,"title":79,"body":80},"استكشاف الأخطاء: الأعطال الخمسة الأكثر شيوعًا","**1. OOM Killer يوقف عملية Elasticsearch.** العرَض: تتوقف الحاوية دون رسالة خطأ في السجلات، ويكشف `dmesg | grep -i killed` عن `Killed process`. السبب: الكومة `-Xmx` أكبر مما تتيحه ذاكرة RAM، أو تُشبعها عمليات أخرى. الحلّ: قلّص `-Xmx` إلى 50% من ذاكرة RAM المتاحة الفعلية، وراقب استهلاك الذاكرة بـ `docker stats`.\n\n**2. `max_map_count` منخفض جدًا.** العرَض: يرفض Elasticsearch الإقلاع برسالة `max virtual memory areas vm.max_map_count [65530] is too low`. الحلّ: `sysctl -w vm.max_map_count=262144` ثم أضف `vm.max_map_count=262144` إلى `\u002Fetc\u002Fsysctl.conf`.\n\n**3. `Permission denied` على `\u002Fusr\u002Fshare\u002Felasticsearch\u002Fdata`.** العرَض: تظهر رسالة `AccessDeniedException` في السجلات عند تثبيت الحجم. السبب: دليل المضيف يملكه `root` لكن الحاوية تعمل بالمعرّف UID `1000` (المستخدم `elasticsearch`). الحلّ: `chown -R 1000:1000 \u003Cمسار_حجم_المضيف>` قبل تشغيل `docker compose up`.\n\n**4. رفض الاتصال على المنفذ 9200.** العرَض: `curl localhost:9200` يُعيد `Connection refused`. السبب الشائع: `network.host` مُضبوط بشكل خاطئ في `elasticsearch.yml` (قيمة `_site_` أو عنوان IP لا يتطابق مع واجهة Docker). على مجموعة Docker أحادية العقدة، اترك `network.host` بقيمته الافتراضية (`_local_`) وادخل عبر `127.0.0.1:9200` من الحاوية أو المضيف. تحقّق أيضًا من أن الحاوية تعمل: `docker ps`.\n\n**5. بطء الإقلاع: طبيعي عند التهيئة الأولى.** العرَض: تستغرق المجموعة من 2 إلى 3 دقائق للاستجابة عند التشغيل الأول. هذا ليس عطلًا. Elasticsearch يُهيّئ فهارس النظام (`.security-7` و`.kibana_1` وخرائط الأعمدة الافتراضية). انتظر ظهور `mode [basic], reason [security is enabled]` أو `Cluster health status changed from [RED] to [GREEN]` في السجلات قبل إرسال أي استعلام.",{"type":32,"title":82,"body":83},"هل تريد بديلًا مفتوح المصدر بالكامل؟","**OpenSearch** هو التفريع المجتمعي من Elasticsearch، وُلد عام 2021 حين غيّرت شركة Elastic ترخيصها إلى SSPL (غير معتمد من OSI). يحافظ OpenSearch على ترخيص Apache 2.0، ويوفّر واجهة API REST متوافقة إلى حدٍّ بعيد، ويتضمّن ميزات أمان متقدّمة في توزيعته المجانية (التحكّم في الوصول بالأدوار، وتسجيل الأحداث، وتشفير البيانات أثناء التخزين). إن كان قيدك هو الترخيص مفتوح المصدر صراحةً أو الاستقلالية عن Elastic BV، فإن OpenSearch بديل مباشر يستحق التقييم. يتّبع نشر Docker النمط ذاته، باستخدام الصورة `opensearchproject\u002Fopensearch` بدلًا من ذلك.","خادم VPS مصمّم لأجل Elasticsearch","ذاكرة RAM سخية، وقرص NVMe SSD، وإعدادات نواة قابلة للتعديل منذ اليوم الأول: يمنحك خادم VPS Cloud من ServOrbit الأساس الذي تتطلبه آلة JVM لـ Elasticsearch في الإنتاج.","هيّئ خادمي VPS Cloud","\u002Fvps-cloud",[89,106,120],{"id":90,"slug":91,"slugs":92,"title":95,"excerpt":96,"readTime":97,"views":15,"isPinned":16,"publishedAt":98,"category":99,"categories":100,"featuredImage":26,"bgImage":27,"posterImage":102,"relatedSolution":103},56,"postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها",{"fr":93,"en":94,"ar":91},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","PostgreSQL على خادم VPS: قاعدة بيانات موثوقة ومُتحكَّم بها","استضف PostgreSQL على خادم VPS: وحدات التخزين والنسخ الاحتياطية والوصول الشبكي المحدود والإعداد السليم لتطبيقاتك.",4,"2026-04-25T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[101],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":104,"appSlug":105},"قواعد-البيانات","postgresql-stack",{"id":107,"slug":108,"slugs":109,"title":112,"excerpt":113,"readTime":114,"views":15,"isPinned":16,"publishedAt":115,"category":116,"categories":117,"featuredImage":26,"bgImage":27,"posterImage":119,"relatedSolution":26},57,"استضافة-mysql-على-خادم-vps",{"fr":110,"en":111,"ar":108},"heberger-mysql-vps","hosting-mysql-on-a-vps","استضافة MySQL على خادم VPS","استضِف MySQL على خادم VPS السحابي الخاص بك: نشر عبر Docker، وتأمين، وضبط إعدادات InnoDB، ونسخ احتياطية آلية، خطوة بخطوة.",3,"2026-04-24T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[118],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"id":121,"slug":122,"slugs":123,"title":126,"excerpt":127,"readTime":97,"views":15,"isPinned":16,"publishedAt":128,"category":129,"categories":130,"featuredImage":26,"bgImage":27,"posterImage":132,"relatedSolution":133},58,"استضافة-redis-على-خادم-vps",{"fr":124,"en":125,"ar":122},"heberger-redis-vps","hosting-redis-on-a-vps","استضافة Redis على خادم VPS","انشر Redis على خادم VPS السحابي الخاص بك: تخزين مؤقت وجلسات وطوابير في الذاكرة، مع استمرارية البيانات والأمان والضبط.","2026-04-23T00:00:00+00:00",{"id":19,"name":20,"slug":21,"color":22,"icon":23},[131],{"id":19,"name":20,"slug":21,"color":22,"icon":23},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":104,"appSlug":134},"redis-stack",1787580937609]