كيف تستضيف Hister كمحرك بحث شخصي؟
ثبّت Hister على VPS وابحث في نص الصفحات التي زرتها وملفاتك، مع تثبيت ثنائي أو Docker، وTLS، وتسجيل دخول، ونقطة نهاية MCP.
ما هو Hister وما ليس عليه
Hister هو محرك بحث شخصي تستضيفه بنفسك. يفهرس النص الكامل للصفحات التي زرتها والملفات التي تحتفظ بها، ثم يتيح لك البحث في هذه المجموعة من خلال واجهة ويب، أو عميل طرفي، أو HTTP API، أو مساعد ذكاء اصطناعي. يجيب Hister عن سؤال واحد: أين قرأت ذلك؟
يتعرّف معظم القراء إلى هذه الفكرة من خلال SearXNG، لكن الأداتين ليستا متماثلتين. إذا كان الاسم الذي تعرفه هو Searx الأقدم، فإن ذلك المشروع لم يتلقَّ أي commit برمجي منذ 2023، بينما يواصل SearXNG تطويره، لذلك فإن أي instance تنشئها اليوم ستكون SearXNG في كلتا الحالتين. SearXNG هو proxy للبحث الوصفي. ترسل استعلامك إليه، فيطلب النتائج من محركات أخرى نيابةً عنك، ثم يعيد نتائجها بعد إزالة التتبع. أما الفهرس فيتبع لتلك المحركات. يبني Hister فهرسه الخاص من المحتوى الذي تزوده به: صفحات تلتقطها browser extension، وسجل تصفح مستورد، وعناوين URL يجري crawling لها، وملفات في directories تحددها له. تمنحك نسخة SearXNG مستضافة ذاتياً وصولاً خاصاً إلى الويب العام. أما Hister فيتيح لك البحث في ما قرأته أنت. تختلف المهمتان، لذلك من الطبيعي تشغيلهما معاً على الخادم نفسه. وإذا فعلت ذلك، فمن المفيد معرفة مقدار ما يخفيه SearXNG فعلياً من عمليات البحث، لأنه يستبدل عنوان IP الخاص بك بعنوان IP لخادمك لدى محركات البحث، بدلاً من إخفاء الاستعلامات نفسها.
Hister برنامج حر بموجب AGPLv3 (رخصة GNU Affero العمومية، الإصدار 3) أو أي إصدار أحدث. لا يجمع بيانات القياس عن بُعد، ولا يحتاج إلى خدمة سحابية. يثبّت هذا الدليل الإصدار v0.17.0، الذي كان الإصدار الحالي في 2026-07-28. تحقّق من صفحة الإصدارات لمعرفة الوسم الحالي قبل نسخ أي شيء، ثم ثبّت الوسم الذي تجده هناك.
لماذا تستضيف Hister بنفسك على VPS
لا يكون الفهرس مفيداً إلا إذا كان كاملاً، ولا يكون كاملاً إلا إذا كان الخادم يعمل أثناء القراءة. يدخل الحاسوب المحمول في وضع السكون نصف اليوم. لذلك لا تصل إليه الصفحات التي تفتحها على هاتفك خلال تلك الفترة، ولا تبدأ عملية الاستيراد الليلية. يبقى VPS (خادم افتراضي خاص) قيد التشغيل، لذلك يضيف كل جهاز تملكه المحتوى إلى الفهرس نفسه، ويواصل الزاحف عمله أثناء نومك.
السبب الثاني هو الفصل. يؤدي ضبط user_handling: true في قسم app إلى منح كل حساب بيانات اعتماد ومجموعة مستندات خاصة بهما على instance واحدة. ويمكن لخادم واحد عندئذٍ استضافة حسابات أسرة أو فريق صغير، من دون أن يبحث أي شخص في محتوى قراءة شخص آخر.
السبب الثالث هو البنية التشغيلية. لدى VPS اسم مضيف عام وشهادة مسبقاً، وهذا ما تحتاج إليه إضافة المتصفح للوصول إلى الخادم من شبكة لا تتحكم بها. ويُستخدم الزوج نفسه في مواضع أخرى على الخادم، لأن openGym يسجّل مفتاح المرور الأول له مقابل اسم المضيف النشط في ذلك الوقت، ما يعني ضرورة حسم الاسم والشهادة قبل إنشاء الحساب الأول.
مسار التثبيت الأول: الملف الثنائي للإصدار
يوفّر Hister ملفاً ثنائياً واحداً لكل منصة. نزّله مع ملف checksums، وتحقّق منه قبل التثبيت.
cd /tmp
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_linux_amd64
curl -LO https://github.com/asciimoo/hister/releases/download/v0.17.0/hister_0.17.0_checksums.txt
sha256sum --ignore-missing -c hister_0.17.0_checksums.txtالنتيجة السليمة هي السطر الوحيد hister_0.17.0_linux_amd64: OK. ويعني ظهور سطر FAILED أن التنزيل تالف أو عُدّل، لذا نزّله مرة أخرى بدلاً من تثبيته.
ثبّت الملف الثنائي، ثم أنشئ حساب نظام والمجلدات التي سيستخدمها.
sudo install -m 755 /tmp/hister_0.17.0_linux_amd64 /usr/local/bin/hister
sudo useradd --system --home-dir /var/lib/hister --shell /usr/sbin/nologin hister
sudo install -d -o hister -g hister -m 750 /var/lib/hister
sudo install -d -m 755 /etc/hister
sudo hister create-config /etc/hister/config.ymlينشئ create-config ملف إعدادات افتراضياً، كما يثبت أن الملف الثنائي يعمل على هذا الجهاز. ويفشل التنزيل الخاص بالمعمارية الخاطئة في هذه النقطة تحديداً، مع ظهور cannot execute binary file: Exec format error.
عدّل الإعدادات القليلة المهمة. ويمكنك إبقاء بقية الملف المُنشأ كما هي.
app:
directory: /var/lib/hister
access_token: 'paste-a-long-random-string-here'
server:
address: 127.0.0.1:4433
base_url: https://hister.example.comأنشئ الرمز باستخدام openssl rand -hex 32. يحتوي الملف الآن على بيانات اعتماد، لذا قيّد صلاحياته قبل بدء الخدمة.
sudo chown root:hister /etc/hister/config.yml
sudo chmod 640 /etc/hister/config.ymlشغّلها باستخدام systemd
اكتب /etc/systemd/system/hister.service:
[Unit]
Description=Hister personal search engine
After=network-online.target
Wants=network-online.target
[Service]
User=hister
Group=hister
Environment=HISTER_CONFIG=/etc/hister/config.yml
ExecStart=/usr/local/bin/hister listen
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/hister
[Install]
WantedBy=multi-user.targetHISTER_CONFIG هو متغير البيئة الموثّق لمسار الإعدادات، لذلك لا تعتمد الوحدة على الدليل الرئيسي لحساب hister. يجعل ProtectSystem=strict نظام الملفات بأكمله للقراءة فقط بالنسبة إلى هذه الخدمة، ولذلك يجب أن يحدد ReadWritePaths دليل البيانات. يحجب ProtectHome=yes /home عن الخدمة، لذلك سيظهر أي دليل تتم مراقبته ضمن /home فارغاً للفهرس. احذف هذا السطر إذا كنت تحتاج إلى فهرسة الملفات الموجودة هناك.
sudo systemctl daemon-reload
sudo systemctl enable --now hister
systemctl status hister --no-pager
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:4433/أي رمز حالة HTTP يطبعه الأمر الأخير يعني أن العملية تستمع على المنفذ. يعني curl: (7) Failed to connect أنها لا تستمع، وسيبيّن journalctl -u hister -n 50 --no-pager السبب.
مسار التثبيت الثاني: Docker Compose
تُنشر الصورة في سجل الحاويات الخاص بـGitHub، مع وسم واحد لكل إصدار.
services:
hister:
image: ghcr.io/asciimoo/hister:v0.17.0
container_name: hister
user: '1000:1000'
restart: unless-stopped
environment:
- HISTER__SERVER__ADDRESS=0.0.0.0:4433
- HISTER__SERVER__BASE_URL=https://hister.example.com
- HISTER__APP__ACCESS_TOKEN=${HISTER_ACCESS_TOKEN}
volumes:
- ./data:/hister/data
ports:
- 127.0.0.1:4433:4433لكل مفتاح إعداد تجاوز بيئي بصيغة HISTER__<SECTION>__<KEY>، مع استخدام شرطتين سفليتين كفاصل، لذلك لا يحتاج النشر داخل حاوية إلى تحميل ملف إعداد. احتفظ بـHISTER_ACCESS_TOKEN في ملف .env بجوار ملف compose. وإذا كنت تفضّل تحرير ملف، فإن docker run --rm ghcr.io/asciimoo/hister:v0.17.0 create-config > config.yml يطبع القيم الافتراضية.
من السهل الخطأ في السطرين السابقين، ويستحق كلاهما الفهم.
يجب أن يكون العنوان داخل الحاوية 0.0.0.0:4433. للحاوية مساحة أسماء شبكة خاصة بها، لذلك لا يمكن الوصول إلى عملية مرتبطة بـ127.0.0.1 داخلها إلا من داخل الحاوية نفسها، ولن يجد المنفذ المنشور أي وجهة لإعادة التوجيه إليها.
يُكتب المنفذ المنشور بصيغة 127.0.0.1:4433:4433، وليس 4433:4433. ينشر Docker المنافذ بإضافة قواعد netfilter الخاصة به، وتُقيَّم هذه القواعد قبل قواعد ufw، لذلك يظل 4433:4433 عادي متاحاً من الإنترنت حتى على خادم يعرض فيه ufw status أن المنفذ مغلق. يؤدي ربط جهة المضيف بـ127.0.0.1 إلى جعل الـreverse proxy الطريقة الوحيدة للوصول. ينطبق الفخ نفسه على كل حاوية في الخادم، ويغطي Docker Compose على VPS بقية التفاصيل.
تعمل الصورة الافتراضية بالمعرّف UID 1000 والمعرّف GID 1000، لذلك يجب أن يكون ./data قابلاً للكتابة بواسطة ذلك الحساب، وإلا تتوقف الحاوية عند بدء التشغيل بسبب خطأ في الصلاحيات. يعالج sudo chown -R 1000:1000 ./data ذلك. إذا لم تكن هذه الأرقام مألوفة لك، فاقرأ أولاً المعرّف UID وGID اللذان تكتب الحاوية الملفات بهما.
لماذا يُعد تعريض فهرس البحث الشخصي أسوأ ما يمكنك فعله
يستمع Hister إلى 127.0.0.1:4433 افتراضياً، وهذا الإعداد الافتراضي مقصود. فكّر في محتوى الفهرس بعد شهر من الاستخدام: صفحات Wiki الداخلية، والفواتير، وتذاكر الدعم التي فتحتها أثناء تسجيل الدخول، وصفحات إعادة تعيين كلمات المرور، والنص الكامل لكل ما قرأته أيضاً. توضح وثائق المشروع ذلك مباشرة: «ينقل Hister سجل التصفح بالكامل، مع محتوى الصفحات، من الخادم وإليه».
لا يزال يتعين كسر قاعدة بيانات كلمات المرور المسرّبة. أما الفهرس الشخصي المسرّب فيكون نصاً واضحاً وقابلاً للبحث مباشرة، ولذلك يتطلب حماية أكبر من التطبيق الصغير ذاتي الاستضافة الذي يشبهه.
ينتج عن ذلك أمران. لا يطلب Hister مصادقة افتراضياً، ولذلك فإن استخدام Reverse Proxy وحده ينشر نسخة قابلة للبحث من المحتوى الذي قرأته لأي شخص يعرف اسم المضيف. كما تُخدَّم نقطة نهاية MCP افتراضياً على `/mcp`، ومن دون token يمكن لأي عميل يصل إليها تنفيذ بحث في الفهرس.
اضبط المصادقة قبل أن تغادر الخدمة localhost للمرة الأولى. لا يحتاج المستخدم الواحد إلا إلى `app.access_token، وهو secret مشترك ترسله إضافة المتصفح والعميل الطرفي وأي عميل MCP. بالنسبة إلى عدة أشخاص، اضبط user_handling: true` وأنشئ الحسابات:
sudo -u hister hister create-user alice --admin --config /etc/hister/config.ymlيطلب الأمر كلمة مرور تتكون من 8 أحرف على الأقل. يحصل كل حساب على مستنداته الخاصة وAPI token شخصي، ويمكن لمالكه إعادة إنشائه من صفحة الملف الشخصي أو باستخدام الخيار `--regen-token مع hister update-user`. يؤدي إنشاء token جديد إلى إبطال token السابق فوراً، لذلك يجب تحديث كل جهاز يستخدمه ذلك الحساب بعد ذلك.
اترك `app.public` من دون تغيير إلا إذا كنت تقصد تفعيله. يتيح الوضع العام البحث والمعاينات وخدمة الملفات وبحث MCP من دون مصادقة، مع استمرار حظر عمليات الكتابة والوصول إلى السجل وعمليات الإدارة.
Reverse proxy وTLS وجدار الحماية
لا يقدّم Hister خدمة HTTPS بنفسه، لذلك أنهِ TLS (أمن طبقة النقل) أمامه. يُعد Caddy أقصر مسار، لأنه يطلب الشهادات ويجدّدها تلقائياً عبر ACME (بيئة إدارة الشهادات التلقائية).
hister.example.com {
reverse_proxy 127.0.0.1:4433
}أعد تحميله باستخدام sudo systemctl reload caddy. يجب تحقق شرطين قبل إصدار الشهادة: يجب أن يشير سجل A الخاص بـhister.example.com إلى هذا الخادم، ويجب أن يكون المنفذ 80 مفتوحاً، لأن الاستجابة لتحدي HTTP-01 تتم هناك. عند غياب أي من الشرطين، يعرض المتصفح خطأ TLS بدلاً من الصفحة، ويكرر سجل Caddy فشل التحدي.
بعد ذلك، أغلق كل شيء آخر.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw statusغياب المنفذ 4433 من تلك القائمة مقصود. لا يُعد اسم المضيف العام الطريقة الوحيدة للوصول، كما أن خدمة onion تشير إلى منفذ loopback نفسه تصل إلى فهرسك من أجهزتك الخاصة دون سجل DNS أو فتح أي منفذ وارد على الإطلاق.
يجب أن يطابق server.base_url العنوان الذي تكتبه في المتصفح، بما في ذلك scheme. عندما لا يتطابقان، تُحمّل الواجهة بنص غير منسّق وصور مفقودة، لأن الخادم ينشئ روابط الأصول من base_url، ثم يطلبها المتصفح من origin لا يستجيب. ويُستخدم عنوان URL نفسه في إضافة المتصفح.
ملء الفهرس
إضافة المتصفح هي أداة الجمع الرئيسية. ثبّتها من Mozilla Add-ons أو Chrome Web Store، وافتح صفحة خياراتها، واضبط عنوان الخادم على https://hister.example.com، ثم ألصق access token. تلتقط الإضافة بعد ذلك العنوان والنص الكامل وHTML وfavicon لكل صفحة تزورها، وترسلها إلى خادمك. يحدث الاستخراج على جهة العميل داخل المتصفح. لا تتصل الإضافة بأي طرف ثالث، والطلب الخارجي الوحيد الذي تنفذه هو طلب favicon الخاص بالصفحة.
الاستخراج على جهة العميل هو ما يجعل إنشاء فهرس خاص ممكناً. ترى الإضافة الصفحة تماماً كما تراها أنت، بعد تسجيل الدخول وبعد اكتمال العرض، ولذلك تُفهرس صفحة wiki داخلية أو مقالة مدفوعة بطريقة صحيحة، ولا يحتاج خادمك أبداً إلى بيانات الاعتماد. ويعني ذلك أيضاً أن كل ما تطّلع عليه يمكن أن يصبح مرشحاً للفهرس، ولذلك تأتي قواعد التخطي قبل إضافة مزيد من المحتوى.
توجد قواعد التخطي في rules.json عند التثبيت لمستخدم واحد، أو لكل مستخدم في قاعدة البيانات. وتُعد علامة Rules في واجهة الويب أسهل طريقة لتحريرها. وهي تعبيرات Go النمطية، وتُطابق عنوان URL الكامل:
^https://mail\.example\.com
^https://bank\.example\.com
.*?utm_source=لا يطابق نمط مثل ^mail.example.com أي شيء، لأن السلسلة التي يجري اختبارها تبدأ بـ https://. ويفشل $ في النهاية أيضاً مع أي عنوان URL يتضمن query string، لأن معلمات الاستعلام تبقى أثناء المطابقة.
يُستورد السجل الحالي بقراءة قاعدة البيانات الخاصة بالمتصفح، ولذلك يُشغَّل ذلك الأمر على الجهاز الذي يحتوي على ملف تعريف المتصفح، أي حاسوبك المحمول وليس VPS. ثبّت binary نفسه هناك، ووجّهه إلى الخادم:
export HISTER_TOKEN='your-access-token'
hister import browser firefox -u https://hister.example.com -t "$HISTER_TOKEN"تعمل عملية الاستيراد كـjob قابل للاستئناف اسمه browser-import-YYYY-MM-DD، ولذلك يمكنك إيقافها ثم تشغيلها مرة أخرى لاحقاً. تُستورد خدمات الإشارات المرجعية بالطريقة نفسها، بما فيها Linkwarden وKarakeep وWallabag وLinkding وReadeck وShaarli. ويجلب الاستيراد المتكرر فقط العناصر الأحدث من آخر عملية استيراد.
تُفهرس الملفات الموجودة على الخادم عبر تسمية الأدلة في ملف الإعداد:
indexer:
directories:
- path: '/var/lib/hister/documents'
label: 'documents'
filetypes: ['pdf', 'docx', 'md', 'txt']تُقرأ ملفات PDF وDOCX وMarkdown وOrg mode والملفات النصية الصالحة بترميز UTF-8 كنص كامل. أما الصور والفيديو فليسا ضمن هذه القائمة، ولذلك تحتاج مكتبة الصور إلى خادم يفهرس الوجوه والأماكن والتواريخ بدلاً من النص. ويُعد PhotoPrism وImmich الخيارين اللذين تجري مقارنتهما عادةً لهذا الغرض. تُضاف صفحة واحدة باستخدام hister index https://example.com. أما تحويل المواقع الكاملة إلى نص منسق لأدوات أخرى فهو مهمة منفصلة، تتولاها أدوات زحف مستضافة ذاتياً تحوّل الصفحات إلى نص منسق.
يعتمد البحث على الحقول، ولذلك تستحق لغة الاستعلام قراءة تستغرق عشر دقائق:
"connection reset" domain:github.com added:<30d
title:(wireguard|nftables) -tutorial sort:-visitsوجّه وكيل برمجة إلى فهرسك الخاص عبر MCP
MCP (بروتوكول سياق النموذج) هو الواجهة التي يستخدمها المساعد لاستدعاء الأدوات على الخادم. يوفّره Hister على POST /mcp ضمن عنوان URL الأساسي نفسه، باستخدام بروتوكول نقل HTTP القابل للبث، ويعرض search وget_preview وget_history. المصادقة هي رمز bearer نفسه المستخدم في بقية واجهة API. إذا كان استدعاء الأدوات جديداً عليك، فإن كتابة حلقة وكيل صغيرة بنفسك هي أسرع طريقة لمعرفة ما يقدّمه endpoint مثل هذا فعلياً إلى المساعد.
{
"mcpServers": {
"hister": {
"url": "https://hister.example.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
}
}
}يعمل ترويس X-Access-Token كبديل عن Authorization.
تكمن الفائدة هنا في المحتوى الذي يبحث فيه الوكيل. يعرض البحث المفتوح على الويب النتائج التي تتصدر الترتيب اليوم، وغالباً ما تكون في البرمجيات سريعة التغيّر وثائق لإصدار لا تشغّله. أما فهرك الخاص فيُرجع الصفحة التي قرأتها واخترت الاحتفاظ بها، ويقدّم get_preview النسخة المخزّنة، لذلك تبقى الإجابة متاحة حتى إذا أصبحت الصفحة الأصلية غير متصلة. امنح الوكيل المصدرين معاً إذا أردت النتائج العامة أيضاً: تضيف مهارة بحث في المتصفح مدعومة بواسطة SearXNG الويب المفتوح كأداة منفصلة. وعندما تشغّل أكثر من نقطة نهاية واحدة من هذه النقاط، يجدر بك قراءة استضافة خوادم MCP على VPS، لأن كل واحدة منها تشترك في مشكلة التعرض هذه.
القرص والنسخ الاحتياطية والصيانة
تذكر الوثائق أن حجم الصفحة المفهرسة يبلغ نحو 100 KB، بما في ذلك المعاينة المضغوطة، ولذلك يبلغ حجم مئة ألف صفحة نحو 10 GB. لا يوجد نظام حصص. غالباً ما يُخلط بين إعدادين مختلفين: يحد indexer.max_file_size_mb، وقيمته الافتراضية 1 MiB، حجم ملف واحد تتم مراقبته، بينما يحد server.max_batch_body_size، وقيمته الافتراضية 40 MiB، حجم طلب API واحد.
يحتوي الدليل الذي يحدده app.directory على index.db الذي يضم ملفات الفهارس لكل لغة، وdb.sqlite3 للحسابات والمهام، وdata/html/ للمعاينات، وrules.json. تتطلب النسخة الاحتياطية إيقاف الخدمة ونسخ هذا الدليل بالكامل وملف الإعداد. يكتب hister export backup.json المستندات بتنسيق JSON لأغراض الترحيل، وليس نسخة احتياطية للخادم.
هناك أمران للصيانة تجدر معرفتهما. يعيد hister reindex إنشاء فهارس البحث، وهذا مطلوب بعد تغيير إعدادات الفهرسة. إذا ازداد استخدام الذاكرة أثناء استيراد كبير، فاضبط detect_languages: false في القسم indexer ثم أعد الفهرسة. يزيل hister cleanup ملفات المعاينات وfavicon اليتيمة التي خلّفتها عمليات الحذف.
الحذف عبارة عن استعلام، لذلك شغّله أولاً في الوضع التجريبي:
hister delete 'domain:example.com' --dry --verboseتعود الصفحة المحذوفة إذا استمر أحد جامعي البيانات في إرسالها، لذلك أضف قاعدة التخطي قبل حذفها.
لا تصبح AGPLv3 ذات صلة إلا إذا غيّرت الشفرة. لا يترتب أي التزام على تشغيل نسخة غير معدّلة لاستخدامك الشخصي. إذا عدّلت Hister وأتحت للآخرين استخدام نسختك عبر الشبكة، فالرخصة تلزمك بإتاحة الشفرة المصدرية المعدّلة لهم.
أوضاع الفشل والعبارات التي ستظهر لك
لا يبدأ الخادم. إمّا أن المنفذ 4433 مستخدم بالفعل، أو أن ملف الإعداد يحتوي على خطأ في صياغة YAML. يعرض sudo ss -lntp | grep 4433 العملية التي تشغل المنفذ، ويطبع journalctl -u hister -n 50 --no-pager خطأ التحليل.
تُحمَّل الواجهة، لكنها تبدو معطّلة. يعني النص المشوّش والصور المفقودة أن server.base_url لا يطابق عنوان URL الظاهر في شريط العناوين. وتُعد الشرطة المائلة في النهاية اختلافاً أيضاً.
لا يتصل الامتداد. يجب أن يساوي عنوان URL للخادم في الامتداد base_url، ويجب أن يكون الخادم قيد التشغيل ومحدّثاً، وألا يحظره جدار ناري بين الطرفين من دون عرض رسالة في الصفحة. يحتفظ Firefox بسجلات الامتدادات خارج وحدة التحكم العادية. افتح about:debugging#/runtime/this-firefox وافحص امتداد Hister.
تتوقف الحاوية عند بدء التشغيل. يعني خطأ الصلاحيات على ./data أن الدليل مملوك لـUID غير 1000، وهو حساب المستخدم داخل الصورة الافتراضية.
403 Forbidden من مسار إداري. لا يمكن استخدام POST /api/reindex وPOST /api/cleanup إلا للمسؤولين عند تفعيل إدارة المستخدمين، لذلك يُرفض طلب الحساب العادي هناك.
تزداد الذاكرة أثناء الاستيراد. يكون السبب المعتاد هو اكتشاف اللغة في سجل تاريخي كبير. اضبط detect_languages: false ثم شغّل hister reindex بعد ذلك.
FAQ
ما الفرق بين Hister وSearXNG؟
SearXNG هو وكيل بحث شامل: يمرر استعلامك إلى محركات البحث العامة ويعرض نتائجها بعد إزالة التتبع منها، لذلك يظل الفهرس تابعاً لتلك المحركات. يحتفظ Hister بفهرس نص كامل خاص به للصفحات التي زرتها والملفات التي تحتفظ بها، لذلك يجيب عن سؤال «أين قرأت ذلك؟»، بينما يجيب SearXNG عن سؤال «ماذا يقول الويب؟». يحل كل منهما مشكلة مختلفة، ويشغّل كثير من المستخدمين كليهما على خادم واحد.
هل من الآمن وضع سجل التصفح بالكامل على VPS؟
يكون ذلك آمناً فقط بعد تنفيذ إجراءات الحماية من التعرض أولاً. يرتبط Hister افتراضياً بالعنوان 127.0.0.1:4433 ولا يتطلب مصادقة. عيّن app.access_token أو user_handling: true، وضع reverse proxy مع TLS أمامه، وأبقِ المنفذ 4433 مغلقاً في جدار الحماية. فهرس النص الكامل لما قرأته هو نص عادي، لذلك يستطيع أي شخص يصل إلى المنفذ قراءة كل شيء من دون كسر أي تشفير.
هل أحتاج إلى إضافة المتصفح، أم يمكنني استيراد السجل فقط؟
الاستيراد هو عملية ملء تاريخية تُجرى مرة واحدة. يقرأ قاعدة بيانات سجل المتصفح نفسه، لذلك يُشغَّل على الكمبيوتر الذي يحتوي على ملف تعريف المتصفح، وليس على الخادم. تحافظ الإضافة على تحديث الفهرس بعد ذلك، كما تلتقط الصفحات المحمية بتسجيل الدخول لأنها تستخرج المحتوى في المتصفح بعد عرض الصفحة. الإعداد الشائع هو إجراء استيراد واحد، ثم استخدام الإضافة.
هل يستطيع وكيل برمجي البحث في فهرس Hister؟
نعم. Hister هو خادم MCP (بروتوكول سياق النموذج) على POST /mcp في عنوان URL الأساسي لديك، ويعرض search وget_preview وget_history. وجّه العميل إلى https://your-host/mcp مع رأس Authorization: Bearer يحتوي على رمز الوصول الخاص بك. بعد ذلك يبحث الوكيل في الوثائق التي قرأتها فعلياً، وبالإصدار الذي قرأتها فيه، بدلاً من البحث في النتائج التي يحتل فيها المحتوى ترتيباً متقدماً في محرك بحث عام اليوم.